summaryrefslogtreecommitdiff
path: root/src/com/sneed/pkrandom/newgui
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/sneed/pkrandom/newgui')
-rw-r--r--src/com/sneed/pkrandom/newgui/BatchRandomizationSettingsDialog.form191
-rw-r--r--src/com/sneed/pkrandom/newgui/BatchRandomizationSettingsDialog.java145
-rw-r--r--src/com/sneed/pkrandom/newgui/Bundle.properties20
-rw-r--r--src/com/sneed/pkrandom/newgui/NewRandomizerGUI.java7389
-rw-r--r--src/com/sneed/pkrandom/newgui/OperationDialog.java8
5 files changed, 3646 insertions, 4107 deletions
diff --git a/src/com/sneed/pkrandom/newgui/BatchRandomizationSettingsDialog.form b/src/com/sneed/pkrandom/newgui/BatchRandomizationSettingsDialog.form
deleted file mode 100644
index 37c712e..0000000
--- a/src/com/sneed/pkrandom/newgui/BatchRandomizationSettingsDialog.form
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.sneed.pkrandom.newgui.BatchRandomizationSettingsDialog">
- <grid id="6cce1" binding="mainPanel" layout-manager="GridBagLayout">
- <constraints>
- <xy x="48" y="54" width="615" height="250"/>
- </constraints>
- <properties>
- <minimumSize width="615" height="250"/>
- <preferredSize width="615" height="250"/>
- </properties>
- <border type="none"/>
- <children>
- <grid id="94766" layout-manager="GridBagLayout">
- <constraints>
- <grid row="7" column="1" row-span="1" col-span="3" vsize-policy="1" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.0" weighty="0.0"/>
- </constraints>
- <properties>
- <maximumSize width="200" height="50"/>
- <minimumSize width="200" height="50"/>
- <preferredSize width="200" height="50"/>
- </properties>
- <border type="none"/>
- <children>
- <component id="e7465" class="javax.swing.JButton" binding="okButton">
- <constraints>
- <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.0" weighty="0.0"/>
- </constraints>
- <properties>
- <maximumSize width="100" height="30"/>
- <minimumSize width="100" height="30"/>
- <preferredSize width="100" height="30"/>
- <text resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.okButton.text"/>
- </properties>
- </component>
- <component id="5723f" class="javax.swing.JButton" binding="cancelButton">
- <constraints>
- <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.0" weighty="1.0"/>
- </constraints>
- <properties>
- <maximumSize width="100" height="30"/>
- <minimumSize width="100" height="30"/>
- <opaque value="false"/>
- <preferredSize width="100" height="30"/>
- <text resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.cancelButton.text"/>
- </properties>
- </component>
- </children>
- </grid>
- <hspacer id="46ba8">
- <constraints>
- <grid row="0" column="0" row-span="8" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
- <gridbag weightx="1.0" weighty="0.0"/>
- </constraints>
- </hspacer>
- <hspacer id="57384">
- <constraints>
- <grid row="0" column="4" row-span="8" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
- <gridbag weightx="1.0" weighty="0.0"/>
- </constraints>
- </hspacer>
- <component id="59655" class="javax.swing.JLabel">
- <constraints>
- <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="1.0" weighty="0.0"/>
- </constraints>
- <properties>
- <text resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.startingIndexLabel.text"/>
- </properties>
- </component>
- <component id="c81ca" class="javax.swing.JTextField" binding="fileNamePrefixTextField">
- <constraints>
- <grid row="4" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="0" indent="0" use-parent-layout="false">
- <preferred-size width="150" height="-1"/>
- </grid>
- <gridbag weightx="0.0" weighty="0.0"/>
- </constraints>
- <properties>
- <margin top="2" left="6" bottom="2" right="6"/>
- <maximumSize width="160" height="30"/>
- <minimumSize width="160" height="30"/>
- <preferredSize width="160" height="30"/>
- <toolTipText resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.fileNamePrefixTextBox.toolTipText"/>
- </properties>
- </component>
- <component id="a4367" class="javax.swing.JLabel">
- <constraints>
- <grid row="4" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="1.0" weighty="0.0"/>
- </constraints>
- <properties>
- <text resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.fileNamePrefixLabel.text"/>
- </properties>
- </component>
- <component id="e86c2" class="javax.swing.JLabel">
- <constraints>
- <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="4" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="1.0" weighty="0.0"/>
- </constraints>
- <properties>
- <text resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.numberOfRandomizedROMsLabel.text"/>
- </properties>
- </component>
- <component id="3ee4c" class="javax.swing.JSpinner" binding="startingIndexSpinner">
- <constraints>
- <grid row="1" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.0" weighty="0.0"/>
- </constraints>
- <properties>
- <toolTipText resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.startingIndexSpinner.toolTipText"/>
- </properties>
- </component>
- <component id="76f06" class="javax.swing.JSpinner" binding="numberOfRandomizedROMsSpinner">
- <constraints>
- <grid row="2" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.0" weighty="0.0"/>
- </constraints>
- <properties>
- <toolTipText resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.numberOfRandomizedROMsSpinner.toolTipText"/>
- </properties>
- </component>
- <component id="f8d94" class="javax.swing.JCheckBox" binding="enableBatchRandomizationCheckBox">
- <constraints>
- <grid row="0" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.0" weighty="0.0"/>
- </constraints>
- <properties>
- <alignmentY value="0.5"/>
- <text resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.enableCheckBox.text"/>
- <toolTipText resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.enableCheckBox.toolTipText"/>
- </properties>
- </component>
- <component id="33deb" class="javax.swing.JButton" binding="chooseDirectoryButton">
- <constraints>
- <grid row="3" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.5" weighty="0.0"/>
- </constraints>
- <properties>
- <alignmentY value="0.0"/>
- <inheritsPopupMenu value="true"/>
- <label value="Output directory..."/>
- <maximumSize width="165" height="30"/>
- <minimumSize width="165" height="30"/>
- <preferredSize width="165" height="30"/>
- <text resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.outputDirectoryButton.text"/>
- <toolTipText resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.outputDirectoryButton.toolTipText"/>
- </properties>
- </component>
- <component id="52169" class="javax.swing.JLabel" binding="outputDirectoryLabel">
- <constraints>
- <grid row="3" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="1.0" weighty="0.0"/>
- </constraints>
- <properties>
- <maximumSize width="350" height="16"/>
- <minimumSize width="350" height="16"/>
- <preferredSize width="350" height="16"/>
- <text value=""/>
- </properties>
- </component>
- <component id="2d8de" class="javax.swing.JCheckBox" binding="generateLogFilesCheckBox">
- <constraints>
- <grid row="6" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.0" weighty="0.0"/>
- </constraints>
- <properties>
- <text resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.generateLogFilesCheckBox.text"/>
- <toolTipText resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.generateLogFilesCheckBox.toolTipText"/>
- </properties>
- </component>
- <component id="ebf20" class="javax.swing.JCheckBox" binding="autoAdvanceIndexCheckBox">
- <constraints>
- <grid row="5" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.0" weighty="0.0"/>
- </constraints>
- <properties>
- <text resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.autoAdvanceIndexCheckBox.text"/>
- <toolTipText resource-bundle="com/sneed/pkrandom/newgui/Bundle" key="BatchRandomizationSettingsDialog.autoAdvanceIndexCheckBox.toolTipText"/>
- </properties>
- </component>
- <hspacer id="ff006">
- <constraints>
- <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
- <gridbag weightx="0.0" weighty="0.0"/>
- </constraints>
- </hspacer>
- </children>
- </grid>
-</form>
diff --git a/src/com/sneed/pkrandom/newgui/BatchRandomizationSettingsDialog.java b/src/com/sneed/pkrandom/newgui/BatchRandomizationSettingsDialog.java
deleted file mode 100644
index 13e12e5..0000000
--- a/src/com/sneed/pkrandom/newgui/BatchRandomizationSettingsDialog.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package com.sneed.pkrandom.newgui;
-
-/*----------------------------------------------------------------------------*/
-/*-- BatchRandomizationSettingsDialog.java - a dialog for configuring --*/
-/*-- batch randomization settings --*/
-/*-- --*/
-/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
-/*-- Originally part of "Universal Pokemon Randomizer" by sneed --*/
-/*-- Pokemon and any associated names and the like are --*/
-/*-- trademark and (C) Nintendo 1996-2020. --*/
-/*-- --*/
-/*-- The custom code written here is licensed under the terms of the GPL: --*/
-/*-- --*/
-/*-- This program is free software: you can redistribute it and/or modify --*/
-/*-- it under the terms of the GNU General Public License as published by --*/
-/*-- the Free Software Foundation, either version 3 of the License, or --*/
-/*-- (at your option) any later version. --*/
-/*-- --*/
-/*-- This program is distributed in the hope that it will be useful, --*/
-/*-- but WITHOUT ANY WARRANTY; without even the implied warranty of --*/
-/*-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --*/
-/*-- GNU General Public License for more details. --*/
-/*-- --*/
-/*-- You should have received a copy of the GNU General Public License --*/
-/*-- along with this program. If not, see <http://www.gnu.org/licenses/>. --*/
-/*----------------------------------------------------------------------------*/
-
-import com.sneed.pkrandom.BatchRandomizationSettings;
-
-import javax.swing.*;
-import java.awt.event.*;
-import java.io.File;
-
-public class BatchRandomizationSettingsDialog extends JDialog {
- private JPanel mainPanel;
- private JButton okButton;
- private JButton cancelButton;
- private JCheckBox enableBatchRandomizationCheckBox;
- private JSpinner numberOfRandomizedROMsSpinner;
- private JSpinner startingIndexSpinner;
- private JTextField fileNamePrefixTextField;
- private JCheckBox generateLogFilesCheckBox;
- private JCheckBox autoAdvanceIndexCheckBox;
- private JButton chooseDirectoryButton;
- private JLabel outputDirectoryLabel;
-
- private JFileChooser outputDirectoryFileChooser;
-
- private final BatchRandomizationSettings currentSettings;
-
- public BatchRandomizationSettings getCurrentSettings() {
- return this.currentSettings;
- }
-
- public BatchRandomizationSettingsDialog(JFrame parent, BatchRandomizationSettings currentSettings) {
- super(parent, true);
- add(mainPanel);
- java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("com/sneed/pkrandom/newgui/Bundle");
- setTitle(bundle.getString("BatchRandomizationSettingsDialog.title"));
- setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
-
- getRootPane().setDefaultButton(okButton);
-
- this.currentSettings = currentSettings.clone();
-
- initializeControls();
- setLocationRelativeTo(parent);
- pack();
- setVisible(true);
- }
-
- private void onOK() {
- updateSettings();
- setVisible(false);
- }
-
- private void onCancel() {
- // add your code here if necessary
- setVisible(false);
- }
-
- private void initializeControls() {
- outputDirectoryFileChooser = new JFileChooser();
- okButton.addActionListener(e -> onOK());
- cancelButton.addActionListener(e -> onCancel());
-
- setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
- addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- onCancel();
- }
- });
- mainPanel.registerKeyboardAction(e -> onCancel(), KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
- JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
-
- SpinnerNumberModel numberOfRandomizedROMsModel = new SpinnerNumberModel(1,1, Integer.MAX_VALUE, 1);
- numberOfRandomizedROMsSpinner.setModel(numberOfRandomizedROMsModel);
-
- SpinnerNumberModel startingIndexModel = new SpinnerNumberModel(1,0, Integer.MAX_VALUE, 1);
- startingIndexSpinner.setModel(startingIndexModel);
-
- chooseDirectoryButton.addActionListener(e -> {
- int selectionResult = outputDirectoryFileChooser.showDialog(this, "Select");
- if (selectionResult == JFileChooser.APPROVE_OPTION) {
- outputDirectoryFileChooser.setCurrentDirectory(outputDirectoryFileChooser.getSelectedFile());
- outputDirectoryLabel.setText(outputDirectoryFileChooser.getSelectedFile().getAbsolutePath());
- }
- });
- setInitialControlValues();
- setControlsEnabled(currentSettings.isBatchRandomizationEnabled());
- }
-
- private void setInitialControlValues() {
- enableBatchRandomizationCheckBox.setSelected(currentSettings.isBatchRandomizationEnabled());
- generateLogFilesCheckBox.setSelected(currentSettings.shouldGenerateLogFile());
- autoAdvanceIndexCheckBox.setSelected(currentSettings.shouldAutoAdvanceStartingIndex());
- numberOfRandomizedROMsSpinner.setValue(currentSettings.getNumberOfRandomizedROMs());
- startingIndexSpinner.setValue(currentSettings.getStartingIndex());
- fileNamePrefixTextField.setText(currentSettings.getFileNamePrefix());
- outputDirectoryLabel.setText(currentSettings.getOutputDirectory());
- outputDirectoryFileChooser.setCurrentDirectory(new File(currentSettings.getOutputDirectory()));
- outputDirectoryFileChooser.setSelectedFile(new File(currentSettings.getOutputDirectory()));
- outputDirectoryFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
- enableBatchRandomizationCheckBox.addActionListener(a -> setControlsEnabled(enableBatchRandomizationCheckBox.isSelected()));
- }
-
- private void setControlsEnabled(boolean enabled) {
- numberOfRandomizedROMsSpinner.setEnabled(enabled);
- startingIndexSpinner.setEnabled(enabled);
- fileNamePrefixTextField.setEnabled(enabled);
- generateLogFilesCheckBox.setEnabled(enabled);
- autoAdvanceIndexCheckBox.setEnabled(enabled);
- chooseDirectoryButton.setEnabled(enabled);
- }
-
- private void updateSettings() {
- currentSettings.setBatchRandomizationEnabled(enableBatchRandomizationCheckBox.isSelected());
- currentSettings.setGenerateLogFile(generateLogFilesCheckBox.isSelected());
- currentSettings.setAutoAdvanceStartingIndex(autoAdvanceIndexCheckBox.isSelected());
- currentSettings.setNumberOfRandomizedROMs((Integer) numberOfRandomizedROMsSpinner.getValue());
- currentSettings.setStartingIndex((Integer) startingIndexSpinner.getValue());
- currentSettings.setFileNamePrefix(fileNamePrefixTextField.getText());
- currentSettings.setOutputDirectory(outputDirectoryFileChooser.getSelectedFile().getAbsolutePath());
- }
-}
diff --git a/src/com/sneed/pkrandom/newgui/Bundle.properties b/src/com/sneed/pkrandom/newgui/Bundle.properties
index b81e0dc..d04e52d 100644
--- a/src/com/sneed/pkrandom/newgui/Bundle.properties
+++ b/src/com/sneed/pkrandom/newgui/Bundle.properties
@@ -390,7 +390,6 @@ GUI.romSupportPrefix=Support:
GUI.processFailed=There was an unhandled exception trying to process your ROM.\nA log file containing some details has been saved to %s.\nPlease include this file in any bug reports you do.
GUI.processFailedNoLog=There was an unhandled exception trying to process your ROM.
GUI.raceModeRequirements=You can't use Race Mode without randomizing either the wild Pokemon or the trainer Pokemon.\nReview this and try again.
-GUI.batchRandomizationRequirements=You have enabled both Race Mode and Batch Randomization. These options can't be used together.\nDisable one of these options and try again.
GUI.pokeLimitNotChosen=You enabled the option to limit the Pokemon that appear, but didn't choose any to allow.\nSelect some by clicking on the "Limit Pokemon" button and try again.
GUI.presetFailTrainerClasses=Can't use this preset because you have a different set of random trainer class names to the creator.\nHave them make you a rndp file instead.
GUI.presetFailTrainerNames=Can't use this preset because you have a different set of random trainer names to the creator.\nHave them make you a rndp file instead.
@@ -430,8 +429,6 @@ GUI.miscTweaksPanel.toolTipText=
GUI.miscTweaksPanel.text=
GUI.gameMascotLabel.toolTipText=
GUI.gameMascotLabel.text=
-GUI.batchRandomizationMenuItem.text=Batch Randomization Settings
-GUI.batchRandomizationProgress=Saving %d of %d
Log.InvalidRomLoaded=The ROM you loaded is not a clean, official ROM.\nRandomizing ROM hacks or bad ROM dumps is not supported and may cause issues.\n
GenerationLimitDialog.includePokemonHeader.text=Include Pokemon from:
GenerationLimitDialog.relatedPokemonHeader.text=... and related Pokemon from:
@@ -635,20 +632,3 @@ GUI.tpEliteFourUniquePokemonCheckBox.text=Pokemon League Has Unique Pokemon:
GUI.tpEliteFourUniquePokemonCheckBox.toolTipText=<html>Enabling this setting will ensure that Pokemon League Trainers (Elite Four, Champions and BW1 N/Ghetsis) <br />are given the specified number of unique Pokemon that will not appear on any other Trainer.<br />The Elite Four Trainers' highest level Pokemon are the ones that will be unique;<br/>in the case of a level tie, it will be the Pokemon further back in the party.<br />Does not apply to postgame Pokemon League battles.
GUI.tpBetterMovesetsCheckBox.text=Better Movesets
GUI.tpBetterMovesetsCheckBox.toolTipText=<html>Attempts to give Trainer Pokemon better movesets by including TM moves/tutor moves/egg moves/pre-evolution moves,<br />and picking moves that synergize with the Pokemon's ability/stats/other moves.
-BatchRandomizationSettingsDialog.title=Batch Randomization Settings
-BatchRandomizationSettingsDialog.enableCheckBox.text=Enable batch randomization
-BatchRandomizationSettingsDialog.enableCheckBox.toolTipText=If selected, generate the number of randomized ROMs specified.
-BatchRandomizationSettingsDialog.startingIndexLabel.text=Starting index
-BatchRandomizationSettingsDialog.startingIndexSpinner.toolTipText=Starting index for the first generated ROM.
-BatchRandomizationSettingsDialog.numberOfRandomizedROMsLabel.text=Number of randomized ROMs
-BatchRandomizationSettingsDialog.numberOfRandomizedROMsSpinner.toolTipText=Number of ROMs to generate in a single batch.
-BatchRandomizationSettingsDialog.outputDirectoryButton.text=Output directory...
-BatchRandomizationSettingsDialog.outputDirectoryButton.toolTipText=Choose the output directory for your randomized ROMs.
-BatchRandomizationSettingsDialog.fileNamePrefixLabel.text=File name prefix
-BatchRandomizationSettingsDialog.fileNamePrefixTextBox.toolTipText=File name prefix for the generated ROMs.
-BatchRandomizationSettingsDialog.autoAdvanceIndexCheckBox.text=Automatically advance index after batch
-BatchRandomizationSettingsDialog.autoAdvanceIndexCheckBox.toolTipText=If selected, the starting index will be automatically updated to the next index after a batch is run.
-BatchRandomizationSettingsDialog.generateLogFilesCheckBox.text=Generate log files
-BatchRandomizationSettingsDialog.generateLogFilesCheckBox.toolTipText=If selected, save logs for the randomized ROMs.
-BatchRandomizationSettingsDialog.okButton.text=OK
-BatchRandomizationSettingsDialog.cancelButton.text=Cancel \ No newline at end of file
diff --git a/src/com/sneed/pkrandom/newgui/NewRandomizerGUI.java b/src/com/sneed/pkrandom/newgui/NewRandomizerGUI.java
index 03e9d00..f2be409 100644
--- a/src/com/sneed/pkrandom/newgui/NewRandomizerGUI.java
+++ b/src/com/sneed/pkrandom/newgui/NewRandomizerGUI.java
@@ -53,3749 +53,3648 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
public class NewRandomizerGUI {
- private JTabbedPane tabbedPane1;
- private JCheckBox raceModeCheckBox;
- private JButton openROMButton;
- private JButton randomizeSaveButton;
- private JButton premadeSeedButton;
- private JButton settingsButton;
- private JButton loadSettingsButton;
- private JButton saveSettingsButton;
- private JPanel mainPanel;
- private JRadioButton pbsUnchangedRadioButton;
- private JRadioButton pbsShuffleRadioButton;
- private JRadioButton pbsRandomRadioButton;
- private JRadioButton pbsLegendariesSlowRadioButton;
- private JRadioButton pbsStrongLegendariesSlowRadioButton;
- private JRadioButton pbsAllMediumFastRadioButton;
- private JCheckBox pbsStandardizeEXPCurvesCheckBox;
- private JCheckBox pbsFollowEvolutionsCheckBox;
- private JCheckBox pbsUpdateBaseStatsCheckBox;
- private JCheckBox ptIsDualTypeCheckBox;
- private JRadioButton ptUnchangedRadioButton;
- private JRadioButton ptRandomFollowEvolutionsRadioButton;
- private JRadioButton ptRandomCompletelyRadioButton;
- private JRadioButton paUnchangedRadioButton;
- private JRadioButton paRandomRadioButton;
- private JCheckBox paAllowWonderGuardCheckBox;
- private JCheckBox paFollowEvolutionsCheckBox;
- private JCheckBox paTrappingAbilitiesCheckBox;
- private JCheckBox paNegativeAbilitiesCheckBox;
- private JCheckBox paBadAbilitiesCheckBox;
- private JRadioButton peUnchangedRadioButton;
- private JRadioButton peRandomRadioButton;
- private JCheckBox peSimilarStrengthCheckBox;
- private JCheckBox peSameTypingCheckBox;
- private JCheckBox peLimitEvolutionsToThreeCheckBox;
- private JCheckBox peForceChangeCheckBox;
- private JCheckBox peChangeImpossibleEvosCheckBox;
- private JCheckBox peMakeEvolutionsEasierCheckBox;
- private JRadioButton spUnchangedRadioButton;
- private JRadioButton spCustomRadioButton;
- private JRadioButton spRandomCompletelyRadioButton;
- private JRadioButton spRandomTwoEvosRadioButton;
- private JComboBox<String> spComboBox1;
- private JComboBox<String> spComboBox2;
- private JComboBox<String> spComboBox3;
- private JCheckBox spRandomizeStarterHeldItemsCheckBox;
- private JCheckBox spBanBadItemsCheckBox;
- private JRadioButton stpUnchangedRadioButton;
- private JRadioButton stpSwapLegendariesSwapStandardsRadioButton;
- private JRadioButton stpRandomCompletelyRadioButton;
- private JRadioButton stpRandomSimilarStrengthRadioButton;
- private JCheckBox stpLimitMainGameLegendariesCheckBox;
- private JCheckBox stpRandomize600BSTCheckBox;
- private JRadioButton igtUnchangedRadioButton;
- private JRadioButton igtRandomizeGivenPokemonOnlyRadioButton;
- private JRadioButton igtRandomizeBothRequestedGivenRadioButton;
- private JCheckBox igtRandomizeNicknamesCheckBox;
- private JCheckBox igtRandomizeOTsCheckBox;
- private JCheckBox igtRandomizeIVsCheckBox;
- private JCheckBox igtRandomizeItemsCheckBox;
- private JCheckBox mdRandomizeMovePowerCheckBox;
- private JCheckBox mdRandomizeMoveAccuracyCheckBox;
- private JCheckBox mdRandomizeMovePPCheckBox;
- private JCheckBox mdRandomizeMoveTypesCheckBox;
- private JCheckBox mdRandomizeMoveCategoryCheckBox;
- private JCheckBox mdUpdateMovesCheckBox;
- private JCheckBox mdLegacyCheckBox;
- private JRadioButton pmsUnchangedRadioButton;
- private JRadioButton pmsRandomPreferringSameTypeRadioButton;
- private JRadioButton pmsRandomCompletelyRadioButton;
- private JRadioButton pmsMetronomeOnlyModeRadioButton;
- private JCheckBox pmsGuaranteedLevel1MovesCheckBox;
- private JCheckBox pmsReorderDamagingMovesCheckBox;
- private JCheckBox pmsNoGameBreakingMovesCheckBox;
- private JCheckBox pmsForceGoodDamagingCheckBox;
- private JSlider pmsGuaranteedLevel1MovesSlider;
- private JSlider pmsForceGoodDamagingSlider;
- private JCheckBox tpRivalCarriesStarterCheckBox;
- private JCheckBox tpSimilarStrengthCheckBox;
- private JCheckBox tpWeightTypesCheckBox;
- private JCheckBox tpDontUseLegendariesCheckBox;
- private JCheckBox tpNoEarlyWonderGuardCheckBox;
- private JCheckBox tpRandomizeTrainerNamesCheckBox;
- private JCheckBox tpRandomizeTrainerClassNamesCheckBox;
- private JCheckBox tpForceFullyEvolvedAtCheckBox;
- private JSlider tpForceFullyEvolvedAtSlider;
- private JSlider tpPercentageLevelModifierSlider;
- private JCheckBox tpEliteFourUniquePokemonCheckBox;
- private JSpinner tpEliteFourUniquePokemonSpinner;
- private JCheckBox tpPercentageLevelModifierCheckBox;
- private JRadioButton wpUnchangedRadioButton;
- private JRadioButton wpRandomRadioButton;
- private JRadioButton wpArea1To1RadioButton;
- private JRadioButton wpGlobal1To1RadioButton;
- private JRadioButton wpARNoneRadioButton;
- private JRadioButton wpARSimilarStrengthRadioButton;
- private JRadioButton wpARCatchEmAllModeRadioButton;
- private JRadioButton wpARTypeThemeAreasRadioButton;
- private JCheckBox wpUseTimeBasedEncountersCheckBox;
- private JCheckBox wpDontUseLegendariesCheckBox;
- private JCheckBox wpSetMinimumCatchRateCheckBox;
- private JCheckBox wpRandomizeHeldItemsCheckBox;
- private JCheckBox wpBanBadItemsCheckBox;
- private JCheckBox wpBalanceShakingGrassPokemonCheckBox;
- private JCheckBox wpPercentageLevelModifierCheckBox;
- private JSlider wpPercentageLevelModifierSlider;
- private JSlider wpSetMinimumCatchRateSlider;
- private JRadioButton tmUnchangedRadioButton;
- private JRadioButton tmRandomRadioButton;
- private JCheckBox tmFullHMCompatibilityCheckBox;
- private JCheckBox tmLevelupMoveSanityCheckBox;
- private JCheckBox tmKeepFieldMoveTMsCheckBox;
- private JCheckBox tmForceGoodDamagingCheckBox;
- private JSlider tmForceGoodDamagingSlider;
- private JRadioButton thcUnchangedRadioButton;
- private JRadioButton thcRandomPreferSameTypeRadioButton;
- private JRadioButton thcRandomCompletelyRadioButton;
- private JRadioButton thcFullCompatibilityRadioButton;
- private JRadioButton mtUnchangedRadioButton;
- private JRadioButton mtRandomRadioButton;
- private JCheckBox mtLevelupMoveSanityCheckBox;
- private JCheckBox mtKeepFieldMoveTutorsCheckBox;
- private JCheckBox mtForceGoodDamagingCheckBox;
- private JSlider mtForceGoodDamagingSlider;
- private JRadioButton mtcUnchangedRadioButton;
- private JRadioButton mtcRandomPreferSameTypeRadioButton;
- private JRadioButton mtcRandomCompletelyRadioButton;
- private JRadioButton mtcFullCompatibilityRadioButton;
- private JRadioButton fiUnchangedRadioButton;
- private JRadioButton fiShuffleRadioButton;
- private JRadioButton fiRandomRadioButton;
- private JRadioButton fiRandomEvenDistributionRadioButton;
- private JCheckBox fiBanBadItemsCheckBox;
- private JRadioButton shUnchangedRadioButton;
- private JRadioButton shShuffleRadioButton;
- private JRadioButton shRandomRadioButton;
- private JCheckBox shBanOverpoweredShopItemsCheckBox;
- private JCheckBox shBanBadItemsCheckBox;
- private JCheckBox shBanRegularShopItemsCheckBox;
- private JCheckBox shBalanceShopItemPricesCheckBox;
- private JCheckBox shGuaranteeEvolutionItemsCheckBox;
- private JCheckBox shGuaranteeXItemsCheckBox;
- private JCheckBox miscBWExpPatchCheckBox;
- private JCheckBox miscNerfXAccuracyCheckBox;
- private JCheckBox miscFixCritRateCheckBox;
- private JCheckBox miscFastestTextCheckBox;
- private JCheckBox miscRunningShoesIndoorsCheckBox;
- private JCheckBox miscRandomizePCPotionCheckBox;
- private JCheckBox miscAllowPikachuEvolutionCheckBox;
- private JCheckBox miscGiveNationalDexAtCheckBox;
- private JCheckBox miscUpdateTypeEffectivenessCheckBox;
- private JCheckBox miscLowerCasePokemonNamesCheckBox;
- private JCheckBox miscRandomizeCatchingTutorialCheckBox;
- private JCheckBox miscBanLuckyEggCheckBox;
- private JCheckBox miscNoFreeLuckyEggCheckBox;
- private JCheckBox miscBanBigMoneyManiacCheckBox;
- private JPanel pokemonAbilitiesPanel;
- private JPanel moveTutorPanel;
- private JPanel mtMovesPanel;
- private JPanel mtCompatPanel;
- private JLabel mtNoExistLabel;
- private JPanel shopItemsPanel;
- private JLabel mtNoneAvailableLabel;
- private JPanel miscTweaksPanel;
- private JLabel gameMascotLabel;
- private JPanel baseTweaksPanel;
- private JLabel romNameLabel;
- private JLabel romCodeLabel;
- private JLabel romSupportLabel;
- private JCheckBox tmNoGameBreakingMovesCheckBox;
- private JCheckBox mtNoGameBreakingMovesCheckBox;
- private JCheckBox limitPokemonCheckBox;
- private JButton limitPokemonButton;
- private JCheckBox tpAllowAlternateFormesCheckBox;
- private JLabel versionLabel;
- private JCheckBox pbsFollowMegaEvosCheckBox;
- private JCheckBox paFollowMegaEvosCheckBox;
- private JCheckBox ptFollowMegaEvosCheckBox;
- private JCheckBox spAllowAltFormesCheckBox;
- private JCheckBox stpAllowAltFormesCheckBox;
- private JCheckBox stpSwapMegaEvosCheckBox;
- private JCheckBox tpSwapMegaEvosCheckBox;
- private JCheckBox wpAllowAltFormesCheckBox;
- private JCheckBox tpDoubleBattleModeCheckBox;
- private JCheckBox tpBossTrainersCheckBox;
- private JCheckBox tpImportantTrainersCheckBox;
- private JCheckBox tpRegularTrainersCheckBox;
- private JSpinner tpBossTrainersSpinner;
- private JSpinner tpImportantTrainersSpinner;
- private JSpinner tpRegularTrainersSpinner;
- private JLabel tpAdditionalPokemonForLabel;
- private JCheckBox peAllowAltFormesCheckBox;
- private JCheckBox miscSOSBattlesCheckBox;
- private JCheckBox tpRandomShinyTrainerPokemonCheckBox;
- private JRadioButton totpUnchangedRadioButton;
- private JRadioButton totpRandomRadioButton;
- private JRadioButton totpRandomSimilarStrengthRadioButton;
- private JRadioButton totpAllyUnchangedRadioButton;
- private JRadioButton totpAllyRandomRadioButton;
- private JRadioButton totpAllyRandomSimilarStrengthRadioButton;
- private JPanel totpAllyPanel;
- private JPanel totpAuraPanel;
- private JRadioButton totpAuraUnchangedRadioButton;
- private JRadioButton totpAuraRandomRadioButton;
- private JRadioButton totpAuraRandomSameStrengthRadioButton;
- private JCheckBox totpPercentageLevelModifierCheckBox;
- private JSlider totpPercentageLevelModifierSlider;
- private JCheckBox totpRandomizeHeldItemsCheckBox;
- private JCheckBox totpAllowAltFormesCheckBox;
- private JPanel totpPanel;
- private JCheckBox pmsEvolutionMovesCheckBox;
- private JComboBox<String> pbsUpdateComboBox;
- private JComboBox<String> mdUpdateComboBox;
- private JCheckBox paWeighDuplicatesTogetherCheckBox;
- private JCheckBox miscBalanceStaticLevelsCheckBox;
- private JCheckBox miscRetainAltFormesCheckBox;
- private JComboBox pbsEXPCurveComboBox;
- private JCheckBox miscRunWithoutRunningShoesCheckBox;
- private JCheckBox peRemoveTimeBasedEvolutionsCheckBox;
- private JCheckBox tmFollowEvolutionsCheckBox;
- private JCheckBox mtFollowEvolutionsCheckBox;
- private JCheckBox stpPercentageLevelModifierCheckBox;
- private JSlider stpPercentageLevelModifierSlider;
- private JCheckBox stpFixMusicCheckBox;
- private JCheckBox miscFasterHPAndEXPBarsCheckBox;
- private JCheckBox tpBossTrainersItemsCheckBox;
- private JCheckBox tpImportantTrainersItemsCheckBox;
- private JCheckBox tpRegularTrainersItemsCheckBox;
- private JLabel tpHeldItemsLabel;
- private JCheckBox tpConsumableItemsOnlyCheckBox;
- private JCheckBox tpSensibleItemsCheckBox;
- private JCheckBox tpHighestLevelGetsItemCheckBox;
- private JPanel pickupItemsPanel;
- private JRadioButton puUnchangedRadioButton;
- private JRadioButton puRandomRadioButton;
- private JCheckBox puBanBadItemsCheckBox;
- private JCheckBox miscForceChallengeModeCheckBox;
- private JCheckBox pbsAssignEvoStatsRandomlyCheckBox;
- private JCheckBox noIrregularAltFormesCheckBox;
- private JRadioButton peRandomEveryLevelRadioButton;
- private JCheckBox miscFastDistortionWorldCheckBox;
- private JComboBox tpComboBox;
- private JCheckBox tpBetterMovesetsCheckBox;
- private JCheckBox paEnsureTwoAbilitiesCheckbox;
-
- private static JFrame frame;
-
- private static String launcherInput = "";
- public static boolean usedLauncher = false;
-
- private GenRestrictions currentRestrictions;
- private OperationDialog opDialog;
-
- private ResourceBundle bundle;
- protected RomHandler.Factory[] checkHandlers;
- private RomHandler romHandler;
-
- private boolean presetMode = false;
- private boolean initialPopup = true;
- private boolean showInvalidRomPopup = true;
-
- private List<JCheckBox> tweakCheckBoxes;
- private JPanel liveTweaksPanel = new JPanel();
-
- private JFileChooser romOpenChooser = new JFileChooser();
- private JFileChooser romSaveChooser = new JFileChooser();
- private JFileChooser qsOpenChooser = new JFileChooser();
- private JFileChooser qsSaveChooser = new JFileChooser();
- private JFileChooser qsUpdateChooser = new JFileChooser();
- private JFileChooser gameUpdateChooser = new JFileChooser();
-
- private JPopupMenu settingsMenu;
- private JMenuItem customNamesEditorMenuItem;
- private JMenuItem loadGetSettingsMenuItem;
- private JMenuItem keepOrUnloadGameAfterRandomizingMenuItem;
- private JMenuItem batchRandomizationMenuItem;
-
- private ImageIcon emptyIcon = new ImageIcon(getClass().getResource("/com/sneed/pkrandom/newgui/emptyIcon.png"));
- private boolean haveCheckedCustomNames, unloadGameOnSuccess;
- private Map<String, String> gameUpdates = new TreeMap<>();
-
- private List<String> trainerSettings = new ArrayList<>();
- private List<String> trainerSettingToolTips = new ArrayList<>();
- private final int TRAINER_UNCHANGED = 0, TRAINER_RANDOM = 1, TRAINER_RANDOM_EVEN = 2, TRAINER_RANDOM_EVEN_MAIN = 3,
- TRAINER_TYPE_THEMED = 4, TRAINER_TYPE_THEMED_ELITE4_GYMS = 5;
-
- private BatchRandomizationSettings batchRandomizationSettings;
-
- public NewRandomizerGUI() {
- ToolTipManager.sharedInstance().setInitialDelay(400);
- ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE);
- bundle = ResourceBundle.getBundle("com/sneed/pkrandom/newgui/Bundle");
- testForRequiredConfigs();
- checkHandlers = new RomHandler.Factory[] { new Gen1RomHandler.Factory(), new Gen2RomHandler.Factory(),
- new Gen3RomHandler.Factory(), new Gen4RomHandler.Factory(), new Gen5RomHandler.Factory(),
- new Gen6RomHandler.Factory(), new Gen7RomHandler.Factory() };
-
- haveCheckedCustomNames = false;
- initExplicit();
- initTweaksPanel();
- initFileChooserDirectories();
-
- if (!haveCheckedCustomNames) {
- checkCustomNames();
- }
-
- new Thread(() -> {
- String latestVersionString = "???";
-
- try {
-
- URL url = new URL(SysConstants.API_URL_ZX);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setRequestMethod("GET");
- conn.setRequestProperty("Accept", "application/json");
- conn.setConnectTimeout(2000);
- conn.setReadTimeout(2000);
-
- BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
-
- String output;
- while ((output = br.readLine()) != null) {
- String[] a = output.split("tag_name\":\"");
- if (a.length > 1) {
- latestVersionString = a[1].split("\",")[0];
- }
- }
-
- conn.disconnect();
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }).run();
-
- frame.setTitle(String.format(bundle.getString("GUI.windowTitle"),Version.VERSION_STRING));
-
- openROMButton.addActionListener(e -> loadROM());
- pbsUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- pbsShuffleRadioButton.addActionListener(e -> enableOrDisableSubControls());
- pbsRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- pbsFollowMegaEvosCheckBox.addActionListener(e -> enableOrDisableSubControls());
- pbsFollowEvolutionsCheckBox.addActionListener(e -> enableOrDisableSubControls());
- pbsStandardizeEXPCurvesCheckBox.addActionListener(e -> enableOrDisableSubControls());
- paUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- paRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- peUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- peRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- peRandomEveryLevelRadioButton.addActionListener(e -> enableOrDisableSubControls());
- peAllowAltFormesCheckBox.addActionListener(e -> enableOrDisableSubControls());
- spUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- spCustomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- spRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
- spRandomTwoEvosRadioButton.addActionListener(e -> enableOrDisableSubControls());
- stpUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- stpSwapLegendariesSwapStandardsRadioButton.addActionListener(e -> enableOrDisableSubControls());
- stpRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
- stpRandomSimilarStrengthRadioButton.addActionListener(e -> enableOrDisableSubControls());
- stpPercentageLevelModifierCheckBox.addActionListener(e -> enableOrDisableSubControls());
- igtUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- igtRandomizeGivenPokemonOnlyRadioButton.addActionListener(e -> enableOrDisableSubControls());
- igtRandomizeBothRequestedGivenRadioButton.addActionListener(e -> enableOrDisableSubControls());
- pmsUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- pmsRandomPreferringSameTypeRadioButton.addActionListener(e -> enableOrDisableSubControls());
- pmsRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
- pmsMetronomeOnlyModeRadioButton.addActionListener(e -> enableOrDisableSubControls());
- pmsGuaranteedLevel1MovesCheckBox.addActionListener(e -> enableOrDisableSubControls());
- pmsForceGoodDamagingCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpForceFullyEvolvedAtCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpPercentageLevelModifierCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpEliteFourUniquePokemonCheckBox.addActionListener(e -> enableOrDisableSubControls());
- wpUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- wpRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- wpArea1To1RadioButton.addActionListener(e -> enableOrDisableSubControls());
- wpGlobal1To1RadioButton.addActionListener(e -> enableOrDisableSubControls());
- wpSetMinimumCatchRateCheckBox.addActionListener(e -> enableOrDisableSubControls());
- wpRandomizeHeldItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
- wpPercentageLevelModifierCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tmUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- tmRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- tmForceGoodDamagingCheckBox.addActionListener(e -> enableOrDisableSubControls());
- thcUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- thcRandomPreferSameTypeRadioButton.addActionListener(e -> enableOrDisableSubControls());
- thcRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
- thcFullCompatibilityRadioButton.addActionListener(e -> enableOrDisableSubControls());
- mtUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- mtRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- mtForceGoodDamagingCheckBox.addActionListener(e -> enableOrDisableSubControls());
- mtcUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- mtcRandomPreferSameTypeRadioButton.addActionListener(e -> enableOrDisableSubControls());
- mtcRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
- mtcFullCompatibilityRadioButton.addActionListener(e -> enableOrDisableSubControls());
- fiUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- fiShuffleRadioButton.addActionListener(e -> enableOrDisableSubControls());
- fiRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- fiRandomEvenDistributionRadioButton.addActionListener(e -> enableOrDisableSubControls());
- shUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- shShuffleRadioButton.addActionListener(e -> enableOrDisableSubControls());
- shRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- puUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- puRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- randomizeSaveButton.addActionListener(e -> saveROM());
- premadeSeedButton.addActionListener(e -> presetLoader());
- loadSettingsButton.addActionListener(e -> loadQS());
- saveSettingsButton.addActionListener(e -> saveQS());
- settingsButton.addActionListener(e -> settingsMenu.show(settingsButton,0,settingsButton.getHeight()));
- customNamesEditorMenuItem.addActionListener(e -> new CustomNamesEditorDialog(frame));
- loadGetSettingsMenuItem.addActionListener(e -> loadGetSettingsMenuItemActionPerformed());
- keepOrUnloadGameAfterRandomizingMenuItem.addActionListener(e -> keepOrUnloadGameAfterRandomizingMenuItemActionPerformed());
- limitPokemonButton.addActionListener(e -> {
- NewGenerationLimitDialog gld = new NewGenerationLimitDialog(frame, currentRestrictions,
- romHandler.generationOfPokemon(), romHandler.forceSwapStaticMegaEvos());
- if (gld.pressedOK()) {
- currentRestrictions = gld.getChoice();
- if (currentRestrictions != null && !currentRestrictions.allowTrainerSwapMegaEvolvables(
- romHandler.forceSwapStaticMegaEvos(), isTrainerSetting(TRAINER_TYPE_THEMED))) {
- tpSwapMegaEvosCheckBox.setEnabled(false);
- tpSwapMegaEvosCheckBox.setSelected(false);
- }
- }
- });
- limitPokemonCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpAllowAlternateFormesCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpBossTrainersCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpImportantTrainersCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpRegularTrainersCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpBossTrainersItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpImportantTrainersItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tpRegularTrainersItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
- totpUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- totpRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- totpRandomSimilarStrengthRadioButton.addActionListener(e -> enableOrDisableSubControls());
- totpAllyUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- totpAllyRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
- totpAllyRandomSimilarStrengthRadioButton.addActionListener(e -> enableOrDisableSubControls());
- totpPercentageLevelModifierCheckBox.addActionListener(e -> enableOrDisableSubControls());
- pbsUpdateBaseStatsCheckBox.addActionListener(e -> enableOrDisableSubControls());
- mdUpdateMovesCheckBox.addActionListener(e -> enableOrDisableSubControls());
- frame.addComponentListener(new ComponentListener() {
- @Override
- public void componentResized(ComponentEvent e) {
-
- }
-
- @Override
- public void componentMoved(ComponentEvent e) {
-
- }
-
- @Override
- public void componentShown(ComponentEvent e) {
- showInitialPopup();
- }
-
- @Override
- public void componentHidden(ComponentEvent e) {
-
- }
- });
- ptUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
- ptRandomFollowEvolutionsRadioButton.addActionListener(e -> enableOrDisableSubControls());
- ptRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
- spRandomizeStarterHeldItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
- tmLevelupMoveSanityCheckBox.addActionListener(e -> enableOrDisableSubControls());
- mtLevelupMoveSanityCheckBox.addActionListener(e -> enableOrDisableSubControls());
- noIrregularAltFormesCheckBox.addActionListener(e -> enableOrDisableSubControls());
- ptIsDualTypeCheckBox.addActionListener(e->enableOrDisableSubControls());
- tpComboBox.addItemListener(e -> {
- if (e.getStateChange() == ItemEvent.SELECTED) {
- enableOrDisableSubControls();
- }
- });
- batchRandomizationMenuItem.addActionListener(e -> batchRandomizationSettingsDialog());
- }
-
- private void showInitialPopup() {
- if (!usedLauncher) {
- String message = bundle.getString("GUI.pleaseUseTheLauncher");
- Object[] messages = {message};
- JOptionPane.showMessageDialog(frame, messages);
- }
- }
-
- private void showInvalidRomPopup() {
- if (showInvalidRomPopup) {
- String message = String.format(bundle.getString("GUI.invalidRomMessage"));
- JLabel label = new JLabel("<html><b>Randomizing ROM hacks or bad ROM dumps is not supported and may cause issues.</b>");
- JCheckBox checkbox = new JCheckBox("Don't show this again");
- Object[] messages = {message, label, checkbox};
- Object[] options = {"OK"};
- JOptionPane.showOptionDialog(frame,
- messages,
- "Invalid ROM detected",
- JOptionPane.OK_OPTION,
- JOptionPane.WARNING_MESSAGE,
- null,
- options,
- null);
- showInvalidRomPopup = !checkbox.isSelected();
- }
- }
-
- private void initFileChooserDirectories() {
- romOpenChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
- romSaveChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
- if (new File(SysConstants.ROOT_PATH + "settings/").exists()) {
- qsOpenChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH + "settings/"));
- qsSaveChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH + "settings/"));
- qsUpdateChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH + "settings/"));
- } else {
- qsOpenChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
- qsSaveChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
- qsUpdateChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
- }
- }
-
- private void initExplicit() {
-
- versionLabel.setText(String.format(bundle.getString("GUI.versionLabel.text"), Version.VERSION_STRING));
- mtNoExistLabel.setVisible(false);
- mtNoneAvailableLabel.setVisible(false);
- baseTweaksPanel.add(liveTweaksPanel);
- liveTweaksPanel.setVisible(false);
-
- romOpenChooser.setFileFilter(new ROMFilter());
-
- romSaveChooser.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
- romSaveChooser.setFileFilter(new ROMFilter());
-
- qsOpenChooser.setFileFilter(new QSFileFilter());
-
- qsSaveChooser.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
- qsSaveChooser.setFileFilter(new QSFileFilter());
-
- qsUpdateChooser.setFileFilter(new QSFileFilter());
-
- settingsMenu = new JPopupMenu();
-
- SpinnerModel bossTrainerModel = new SpinnerNumberModel(
- 1,
- 1,
- 5,
- 1
- );
- SpinnerModel importantTrainerModel = new SpinnerNumberModel(
- 1,
- 1,
- 5,
- 1
- );
- SpinnerModel regularTrainerModel = new SpinnerNumberModel(
- 1,
- 1,
- 5,
- 1
- );
-
- SpinnerModel eliteFourUniquePokemonModel = new SpinnerNumberModel(
- 1,
- 1,
- 2,
- 1
- );
-
- List<String> keys = new ArrayList<>(bundle.keySet());
- Collections.sort(keys);
- for (String k: keys) {
- if (k.matches("^GUI\\.tpMain.*\\.text$")) {
- trainerSettings.add(bundle.getString(k));
- trainerSettingToolTips.add(k.replace("text","toolTipText"));
- }
- }
-
- tpBossTrainersSpinner.setModel(bossTrainerModel);
- tpImportantTrainersSpinner.setModel(importantTrainerModel);
- tpRegularTrainersSpinner.setModel(regularTrainerModel);
- tpEliteFourUniquePokemonSpinner.setModel(eliteFourUniquePokemonModel);
-
- customNamesEditorMenuItem = new JMenuItem();
- customNamesEditorMenuItem.setText(bundle.getString("GUI.customNamesEditorMenuItem.text"));
- settingsMenu.add(customNamesEditorMenuItem);
-
- loadGetSettingsMenuItem = new JMenuItem();
- loadGetSettingsMenuItem.setText(bundle.getString("GUI.loadGetSettingsMenuItem.text"));
- settingsMenu.add(loadGetSettingsMenuItem);
-
- keepOrUnloadGameAfterRandomizingMenuItem = new JMenuItem();
- if (this.unloadGameOnSuccess) {
- keepOrUnloadGameAfterRandomizingMenuItem.setText(bundle.getString("GUI.keepGameLoadedAfterRandomizingMenuItem.text"));
- } else {
- keepOrUnloadGameAfterRandomizingMenuItem.setText(bundle.getString("GUI.unloadGameAfterRandomizingMenuItem.text"));
- }
- settingsMenu.add(keepOrUnloadGameAfterRandomizingMenuItem);
-
- batchRandomizationMenuItem = new JMenuItem();
- batchRandomizationMenuItem.setText(bundle.getString("GUI.batchRandomizationMenuItem.text"));
- settingsMenu.add(batchRandomizationMenuItem);
- }
-
- private void loadROM() {
- romOpenChooser.setSelectedFile(null);
- int returnVal = romOpenChooser.showOpenDialog(mainPanel);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- final File fh = romOpenChooser.getSelectedFile();
- try {
- Utils.validateRomFile(fh);
- } catch (Utils.InvalidROMException e) {
- switch (e.getType()) {
- case LENGTH:
- JOptionPane.showMessageDialog(mainPanel,
- String.format(bundle.getString("GUI.tooShortToBeARom"), fh.getName()));
- return;
- case ZIP_FILE:
- JOptionPane.showMessageDialog(mainPanel,
- String.format(bundle.getString("GUI.openedZIPfile"), fh.getName()));
- return;
- case RAR_FILE:
- JOptionPane.showMessageDialog(mainPanel,
- String.format(bundle.getString("GUI.openedRARfile"), fh.getName()));
- return;
- case IPS_FILE:
- JOptionPane.showMessageDialog(mainPanel,
- String.format(bundle.getString("GUI.openedIPSfile"), fh.getName()));
- return;
- case UNREADABLE:
- JOptionPane.showMessageDialog(mainPanel,
- String.format(bundle.getString("GUI.unreadableRom"), fh.getName()));
- return;
- }
- }
-
- for (RomHandler.Factory rhf : checkHandlers) {
- if (rhf.isLoadable(fh.getAbsolutePath())) {
- this.romHandler = rhf.create(RandomSource.instance());
- if (!usedLauncher && this.romHandler instanceof Abstract3DSRomHandler) {
- String message = bundle.getString("GUI.pleaseUseTheLauncher");
- Object[] messages = {message};
- JOptionPane.showMessageDialog(frame, messages);
- this.romHandler = null;
- return;
- }
- opDialog = new OperationDialog(bundle.getString("GUI.loadingText"), frame, true);
- Thread t = new Thread(() -> {
- boolean romLoaded = false;
- SwingUtilities.invokeLater(() -> opDialog.setVisible(true));
- try {
- this.romHandler.loadRom(fh.getAbsolutePath());
- if (gameUpdates.containsKey(this.romHandler.getROMCode())) {
- this.romHandler.loadGameUpdate(gameUpdates.get(this.romHandler.getROMCode()));
- }
- romLoaded = true;
- } catch (EncryptedROMException ex) {
- JOptionPane.showMessageDialog(mainPanel,
- String.format(bundle.getString("GUI.encryptedRom"), fh.getAbsolutePath()));
- } catch (Exception ex) {
- attemptToLogException(ex, "GUI.loadFailed", "GUI.loadFailedNoLog", null, null);
- }
- final boolean loadSuccess = romLoaded;
- SwingUtilities.invokeLater(() -> {
- this.opDialog.setVisible(false);
- this.initialState();
- if (loadSuccess) {
- this.romLoaded();
- }
- });
- });
- t.start();
-
- return;
- }
- }
- JOptionPane.showMessageDialog(mainPanel,
- String.format(bundle.getString("GUI.unsupportedRom"), fh.getName()));
- }
- }
-
- private void saveROM() {
- if (romHandler == null) {
- return; // none loaded
- }
- if (raceModeCheckBox.isSelected() && batchRandomizationSettings.isBatchRandomizationEnabled()) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.batchRandomizationRequirements"));
- return;
- }
- if (raceModeCheckBox.isSelected() && isTrainerSetting(TRAINER_UNCHANGED) && wpUnchangedRadioButton.isSelected()) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.raceModeRequirements"));
- return;
- }
- if (limitPokemonCheckBox.isSelected()
- && (this.currentRestrictions == null || this.currentRestrictions.nothingSelected())) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.pokeLimitNotChosen"));
- return;
- }
- SaveType outputType = askForSaveType();
- romSaveChooser.setSelectedFile(null);
- boolean allowed = false;
- File fh = null;
- if (batchRandomizationSettings.isBatchRandomizationEnabled() && outputType != SaveType.INVALID) {
- allowed = true;
- }
- else if (outputType == SaveType.FILE) {
- romSaveChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
- int returnVal = romSaveChooser.showSaveDialog(frame);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- fh = romSaveChooser.getSelectedFile();
- // Fix or add extension
- List<String> extensions = new ArrayList<>(Arrays.asList("sgb", "gbc", "gba", "nds", "cxi"));
- extensions.remove(this.romHandler.getDefaultExtension());
- fh = FileFunctions.fixFilename(fh, this.romHandler.getDefaultExtension(), extensions);
- allowed = true;
- if (this.romHandler instanceof AbstractDSRomHandler || this.romHandler instanceof Abstract3DSRomHandler) {
- String currentFN = this.romHandler.loadedFilename();
- if (currentFN.equals(fh.getAbsolutePath())) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.cantOverwriteDS"));
- allowed = false;
- }
- }
- }
- } else if (outputType == SaveType.DIRECTORY) {
- romSaveChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
- int returnVal = romSaveChooser.showSaveDialog(frame);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- fh = romSaveChooser.getSelectedFile();
- allowed = true;
- }
- }
-
- if (allowed && fh != null) {
- saveRandomizedRom(outputType, fh);
- } else if (allowed && batchRandomizationSettings.isBatchRandomizationEnabled()) {
- int numberOfRandomizedROMs = batchRandomizationSettings.getNumberOfRandomizedROMs();
- int startingIndex = batchRandomizationSettings.getStartingIndex();
- int endingIndex = startingIndex + numberOfRandomizedROMs;
- final String progressTemplate = bundle.getString("GUI.batchRandomizationProgress");
- OperationDialog batchProgressDialog = new OperationDialog(String.format(progressTemplate, 0, numberOfRandomizedROMs), frame, true);
- SwingWorker swingWorker = new SwingWorker<Void, Void>() {
- int i;
-
- @Override
- protected Void doInBackground() {
- frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
- SwingUtilities.invokeLater(() -> batchProgressDialog.setVisible(true));
- for (i = startingIndex; i < endingIndex; i++) {
- String fileName = batchRandomizationSettings.getOutputDirectory() +
- File.separator +
- batchRandomizationSettings.getFileNamePrefix() +
- i;
- if (outputType == SaveType.FILE) {
- fileName += '.' + romHandler.getDefaultExtension();
- }
- File rom = new File(fileName);
- if (outputType == SaveType.DIRECTORY) {
- rom.mkdirs();
- }
- int currentRomNumber = i - startingIndex + 1;
-
- SwingUtilities.invokeLater(
- () -> batchProgressDialog.setLoadingLabelText(String.format(progressTemplate,
- currentRomNumber,
- numberOfRandomizedROMs))
- );
- saveRandomizedRom(outputType, rom);
- }
- return null;
- }
-
- @Override
- protected void done() {
- super.done();
- if (batchRandomizationSettings.shouldAutoAdvanceStartingIndex()) {
- batchRandomizationSettings.setStartingIndex(i);
- }
- SwingUtilities.invokeLater(() -> batchProgressDialog.setVisible(false));
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.randomizationDone"));
- if (unloadGameOnSuccess) {
- romHandler = null;
- initialState();
- } else {
- reinitializeRomHandler(false);
- }
- frame.setCursor(null);
- }
- };
- swingWorker.execute();
- }
- }
-
- private void saveRandomizedRom(SaveType outputType, File fh) {
- // Get a seed
- long seed = RandomSource.pickSeed();
- // Apply it
- RandomSource.seed(seed);
- presetMode = false;
-
- try {
- CustomNamesSet cns = FileFunctions.getCustomNames();
- performRandomization(fh.getAbsolutePath(), seed, cns, outputType == SaveType.DIRECTORY);
- } catch (IOException ex) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.cantLoadCustomNames"));
- }
- }
-
- private void loadQS() {
- if (this.romHandler == null) {
- return;
- }
- qsOpenChooser.setSelectedFile(null);
- int returnVal = qsOpenChooser.showOpenDialog(frame);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- File fh = qsOpenChooser.getSelectedFile();
- try {
- FileInputStream fis = new FileInputStream(fh);
- Settings settings = Settings.read(fis);
- fis.close();
-
- SwingUtilities.invokeLater(() -> {
- // load settings
- initialState();
- romLoaded();
- Settings.TweakForROMFeedback feedback = settings.tweakForRom(this.romHandler);
- if (feedback.isChangedStarter() && settings.getStartersMod() == Settings.StartersMod.CUSTOM) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.starterUnavailable"));
- }
- this.restoreStateFromSettings(settings);
-
- if (settings.isUpdatedFromOldVersion()) {
- // show a warning dialog, but load it
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.settingsFileOlder"));
- }
-
- JOptionPane.showMessageDialog(frame,
- String.format(bundle.getString("GUI.settingsLoaded"), fh.getName()));
- });
- } catch (UnsupportedOperationException ex) {
- ex.printStackTrace();
- JOptionPane.showMessageDialog(frame, ex.getMessage());
- } catch (IllegalArgumentException ex) {
- ex.printStackTrace();
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.invalidSettingsFile"));
- } catch (IOException ex) {
- ex.printStackTrace();
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.settingsLoadFailed"));
- }
- }
- }
-
- private void saveQS() {
- if (this.romHandler == null) {
- return;
- }
- qsSaveChooser.setSelectedFile(null);
- int returnVal = qsSaveChooser.showSaveDialog(frame);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- File fh = qsSaveChooser.getSelectedFile();
- // Fix or add extension
- fh = FileFunctions.fixFilename(fh, "rnqs");
- // Save now?
- try {
- FileOutputStream fos = new FileOutputStream(fh);
- getCurrentSettings().write(fos);
- fos.close();
- } catch (IOException ex) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.settingsSaveFailed"));
- }
- }
- }
-
- private void performRandomization(final String filename, final long seed, CustomNamesSet customNames, boolean saveAsDirectory) {
- final Settings settings = createSettingsFromState(customNames);
- final boolean raceMode = settings.isRaceMode();
- final boolean batchRandomization = batchRandomizationSettings.isBatchRandomizationEnabled() && !presetMode;
- // Setup verbose log
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- PrintStream log;
- try {
- log = new PrintStream(baos, false, "UTF-8");
- } catch (UnsupportedEncodingException e) {
- log = new PrintStream(baos);
- }
-
- final PrintStream verboseLog = log;
-
- try {
- final AtomicInteger finishedCV = new AtomicInteger(0);
- opDialog = new OperationDialog(bundle.getString("GUI.savingText"), frame, true);
- Thread t = new Thread(() -> {
- SwingUtilities.invokeLater(() -> opDialog.setVisible(!batchRandomization));
- boolean succeededSave = false;
- try {
- romHandler.setLog(verboseLog);
- finishedCV.set(new Randomizer(settings, romHandler, bundle, saveAsDirectory).randomize(filename,
- verboseLog, seed));
- succeededSave = true;
- } catch (RandomizationException ex) {
- attemptToLogException(ex, "GUI.saveFailedMessage",
- "GUI.saveFailedMessageNoLog", true, settings.toString(), Long.toString(seed));
- if (verboseLog != null) {
- verboseLog.close();
- }
- } catch (CannotWriteToLocationException ex) {
- JOptionPane.showMessageDialog(mainPanel, String.format(bundle.getString("GUI.cannotWriteToLocation"), filename));
- if (verboseLog != null) {
- verboseLog.close();
- }
- } catch (Exception ex) {
- attemptToLogException(ex, "GUI.saveFailedIO", "GUI.saveFailedIONoLog", settings.toString(), Long.toString(seed));
- if (verboseLog != null) {
- verboseLog.close();
- }
- }
- if (succeededSave) {
- SwingUtilities.invokeLater(() -> {
- opDialog.setVisible(false);
- // Log?
- verboseLog.close();
- byte[] out = baos.toByteArray();
-
- if (raceMode) {
- JOptionPane.showMessageDialog(frame,
- String.format(bundle.getString("GUI.raceModeCheckValuePopup"),
- finishedCV.get()));
- } else if (batchRandomization && batchRandomizationSettings.shouldGenerateLogFile()) {
- try {
- saveLogFile(filename, out);
- } catch (IOException e) {
- JOptionPane.showMessageDialog(frame,
- bundle.getString("GUI.logSaveFailed"));
- return;
- }
- } else if (!batchRandomization) {
- int response = JOptionPane.showConfirmDialog(frame,
- bundle.getString("GUI.saveLogDialog.text"),
- bundle.getString("GUI.saveLogDialog.title"),
- JOptionPane.YES_NO_OPTION);
- if (response == JOptionPane.YES_OPTION) {
- try {
- saveLogFile(filename, out);
- } catch (IOException e) {
- JOptionPane.showMessageDialog(frame,
- bundle.getString("GUI.logSaveFailed"));
- return;
- }
- JOptionPane.showMessageDialog(frame,
- String.format(bundle.getString("GUI.logSaved"), filename));
- }
- }
- if (presetMode) {
- JOptionPane.showMessageDialog(frame,
- bundle.getString("GUI.randomizationDone"));
- // Done
- if (this.unloadGameOnSuccess) {
- romHandler = null;
- initialState();
- } else {
- reinitializeRomHandler(false);
- }
- } else if (!batchRandomization) {
- // Compile a config string
- try {
- String configString = getCurrentSettings().toString();
- // Show the preset maker
- new PresetMakeDialog(frame, seed, configString);
- } catch (IOException ex) {
- JOptionPane.showMessageDialog(frame,
- bundle.getString("GUI.cantLoadCustomNames"));
- }
-
- // Done
- if (this.unloadGameOnSuccess) {
- romHandler = null;
- initialState();
- } else {
- reinitializeRomHandler(false);
- }
- }
- });
- } else {
- SwingUtilities.invokeLater(() -> {
- opDialog.setVisible(false);
- romHandler = null;
- initialState();
- });
- }
- });
- t.start();
- if (batchRandomization) {
- t.join();
- reinitializeRomHandler(true);
- }
- } catch (Exception ex) {
- attemptToLogException(ex, "GUI.saveFailed", "GUI.saveFailedNoLog", settings.toString(), Long.toString(seed));
- if (verboseLog != null) {
- verboseLog.close();
- }
- }
- }
-
- private void saveLogFile(String filename, byte[] out) throws IOException {
- FileOutputStream fos = new FileOutputStream(filename + ".log");
- fos.write(0xEF);
- fos.write(0xBB);
- fos.write(0xBF);
- fos.write(out);
- fos.close();
- }
-
- private void presetLoader() {
- PresetLoadDialog pld = new PresetLoadDialog(this,frame);
- if (pld.isCompleted()) {
- // Apply it
- long seed = pld.getSeed();
- String config = pld.getConfigString();
- this.romHandler = pld.getROM();
- if (gameUpdates.containsKey(this.romHandler.getROMCode())) {
- this.romHandler.loadGameUpdate(gameUpdates.get(this.romHandler.getROMCode()));
- }
- this.romLoaded();
- Settings settings;
- try {
- settings = Settings.fromString(config);
- settings.tweakForRom(this.romHandler);
- this.restoreStateFromSettings(settings);
- } catch (UnsupportedEncodingException | IllegalArgumentException e) {
- // settings load failed
- e.printStackTrace();
- this.romHandler = null;
- initialState();
- }
- SaveType outputType = askForSaveType();
- romSaveChooser.setSelectedFile(null);
- boolean allowed = false;
- File fh = null;
- if (outputType == SaveType.FILE) {
- romSaveChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
- int returnVal = romSaveChooser.showSaveDialog(frame);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- fh = romSaveChooser.getSelectedFile();
- // Fix or add extension
- List<String> extensions = new ArrayList<>(Arrays.asList("sgb", "gbc", "gba", "nds", "cxi"));
- extensions.remove(this.romHandler.getDefaultExtension());
- fh = FileFunctions.fixFilename(fh, this.romHandler.getDefaultExtension(), extensions);
- allowed = true;
- if (this.romHandler instanceof AbstractDSRomHandler || this.romHandler instanceof Abstract3DSRomHandler) {
- String currentFN = this.romHandler.loadedFilename();
- if (currentFN.equals(fh.getAbsolutePath())) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.cantOverwriteDS"));
- allowed = false;
- }
- }
- } else {
- this.romHandler = null;
- initialState();
- }
- } else if (outputType == SaveType.DIRECTORY) {
- romSaveChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
- int returnVal = romSaveChooser.showSaveDialog(frame);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- fh = romSaveChooser.getSelectedFile();
- allowed = true;
- } else {
- this.romHandler = null;
- initialState();
- }
- }
-
- if (allowed && fh != null) {
- // Apply the seed we were given
- RandomSource.seed(seed);
- presetMode = true;
- performRandomization(fh.getAbsolutePath(), seed, pld.getCustomNames(), outputType == SaveType.DIRECTORY);
- }
- }
-
- }
-
-
- private enum SaveType {
- FILE, DIRECTORY, INVALID
- }
-
- private SaveType askForSaveType() {
- SaveType saveType = SaveType.FILE;
- if (romHandler.hasGameUpdateLoaded()) {
- String text = bundle.getString("GUI.savingWithGameUpdate");
- String url = "https://github.com/Ajarmar/universal-pokemon-randomizer-zx/wiki/Randomizing-the-3DS-games#managing-game-updates";
- showMessageDialogWithLink(text, url);
- saveType = SaveType.DIRECTORY;
- } else if (romHandler.generationOfPokemon() == 6 || romHandler.generationOfPokemon() == 7) {
- Object[] options3DS = {"CXI", "LayeredFS"};
- String question = "Would you like to output your 3DS game as a CXI file or as a LayeredFS directory?";
- JLabel label = new JLabel("<html><a href=\"https://github.com/Ajarmar/universal-pokemon-randomizer-zx/wiki/Randomizing-the-3DS-games#changes-to-saving-a-rom-when-working-with-3ds-games\">For more information, click here.</a>");
- label.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent e) {
- Desktop desktop = java.awt.Desktop.getDesktop();
- try {
- desktop.browse(new URI("https://github.com/Ajarmar/universal-pokemon-randomizer-zx/wiki/Randomizing-the-3DS-games#changes-to-saving-a-rom-when-working-with-3ds-games"));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- });
- label.setCursor(new java.awt.Cursor(Cursor.HAND_CURSOR));
- Object[] messages = {question,label};
- int returnVal3DS = JOptionPane.showOptionDialog(frame,
- messages,
- "3DS Output Choice",
- JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE,
- null,
- options3DS,
- null);
- if (returnVal3DS < 0) {
- saveType = SaveType.INVALID;
- } else {
- saveType = SaveType.values()[returnVal3DS];
- }
- }
- return saveType;
- }
-
- private void applyGameUpdateMenuItemActionPerformed() {
-
- if (romHandler == null) return;
-
- gameUpdateChooser.setSelectedFile(null);
- gameUpdateChooser.setFileFilter(new GameUpdateFilter());
- int returnVal = gameUpdateChooser.showOpenDialog(frame);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- File fh = gameUpdateChooser.getSelectedFile();
-
- // On the 3DS, the update has the same title ID as the base game, save for the 8th character,
- // which is 'E' instead of '0'. We can use this to detect if the update matches the game.
- String actualUpdateTitleId = Abstract3DSRomHandler.getTitleIdFromFile(fh.getAbsolutePath());
- if (actualUpdateTitleId == null) {
- // Error: couldn't find a title ID in the update
- JOptionPane.showMessageDialog(frame, String.format(bundle.getString("GUI.invalidGameUpdate"), fh.getName()));
- return;
- }
- Abstract3DSRomHandler ctrRomHandler = (Abstract3DSRomHandler) romHandler;
- String baseGameTitleId = ctrRomHandler.getTitleIdFromLoadedROM();
- char[] baseGameTitleIdChars = baseGameTitleId.toCharArray();
- baseGameTitleIdChars[7] = 'E';
- String expectedUpdateTitleId = String.valueOf(baseGameTitleIdChars);
- if (actualUpdateTitleId.equals(expectedUpdateTitleId)) {
- try {
- romHandler.loadGameUpdate(fh.getAbsolutePath());
- } catch (EncryptedROMException ex) {
- JOptionPane.showMessageDialog(mainPanel,
- String.format(bundle.getString("GUI.encryptedRom"), fh.getAbsolutePath()));
- return;
- }
- gameUpdates.put(romHandler.getROMCode(), fh.getAbsolutePath());
- setRomNameLabel();
- String text = String.format(bundle.getString("GUI.gameUpdateApplied"), romHandler.getROMName());
- String url = "https://github.com/Ajarmar/universal-pokemon-randomizer-zx/wiki/Randomizing-the-3DS-games#3ds-game-updates";
- showMessageDialogWithLink(text, url);
- } else {
- // Error: update is not for the correct game
- JOptionPane.showMessageDialog(frame, String.format(bundle.getString("GUI.nonMatchingGameUpdate"), fh.getName(), romHandler.getROMName()));
- }
- }
- }
-
- private void loadGetSettingsMenuItemActionPerformed() {
-
- if (romHandler == null) return;
-
- String currentSettingsString = "Current Settings String:";
- JTextField currentSettingsStringField = new JTextField();
- currentSettingsStringField.setEditable(false);
- try {
- String theSettingsString = Version.VERSION + getCurrentSettings().toString();
- currentSettingsStringField.setColumns(Settings.LENGTH_OF_SETTINGS_DATA * 2);
- currentSettingsStringField.setText(theSettingsString);
- } catch (IOException e) {
- e.printStackTrace();
- }
- String loadSettingsString = "Load Settings String:";
- JTextField loadSettingsStringField = new JTextField();
- Object[] messages = {currentSettingsString,currentSettingsStringField,loadSettingsString,loadSettingsStringField};
- Object[] options = {"Load","Cancel"};
- int choice = JOptionPane.showOptionDialog(
- frame,
- messages,
- "Get/Load Settings String",
- JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE,
- null,
- options,
- null
- );
- if (choice == 0) {
- String configString = loadSettingsStringField.getText().trim();
- if (configString.length() > 0) {
- if (configString.length() < 3) {
- JOptionPane.showMessageDialog(frame,bundle.getString("GUI.invalidSettingsString"));
- } else {
- try {
- int settingsStringVersionNumber = Integer.parseInt(configString.substring(0, 3));
- if (settingsStringVersionNumber < Version.VERSION) {
- JOptionPane.showMessageDialog(frame,bundle.getString("GUI.settingsStringOlder"));
- String updatedSettingsString = new SettingsUpdater().update(settingsStringVersionNumber, configString.substring(3));
- Settings settings = Settings.fromString(updatedSettingsString);
- settings.tweakForRom(this.romHandler);
- restoreStateFromSettings(settings);
- JOptionPane.showMessageDialog(frame,bundle.getString("GUI.settingsStringLoaded"));
- } else if (settingsStringVersionNumber > Version.VERSION) {
- JOptionPane.showMessageDialog(frame,bundle.getString("GUI.settingsStringTooNew"));
- } else {
- Settings settings = Settings.fromString(configString.substring(3));
- settings.tweakForRom(this.romHandler);
- restoreStateFromSettings(settings);
- JOptionPane.showMessageDialog(frame,bundle.getString("GUI.settingsStringLoaded"));
- }
- } catch (UnsupportedEncodingException | IllegalArgumentException ex) {
- JOptionPane.showMessageDialog(frame,bundle.getString("GUI.invalidSettingsString"));
- }
- }
-
- }
- }
- }
-
- private void keepOrUnloadGameAfterRandomizingMenuItemActionPerformed() {
- this.unloadGameOnSuccess = !this.unloadGameOnSuccess;
- if (this.unloadGameOnSuccess) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.unloadGameAfterRandomizing"));
- keepOrUnloadGameAfterRandomizingMenuItem.setText(bundle.getString("GUI.keepGameLoadedAfterRandomizingMenuItem.text"));
- } else {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.keepGameLoadedAfterRandomizing"));
- keepOrUnloadGameAfterRandomizingMenuItem.setText(bundle.getString("GUI.unloadGameAfterRandomizingMenuItem.text"));
- }
- }
-
- private void showMessageDialogWithLink(String text, String url) {
- JLabel label = new JLabel("<html><a href=\"" + url + "\">For more information, click here.</a>");
- label.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent e) {
- Desktop desktop = java.awt.Desktop.getDesktop();
- try {
- desktop.browse(new URI(url));
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- });
- label.setCursor(new java.awt.Cursor(Cursor.HAND_CURSOR));
- Object[] messages = {text,label};
- JOptionPane.showMessageDialog(frame, messages);
- }
-
- private void batchRandomizationSettingsDialog() {
- BatchRandomizationSettingsDialog dlg = new BatchRandomizationSettingsDialog(frame, batchRandomizationSettings);
- batchRandomizationSettings = dlg.getCurrentSettings();
- }
-
- // This is only intended to be used with the "Keep Game Loaded After Randomizing" setting or between randomization
- // iterations when batch randomization is enabled. It assumes that the game has already been loaded once, and we just need
- // to reload the same game to reinitialize the RomHandler. Don't use this for other purposes unless you know what
- // you're doing.
- private void reinitializeRomHandler(boolean batchRandomization) {
- String currentFN = this.romHandler.loadedFilename();
- for (RomHandler.Factory rhf : checkHandlers) {
- if (rhf.isLoadable(currentFN)) {
- this.romHandler = rhf.create(RandomSource.instance());
- opDialog = new OperationDialog(bundle.getString("GUI.loadingText"), frame, true);
- Thread t = new Thread(() -> {
- SwingUtilities.invokeLater(() -> opDialog.setVisible(!batchRandomization));
- try {
- this.romHandler.loadRom(currentFN);
- if (gameUpdates.containsKey(this.romHandler.getROMCode())) {
- this.romHandler.loadGameUpdate(gameUpdates.get(this.romHandler.getROMCode()));
- }
- } catch (Exception ex) {
- attemptToLogException(ex, "GUI.loadFailed", "GUI.loadFailedNoLog", null, null);
- }
- SwingUtilities.invokeLater(() -> {
- this.opDialog.setVisible(false);
- });
- });
- t.start();
- if (batchRandomization) {
- try {
- t.join();
- } catch(InterruptedException ex) {
- attemptToLogException(ex, "GUI.loadFailed", "GUI.loadFailedNoLog", null, null);
- }
- }
- return;
- }
- }
- }
-
- private void restoreStateFromSettings(Settings settings) {
-
- limitPokemonCheckBox.setSelected(settings.isLimitPokemon());
- currentRestrictions = settings.getCurrentRestrictions();
- if (currentRestrictions != null) {
- currentRestrictions.limitToGen(romHandler.generationOfPokemon());
- }
- noIrregularAltFormesCheckBox.setSelected(settings.isBanIrregularAltFormes());
- raceModeCheckBox.setSelected(settings.isRaceMode());
-
- peChangeImpossibleEvosCheckBox.setSelected(settings.isChangeImpossibleEvolutions());
- mdUpdateMovesCheckBox.setSelected(settings.isUpdateMoves());
- mdUpdateComboBox.setSelectedIndex(Math.max(0,settings.getUpdateMovesToGeneration() - (romHandler.generationOfPokemon()+1)));
- tpRandomizeTrainerNamesCheckBox.setSelected(settings.isRandomizeTrainerNames());
- tpRandomizeTrainerClassNamesCheckBox.setSelected(settings.isRandomizeTrainerClassNames());
- ptIsDualTypeCheckBox.setSelected(settings.isDualTypeOnly());
-
- pbsRandomRadioButton.setSelected(settings.getBaseStatisticsMod() == Settings.BaseStatisticsMod.RANDOM);
- pbsShuffleRadioButton.setSelected(settings.getBaseStatisticsMod() == Settings.BaseStatisticsMod.SHUFFLE);
- pbsUnchangedRadioButton.setSelected(settings.getBaseStatisticsMod() == Settings.BaseStatisticsMod.UNCHANGED);
- pbsFollowEvolutionsCheckBox.setSelected(settings.isBaseStatsFollowEvolutions());
- pbsUpdateBaseStatsCheckBox.setSelected(settings.isUpdateBaseStats());
- pbsUpdateComboBox.setSelectedIndex(Math.max(0,settings.getUpdateBaseStatsToGeneration() - (Math.max(6,romHandler.generationOfPokemon()+1))));
- pbsStandardizeEXPCurvesCheckBox.setSelected(settings.isStandardizeEXPCurves());
- pbsLegendariesSlowRadioButton.setSelected(settings.getExpCurveMod() == Settings.ExpCurveMod.LEGENDARIES);
- pbsStrongLegendariesSlowRadioButton.setSelected(settings.getExpCurveMod() == Settings.ExpCurveMod.STRONG_LEGENDARIES);
- pbsAllMediumFastRadioButton.setSelected(settings.getExpCurveMod() == Settings.ExpCurveMod.ALL);
- ExpCurve[] expCurves = getEXPCurvesForGeneration(romHandler.generationOfPokemon());
- int index = 0;
- for (int i = 0; i < expCurves.length; i++) {
- if (expCurves[i] == settings.getSelectedEXPCurve()) {
- index = i;
- }
- }
- pbsEXPCurveComboBox.setSelectedIndex(index);
- pbsFollowMegaEvosCheckBox.setSelected(settings.isBaseStatsFollowMegaEvolutions());
- pbsAssignEvoStatsRandomlyCheckBox.setSelected(settings.isAssignEvoStatsRandomly());
-
- paUnchangedRadioButton.setSelected(settings.getAbilitiesMod() == Settings.AbilitiesMod.UNCHANGED);
- paRandomRadioButton.setSelected(settings.getAbilitiesMod() == Settings.AbilitiesMod.RANDOMIZE);
- paAllowWonderGuardCheckBox.setSelected(settings.isAllowWonderGuard());
- paFollowEvolutionsCheckBox.setSelected(settings.isAbilitiesFollowEvolutions());
- paTrappingAbilitiesCheckBox.setSelected(settings.isBanTrappingAbilities());
- paNegativeAbilitiesCheckBox.setSelected(settings.isBanNegativeAbilities());
- paBadAbilitiesCheckBox.setSelected(settings.isBanBadAbilities());
- paFollowMegaEvosCheckBox.setSelected(settings.isAbilitiesFollowMegaEvolutions());
- paWeighDuplicatesTogetherCheckBox.setSelected(settings.isWeighDuplicateAbilitiesTogether());
- paEnsureTwoAbilitiesCheckbox.setSelected(settings.isEnsureTwoAbilities());
-
- ptRandomFollowEvolutionsRadioButton.setSelected(settings.getTypesMod() == Settings.TypesMod.RANDOM_FOLLOW_EVOLUTIONS);
- ptRandomCompletelyRadioButton.setSelected(settings.getTypesMod() == Settings.TypesMod.COMPLETELY_RANDOM);
- ptUnchangedRadioButton.setSelected(settings.getTypesMod() == Settings.TypesMod.UNCHANGED);
- ptFollowMegaEvosCheckBox.setSelected(settings.isTypesFollowMegaEvolutions());
- pmsNoGameBreakingMovesCheckBox.setSelected(settings.doBlockBrokenMoves());
-
- peMakeEvolutionsEasierCheckBox.setSelected(settings.isMakeEvolutionsEasier());
- peRemoveTimeBasedEvolutionsCheckBox.setSelected(settings.isRemoveTimeBasedEvolutions());
-
- spCustomRadioButton.setSelected(settings.getStartersMod() == Settings.StartersMod.CUSTOM);
- spRandomCompletelyRadioButton.setSelected(settings.getStartersMod() == Settings.StartersMod.COMPLETELY_RANDOM);
- spUnchangedRadioButton.setSelected(settings.getStartersMod() == Settings.StartersMod.UNCHANGED);
- spRandomTwoEvosRadioButton.setSelected(settings.getStartersMod() == Settings.StartersMod.RANDOM_WITH_TWO_EVOLUTIONS);
- spRandomizeStarterHeldItemsCheckBox.setSelected(settings.isRandomizeStartersHeldItems());
- spBanBadItemsCheckBox.setSelected(settings.isBanBadRandomStarterHeldItems());
- spAllowAltFormesCheckBox.setSelected(settings.isAllowStarterAltFormes());
-
- int[] customStarters = settings.getCustomStarters();
- spComboBox1.setSelectedIndex(customStarters[0] - 1);
- spComboBox2.setSelectedIndex(customStarters[1] - 1);
- spComboBox3.setSelectedIndex(customStarters[2] - 1);
-
- peUnchangedRadioButton.setSelected(settings.getEvolutionsMod() == Settings.EvolutionsMod.UNCHANGED);
- peRandomRadioButton.setSelected(settings.getEvolutionsMod() == Settings.EvolutionsMod.RANDOM);
- peRandomEveryLevelRadioButton.setSelected(settings.getEvolutionsMod() == Settings.EvolutionsMod.RANDOM_EVERY_LEVEL);
- peSimilarStrengthCheckBox.setSelected(settings.isEvosSimilarStrength());
- peSameTypingCheckBox.setSelected(settings.isEvosSameTyping());
- peLimitEvolutionsToThreeCheckBox.setSelected(settings.isEvosMaxThreeStages());
- peForceChangeCheckBox.setSelected(settings.isEvosForceChange());
- peAllowAltFormesCheckBox.setSelected(settings.isEvosAllowAltFormes());
-
- mdRandomizeMoveAccuracyCheckBox.setSelected(settings.isRandomizeMoveAccuracies());
- mdRandomizeMoveCategoryCheckBox.setSelected(settings.isRandomizeMoveCategory());
- mdRandomizeMovePowerCheckBox.setSelected(settings.isRandomizeMovePowers());
- mdRandomizeMovePPCheckBox.setSelected(settings.isRandomizeMovePPs());
- mdRandomizeMoveTypesCheckBox.setSelected(settings.isRandomizeMoveTypes());
-
- pmsRandomCompletelyRadioButton.setSelected(settings.getMovesetsMod() == Settings.MovesetsMod.COMPLETELY_RANDOM);
- pmsRandomPreferringSameTypeRadioButton.setSelected(settings.getMovesetsMod() == Settings.MovesetsMod.RANDOM_PREFER_SAME_TYPE);
- pmsUnchangedRadioButton.setSelected(settings.getMovesetsMod() == Settings.MovesetsMod.UNCHANGED);
- pmsMetronomeOnlyModeRadioButton.setSelected(settings.getMovesetsMod() == Settings.MovesetsMod.METRONOME_ONLY);
- pmsGuaranteedLevel1MovesCheckBox.setSelected(settings.isStartWithGuaranteedMoves());
- pmsGuaranteedLevel1MovesSlider.setValue(settings.getGuaranteedMoveCount());
- pmsReorderDamagingMovesCheckBox.setSelected(settings.isReorderDamagingMoves());
- pmsForceGoodDamagingCheckBox.setSelected(settings.isMovesetsForceGoodDamaging());
- pmsForceGoodDamagingSlider.setValue(settings.getMovesetsGoodDamagingPercent());
- pmsNoGameBreakingMovesCheckBox.setSelected(settings.isBlockBrokenMovesetMoves());
- pmsEvolutionMovesCheckBox.setSelected(settings.isEvolutionMovesForAll());
-
- tpSimilarStrengthCheckBox.setSelected(settings.isTrainersUsePokemonOfSimilarStrength());
- tpComboBox.setSelectedItem(trainerSettings.get(settings.getTrainersMod().ordinal()));
- tpRivalCarriesStarterCheckBox.setSelected(settings.isRivalCarriesStarterThroughout());
- tpWeightTypesCheckBox.setSelected(settings.isTrainersMatchTypingDistribution());
- tpDontUseLegendariesCheckBox.setSelected(settings.isTrainersBlockLegendaries());
- tpNoEarlyWonderGuardCheckBox.setSelected(settings.isTrainersBlockEarlyWonderGuard());
- tpForceFullyEvolvedAtCheckBox.setSelected(settings.isTrainersForceFullyEvolved());
- tpForceFullyEvolvedAtSlider.setValue(settings.getTrainersForceFullyEvolvedLevel());
- tpPercentageLevelModifierCheckBox.setSelected(settings.isTrainersLevelModified());
- tpPercentageLevelModifierSlider.setValue(settings.getTrainersLevelModifier());
- tpEliteFourUniquePokemonCheckBox.setSelected(settings.getEliteFourUniquePokemonNumber() > 0);
- tpEliteFourUniquePokemonSpinner.setValue(settings.getEliteFourUniquePokemonNumber() > 0 ? settings.getEliteFourUniquePokemonNumber() : 1);
- tpAllowAlternateFormesCheckBox.setSelected(settings.isAllowTrainerAlternateFormes());
- tpSwapMegaEvosCheckBox.setSelected(settings.isSwapTrainerMegaEvos());
- tpDoubleBattleModeCheckBox.setSelected(settings.isDoubleBattleMode());
- tpBossTrainersCheckBox.setSelected(settings.getAdditionalBossTrainerPokemon() > 0);
- tpBossTrainersSpinner.setValue(settings.getAdditionalBossTrainerPokemon() > 0 ? settings.getAdditionalBossTrainerPokemon() : 1);
- tpImportantTrainersCheckBox.setSelected(settings.getAdditionalImportantTrainerPokemon() > 0);
- tpImportantTrainersSpinner.setValue(settings.getAdditionalImportantTrainerPokemon() > 0 ? settings.getAdditionalImportantTrainerPokemon() : 1);
- tpRegularTrainersCheckBox.setSelected(settings.getAdditionalRegularTrainerPokemon() > 0);
- tpRegularTrainersSpinner.setValue(settings.getAdditionalRegularTrainerPokemon() > 0 ? settings.getAdditionalRegularTrainerPokemon() : 1);
- tpBossTrainersItemsCheckBox.setSelected(settings.isRandomizeHeldItemsForBossTrainerPokemon());
- tpImportantTrainersItemsCheckBox.setSelected(settings.isRandomizeHeldItemsForImportantTrainerPokemon());
- tpRegularTrainersItemsCheckBox.setSelected(settings.isRandomizeHeldItemsForRegularTrainerPokemon());
- tpConsumableItemsOnlyCheckBox.setSelected(settings.isConsumableItemsOnlyForTrainers());
- tpSensibleItemsCheckBox.setSelected(settings.isSensibleItemsOnlyForTrainers());
- tpHighestLevelGetsItemCheckBox.setSelected(settings.isHighestLevelGetsItemsForTrainers());
-
- tpRandomShinyTrainerPokemonCheckBox.setSelected(settings.isShinyChance());
- tpBetterMovesetsCheckBox.setSelected(settings.isBetterTrainerMovesets());
-
- totpUnchangedRadioButton.setSelected(settings.getTotemPokemonMod() == Settings.TotemPokemonMod.UNCHANGED);
- totpRandomRadioButton.setSelected(settings.getTotemPokemonMod() == Settings.TotemPokemonMod.RANDOM);
- totpRandomSimilarStrengthRadioButton.setSelected(settings.getTotemPokemonMod() == Settings.TotemPokemonMod.SIMILAR_STRENGTH);
- totpAllyUnchangedRadioButton.setSelected(settings.getAllyPokemonMod() == Settings.AllyPokemonMod.UNCHANGED);
- totpAllyRandomRadioButton.setSelected(settings.getAllyPokemonMod() == Settings.AllyPokemonMod.RANDOM);
- totpAllyRandomSimilarStrengthRadioButton.setSelected(settings.getAllyPokemonMod() == Settings.AllyPokemonMod.SIMILAR_STRENGTH);
- totpAuraUnchangedRadioButton.setSelected(settings.getAuraMod() == Settings.AuraMod.UNCHANGED);
- totpAuraRandomRadioButton.setSelected(settings.getAuraMod() == Settings.AuraMod.RANDOM);
- totpAuraRandomSameStrengthRadioButton.setSelected(settings.getAuraMod() == Settings.AuraMod.SAME_STRENGTH);
- totpRandomizeHeldItemsCheckBox.setSelected(settings.isRandomizeTotemHeldItems());
- totpAllowAltFormesCheckBox.setSelected(settings.isAllowTotemAltFormes());
- totpPercentageLevelModifierCheckBox.setSelected(settings.isTotemLevelsModified());
- totpPercentageLevelModifierSlider.setValue(settings.getTotemLevelModifier());
-
- wpARCatchEmAllModeRadioButton
- .setSelected(settings.getWildPokemonRestrictionMod() == Settings.WildPokemonRestrictionMod.CATCH_EM_ALL);
- wpArea1To1RadioButton.setSelected(settings.getWildPokemonMod() == Settings.WildPokemonMod.AREA_MAPPING);
- wpARNoneRadioButton.setSelected(settings.getWildPokemonRestrictionMod() == Settings.WildPokemonRestrictionMod.NONE);
- wpARTypeThemeAreasRadioButton
- .setSelected(settings.getWildPokemonRestrictionMod() == Settings.WildPokemonRestrictionMod.TYPE_THEME_AREAS);
- wpGlobal1To1RadioButton.setSelected(settings.getWildPokemonMod() == Settings.WildPokemonMod.GLOBAL_MAPPING);
- wpRandomRadioButton.setSelected(settings.getWildPokemonMod() == Settings.WildPokemonMod.RANDOM);
- wpUnchangedRadioButton.setSelected(settings.getWildPokemonMod() == Settings.WildPokemonMod.UNCHANGED);
- wpUseTimeBasedEncountersCheckBox.setSelected(settings.isUseTimeBasedEncounters());
-
- wpSetMinimumCatchRateCheckBox.setSelected(settings.isUseMinimumCatchRate());
- wpSetMinimumCatchRateSlider.setValue(settings.getMinimumCatchRateLevel());
- wpDontUseLegendariesCheckBox.setSelected(settings.isBlockWildLegendaries());
- wpARSimilarStrengthRadioButton
- .setSelected(settings.getWildPokemonRestrictionMod() == Settings.WildPokemonRestrictionMod.SIMILAR_STRENGTH);
- wpRandomizeHeldItemsCheckBox.setSelected(settings.isRandomizeWildPokemonHeldItems());
- wpBanBadItemsCheckBox.setSelected(settings.isBanBadRandomWildPokemonHeldItems());
- wpBalanceShakingGrassPokemonCheckBox.setSelected(settings.isBalanceShakingGrass());
- wpPercentageLevelModifierCheckBox.setSelected(settings.isWildLevelsModified());
- wpPercentageLevelModifierSlider.setValue(settings.getWildLevelModifier());
- wpAllowAltFormesCheckBox.setSelected(settings.isAllowWildAltFormes());
-
- stpUnchangedRadioButton.setSelected(settings.getStaticPokemonMod() == Settings.StaticPokemonMod.UNCHANGED);
- stpSwapLegendariesSwapStandardsRadioButton.setSelected(settings.getStaticPokemonMod() == Settings.StaticPokemonMod.RANDOM_MATCHING);
- stpRandomCompletelyRadioButton
- .setSelected(settings.getStaticPokemonMod() == Settings.StaticPokemonMod.COMPLETELY_RANDOM);
- stpRandomSimilarStrengthRadioButton
- .setSelected(settings.getStaticPokemonMod() == Settings.StaticPokemonMod.SIMILAR_STRENGTH);
- stpLimitMainGameLegendariesCheckBox.setSelected(settings.isLimitMainGameLegendaries());
- stpRandomize600BSTCheckBox.setSelected(settings.isLimit600());
- stpAllowAltFormesCheckBox.setSelected(settings.isAllowStaticAltFormes());
- stpSwapMegaEvosCheckBox.setSelected(settings.isSwapStaticMegaEvos());
- stpPercentageLevelModifierCheckBox.setSelected(settings.isStaticLevelModified());
- stpPercentageLevelModifierSlider.setValue(settings.getStaticLevelModifier());
- stpFixMusicCheckBox.setSelected(settings.isCorrectStaticMusic());
-
- thcRandomCompletelyRadioButton
- .setSelected(settings.getTmsHmsCompatibilityMod() == Settings.TMsHMsCompatibilityMod.COMPLETELY_RANDOM);
- thcRandomPreferSameTypeRadioButton
- .setSelected(settings.getTmsHmsCompatibilityMod() == Settings.TMsHMsCompatibilityMod.RANDOM_PREFER_TYPE);
- thcUnchangedRadioButton
- .setSelected(settings.getTmsHmsCompatibilityMod() == Settings.TMsHMsCompatibilityMod.UNCHANGED);
- tmRandomRadioButton.setSelected(settings.getTmsMod() == Settings.TMsMod.RANDOM);
- tmUnchangedRadioButton.setSelected(settings.getTmsMod() == Settings.TMsMod.UNCHANGED);
- tmLevelupMoveSanityCheckBox.setSelected(settings.isTmLevelUpMoveSanity());
- tmKeepFieldMoveTMsCheckBox.setSelected(settings.isKeepFieldMoveTMs());
- thcFullCompatibilityRadioButton.setSelected(settings.getTmsHmsCompatibilityMod() == Settings.TMsHMsCompatibilityMod.FULL);
- tmFullHMCompatibilityCheckBox.setSelected(settings.isFullHMCompat());
- tmForceGoodDamagingCheckBox.setSelected(settings.isTmsForceGoodDamaging());
- tmForceGoodDamagingSlider.setValue(settings.getTmsGoodDamagingPercent());
- tmNoGameBreakingMovesCheckBox.setSelected(settings.isBlockBrokenTMMoves());
- tmFollowEvolutionsCheckBox.setSelected(settings.isTmsFollowEvolutions());
-
- mtcRandomCompletelyRadioButton
- .setSelected(settings.getMoveTutorsCompatibilityMod() == Settings.MoveTutorsCompatibilityMod.COMPLETELY_RANDOM);
- mtcRandomPreferSameTypeRadioButton
- .setSelected(settings.getMoveTutorsCompatibilityMod() == Settings.MoveTutorsCompatibilityMod.RANDOM_PREFER_TYPE);
- mtcUnchangedRadioButton
- .setSelected(settings.getMoveTutorsCompatibilityMod() == Settings.MoveTutorsCompatibilityMod.UNCHANGED);
- mtRandomRadioButton.setSelected(settings.getMoveTutorMovesMod() == Settings.MoveTutorMovesMod.RANDOM);
- mtUnchangedRadioButton.setSelected(settings.getMoveTutorMovesMod() == Settings.MoveTutorMovesMod.UNCHANGED);
- mtLevelupMoveSanityCheckBox.setSelected(settings.isTutorLevelUpMoveSanity());
- mtKeepFieldMoveTutorsCheckBox.setSelected(settings.isKeepFieldMoveTutors());
- mtcFullCompatibilityRadioButton
- .setSelected(settings.getMoveTutorsCompatibilityMod() == Settings.MoveTutorsCompatibilityMod.FULL);
- mtForceGoodDamagingCheckBox.setSelected(settings.isTutorsForceGoodDamaging());
- mtForceGoodDamagingSlider.setValue(settings.getTutorsGoodDamagingPercent());
- mtNoGameBreakingMovesCheckBox.setSelected(settings.isBlockBrokenTutorMoves());
- mtFollowEvolutionsCheckBox.setSelected(settings.isTutorFollowEvolutions());
-
- igtRandomizeBothRequestedGivenRadioButton
- .setSelected(settings.getInGameTradesMod() == Settings.InGameTradesMod.RANDOMIZE_GIVEN_AND_REQUESTED);
- igtRandomizeGivenPokemonOnlyRadioButton.setSelected(settings.getInGameTradesMod() == Settings.InGameTradesMod.RANDOMIZE_GIVEN);
- igtRandomizeItemsCheckBox.setSelected(settings.isRandomizeInGameTradesItems());
- igtRandomizeIVsCheckBox.setSelected(settings.isRandomizeInGameTradesIVs());
- igtRandomizeNicknamesCheckBox.setSelected(settings.isRandomizeInGameTradesNicknames());
- igtRandomizeOTsCheckBox.setSelected(settings.isRandomizeInGameTradesOTs());
- igtUnchangedRadioButton.setSelected(settings.getInGameTradesMod() == Settings.InGameTradesMod.UNCHANGED);
-
- fiRandomRadioButton.setSelected(settings.getFieldItemsMod() == Settings.FieldItemsMod.RANDOM);
- fiRandomEvenDistributionRadioButton.setSelected(settings.getFieldItemsMod() == Settings.FieldItemsMod.RANDOM_EVEN);
- fiShuffleRadioButton.setSelected(settings.getFieldItemsMod() == Settings.FieldItemsMod.SHUFFLE);
- fiUnchangedRadioButton.setSelected(settings.getFieldItemsMod() == Settings.FieldItemsMod.UNCHANGED);
- fiBanBadItemsCheckBox.setSelected(settings.isBanBadRandomFieldItems());
-
- shRandomRadioButton.setSelected(settings.getShopItemsMod() == Settings.ShopItemsMod.RANDOM);
- shShuffleRadioButton.setSelected(settings.getShopItemsMod() == Settings.ShopItemsMod.SHUFFLE);
- shUnchangedRadioButton.setSelected(settings.getShopItemsMod() == Settings.ShopItemsMod.UNCHANGED);
- shBanBadItemsCheckBox.setSelected(settings.isBanBadRandomShopItems());
- shBanRegularShopItemsCheckBox.setSelected(settings.isBanRegularShopItems());
- shBanOverpoweredShopItemsCheckBox.setSelected(settings.isBanOPShopItems());
- shBalanceShopItemPricesCheckBox.setSelected(settings.isBalanceShopPrices());
- shGuaranteeEvolutionItemsCheckBox.setSelected(settings.isGuaranteeEvolutionItems());
- shGuaranteeXItemsCheckBox.setSelected(settings.isGuaranteeXItems());
-
- puUnchangedRadioButton.setSelected(settings.getPickupItemsMod() == Settings.PickupItemsMod.UNCHANGED);
- puRandomRadioButton.setSelected(settings.getPickupItemsMod() == Settings.PickupItemsMod.RANDOM);
- puBanBadItemsCheckBox.setSelected(settings.isBanBadRandomPickupItems());
-
- int mtsSelected = settings.getCurrentMiscTweaks();
- int mtCount = MiscTweak.allTweaks.size();
-
- for (int mti = 0; mti < mtCount; mti++) {
- MiscTweak mt = MiscTweak.allTweaks.get(mti);
- JCheckBox mtCB = tweakCheckBoxes.get(mti);
- mtCB.setSelected((mtsSelected & mt.getValue()) != 0);
- }
-
- this.enableOrDisableSubControls();
- }
-
- private Settings createSettingsFromState(CustomNamesSet customNames) {
- Settings settings = new Settings();
- settings.setRomName(this.romHandler.getROMName());
-
- settings.setLimitPokemon(limitPokemonCheckBox.isSelected() && limitPokemonCheckBox.isVisible());
- settings.setCurrentRestrictions(currentRestrictions);
- settings.setBanIrregularAltFormes(noIrregularAltFormesCheckBox.isSelected() && noIrregularAltFormesCheckBox.isVisible());
- settings.setRaceMode(raceModeCheckBox.isSelected());
-
- settings.setChangeImpossibleEvolutions(peChangeImpossibleEvosCheckBox.isSelected() && peChangeImpossibleEvosCheckBox.isVisible());
- settings.setUpdateMoves(mdUpdateMovesCheckBox.isSelected() && mdUpdateMovesCheckBox.isVisible());
- settings.setUpdateMovesToGeneration(mdUpdateComboBox.getSelectedIndex() + (romHandler.generationOfPokemon()+1));
- settings.setRandomizeTrainerNames(tpRandomizeTrainerNamesCheckBox.isSelected());
- settings.setRandomizeTrainerClassNames(tpRandomizeTrainerClassNamesCheckBox.isSelected());
-
- settings.setBaseStatisticsMod(pbsUnchangedRadioButton.isSelected(), pbsShuffleRadioButton.isSelected(),
- pbsRandomRadioButton.isSelected());
- settings.setBaseStatsFollowEvolutions(pbsFollowEvolutionsCheckBox.isSelected());
- settings.setUpdateBaseStats(pbsUpdateBaseStatsCheckBox.isSelected() && pbsUpdateBaseStatsCheckBox.isVisible());
- settings.setUpdateBaseStatsToGeneration(pbsUpdateComboBox.getSelectedIndex() + (Math.max(6,romHandler.generationOfPokemon()+1)));
- settings.setStandardizeEXPCurves(pbsStandardizeEXPCurvesCheckBox.isSelected());
- settings.setExpCurveMod(pbsLegendariesSlowRadioButton.isSelected(), pbsStrongLegendariesSlowRadioButton.isSelected(),
- pbsAllMediumFastRadioButton.isSelected());
- ExpCurve[] expCurves = getEXPCurvesForGeneration(romHandler.generationOfPokemon());
- settings.setSelectedEXPCurve(expCurves[pbsEXPCurveComboBox.getSelectedIndex()]);
- settings.setBaseStatsFollowMegaEvolutions(pbsFollowMegaEvosCheckBox.isSelected() && pbsFollowMegaEvosCheckBox.isVisible());
- settings.setAssignEvoStatsRandomly(pbsAssignEvoStatsRandomlyCheckBox.isSelected() && pbsAssignEvoStatsRandomlyCheckBox.isVisible());
-
- settings.setAbilitiesMod(paUnchangedRadioButton.isSelected(), paRandomRadioButton.isSelected());
- settings.setAllowWonderGuard(paAllowWonderGuardCheckBox.isSelected());
- settings.setAbilitiesFollowEvolutions(paFollowEvolutionsCheckBox.isSelected());
- settings.setBanTrappingAbilities(paTrappingAbilitiesCheckBox.isSelected());
- settings.setBanNegativeAbilities(paNegativeAbilitiesCheckBox.isSelected());
- settings.setBanBadAbilities(paBadAbilitiesCheckBox.isSelected());
- settings.setAbilitiesFollowMegaEvolutions(paFollowMegaEvosCheckBox.isSelected());
- settings.setWeighDuplicateAbilitiesTogether(paWeighDuplicatesTogetherCheckBox.isSelected());
- settings.setEnsureTwoAbilities(paEnsureTwoAbilitiesCheckbox.isSelected());
-
- settings.setTypesMod(ptUnchangedRadioButton.isSelected(), ptRandomFollowEvolutionsRadioButton.isSelected(),
- ptRandomCompletelyRadioButton.isSelected());
- settings.setTypesFollowMegaEvolutions(ptFollowMegaEvosCheckBox.isSelected() && ptFollowMegaEvosCheckBox.isVisible());
- settings.setBlockBrokenMovesetMoves(pmsNoGameBreakingMovesCheckBox.isSelected());
- settings.setDualTypeOnly(ptIsDualTypeCheckBox.isSelected());
-
- settings.setMakeEvolutionsEasier(peMakeEvolutionsEasierCheckBox.isSelected());
- settings.setRemoveTimeBasedEvolutions(peRemoveTimeBasedEvolutionsCheckBox.isSelected());
-
- settings.setStartersMod(spUnchangedRadioButton.isSelected(), spCustomRadioButton.isSelected(), spRandomCompletelyRadioButton.isSelected(),
- spRandomTwoEvosRadioButton.isSelected());
- settings.setRandomizeStartersHeldItems(spRandomizeStarterHeldItemsCheckBox.isSelected() && spRandomizeStarterHeldItemsCheckBox.isVisible());
- settings.setBanBadRandomStarterHeldItems(spBanBadItemsCheckBox.isSelected() && spBanBadItemsCheckBox.isVisible());
- settings.setAllowStarterAltFormes(spAllowAltFormesCheckBox.isSelected() && spAllowAltFormesCheckBox.isVisible());
-
- int[] customStarters = new int[] { spComboBox1.getSelectedIndex() + 1,
- spComboBox2.getSelectedIndex() + 1, spComboBox3.getSelectedIndex() + 1 };
- settings.setCustomStarters(customStarters);
-
- settings.setEvolutionsMod(peUnchangedRadioButton.isSelected(), peRandomRadioButton.isSelected(), peRandomEveryLevelRadioButton.isSelected());
- settings.setEvosSimilarStrength(peSimilarStrengthCheckBox.isSelected());
- settings.setEvosSameTyping(peSameTypingCheckBox.isSelected());
- settings.setEvosMaxThreeStages(peLimitEvolutionsToThreeCheckBox.isSelected());
- settings.setEvosForceChange(peForceChangeCheckBox.isSelected());
- settings.setEvosAllowAltFormes(peAllowAltFormesCheckBox.isSelected() && peAllowAltFormesCheckBox.isVisible());
-
- settings.setRandomizeMoveAccuracies(mdRandomizeMoveAccuracyCheckBox.isSelected());
- settings.setRandomizeMoveCategory(mdRandomizeMoveCategoryCheckBox.isSelected());
- settings.setRandomizeMovePowers(mdRandomizeMovePowerCheckBox.isSelected());
- settings.setRandomizeMovePPs(mdRandomizeMovePPCheckBox.isSelected());
- settings.setRandomizeMoveTypes(mdRandomizeMoveTypesCheckBox.isSelected());
-
- settings.setMovesetsMod(pmsUnchangedRadioButton.isSelected(), pmsRandomPreferringSameTypeRadioButton.isSelected(),
- pmsRandomCompletelyRadioButton.isSelected(), pmsMetronomeOnlyModeRadioButton.isSelected());
- settings.setStartWithGuaranteedMoves(pmsGuaranteedLevel1MovesCheckBox.isSelected() && pmsGuaranteedLevel1MovesCheckBox.isVisible());
- settings.setGuaranteedMoveCount(pmsGuaranteedLevel1MovesSlider.getValue());
- settings.setReorderDamagingMoves(pmsReorderDamagingMovesCheckBox.isSelected());
-
- settings.setMovesetsForceGoodDamaging(pmsForceGoodDamagingCheckBox.isSelected());
- settings.setMovesetsGoodDamagingPercent(pmsForceGoodDamagingSlider.getValue());
- settings.setBlockBrokenMovesetMoves(pmsNoGameBreakingMovesCheckBox.isSelected());
- settings.setEvolutionMovesForAll(pmsEvolutionMovesCheckBox.isVisible() &&
- pmsEvolutionMovesCheckBox.isSelected());
-
- settings.setTrainersMod(isTrainerSetting(TRAINER_UNCHANGED), isTrainerSetting(TRAINER_RANDOM),
- isTrainerSetting(TRAINER_RANDOM_EVEN), isTrainerSetting(TRAINER_RANDOM_EVEN_MAIN),
- isTrainerSetting(TRAINER_TYPE_THEMED), isTrainerSetting(TRAINER_TYPE_THEMED_ELITE4_GYMS));
- settings.setTrainersUsePokemonOfSimilarStrength(tpSimilarStrengthCheckBox.isSelected());
- settings.setRivalCarriesStarterThroughout(tpRivalCarriesStarterCheckBox.isSelected());
- settings.setTrainersMatchTypingDistribution(tpWeightTypesCheckBox.isSelected());
- settings.setTrainersBlockLegendaries(tpDontUseLegendariesCheckBox.isSelected());
- settings.setTrainersBlockEarlyWonderGuard(tpNoEarlyWonderGuardCheckBox.isSelected());
- settings.setTrainersForceFullyEvolved(tpForceFullyEvolvedAtCheckBox.isSelected());
- settings.setTrainersForceFullyEvolvedLevel(tpForceFullyEvolvedAtSlider.getValue());
- settings.setTrainersLevelModified(tpPercentageLevelModifierCheckBox.isSelected());
- settings.setTrainersLevelModifier(tpPercentageLevelModifierSlider.getValue());
- settings.setEliteFourUniquePokemonNumber(tpEliteFourUniquePokemonCheckBox.isVisible() && tpEliteFourUniquePokemonCheckBox.isSelected() ? (int)tpEliteFourUniquePokemonSpinner.getValue() : 0);
- settings.setAllowTrainerAlternateFormes(tpAllowAlternateFormesCheckBox.isSelected() && tpAllowAlternateFormesCheckBox.isVisible());
- settings.setSwapTrainerMegaEvos(tpSwapMegaEvosCheckBox.isSelected() && tpSwapMegaEvosCheckBox.isVisible());
- settings.setDoubleBattleMode(tpDoubleBattleModeCheckBox.isVisible() && tpDoubleBattleModeCheckBox.isSelected());
- settings.setAdditionalBossTrainerPokemon(tpBossTrainersCheckBox.isVisible() && tpBossTrainersCheckBox.isSelected() ? (int)tpBossTrainersSpinner.getValue() : 0);
- settings.setAdditionalImportantTrainerPokemon(tpImportantTrainersCheckBox.isVisible() && tpImportantTrainersCheckBox.isSelected() ? (int)tpImportantTrainersSpinner.getValue() : 0);
- settings.setAdditionalRegularTrainerPokemon(tpRegularTrainersCheckBox.isVisible() && tpRegularTrainersCheckBox.isSelected() ? (int)tpRegularTrainersSpinner.getValue() : 0);
- settings.setShinyChance(tpRandomShinyTrainerPokemonCheckBox.isVisible() && tpRandomShinyTrainerPokemonCheckBox.isSelected());
- settings.setBetterTrainerMovesets(tpBetterMovesetsCheckBox.isVisible() && tpBetterMovesetsCheckBox.isSelected());
- settings.setRandomizeHeldItemsForBossTrainerPokemon(tpBossTrainersItemsCheckBox.isVisible() && tpBossTrainersItemsCheckBox.isSelected());
- settings.setRandomizeHeldItemsForImportantTrainerPokemon(tpImportantTrainersItemsCheckBox.isVisible() && tpImportantTrainersItemsCheckBox.isSelected());
- settings.setRandomizeHeldItemsForRegularTrainerPokemon(tpRegularTrainersItemsCheckBox.isVisible() && tpRegularTrainersItemsCheckBox.isSelected());
- settings.setConsumableItemsOnlyForTrainers(tpConsumableItemsOnlyCheckBox.isVisible() && tpConsumableItemsOnlyCheckBox.isSelected());
- settings.setSensibleItemsOnlyForTrainers(tpSensibleItemsCheckBox.isVisible() && tpSensibleItemsCheckBox.isSelected());
- settings.setHighestLevelGetsItemsForTrainers(tpHighestLevelGetsItemCheckBox.isVisible() && tpHighestLevelGetsItemCheckBox.isSelected());
-
- settings.setTotemPokemonMod(totpUnchangedRadioButton.isSelected(), totpRandomRadioButton.isSelected(), totpRandomSimilarStrengthRadioButton.isSelected());
- settings.setAllyPokemonMod(totpAllyUnchangedRadioButton.isSelected(), totpAllyRandomRadioButton.isSelected(), totpAllyRandomSimilarStrengthRadioButton.isSelected());
- settings.setAuraMod(totpAuraUnchangedRadioButton.isSelected(), totpAuraRandomRadioButton.isSelected(), totpAuraRandomSameStrengthRadioButton.isSelected());
- settings.setRandomizeTotemHeldItems(totpRandomizeHeldItemsCheckBox.isSelected());
- settings.setAllowTotemAltFormes(totpAllowAltFormesCheckBox.isSelected());
- settings.setTotemLevelsModified(totpPercentageLevelModifierCheckBox.isSelected());
- settings.setTotemLevelModifier(totpPercentageLevelModifierSlider.getValue());
-
- settings.setWildPokemonMod(wpUnchangedRadioButton.isSelected(), wpRandomRadioButton.isSelected(), wpArea1To1RadioButton.isSelected(),
- wpGlobal1To1RadioButton.isSelected());
- settings.setWildPokemonRestrictionMod(wpARNoneRadioButton.isSelected(), wpARSimilarStrengthRadioButton.isSelected(),
- wpARCatchEmAllModeRadioButton.isSelected(), wpARTypeThemeAreasRadioButton.isSelected());
- settings.setUseTimeBasedEncounters(wpUseTimeBasedEncountersCheckBox.isSelected());
- settings.setUseMinimumCatchRate(wpSetMinimumCatchRateCheckBox.isSelected());
- settings.setMinimumCatchRateLevel(wpSetMinimumCatchRateSlider.getValue());
- settings.setBlockWildLegendaries(wpDontUseLegendariesCheckBox.isSelected());
- settings.setRandomizeWildPokemonHeldItems(wpRandomizeHeldItemsCheckBox.isSelected() && wpRandomizeHeldItemsCheckBox.isVisible());
- settings.setBanBadRandomWildPokemonHeldItems(wpBanBadItemsCheckBox.isSelected() && wpBanBadItemsCheckBox.isVisible());
- settings.setBalanceShakingGrass(wpBalanceShakingGrassPokemonCheckBox.isSelected() && wpBalanceShakingGrassPokemonCheckBox.isVisible());
- settings.setWildLevelsModified(wpPercentageLevelModifierCheckBox.isSelected());
- settings.setWildLevelModifier(wpPercentageLevelModifierSlider.getValue());
- settings.setAllowWildAltFormes(wpAllowAltFormesCheckBox.isSelected() && wpAllowAltFormesCheckBox.isVisible());
-
- settings.setStaticPokemonMod(stpUnchangedRadioButton.isSelected(), stpSwapLegendariesSwapStandardsRadioButton.isSelected(),
- stpRandomCompletelyRadioButton.isSelected(), stpRandomSimilarStrengthRadioButton.isSelected());
- settings.setLimitMainGameLegendaries(stpLimitMainGameLegendariesCheckBox.isSelected() && stpLimitMainGameLegendariesCheckBox.isVisible());
- settings.setLimit600(stpRandomize600BSTCheckBox.isSelected());
- settings.setAllowStaticAltFormes(stpAllowAltFormesCheckBox.isSelected() && stpAllowAltFormesCheckBox.isVisible());
- settings.setSwapStaticMegaEvos(stpSwapMegaEvosCheckBox.isSelected() && stpSwapMegaEvosCheckBox.isVisible());
- settings.setStaticLevelModified(stpPercentageLevelModifierCheckBox.isSelected());
- settings.setStaticLevelModifier(stpPercentageLevelModifierSlider.getValue());
- settings.setCorrectStaticMusic(stpFixMusicCheckBox.isSelected() && stpFixMusicCheckBox.isVisible());
-
- settings.setTmsMod(tmUnchangedRadioButton.isSelected(), tmRandomRadioButton.isSelected());
-
- settings.setTmsHmsCompatibilityMod(thcUnchangedRadioButton.isSelected(), thcRandomPreferSameTypeRadioButton.isSelected(),
- thcRandomCompletelyRadioButton.isSelected(), thcFullCompatibilityRadioButton.isSelected());
- settings.setTmLevelUpMoveSanity(tmLevelupMoveSanityCheckBox.isSelected());
- settings.setKeepFieldMoveTMs(tmKeepFieldMoveTMsCheckBox.isSelected());
- settings.setFullHMCompat(tmFullHMCompatibilityCheckBox.isSelected() && tmFullHMCompatibilityCheckBox.isVisible());
- settings.setTmsForceGoodDamaging(tmForceGoodDamagingCheckBox.isSelected());
- settings.setTmsGoodDamagingPercent(tmForceGoodDamagingSlider.getValue());
- settings.setBlockBrokenTMMoves(tmNoGameBreakingMovesCheckBox.isSelected());
- settings.setTmsFollowEvolutions(tmFollowEvolutionsCheckBox.isSelected());
-
- settings.setMoveTutorMovesMod(mtUnchangedRadioButton.isSelected(), mtRandomRadioButton.isSelected());
- settings.setMoveTutorsCompatibilityMod(mtcUnchangedRadioButton.isSelected(), mtcRandomPreferSameTypeRadioButton.isSelected(),
- mtcRandomCompletelyRadioButton.isSelected(), mtcFullCompatibilityRadioButton.isSelected());
- settings.setTutorLevelUpMoveSanity(mtLevelupMoveSanityCheckBox.isSelected());
- settings.setKeepFieldMoveTutors(mtKeepFieldMoveTutorsCheckBox.isSelected());
- settings.setTutorsForceGoodDamaging(mtForceGoodDamagingCheckBox.isSelected());
- settings.setTutorsGoodDamagingPercent(mtForceGoodDamagingSlider.getValue());
- settings.setBlockBrokenTutorMoves(mtNoGameBreakingMovesCheckBox.isSelected());
- settings.setTutorFollowEvolutions(mtFollowEvolutionsCheckBox.isSelected());
-
- settings.setInGameTradesMod(igtUnchangedRadioButton.isSelected(), igtRandomizeGivenPokemonOnlyRadioButton.isSelected(), igtRandomizeBothRequestedGivenRadioButton.isSelected());
- settings.setRandomizeInGameTradesItems(igtRandomizeItemsCheckBox.isSelected());
- settings.setRandomizeInGameTradesIVs(igtRandomizeIVsCheckBox.isSelected());
- settings.setRandomizeInGameTradesNicknames(igtRandomizeNicknamesCheckBox.isSelected());
- settings.setRandomizeInGameTradesOTs(igtRandomizeOTsCheckBox.isSelected());
-
- settings.setFieldItemsMod(fiUnchangedRadioButton.isSelected(), fiShuffleRadioButton.isSelected(), fiRandomRadioButton.isSelected(), fiRandomEvenDistributionRadioButton.isSelected());
- settings.setBanBadRandomFieldItems(fiBanBadItemsCheckBox.isSelected());
-
- settings.setShopItemsMod(shUnchangedRadioButton.isSelected(), shShuffleRadioButton.isSelected(), shRandomRadioButton.isSelected());
- settings.setBanBadRandomShopItems(shBanBadItemsCheckBox.isSelected());
- settings.setBanRegularShopItems(shBanRegularShopItemsCheckBox.isSelected());
- settings.setBanOPShopItems(shBanOverpoweredShopItemsCheckBox.isSelected());
- settings.setBalanceShopPrices(shBalanceShopItemPricesCheckBox.isSelected());
- settings.setGuaranteeEvolutionItems(shGuaranteeEvolutionItemsCheckBox.isSelected());
- settings.setGuaranteeXItems(shGuaranteeXItemsCheckBox.isSelected());
-
- settings.setPickupItemsMod(puUnchangedRadioButton.isSelected(), puRandomRadioButton.isSelected());
- settings.setBanBadRandomPickupItems(puBanBadItemsCheckBox.isSelected());
-
- int currentMiscTweaks = 0;
- int mtCount = MiscTweak.allTweaks.size();
-
- for (int mti = 0; mti < mtCount; mti++) {
- MiscTweak mt = MiscTweak.allTweaks.get(mti);
- JCheckBox mtCB = tweakCheckBoxes.get(mti);
- if (mtCB.isSelected()) {
- currentMiscTweaks |= mt.getValue();
- }
- }
-
- settings.setCurrentMiscTweaks(currentMiscTweaks);
-
- settings.setCustomNames(customNames);
-
- return settings;
- }
-
- private Settings getCurrentSettings() throws IOException {
- return createSettingsFromState(FileFunctions.getCustomNames());
- }
-
- private void attemptToLogException(Exception ex, String baseMessageKey, String noLogMessageKey,
- String settingsString, String seedString) {
- attemptToLogException(ex, baseMessageKey, noLogMessageKey, false, settingsString, seedString);
- }
-
- private void attemptToLogException(Exception ex, String baseMessageKey, String noLogMessageKey, boolean showMessage,
- String settingsString, String seedString) {
-
- // Make sure the operation dialog doesn't show up over the error
- // dialog
- SwingUtilities.invokeLater(() -> NewRandomizerGUI.this.opDialog.setVisible(false));
-
- Date now = new Date();
- SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
- try {
- String errlog = "error_" + ft.format(now) + ".txt";
- PrintStream ps = new PrintStream(new FileOutputStream(errlog));
- ps.println("Randomizer Version: " + Version.VERSION_STRING);
- if (seedString != null) {
- ps.println("Seed: " + seedString);
- }
- if (settingsString != null) {
- ps.println("Settings String: " + Version.VERSION + settingsString);
- }
- ps.println("Java Version: " + System.getProperty("java.version") + ", " + System.getProperty("java.vm.name"));
- PrintStream e1 = System.err;
- System.setErr(ps);
- if (this.romHandler != null) {
- try {
- ps.println("ROM: " + romHandler.getROMName());
- ps.println("Code: " + romHandler.getROMCode());
- ps.println("Reported Support Level: " + romHandler.getSupportLevel());
- ps.println();
- } catch (Exception ex2) {
- // Do nothing, just don't fail
- }
- }
- ex.printStackTrace();
- ps.println();
- ps.println("--ROM Diagnostics--");
- if (!romHandler.isRomValid()) {
- ps.println(bundle.getString("Log.InvalidRomLoaded"));
- }
- romHandler.printRomDiagnostics(ps);
- System.setErr(e1);
- ps.close();
- if (showMessage) {
- JOptionPane.showMessageDialog(mainPanel,
- String.format(bundle.getString(baseMessageKey), ex.getMessage(), errlog));
- } else {
- JOptionPane.showMessageDialog(mainPanel, String.format(bundle.getString(baseMessageKey), errlog));
- }
- } catch (Exception logex) {
- if (showMessage) {
- JOptionPane.showMessageDialog(mainPanel, String.format(bundle.getString(noLogMessageKey), ex.getMessage()));
- } else {
- JOptionPane.showMessageDialog(mainPanel, bundle.getString(noLogMessageKey));
- }
- }
- }
-
- public String getValidRequiredROMName(String config, CustomNamesSet customNames)
- throws UnsupportedEncodingException, InvalidSupplementFilesException {
- try {
- Utils.validatePresetSupplementFiles(config, customNames);
- } catch (InvalidSupplementFilesException e) {
- switch (e.getType()) {
- case CUSTOM_NAMES:
- JOptionPane.showMessageDialog(null, bundle.getString("GUI.presetDifferentCustomNames"));
- break;
- default:
- throw e;
- }
- }
- byte[] data = Base64.getDecoder().decode(config);
-
- int nameLength = data[Settings.LENGTH_OF_SETTINGS_DATA] & 0xFF;
- if (data.length != Settings.LENGTH_OF_SETTINGS_DATA + 9 + nameLength) {
- return null; // not valid length
- }
- return new String(data, Settings.LENGTH_OF_SETTINGS_DATA + 1, nameLength, "US-ASCII");
- }
-
- private void initialState() {
-
- romNameLabel.setText(bundle.getString("GUI.noRomLoaded"));
- romCodeLabel.setText("");
- romSupportLabel.setText("");
-
- gameMascotLabel.setIcon(emptyIcon);
-
- limitPokemonCheckBox.setVisible(true);
- limitPokemonCheckBox.setEnabled(false);
- limitPokemonCheckBox.setSelected(false);
- limitPokemonButton.setVisible(true);
- limitPokemonButton.setEnabled(false);
- noIrregularAltFormesCheckBox.setVisible(true);
- noIrregularAltFormesCheckBox.setEnabled(false);
- noIrregularAltFormesCheckBox.setSelected(false);
- raceModeCheckBox.setVisible(true);
- raceModeCheckBox.setEnabled(false);
- raceModeCheckBox.setSelected(false);
-
- currentRestrictions = null;
-
- openROMButton.setVisible(true);
- openROMButton.setEnabled(true);
- openROMButton.setSelected(false);
- randomizeSaveButton.setVisible(true);
- randomizeSaveButton.setEnabled(true);
- randomizeSaveButton.setSelected(false);
- premadeSeedButton.setVisible(true);
- premadeSeedButton.setEnabled(true);
- premadeSeedButton.setSelected(false);
- settingsButton.setVisible(true);
- settingsButton.setEnabled(true);
- settingsButton.setSelected(false);
-
- loadSettingsButton.setVisible(true);
- loadSettingsButton.setEnabled(false);
- loadSettingsButton.setSelected(false);
- saveSettingsButton.setVisible(true);
- saveSettingsButton.setEnabled(false);
- saveSettingsButton.setSelected(false);
- pbsUnchangedRadioButton.setVisible(true);
- pbsUnchangedRadioButton.setEnabled(false);
- pbsUnchangedRadioButton.setSelected(false);
- pbsShuffleRadioButton.setVisible(true);
- pbsShuffleRadioButton.setEnabled(false);
- pbsShuffleRadioButton.setSelected(false);
- pbsRandomRadioButton.setVisible(true);
- pbsRandomRadioButton.setEnabled(false);
- pbsRandomRadioButton.setSelected(false);
- pbsLegendariesSlowRadioButton.setVisible(true);
- pbsLegendariesSlowRadioButton.setEnabled(false);
- pbsLegendariesSlowRadioButton.setSelected(false);
- pbsStrongLegendariesSlowRadioButton.setVisible(true);
- pbsStrongLegendariesSlowRadioButton.setEnabled(false);
- pbsStrongLegendariesSlowRadioButton.setSelected(false);
- pbsAllMediumFastRadioButton.setVisible(true);
- pbsAllMediumFastRadioButton.setEnabled(false);
- pbsAllMediumFastRadioButton.setSelected(false);
- pbsStandardizeEXPCurvesCheckBox.setVisible(true);
- pbsStandardizeEXPCurvesCheckBox.setEnabled(false);
- pbsStandardizeEXPCurvesCheckBox.setSelected(false);
- pbsEXPCurveComboBox.setVisible(true);
- pbsEXPCurveComboBox.setEnabled(false);
- pbsEXPCurveComboBox.setSelectedIndex(0);
- pbsEXPCurveComboBox.setModel(new DefaultComboBoxModel<>(new String[] { "Medium Fast" }));
- pbsFollowEvolutionsCheckBox.setVisible(true);
- pbsFollowEvolutionsCheckBox.setEnabled(false);
- pbsFollowEvolutionsCheckBox.setSelected(false);
- pbsUpdateBaseStatsCheckBox.setVisible(true);
- pbsUpdateBaseStatsCheckBox.setEnabled(false);
- pbsUpdateBaseStatsCheckBox.setSelected(false);
- pbsFollowMegaEvosCheckBox.setVisible(true);
- pbsFollowMegaEvosCheckBox.setEnabled(false);
- pbsFollowMegaEvosCheckBox.setSelected(false);
- pbsUpdateComboBox.setVisible(true);
- pbsUpdateComboBox.setEnabled(false);
- pbsUpdateComboBox.setSelectedIndex(0);
- pbsUpdateComboBox.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
- pbsAssignEvoStatsRandomlyCheckBox.setVisible(true);
- pbsAssignEvoStatsRandomlyCheckBox.setEnabled(false);
- pbsAssignEvoStatsRandomlyCheckBox.setSelected(false);
- ptUnchangedRadioButton.setVisible(true);
- ptUnchangedRadioButton.setEnabled(false);
- ptUnchangedRadioButton.setSelected(false);
- ptRandomFollowEvolutionsRadioButton.setVisible(true);
- ptRandomFollowEvolutionsRadioButton.setEnabled(false);
- ptRandomFollowEvolutionsRadioButton.setSelected(false);
- ptRandomCompletelyRadioButton.setVisible(true);
- ptRandomCompletelyRadioButton.setEnabled(false);
- ptRandomCompletelyRadioButton.setSelected(false);
- ptFollowMegaEvosCheckBox.setVisible(true);
- ptFollowMegaEvosCheckBox.setEnabled(false);
- ptFollowMegaEvosCheckBox.setSelected(false);
- ptIsDualTypeCheckBox.setVisible(true);
- ptIsDualTypeCheckBox.setEnabled(false);
- ptIsDualTypeCheckBox.setSelected(false);
- pokemonAbilitiesPanel.setVisible(true);
- paUnchangedRadioButton.setVisible(true);
- paUnchangedRadioButton.setEnabled(false);
- paUnchangedRadioButton.setSelected(false);
- paRandomRadioButton.setVisible(true);
- paRandomRadioButton.setEnabled(false);
- paRandomRadioButton.setSelected(false);
- paAllowWonderGuardCheckBox.setVisible(true);
- paAllowWonderGuardCheckBox.setEnabled(false);
- paAllowWonderGuardCheckBox.setSelected(false);
- paFollowEvolutionsCheckBox.setVisible(true);
- paFollowEvolutionsCheckBox.setEnabled(false);
- paFollowEvolutionsCheckBox.setSelected(false);
- paTrappingAbilitiesCheckBox.setVisible(true);
- paTrappingAbilitiesCheckBox.setEnabled(false);
- paTrappingAbilitiesCheckBox.setSelected(false);
- paNegativeAbilitiesCheckBox.setVisible(true);
- paNegativeAbilitiesCheckBox.setEnabled(false);
- paNegativeAbilitiesCheckBox.setSelected(false);
- paBadAbilitiesCheckBox.setVisible(true);
- paBadAbilitiesCheckBox.setEnabled(false);
- paBadAbilitiesCheckBox.setSelected(false);
- paFollowMegaEvosCheckBox.setVisible(true);
- paFollowMegaEvosCheckBox.setEnabled(false);
- paFollowMegaEvosCheckBox.setSelected(false);
- paWeighDuplicatesTogetherCheckBox.setVisible(true);
- paWeighDuplicatesTogetherCheckBox.setEnabled(false);
- paWeighDuplicatesTogetherCheckBox.setSelected(false);
- paEnsureTwoAbilitiesCheckbox.setVisible(true);
- paEnsureTwoAbilitiesCheckbox.setEnabled(false);
- paEnsureTwoAbilitiesCheckbox.setSelected(false);
- peUnchangedRadioButton.setVisible(true);
- peUnchangedRadioButton.setEnabled(false);
- peUnchangedRadioButton.setSelected(false);
- peRandomRadioButton.setVisible(true);
- peRandomRadioButton.setEnabled(false);
- peRandomRadioButton.setSelected(false);
- peRandomEveryLevelRadioButton.setVisible(true);
- peRandomEveryLevelRadioButton.setEnabled(false);
- peRandomEveryLevelRadioButton.setSelected(false);
- peSimilarStrengthCheckBox.setVisible(true);
- peSimilarStrengthCheckBox.setEnabled(false);
- peSimilarStrengthCheckBox.setSelected(false);
- peSameTypingCheckBox.setVisible(true);
- peSameTypingCheckBox.setEnabled(false);
- peSameTypingCheckBox.setSelected(false);
- peLimitEvolutionsToThreeCheckBox.setVisible(true);
- peLimitEvolutionsToThreeCheckBox.setEnabled(false);
- peLimitEvolutionsToThreeCheckBox.setSelected(false);
- peForceChangeCheckBox.setVisible(true);
- peForceChangeCheckBox.setEnabled(false);
- peForceChangeCheckBox.setSelected(false);
- peChangeImpossibleEvosCheckBox.setVisible(true);
- peChangeImpossibleEvosCheckBox.setEnabled(false);
- peChangeImpossibleEvosCheckBox.setSelected(false);
- peMakeEvolutionsEasierCheckBox.setVisible(true);
- peMakeEvolutionsEasierCheckBox.setEnabled(false);
- peMakeEvolutionsEasierCheckBox.setSelected(false);
- peRemoveTimeBasedEvolutionsCheckBox.setVisible(true);
- peRemoveTimeBasedEvolutionsCheckBox.setEnabled(false);
- peRemoveTimeBasedEvolutionsCheckBox.setSelected(false);
- peAllowAltFormesCheckBox.setVisible(true);
- peAllowAltFormesCheckBox.setEnabled(false);
- peAllowAltFormesCheckBox.setSelected(false);
- spUnchangedRadioButton.setVisible(true);
- spUnchangedRadioButton.setEnabled(false);
- spUnchangedRadioButton.setSelected(false);
- spCustomRadioButton.setVisible(true);
- spCustomRadioButton.setEnabled(false);
- spCustomRadioButton.setSelected(false);
- spRandomCompletelyRadioButton.setVisible(true);
- spRandomCompletelyRadioButton.setEnabled(false);
- spRandomCompletelyRadioButton.setSelected(false);
- spRandomTwoEvosRadioButton.setVisible(true);
- spRandomTwoEvosRadioButton.setEnabled(false);
- spRandomTwoEvosRadioButton.setSelected(false);
- spComboBox1.setVisible(true);
- spComboBox1.setEnabled(false);
- spComboBox1.setSelectedIndex(0);
- spComboBox1.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
- spComboBox2.setVisible(true);
- spComboBox2.setEnabled(false);
- spComboBox2.setSelectedIndex(0);
- spComboBox2.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
- spComboBox3.setVisible(true);
- spComboBox3.setEnabled(false);
- spComboBox3.setSelectedIndex(0);
- spComboBox3.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
- spRandomizeStarterHeldItemsCheckBox.setVisible(true);
- spRandomizeStarterHeldItemsCheckBox.setEnabled(false);
- spRandomizeStarterHeldItemsCheckBox.setSelected(false);
- spBanBadItemsCheckBox.setVisible(true);
- spBanBadItemsCheckBox.setEnabled(false);
- spBanBadItemsCheckBox.setSelected(false);
- spAllowAltFormesCheckBox.setVisible(true);
- spAllowAltFormesCheckBox.setEnabled(false);
- spAllowAltFormesCheckBox.setSelected(false);
- stpUnchangedRadioButton.setVisible(true);
- stpUnchangedRadioButton.setEnabled(false);
- stpUnchangedRadioButton.setSelected(false);
- stpSwapLegendariesSwapStandardsRadioButton.setVisible(true);
- stpSwapLegendariesSwapStandardsRadioButton.setEnabled(false);
- stpSwapLegendariesSwapStandardsRadioButton.setSelected(false);
- stpRandomCompletelyRadioButton.setVisible(true);
- stpRandomCompletelyRadioButton.setEnabled(false);
- stpRandomCompletelyRadioButton.setSelected(false);
- stpRandomSimilarStrengthRadioButton.setVisible(true);
- stpRandomSimilarStrengthRadioButton.setEnabled(false);
- stpRandomSimilarStrengthRadioButton.setSelected(false);
- stpPercentageLevelModifierCheckBox.setVisible(true);
- stpPercentageLevelModifierCheckBox.setEnabled(false);
- stpPercentageLevelModifierCheckBox.setSelected(false);
- stpPercentageLevelModifierSlider.setVisible(true);
- stpPercentageLevelModifierSlider.setEnabled(false);
- stpPercentageLevelModifierSlider.setValue(0);
- stpLimitMainGameLegendariesCheckBox.setVisible(true);
- stpLimitMainGameLegendariesCheckBox.setEnabled(false);
- stpLimitMainGameLegendariesCheckBox.setSelected(false);
- stpRandomize600BSTCheckBox.setVisible(true);
- stpRandomize600BSTCheckBox.setEnabled(false);
- stpRandomize600BSTCheckBox.setSelected(false);
- stpAllowAltFormesCheckBox.setVisible(true);
- stpAllowAltFormesCheckBox.setEnabled(false);
- stpAllowAltFormesCheckBox.setSelected(false);
- stpSwapMegaEvosCheckBox.setVisible(true);
- stpSwapMegaEvosCheckBox.setEnabled(false);
- stpSwapMegaEvosCheckBox.setSelected(false);
- stpFixMusicCheckBox.setVisible(true);
- stpFixMusicCheckBox.setEnabled(false);
- stpFixMusicCheckBox.setSelected(false);
- igtUnchangedRadioButton.setVisible(true);
- igtUnchangedRadioButton.setEnabled(false);
- igtUnchangedRadioButton.setSelected(false);
- igtRandomizeGivenPokemonOnlyRadioButton.setVisible(true);
- igtRandomizeGivenPokemonOnlyRadioButton.setEnabled(false);
- igtRandomizeGivenPokemonOnlyRadioButton.setSelected(false);
- igtRandomizeBothRequestedGivenRadioButton.setVisible(true);
- igtRandomizeBothRequestedGivenRadioButton.setEnabled(false);
- igtRandomizeBothRequestedGivenRadioButton.setSelected(false);
- igtRandomizeNicknamesCheckBox.setVisible(true);
- igtRandomizeNicknamesCheckBox.setEnabled(false);
- igtRandomizeNicknamesCheckBox.setSelected(false);
- igtRandomizeOTsCheckBox.setVisible(true);
- igtRandomizeOTsCheckBox.setEnabled(false);
- igtRandomizeOTsCheckBox.setSelected(false);
- igtRandomizeIVsCheckBox.setVisible(true);
- igtRandomizeIVsCheckBox.setEnabled(false);
- igtRandomizeIVsCheckBox.setSelected(false);
- igtRandomizeItemsCheckBox.setVisible(true);
- igtRandomizeItemsCheckBox.setEnabled(false);
- igtRandomizeItemsCheckBox.setSelected(false);
- mdRandomizeMovePowerCheckBox.setVisible(true);
- mdRandomizeMovePowerCheckBox.setEnabled(false);
- mdRandomizeMovePowerCheckBox.setSelected(false);
- mdRandomizeMoveAccuracyCheckBox.setVisible(true);
- mdRandomizeMoveAccuracyCheckBox.setEnabled(false);
- mdRandomizeMoveAccuracyCheckBox.setSelected(false);
- mdRandomizeMovePPCheckBox.setVisible(true);
- mdRandomizeMovePPCheckBox.setEnabled(false);
- mdRandomizeMovePPCheckBox.setSelected(false);
- mdRandomizeMoveTypesCheckBox.setVisible(true);
- mdRandomizeMoveTypesCheckBox.setEnabled(false);
- mdRandomizeMoveTypesCheckBox.setSelected(false);
- mdRandomizeMoveCategoryCheckBox.setVisible(true);
- mdRandomizeMoveCategoryCheckBox.setEnabled(false);
- mdRandomizeMoveCategoryCheckBox.setSelected(false);
- mdUpdateMovesCheckBox.setVisible(true);
- mdUpdateMovesCheckBox.setEnabled(false);
- mdUpdateMovesCheckBox.setSelected(false);
- mdUpdateComboBox.setVisible(true);
- mdUpdateComboBox.setEnabled(false);
- mdUpdateComboBox.setSelectedIndex(0);
- mdUpdateComboBox.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
- pmsUnchangedRadioButton.setVisible(true);
- pmsUnchangedRadioButton.setEnabled(false);
- pmsUnchangedRadioButton.setSelected(false);
- pmsRandomPreferringSameTypeRadioButton.setVisible(true);
- pmsRandomPreferringSameTypeRadioButton.setEnabled(false);
- pmsRandomPreferringSameTypeRadioButton.setSelected(false);
- pmsRandomCompletelyRadioButton.setVisible(true);
- pmsRandomCompletelyRadioButton.setEnabled(false);
- pmsRandomCompletelyRadioButton.setSelected(false);
- pmsMetronomeOnlyModeRadioButton.setVisible(true);
- pmsMetronomeOnlyModeRadioButton.setEnabled(false);
- pmsMetronomeOnlyModeRadioButton.setSelected(false);
- pmsGuaranteedLevel1MovesCheckBox.setVisible(true);
- pmsGuaranteedLevel1MovesCheckBox.setEnabled(false);
- pmsGuaranteedLevel1MovesCheckBox.setSelected(false);
- pmsReorderDamagingMovesCheckBox.setVisible(true);
- pmsReorderDamagingMovesCheckBox.setEnabled(false);
- pmsReorderDamagingMovesCheckBox.setSelected(false);
- pmsNoGameBreakingMovesCheckBox.setVisible(true);
- pmsNoGameBreakingMovesCheckBox.setEnabled(false);
- pmsNoGameBreakingMovesCheckBox.setSelected(false);
- pmsForceGoodDamagingCheckBox.setVisible(true);
- pmsForceGoodDamagingCheckBox.setEnabled(false);
- pmsForceGoodDamagingCheckBox.setSelected(false);
- pmsGuaranteedLevel1MovesSlider.setVisible(true);
- pmsGuaranteedLevel1MovesSlider.setEnabled(false);
- pmsGuaranteedLevel1MovesSlider.setValue(pmsGuaranteedLevel1MovesSlider.getMinimum());
- pmsForceGoodDamagingSlider.setVisible(true);
- pmsForceGoodDamagingSlider.setEnabled(false);
- pmsForceGoodDamagingSlider.setValue(pmsForceGoodDamagingSlider.getMinimum());
- pmsEvolutionMovesCheckBox.setVisible(true);
- pmsEvolutionMovesCheckBox.setEnabled(false);
- pmsEvolutionMovesCheckBox.setSelected(false);
- tpComboBox.setVisible(true);
- tpComboBox.setEnabled(false);
- tpComboBox.setModel(new DefaultComboBoxModel<>(new String[] { "Unchanged" }));
- tpRivalCarriesStarterCheckBox.setVisible(true);
- tpRivalCarriesStarterCheckBox.setEnabled(false);
- tpRivalCarriesStarterCheckBox.setSelected(false);
- tpSimilarStrengthCheckBox.setVisible(true);
- tpSimilarStrengthCheckBox.setEnabled(false);
- tpSimilarStrengthCheckBox.setSelected(false);
- tpWeightTypesCheckBox.setVisible(true);
- tpWeightTypesCheckBox.setEnabled(false);
- tpWeightTypesCheckBox.setSelected(false);
- tpDontUseLegendariesCheckBox.setVisible(true);
- tpDontUseLegendariesCheckBox.setEnabled(false);
- tpDontUseLegendariesCheckBox.setSelected(false);
- tpNoEarlyWonderGuardCheckBox.setVisible(true);
- tpNoEarlyWonderGuardCheckBox.setEnabled(false);
- tpNoEarlyWonderGuardCheckBox.setSelected(false);
- tpRandomizeTrainerNamesCheckBox.setVisible(true);
- tpRandomizeTrainerNamesCheckBox.setEnabled(false);
- tpRandomizeTrainerNamesCheckBox.setSelected(false);
- tpRandomizeTrainerClassNamesCheckBox.setVisible(true);
- tpRandomizeTrainerClassNamesCheckBox.setEnabled(false);
- tpRandomizeTrainerClassNamesCheckBox.setSelected(false);
- tpForceFullyEvolvedAtCheckBox.setVisible(true);
- tpForceFullyEvolvedAtCheckBox.setEnabled(false);
- tpForceFullyEvolvedAtCheckBox.setSelected(false);
- tpForceFullyEvolvedAtSlider.setVisible(true);
- tpForceFullyEvolvedAtSlider.setEnabled(false);
- tpForceFullyEvolvedAtSlider.setValue(tpForceFullyEvolvedAtSlider.getMinimum());
- tpPercentageLevelModifierSlider.setVisible(true);
- tpPercentageLevelModifierSlider.setEnabled(false);
- tpPercentageLevelModifierSlider.setValue(0);
- tpPercentageLevelModifierCheckBox.setVisible(true);
- tpPercentageLevelModifierCheckBox.setEnabled(false);
- tpPercentageLevelModifierCheckBox.setSelected(false);
-
- tpEliteFourUniquePokemonCheckBox.setVisible(true);
- tpEliteFourUniquePokemonCheckBox.setEnabled(false);
- tpEliteFourUniquePokemonCheckBox.setSelected(false);
- tpEliteFourUniquePokemonSpinner.setVisible(true);
- tpEliteFourUniquePokemonSpinner.setEnabled(false);
- tpEliteFourUniquePokemonSpinner.setValue(1);
-
- tpAllowAlternateFormesCheckBox.setVisible(true);
- tpAllowAlternateFormesCheckBox.setEnabled(false);
- tpAllowAlternateFormesCheckBox.setSelected(false);
- tpSwapMegaEvosCheckBox.setVisible(true);
- tpSwapMegaEvosCheckBox.setEnabled(false);
- tpSwapMegaEvosCheckBox.setSelected(false);
- tpDoubleBattleModeCheckBox.setVisible(true);
- tpDoubleBattleModeCheckBox.setEnabled(false);
- tpDoubleBattleModeCheckBox.setSelected(false);
- tpBossTrainersCheckBox.setVisible(true);
- tpBossTrainersCheckBox.setEnabled(false);
- tpBossTrainersCheckBox.setSelected(false);
- tpImportantTrainersCheckBox.setVisible(true);
- tpImportantTrainersCheckBox.setEnabled(false);
- tpImportantTrainersCheckBox.setSelected(false);
- tpRegularTrainersCheckBox.setVisible(true);
- tpRegularTrainersCheckBox.setEnabled(false);
- tpRegularTrainersCheckBox.setSelected(false);
- tpBossTrainersSpinner.setVisible(true);
- tpBossTrainersSpinner.setEnabled(false);
- tpBossTrainersSpinner.setValue(1);
- tpImportantTrainersSpinner.setVisible(true);
- tpImportantTrainersSpinner.setEnabled(false);
- tpImportantTrainersSpinner.setValue(1);
- tpRegularTrainersSpinner.setVisible(true);
- tpRegularTrainersSpinner.setEnabled(false);
- tpRegularTrainersSpinner.setValue(1);
- tpAdditionalPokemonForLabel.setVisible(true);
- tpHeldItemsLabel.setVisible(true);
- tpBossTrainersItemsCheckBox.setVisible(true);
- tpBossTrainersItemsCheckBox.setEnabled(false);
- tpBossTrainersItemsCheckBox.setSelected(false);
- tpImportantTrainersItemsCheckBox.setVisible(true);
- tpImportantTrainersItemsCheckBox.setEnabled(false);
- tpImportantTrainersItemsCheckBox.setSelected(false);
- tpRegularTrainersItemsCheckBox.setVisible(true);
- tpRegularTrainersItemsCheckBox.setEnabled(false);
- tpRegularTrainersItemsCheckBox.setSelected(false);
- tpConsumableItemsOnlyCheckBox.setVisible(true);
- tpConsumableItemsOnlyCheckBox.setEnabled(false);
- tpConsumableItemsOnlyCheckBox.setSelected(false);
- tpSensibleItemsCheckBox.setVisible(true);
- tpSensibleItemsCheckBox.setEnabled(false);
- tpSensibleItemsCheckBox.setSelected(false);
- tpHighestLevelGetsItemCheckBox.setVisible(true);
- tpHighestLevelGetsItemCheckBox.setEnabled(false);
- tpHighestLevelGetsItemCheckBox.setSelected(false);
- tpRandomShinyTrainerPokemonCheckBox.setVisible(true);
- tpRandomShinyTrainerPokemonCheckBox.setEnabled(false);
- tpBetterMovesetsCheckBox.setVisible(true);
- tpBetterMovesetsCheckBox.setEnabled(false);
- tpBetterMovesetsCheckBox.setSelected(false);
- totpPanel.setVisible(true);
- totpAllyPanel.setVisible(true);
- totpAuraPanel.setVisible(true);
- totpUnchangedRadioButton.setVisible(true);
- totpUnchangedRadioButton.setEnabled(false);
- totpUnchangedRadioButton.setSelected(true);
- totpRandomRadioButton.setVisible(true);
- totpRandomRadioButton.setEnabled(false);
- totpRandomRadioButton.setSelected(false);
- totpRandomSimilarStrengthRadioButton.setVisible(true);
- totpRandomSimilarStrengthRadioButton.setEnabled(false);
- totpRandomSimilarStrengthRadioButton.setSelected(false);
- totpAllyUnchangedRadioButton.setVisible(true);
- totpAllyUnchangedRadioButton.setEnabled(false);
- totpAllyUnchangedRadioButton.setSelected(true);
- totpAllyRandomRadioButton.setVisible(true);
- totpAllyRandomRadioButton.setEnabled(false);
- totpAllyRandomRadioButton.setSelected(false);
- totpAllyRandomSimilarStrengthRadioButton.setVisible(true);
- totpAllyRandomSimilarStrengthRadioButton.setEnabled(false);
- totpAllyRandomSimilarStrengthRadioButton.setSelected(false);
- totpAuraUnchangedRadioButton.setVisible(true);
- totpAuraUnchangedRadioButton.setEnabled(false);
- totpAuraUnchangedRadioButton.setSelected(true);
- totpAuraRandomRadioButton.setVisible(true);
- totpAuraRandomRadioButton.setEnabled(false);
- totpAuraRandomRadioButton.setSelected(false);
- totpAuraRandomSameStrengthRadioButton.setVisible(true);
- totpAuraRandomSameStrengthRadioButton.setEnabled(false);
- totpAuraRandomSameStrengthRadioButton.setSelected(false);
- totpPercentageLevelModifierCheckBox.setVisible(true);
- totpPercentageLevelModifierCheckBox.setEnabled(false);
- totpPercentageLevelModifierCheckBox.setSelected(false);
- totpPercentageLevelModifierSlider.setVisible(true);
- totpPercentageLevelModifierSlider.setEnabled(false);
- totpPercentageLevelModifierSlider.setValue(0);
- totpRandomizeHeldItemsCheckBox.setVisible(true);
- totpRandomizeHeldItemsCheckBox.setEnabled(false);
- totpRandomizeHeldItemsCheckBox.setSelected(false);
- totpAllowAltFormesCheckBox.setVisible(true);
- totpAllowAltFormesCheckBox.setEnabled(false);
- totpAllowAltFormesCheckBox.setSelected(false);
- wpUnchangedRadioButton.setVisible(true);
- wpUnchangedRadioButton.setEnabled(false);
- wpUnchangedRadioButton.setSelected(false);
- wpRandomRadioButton.setVisible(true);
- wpRandomRadioButton.setEnabled(false);
- wpRandomRadioButton.setSelected(false);
- wpArea1To1RadioButton.setVisible(true);
- wpArea1To1RadioButton.setEnabled(false);
- wpArea1To1RadioButton.setSelected(false);
- wpGlobal1To1RadioButton.setVisible(true);
- wpGlobal1To1RadioButton.setEnabled(false);
- wpGlobal1To1RadioButton.setSelected(false);
- wpARNoneRadioButton.setVisible(true);
- wpARNoneRadioButton.setEnabled(false);
- wpARNoneRadioButton.setSelected(false);
- wpARSimilarStrengthRadioButton.setVisible(true);
- wpARSimilarStrengthRadioButton.setEnabled(false);
- wpARSimilarStrengthRadioButton.setSelected(false);
- wpARCatchEmAllModeRadioButton.setVisible(true);
- wpARCatchEmAllModeRadioButton.setEnabled(false);
- wpARCatchEmAllModeRadioButton.setSelected(false);
- wpARTypeThemeAreasRadioButton.setVisible(true);
- wpARTypeThemeAreasRadioButton.setEnabled(false);
- wpARTypeThemeAreasRadioButton.setSelected(false);
- wpUseTimeBasedEncountersCheckBox.setVisible(true);
- wpUseTimeBasedEncountersCheckBox.setEnabled(false);
- wpUseTimeBasedEncountersCheckBox.setSelected(false);
- wpDontUseLegendariesCheckBox.setVisible(true);
- wpDontUseLegendariesCheckBox.setEnabled(false);
- wpDontUseLegendariesCheckBox.setSelected(false);
- wpSetMinimumCatchRateCheckBox.setVisible(true);
- wpSetMinimumCatchRateCheckBox.setEnabled(false);
- wpSetMinimumCatchRateCheckBox.setSelected(false);
- wpRandomizeHeldItemsCheckBox.setVisible(true);
- wpRandomizeHeldItemsCheckBox.setEnabled(false);
- wpRandomizeHeldItemsCheckBox.setSelected(false);
- wpBanBadItemsCheckBox.setVisible(true);
- wpBanBadItemsCheckBox.setEnabled(false);
- wpBanBadItemsCheckBox.setSelected(false);
- wpBalanceShakingGrassPokemonCheckBox.setVisible(true);
- wpBalanceShakingGrassPokemonCheckBox.setEnabled(false);
- wpBalanceShakingGrassPokemonCheckBox.setSelected(false);
- wpPercentageLevelModifierCheckBox.setVisible(true);
- wpPercentageLevelModifierCheckBox.setEnabled(false);
- wpPercentageLevelModifierCheckBox.setSelected(false);
- wpPercentageLevelModifierSlider.setVisible(true);
- wpPercentageLevelModifierSlider.setEnabled(false);
- wpPercentageLevelModifierSlider.setValue(0);
- wpSetMinimumCatchRateSlider.setVisible(true);
- wpSetMinimumCatchRateSlider.setEnabled(false);
- wpSetMinimumCatchRateSlider.setValue(wpSetMinimumCatchRateSlider.getMinimum());
- wpAllowAltFormesCheckBox.setVisible(true);
- wpAllowAltFormesCheckBox.setEnabled(false);
- wpAllowAltFormesCheckBox.setSelected(false);
- tmUnchangedRadioButton.setVisible(true);
- tmUnchangedRadioButton.setEnabled(false);
- tmUnchangedRadioButton.setSelected(false);
- tmRandomRadioButton.setVisible(true);
- tmRandomRadioButton.setEnabled(false);
- tmRandomRadioButton.setSelected(false);
- tmNoGameBreakingMovesCheckBox.setVisible(true);
- tmNoGameBreakingMovesCheckBox.setEnabled(false);
- tmNoGameBreakingMovesCheckBox.setSelected(false);
- tmFullHMCompatibilityCheckBox.setVisible(true);
- tmFullHMCompatibilityCheckBox.setEnabled(false);
- tmFullHMCompatibilityCheckBox.setSelected(false);
- tmLevelupMoveSanityCheckBox.setVisible(true);
- tmLevelupMoveSanityCheckBox.setEnabled(false);
- tmLevelupMoveSanityCheckBox.setSelected(false);
- tmKeepFieldMoveTMsCheckBox.setVisible(true);
- tmKeepFieldMoveTMsCheckBox.setEnabled(false);
- tmKeepFieldMoveTMsCheckBox.setSelected(false);
- tmForceGoodDamagingCheckBox.setVisible(true);
- tmForceGoodDamagingCheckBox.setEnabled(false);
- tmForceGoodDamagingCheckBox.setSelected(false);
- tmForceGoodDamagingSlider.setVisible(true);
- tmForceGoodDamagingSlider.setEnabled(false);
- tmForceGoodDamagingSlider.setValue(tmForceGoodDamagingSlider.getMinimum());
- tmFollowEvolutionsCheckBox.setVisible(true);
- tmFollowEvolutionsCheckBox.setEnabled(false);
- tmFollowEvolutionsCheckBox.setSelected(false);
- thcUnchangedRadioButton.setVisible(true);
- thcUnchangedRadioButton.setEnabled(false);
- thcUnchangedRadioButton.setSelected(false);
- thcRandomPreferSameTypeRadioButton.setVisible(true);
- thcRandomPreferSameTypeRadioButton.setEnabled(false);
- thcRandomPreferSameTypeRadioButton.setSelected(false);
- thcRandomCompletelyRadioButton.setVisible(true);
- thcRandomCompletelyRadioButton.setEnabled(false);
- thcRandomCompletelyRadioButton.setSelected(false);
- thcFullCompatibilityRadioButton.setVisible(true);
- thcFullCompatibilityRadioButton.setEnabled(false);
- thcFullCompatibilityRadioButton.setSelected(false);
- mtUnchangedRadioButton.setVisible(true);
- mtUnchangedRadioButton.setEnabled(false);
- mtUnchangedRadioButton.setSelected(false);
- mtRandomRadioButton.setVisible(true);
- mtRandomRadioButton.setEnabled(false);
- mtRandomRadioButton.setSelected(false);
- mtNoGameBreakingMovesCheckBox.setVisible(true);
- mtNoGameBreakingMovesCheckBox.setEnabled(false);
- mtNoGameBreakingMovesCheckBox.setSelected(false);
- mtLevelupMoveSanityCheckBox.setVisible(true);
- mtLevelupMoveSanityCheckBox.setEnabled(false);
- mtLevelupMoveSanityCheckBox.setSelected(false);
- mtKeepFieldMoveTutorsCheckBox.setVisible(true);
- mtKeepFieldMoveTutorsCheckBox.setEnabled(false);
- mtKeepFieldMoveTutorsCheckBox.setSelected(false);
- mtForceGoodDamagingCheckBox.setVisible(true);
- mtForceGoodDamagingCheckBox.setEnabled(false);
- mtForceGoodDamagingCheckBox.setSelected(false);
- mtForceGoodDamagingSlider.setVisible(true);
- mtForceGoodDamagingSlider.setEnabled(false);
- mtForceGoodDamagingSlider.setValue(mtForceGoodDamagingSlider.getMinimum());
- mtFollowEvolutionsCheckBox.setVisible(true);
- mtFollowEvolutionsCheckBox.setEnabled(false);
- mtFollowEvolutionsCheckBox.setSelected(false);
- mtcUnchangedRadioButton.setVisible(true);
- mtcUnchangedRadioButton.setEnabled(false);
- mtcUnchangedRadioButton.setSelected(false);
- mtcRandomPreferSameTypeRadioButton.setVisible(true);
- mtcRandomPreferSameTypeRadioButton.setEnabled(false);
- mtcRandomPreferSameTypeRadioButton.setSelected(false);
- mtcRandomCompletelyRadioButton.setVisible(true);
- mtcRandomCompletelyRadioButton.setEnabled(false);
- mtcRandomCompletelyRadioButton.setSelected(false);
- mtcFullCompatibilityRadioButton.setVisible(true);
- mtcFullCompatibilityRadioButton.setEnabled(false);
- mtcFullCompatibilityRadioButton.setSelected(false);
- fiUnchangedRadioButton.setVisible(true);
- fiUnchangedRadioButton.setEnabled(false);
- fiUnchangedRadioButton.setSelected(false);
- fiShuffleRadioButton.setVisible(true);
- fiShuffleRadioButton.setEnabled(false);
- fiShuffleRadioButton.setSelected(false);
- fiRandomRadioButton.setVisible(true);
- fiRandomRadioButton.setEnabled(false);
- fiRandomRadioButton.setSelected(false);
- fiRandomEvenDistributionRadioButton.setVisible(true);
- fiRandomEvenDistributionRadioButton.setEnabled(false);
- fiRandomEvenDistributionRadioButton.setSelected(false);
- fiBanBadItemsCheckBox.setVisible(true);
- fiBanBadItemsCheckBox.setEnabled(false);
- fiBanBadItemsCheckBox.setSelected(false);
- shUnchangedRadioButton.setVisible(true);
- shUnchangedRadioButton.setEnabled(false);
- shUnchangedRadioButton.setSelected(false);
- shShuffleRadioButton.setVisible(true);
- shShuffleRadioButton.setEnabled(false);
- shShuffleRadioButton.setSelected(false);
- shRandomRadioButton.setVisible(true);
- shRandomRadioButton.setEnabled(false);
- shRandomRadioButton.setSelected(false);
- shBanOverpoweredShopItemsCheckBox.setVisible(true);
- shBanOverpoweredShopItemsCheckBox.setEnabled(false);
- shBanOverpoweredShopItemsCheckBox.setSelected(false);
- shBanBadItemsCheckBox.setVisible(true);
- shBanBadItemsCheckBox.setEnabled(false);
- shBanBadItemsCheckBox.setSelected(false);
- shBanRegularShopItemsCheckBox.setVisible(true);
- shBanRegularShopItemsCheckBox.setEnabled(false);
- shBanRegularShopItemsCheckBox.setSelected(false);
- shBalanceShopItemPricesCheckBox.setVisible(true);
- shBalanceShopItemPricesCheckBox.setEnabled(false);
- shBalanceShopItemPricesCheckBox.setSelected(false);
- shGuaranteeEvolutionItemsCheckBox.setVisible(true);
- shGuaranteeEvolutionItemsCheckBox.setEnabled(false);
- shGuaranteeEvolutionItemsCheckBox.setSelected(false);
- shGuaranteeXItemsCheckBox.setVisible(true);
- shGuaranteeXItemsCheckBox.setEnabled(false);
- shGuaranteeXItemsCheckBox.setSelected(false);
- puUnchangedRadioButton.setVisible(true);
- puUnchangedRadioButton.setEnabled(false);
- puUnchangedRadioButton.setSelected(false);
- puRandomRadioButton.setVisible(true);
- puRandomRadioButton.setEnabled(false);
- puRandomRadioButton.setSelected(false);
- puBanBadItemsCheckBox.setVisible(true);
- puBanBadItemsCheckBox.setEnabled(false);
- puBanBadItemsCheckBox.setSelected(false);
- miscBWExpPatchCheckBox.setVisible(true);
- miscBWExpPatchCheckBox.setEnabled(false);
- miscBWExpPatchCheckBox.setSelected(false);
- miscNerfXAccuracyCheckBox.setVisible(true);
- miscNerfXAccuracyCheckBox.setEnabled(false);
- miscNerfXAccuracyCheckBox.setSelected(false);
- miscFixCritRateCheckBox.setVisible(true);
- miscFixCritRateCheckBox.setEnabled(false);
- miscFixCritRateCheckBox.setSelected(false);
- miscFastestTextCheckBox.setVisible(true);
- miscFastestTextCheckBox.setEnabled(false);
- miscFastestTextCheckBox.setSelected(false);
- miscRunningShoesIndoorsCheckBox.setVisible(true);
- miscRunningShoesIndoorsCheckBox.setEnabled(false);
- miscRunningShoesIndoorsCheckBox.setSelected(false);
- miscRandomizePCPotionCheckBox.setVisible(true);
- miscRandomizePCPotionCheckBox.setEnabled(false);
- miscRandomizePCPotionCheckBox.setSelected(false);
- miscAllowPikachuEvolutionCheckBox.setVisible(true);
- miscAllowPikachuEvolutionCheckBox.setEnabled(false);
- miscAllowPikachuEvolutionCheckBox.setSelected(false);
- miscGiveNationalDexAtCheckBox.setVisible(true);
- miscGiveNationalDexAtCheckBox.setEnabled(false);
- miscGiveNationalDexAtCheckBox.setSelected(false);
- miscUpdateTypeEffectivenessCheckBox.setVisible(true);
- miscUpdateTypeEffectivenessCheckBox.setEnabled(false);
- miscUpdateTypeEffectivenessCheckBox.setSelected(false);
- miscLowerCasePokemonNamesCheckBox.setVisible(true);
- miscLowerCasePokemonNamesCheckBox.setEnabled(false);
- miscLowerCasePokemonNamesCheckBox.setSelected(false);
- miscRandomizeCatchingTutorialCheckBox.setVisible(true);
- miscRandomizeCatchingTutorialCheckBox.setEnabled(false);
- miscRandomizeCatchingTutorialCheckBox.setSelected(false);
- miscBanLuckyEggCheckBox.setVisible(true);
- miscBanLuckyEggCheckBox.setEnabled(false);
- miscBanLuckyEggCheckBox.setSelected(false);
- miscNoFreeLuckyEggCheckBox.setVisible(true);
- miscNoFreeLuckyEggCheckBox.setEnabled(false);
- miscNoFreeLuckyEggCheckBox.setSelected(false);
- miscBanBigMoneyManiacCheckBox.setVisible(true);
- miscBanBigMoneyManiacCheckBox.setEnabled(false);
- miscBanBigMoneyManiacCheckBox.setSelected(false);
- mtNoExistLabel.setVisible(false);
- mtNoneAvailableLabel.setVisible(false);
-
- liveTweaksPanel.setVisible(false);
- miscTweaksPanel.setVisible(true);
- }
-
- private void romLoaded() {
-
- try {
- int pokemonGeneration = romHandler.generationOfPokemon();
-
- setRomNameLabel();
- romCodeLabel.setText(romHandler.getROMCode());
- romSupportLabel.setText(bundle.getString("GUI.romSupportPrefix") + " "
- + this.romHandler.getSupportLevel());
-
- if (!romHandler.isRomValid()) {
- romNameLabel.setForeground(Color.RED);
- romCodeLabel.setForeground(Color.RED);
- romSupportLabel.setForeground(Color.RED);
- romSupportLabel.setText("<html>" + bundle.getString("GUI.romSupportPrefix") + " <b>Unofficial ROM</b>");
- showInvalidRomPopup();
- } else {
- romNameLabel.setForeground(Color.BLACK);
- romCodeLabel.setForeground(Color.BLACK);
- romSupportLabel.setForeground(Color.BLACK);
- }
-
- limitPokemonCheckBox.setVisible(true);
- limitPokemonCheckBox.setEnabled(true);
- limitPokemonButton.setVisible(true);
-
- noIrregularAltFormesCheckBox.setVisible(pokemonGeneration >= 4);
- noIrregularAltFormesCheckBox.setEnabled(pokemonGeneration >= 4);
-
- raceModeCheckBox.setEnabled(true);
-
- loadSettingsButton.setEnabled(true);
- saveSettingsButton.setEnabled(true);
-
- // Pokemon Traits
-
- // Pokemon Base Statistics
- pbsUnchangedRadioButton.setEnabled(true);
- pbsUnchangedRadioButton.setSelected(true);
- pbsShuffleRadioButton.setEnabled(true);
- pbsRandomRadioButton.setEnabled(true);
-
- pbsStandardizeEXPCurvesCheckBox.setEnabled(true);
- pbsLegendariesSlowRadioButton.setSelected(true);
- pbsUpdateBaseStatsCheckBox.setEnabled(pokemonGeneration < 8);
- pbsFollowMegaEvosCheckBox.setVisible(romHandler.hasMegaEvolutions());
- pbsUpdateComboBox.setVisible(pokemonGeneration < 8);
- ExpCurve[] expCurves = getEXPCurvesForGeneration(pokemonGeneration);
- String[] expCurveNames = new String[expCurves.length];
- for (int i = 0; i < expCurves.length; i++) {
- expCurveNames[i] = expCurves[i].toString();
- }
- pbsEXPCurveComboBox.setModel(new DefaultComboBoxModel<>(expCurveNames));
- pbsEXPCurveComboBox.setSelectedIndex(0);
-
- // Pokemon Types
- ptUnchangedRadioButton.setEnabled(true);
- ptUnchangedRadioButton.setSelected(true);
- ptRandomFollowEvolutionsRadioButton.setEnabled(true);
- ptRandomCompletelyRadioButton.setEnabled(true);
- ptFollowMegaEvosCheckBox.setVisible(romHandler.hasMegaEvolutions());
- ptIsDualTypeCheckBox.setEnabled(false);
-
- // Pokemon Abilities
- if (pokemonGeneration >= 3) {
- paUnchangedRadioButton.setEnabled(true);
- paUnchangedRadioButton.setSelected(true);
- paRandomRadioButton.setEnabled(true);
-
- paAllowWonderGuardCheckBox.setEnabled(false);
- paFollowEvolutionsCheckBox.setEnabled(false);
- paTrappingAbilitiesCheckBox.setEnabled(false);
- paNegativeAbilitiesCheckBox.setEnabled(false);
- paBadAbilitiesCheckBox.setEnabled(false);
- paFollowMegaEvosCheckBox.setVisible(romHandler.hasMegaEvolutions());
- paWeighDuplicatesTogetherCheckBox.setEnabled(false);
- paEnsureTwoAbilitiesCheckbox.setEnabled(false);
- } else {
- pokemonAbilitiesPanel.setVisible(false);
- }
-
- // Pokemon Evolutions
- peUnchangedRadioButton.setEnabled(true);
- peUnchangedRadioButton.setSelected(true);
- peRandomRadioButton.setEnabled(true);
- peRandomEveryLevelRadioButton.setVisible(pokemonGeneration >= 3);
- peRandomEveryLevelRadioButton.setEnabled(pokemonGeneration >= 3);
- peChangeImpossibleEvosCheckBox.setEnabled(true);
- peMakeEvolutionsEasierCheckBox.setEnabled(true);
- peRemoveTimeBasedEvolutionsCheckBox.setEnabled(true);
- peAllowAltFormesCheckBox.setVisible(pokemonGeneration >= 7);
-
- // Starters, Statics & Trades
-
- // Starter Pokemon
- spUnchangedRadioButton.setEnabled(true);
- spUnchangedRadioButton.setSelected(true);
-
- spCustomRadioButton.setEnabled(true);
- spRandomCompletelyRadioButton.setEnabled(true);
- spRandomTwoEvosRadioButton.setEnabled(true);
- spAllowAltFormesCheckBox.setVisible(romHandler.hasStarterAltFormes());
- if (romHandler.isYellow()) {
- spComboBox3.setVisible(false);
- }
- populateDropdowns();
-
- boolean supportsStarterHeldItems = romHandler.supportsStarterHeldItems();
- spRandomizeStarterHeldItemsCheckBox.setEnabled(supportsStarterHeldItems);
- spRandomizeStarterHeldItemsCheckBox.setVisible(supportsStarterHeldItems);
- spBanBadItemsCheckBox.setEnabled(false);
- spBanBadItemsCheckBox.setVisible(supportsStarterHeldItems);
-
- stpUnchangedRadioButton.setEnabled(true);
- stpUnchangedRadioButton.setSelected(true);
- if (romHandler.canChangeStaticPokemon()) {
- stpSwapLegendariesSwapStandardsRadioButton.setEnabled(true);
- stpRandomCompletelyRadioButton.setEnabled(true);
- stpRandomSimilarStrengthRadioButton.setEnabled(true);
- stpLimitMainGameLegendariesCheckBox.setVisible(romHandler.hasMainGameLegendaries());
- stpLimitMainGameLegendariesCheckBox.setEnabled(false);
- stpAllowAltFormesCheckBox.setVisible(romHandler.hasStaticAltFormes());
- stpSwapMegaEvosCheckBox.setVisible(pokemonGeneration == 6 && !romHandler.forceSwapStaticMegaEvos());
- stpPercentageLevelModifierCheckBox.setVisible(true);
- stpPercentageLevelModifierCheckBox.setEnabled(true);
- stpPercentageLevelModifierSlider.setVisible(true);
- stpPercentageLevelModifierSlider.setEnabled(false);
- stpFixMusicCheckBox.setVisible(romHandler.hasStaticMusicFix());
- stpFixMusicCheckBox.setEnabled(false);
- } else {
- stpSwapLegendariesSwapStandardsRadioButton.setVisible(false);
- stpRandomCompletelyRadioButton.setVisible(false);
- stpRandomSimilarStrengthRadioButton.setVisible(false);
- stpRandomize600BSTCheckBox.setVisible(false);
- stpLimitMainGameLegendariesCheckBox.setVisible(false);
- stpPercentageLevelModifierCheckBox.setVisible(false);
- stpPercentageLevelModifierSlider.setVisible(false);
- stpFixMusicCheckBox.setVisible(false);
- }
-
- igtUnchangedRadioButton.setEnabled(true);
- igtUnchangedRadioButton.setSelected(true);
- igtRandomizeGivenPokemonOnlyRadioButton.setEnabled(true);
- igtRandomizeBothRequestedGivenRadioButton.setEnabled(true);
-
- igtRandomizeNicknamesCheckBox.setEnabled(false);
- igtRandomizeOTsCheckBox.setEnabled(false);
- igtRandomizeIVsCheckBox.setEnabled(false);
- igtRandomizeItemsCheckBox.setEnabled(false);
-
- if (pokemonGeneration == 1) {
- igtRandomizeOTsCheckBox.setVisible(false);
- igtRandomizeIVsCheckBox.setVisible(false);
- igtRandomizeItemsCheckBox.setVisible(false);
- }
-
- // Move Data
- mdRandomizeMovePowerCheckBox.setEnabled(true);
- mdRandomizeMoveAccuracyCheckBox.setEnabled(true);
- mdRandomizeMovePPCheckBox.setEnabled(true);
- mdRandomizeMoveTypesCheckBox.setEnabled(true);
- mdRandomizeMoveCategoryCheckBox.setEnabled(romHandler.hasPhysicalSpecialSplit());
- mdRandomizeMoveCategoryCheckBox.setVisible(romHandler.hasPhysicalSpecialSplit());
- mdUpdateMovesCheckBox.setEnabled(pokemonGeneration < 8);
- mdUpdateMovesCheckBox.setVisible(pokemonGeneration < 8);
-
- // Pokemon Movesets
- pmsUnchangedRadioButton.setEnabled(true);
- pmsUnchangedRadioButton.setSelected(true);
- pmsRandomPreferringSameTypeRadioButton.setEnabled(true);
- pmsRandomCompletelyRadioButton.setEnabled(true);
- pmsMetronomeOnlyModeRadioButton.setEnabled(true);
-
- pmsGuaranteedLevel1MovesCheckBox.setVisible(romHandler.supportsFourStartingMoves());
- pmsGuaranteedLevel1MovesSlider.setVisible(romHandler.supportsFourStartingMoves());
- pmsEvolutionMovesCheckBox.setVisible(pokemonGeneration >= 7);
-
- tpComboBox.setEnabled(true);
- tpAllowAlternateFormesCheckBox.setVisible(romHandler.hasFunctionalFormes());
- tpForceFullyEvolvedAtCheckBox.setEnabled(true);
- tpPercentageLevelModifierCheckBox.setEnabled(true);
- tpSwapMegaEvosCheckBox.setVisible(romHandler.hasMegaEvolutions());
- tpDoubleBattleModeCheckBox.setVisible(pokemonGeneration >= 3);
-
- boolean additionalPokemonAvailable = pokemonGeneration >= 3;
-
- tpAdditionalPokemonForLabel.setVisible(additionalPokemonAvailable);
- tpBossTrainersCheckBox.setVisible(additionalPokemonAvailable);
- tpBossTrainersCheckBox.setEnabled(false);
- tpBossTrainersSpinner.setVisible(additionalPokemonAvailable);
- tpImportantTrainersCheckBox.setVisible(additionalPokemonAvailable);
- tpImportantTrainersCheckBox.setEnabled(false);
- tpImportantTrainersSpinner.setVisible(additionalPokemonAvailable);
- tpRegularTrainersCheckBox.setVisible(additionalPokemonAvailable);
- tpRegularTrainersCheckBox.setEnabled(false);
- tpRegularTrainersSpinner.setVisible(additionalPokemonAvailable);
-
- boolean trainersHeldItemSupport = pokemonGeneration >= 3;
- tpHeldItemsLabel.setVisible(trainersHeldItemSupport);
- tpBossTrainersItemsCheckBox.setVisible(trainersHeldItemSupport);
- tpBossTrainersItemsCheckBox.setEnabled(false);
- tpImportantTrainersItemsCheckBox.setVisible(trainersHeldItemSupport);
- tpImportantTrainersItemsCheckBox.setEnabled(false);
- tpRegularTrainersItemsCheckBox.setVisible(trainersHeldItemSupport);
- tpRegularTrainersItemsCheckBox.setEnabled(false);
- tpConsumableItemsOnlyCheckBox.setVisible(trainersHeldItemSupport);
- tpConsumableItemsOnlyCheckBox.setEnabled(false);
- tpSensibleItemsCheckBox.setVisible(trainersHeldItemSupport);
- tpSensibleItemsCheckBox.setEnabled(false);
- tpHighestLevelGetsItemCheckBox.setVisible(trainersHeldItemSupport);
- tpHighestLevelGetsItemCheckBox.setEnabled(false);
-
- tpEliteFourUniquePokemonCheckBox.setVisible(pokemonGeneration >= 3);
- tpEliteFourUniquePokemonSpinner.setVisible(pokemonGeneration >= 3);
-
- tpRandomizeTrainerNamesCheckBox.setEnabled(true);
- tpRandomizeTrainerClassNamesCheckBox.setEnabled(true);
- tpNoEarlyWonderGuardCheckBox.setVisible(pokemonGeneration >= 3);
- tpRandomShinyTrainerPokemonCheckBox.setVisible(pokemonGeneration >= 7);
- tpBetterMovesetsCheckBox.setVisible(pokemonGeneration >= 3);
-
- totpPanel.setVisible(pokemonGeneration == 7);
- if (totpPanel.isVisible()) {
- totpUnchangedRadioButton.setEnabled(true);
- totpRandomRadioButton.setEnabled(true);
- totpRandomSimilarStrengthRadioButton.setEnabled(true);
-
- totpAllyPanel.setVisible(pokemonGeneration == 7);
- totpAllyUnchangedRadioButton.setEnabled(true);
- totpAllyRandomRadioButton.setEnabled(true);
- totpAllyRandomSimilarStrengthRadioButton.setEnabled(true);
-
- totpAuraPanel.setVisible(pokemonGeneration == 7);
- totpAuraUnchangedRadioButton.setEnabled(true);
- totpAuraRandomRadioButton.setEnabled(true);
- totpAuraRandomSameStrengthRadioButton.setEnabled(true);
-
- totpRandomizeHeldItemsCheckBox.setEnabled(true);
- totpAllowAltFormesCheckBox.setEnabled(false);
- totpPercentageLevelModifierCheckBox.setEnabled(true);
- totpPercentageLevelModifierSlider.setEnabled(false);
- }
-
- // Wild Pokemon
- wpUnchangedRadioButton.setEnabled(true);
- wpUnchangedRadioButton.setSelected(true);
- wpRandomRadioButton.setEnabled(true);
- wpArea1To1RadioButton.setEnabled(true);
- wpGlobal1To1RadioButton.setEnabled(true);
-
- wpARNoneRadioButton.setSelected(true);
-
- wpUseTimeBasedEncountersCheckBox.setVisible(romHandler.hasTimeBasedEncounters());
- wpSetMinimumCatchRateCheckBox.setEnabled(true);
- wpRandomizeHeldItemsCheckBox.setEnabled(true);
- wpRandomizeHeldItemsCheckBox.setVisible(pokemonGeneration != 1);
- wpBanBadItemsCheckBox.setVisible(pokemonGeneration != 1);
- wpBalanceShakingGrassPokemonCheckBox.setVisible(pokemonGeneration == 5);
- wpPercentageLevelModifierCheckBox.setEnabled(true);
- wpAllowAltFormesCheckBox.setVisible(romHandler.hasWildAltFormes());
-
- tmUnchangedRadioButton.setEnabled(true);
- tmUnchangedRadioButton.setSelected(true);
- tmRandomRadioButton.setEnabled(true);
- tmFullHMCompatibilityCheckBox.setVisible(pokemonGeneration < 7);
- if (tmFullHMCompatibilityCheckBox.isVisible()) {
- tmFullHMCompatibilityCheckBox.setEnabled(true);
- }
-
- thcUnchangedRadioButton.setEnabled(true);
- thcUnchangedRadioButton.setSelected(true);
- thcRandomPreferSameTypeRadioButton.setEnabled(true);
- thcRandomCompletelyRadioButton.setEnabled(true);
- thcFullCompatibilityRadioButton.setEnabled(true);
-
- if (romHandler.hasMoveTutors()) {
- mtMovesPanel.setVisible(true);
- mtCompatPanel.setVisible(true);
- mtNoExistLabel.setVisible(false);
-
- mtUnchangedRadioButton.setEnabled(true);
- mtUnchangedRadioButton.setSelected(true);
- mtRandomRadioButton.setEnabled(true);
-
- mtcUnchangedRadioButton.setEnabled(true);
- mtcUnchangedRadioButton.setSelected(true);
- mtcRandomPreferSameTypeRadioButton.setEnabled(true);
- mtcRandomCompletelyRadioButton.setEnabled(true);
- mtcFullCompatibilityRadioButton.setEnabled(true);
- } else {
- mtMovesPanel.setVisible(false);
- mtCompatPanel.setVisible(false);
- mtNoExistLabel.setVisible(true);
- }
-
- fiUnchangedRadioButton.setEnabled(true);
- fiUnchangedRadioButton.setSelected(true);
- fiShuffleRadioButton.setEnabled(true);
- fiRandomRadioButton.setEnabled(true);
- fiRandomEvenDistributionRadioButton.setEnabled(true);
-
- shopItemsPanel.setVisible(romHandler.hasShopRandomization());
- shUnchangedRadioButton.setEnabled(true);
- shUnchangedRadioButton.setSelected(true);
- shShuffleRadioButton.setEnabled(true);
- shRandomRadioButton.setEnabled(true);
-
- pickupItemsPanel.setVisible(romHandler.abilitiesPerPokemon() > 0);
- puUnchangedRadioButton.setEnabled(true);
- puUnchangedRadioButton.setSelected(true);
- puRandomRadioButton.setEnabled(true);
-
- int mtsAvailable = romHandler.miscTweaksAvailable();
- int mtCount = MiscTweak.allTweaks.size();
- List<JCheckBox> usableCheckBoxes = new ArrayList<>();
-
- for (int mti = 0; mti < mtCount; mti++) {
- MiscTweak mt = MiscTweak.allTweaks.get(mti);
- JCheckBox mtCB = tweakCheckBoxes.get(mti);
- mtCB.setSelected(false);
- if ((mtsAvailable & mt.getValue()) != 0) {
- mtCB.setVisible(true);
- mtCB.setEnabled(true);
- usableCheckBoxes.add(mtCB);
- } else {
- mtCB.setVisible(false);
- mtCB.setEnabled(false);
- }
- }
-
- if (usableCheckBoxes.size() > 0) {
- setTweaksPanel(usableCheckBoxes);
- //tabbedPane1.setComponentAt(7,makeTweaksLayout(usableCheckBoxes));
- //miscTweaksPanel.setLayout(makeTweaksLayout(usableCheckBoxes));
- } else {
- mtNoneAvailableLabel.setVisible(true);
- liveTweaksPanel.setVisible(false);
- miscTweaksPanel.setVisible(true);
- //miscTweaksPanel.setLayout(noTweaksLayout);
- }
-
- gameMascotLabel.setIcon(makeMascotIcon());
-
- if (romHandler instanceof AbstractDSRomHandler) {
- ((AbstractDSRomHandler) romHandler).closeInnerRom();
- } else if (romHandler instanceof Abstract3DSRomHandler) {
- ((Abstract3DSRomHandler) romHandler).closeInnerRom();
- }
- } catch (Exception e) {
- attemptToLogException(e, "GUI.processFailed","GUI.processFailedNoLog", null, null);
- romHandler = null;
- initialState();
- }
- }
-
- private void setRomNameLabel() {
- if (romHandler.hasGameUpdateLoaded()) {
- romNameLabel.setText(romHandler.getROMName() + " (" + romHandler.getGameUpdateVersion() + ")");
- } else {
- romNameLabel.setText(romHandler.getROMName());
- }
- }
-
- private void setTweaksPanel(List<JCheckBox> usableCheckBoxes) {
- mtNoneAvailableLabel.setVisible(false);
- miscTweaksPanel.setVisible(false);
- baseTweaksPanel.remove(liveTweaksPanel);
- makeTweaksLayout(usableCheckBoxes);
- GridBagConstraints c = new GridBagConstraints();
- c.fill = GridBagConstraints.BOTH;
- c.weightx = 0.1;
- c.weighty = 0.1;
- c.gridx = 1;
- c.gridy = 1;
- baseTweaksPanel.add(liveTweaksPanel,c);
- liveTweaksPanel.setVisible(true);
- }
-
- private void enableOrDisableSubControls() {
-
- if (limitPokemonCheckBox.isSelected()) {
- limitPokemonButton.setEnabled(true);
- } else {
- limitPokemonButton.setEnabled(false);
- }
-
- boolean followEvolutionControlsEnabled = !peRandomEveryLevelRadioButton.isSelected();
- boolean followMegaEvolutionControlsEnabled = !(peRandomEveryLevelRadioButton.isSelected() && !noIrregularAltFormesCheckBox.isSelected() && peAllowAltFormesCheckBox.isSelected());
-
- if (peRandomEveryLevelRadioButton.isSelected()) {
- // If Evolve Every Level is enabled, unselect all "Follow Evolutions" controls
- pbsFollowEvolutionsCheckBox.setSelected(false);
- ptRandomFollowEvolutionsRadioButton.setEnabled(false);
- if (ptRandomFollowEvolutionsRadioButton.isSelected()) {
- ptRandomFollowEvolutionsRadioButton.setSelected(false);
- ptRandomCompletelyRadioButton.setSelected(true);
- }
- spRandomTwoEvosRadioButton.setEnabled(false);
- if (spRandomTwoEvosRadioButton.isSelected()) {
- spRandomTwoEvosRadioButton.setSelected(false);
- spRandomCompletelyRadioButton.setSelected(true);
- }
- paFollowEvolutionsCheckBox.setSelected(false);
- tmFollowEvolutionsCheckBox.setSelected(false);
- mtFollowEvolutionsCheckBox.setSelected(false);
-
- // If the Follow Mega Evolution controls should be disabled, deselect them here too
- if (!followMegaEvolutionControlsEnabled) {
- pbsFollowMegaEvosCheckBox.setSelected(false);
- ptFollowMegaEvosCheckBox.setSelected(false);
- paFollowMegaEvosCheckBox.setSelected(false);
- }
-
- // Also disable/unselect all the settings that make evolutions easier/possible,
- // since they aren't relevant in this scenario at all.
- peChangeImpossibleEvosCheckBox.setEnabled(false);
- peChangeImpossibleEvosCheckBox.setSelected(false);
- peMakeEvolutionsEasierCheckBox.setEnabled(false);
- peMakeEvolutionsEasierCheckBox.setSelected(false);
- peRemoveTimeBasedEvolutionsCheckBox.setEnabled(false);
- peRemoveTimeBasedEvolutionsCheckBox.setSelected(false);
-
- // Disable "Force Fully Evolved" Trainer Pokemon
- tpForceFullyEvolvedAtCheckBox.setSelected(false);
- tpForceFullyEvolvedAtCheckBox.setEnabled(false);
- tpForceFullyEvolvedAtSlider.setEnabled(false);
- tpForceFullyEvolvedAtSlider.setValue(tpForceFullyEvolvedAtSlider.getMinimum());
- } else {
- // All other "Follow Evolutions" controls get properly set/unset below
- // except this one, so manually enable it again.
- ptRandomFollowEvolutionsRadioButton.setEnabled(true);
- spRandomTwoEvosRadioButton.setEnabled(true);
-
- // The controls that make evolutions easier/possible, however,
- // need to all be manually re-enabled.
- peChangeImpossibleEvosCheckBox.setEnabled(true);
- peMakeEvolutionsEasierCheckBox.setEnabled(true);
- peRemoveTimeBasedEvolutionsCheckBox.setEnabled(true);
-
- // Re-enable "Force Fully Evolved" Trainer Pokemon
- tpForceFullyEvolvedAtCheckBox.setEnabled(true);
- }
-
- if (pbsUnchangedRadioButton.isSelected()) {
- pbsFollowEvolutionsCheckBox.setEnabled(false);
- pbsFollowEvolutionsCheckBox.setSelected(false);
- pbsFollowMegaEvosCheckBox.setEnabled(false);
- pbsFollowMegaEvosCheckBox.setSelected(false);
- } else {
- pbsFollowEvolutionsCheckBox.setEnabled(followEvolutionControlsEnabled);
- pbsFollowMegaEvosCheckBox.setEnabled(followMegaEvolutionControlsEnabled);
- }
-
- if (pbsRandomRadioButton.isSelected()) {
- if (pbsFollowEvolutionsCheckBox.isSelected() || pbsFollowMegaEvosCheckBox.isSelected()) {
- pbsAssignEvoStatsRandomlyCheckBox.setEnabled(true);
- } else {
- pbsAssignEvoStatsRandomlyCheckBox.setEnabled(false);
- pbsAssignEvoStatsRandomlyCheckBox.setSelected(false);
- }
- } else {
- pbsAssignEvoStatsRandomlyCheckBox.setEnabled(false);
- pbsAssignEvoStatsRandomlyCheckBox.setSelected(false);
- }
-
- if (pbsStandardizeEXPCurvesCheckBox.isSelected()) {
- pbsLegendariesSlowRadioButton.setEnabled(true);
- pbsStrongLegendariesSlowRadioButton.setEnabled(true);
- pbsAllMediumFastRadioButton.setEnabled(true);
- pbsEXPCurveComboBox.setEnabled(true);
- } else {
- pbsLegendariesSlowRadioButton.setEnabled(false);
- pbsLegendariesSlowRadioButton.setSelected(true);
- pbsStrongLegendariesSlowRadioButton.setEnabled(false);
- pbsAllMediumFastRadioButton.setEnabled(false);
- pbsEXPCurveComboBox.setEnabled(false);
- }
-
- if (pbsUpdateBaseStatsCheckBox.isSelected()) {
- pbsUpdateComboBox.setEnabled(true);
- } else {
- pbsUpdateComboBox.setEnabled(false);
- }
-
- if (ptUnchangedRadioButton.isSelected()) {
- ptFollowMegaEvosCheckBox.setEnabled(false);
- ptFollowMegaEvosCheckBox.setSelected(false);
- ptIsDualTypeCheckBox.setEnabled(false);
- ptIsDualTypeCheckBox.setSelected(false);
- } else {
- ptFollowMegaEvosCheckBox.setEnabled(followMegaEvolutionControlsEnabled);
- ptIsDualTypeCheckBox.setEnabled(true);
- }
-
- if (paRandomRadioButton.isSelected()) {
- paAllowWonderGuardCheckBox.setEnabled(true);
- paFollowEvolutionsCheckBox.setEnabled(followEvolutionControlsEnabled);
- paFollowMegaEvosCheckBox.setEnabled(followMegaEvolutionControlsEnabled);
- paTrappingAbilitiesCheckBox.setEnabled(true);
- paNegativeAbilitiesCheckBox.setEnabled(true);
- paBadAbilitiesCheckBox.setEnabled(true);
- paWeighDuplicatesTogetherCheckBox.setEnabled(true);
- paEnsureTwoAbilitiesCheckbox.setEnabled(true);
- } else {
- paAllowWonderGuardCheckBox.setEnabled(false);
- paAllowWonderGuardCheckBox.setSelected(false);
- paFollowEvolutionsCheckBox.setEnabled(false);
- paFollowEvolutionsCheckBox.setSelected(false);
- paTrappingAbilitiesCheckBox.setEnabled(false);
- paTrappingAbilitiesCheckBox.setSelected(false);
- paNegativeAbilitiesCheckBox.setEnabled(false);
- paNegativeAbilitiesCheckBox.setSelected(false);
- paBadAbilitiesCheckBox.setEnabled(false);
- paBadAbilitiesCheckBox.setSelected(false);
- paFollowMegaEvosCheckBox.setEnabled(false);
- paFollowMegaEvosCheckBox.setSelected(false);
- paWeighDuplicatesTogetherCheckBox.setEnabled(false);
- paWeighDuplicatesTogetherCheckBox.setSelected(false);
- paEnsureTwoAbilitiesCheckbox.setEnabled(false);
- paEnsureTwoAbilitiesCheckbox.setSelected(false);
- }
-
- if (peRandomRadioButton.isSelected()) {
- peSimilarStrengthCheckBox.setEnabled(true);
- peSameTypingCheckBox.setEnabled(true);
- peLimitEvolutionsToThreeCheckBox.setEnabled(true);
- peForceChangeCheckBox.setEnabled(true);
- peAllowAltFormesCheckBox.setEnabled(true);
- } else if (peRandomEveryLevelRadioButton.isSelected()) {
- peSimilarStrengthCheckBox.setEnabled(false);
- peSimilarStrengthCheckBox.setSelected(false);
- peSameTypingCheckBox.setEnabled(true);
- peLimitEvolutionsToThreeCheckBox.setEnabled(false);
- peLimitEvolutionsToThreeCheckBox.setSelected(false);
- peForceChangeCheckBox.setEnabled(true);
- peAllowAltFormesCheckBox.setEnabled(true);
- } else {
- peSimilarStrengthCheckBox.setEnabled(false);
- peSimilarStrengthCheckBox.setSelected(false);
- peSameTypingCheckBox.setEnabled(false);
- peSameTypingCheckBox.setSelected(false);
- peLimitEvolutionsToThreeCheckBox.setEnabled(false);
- peLimitEvolutionsToThreeCheckBox.setSelected(false);
- peForceChangeCheckBox.setEnabled(false);
- peForceChangeCheckBox.setSelected(false);
- peAllowAltFormesCheckBox.setEnabled(false);
- peAllowAltFormesCheckBox.setSelected(false);
- }
-
- boolean spCustomStatus = spCustomRadioButton.isSelected();
- spComboBox1.setEnabled(spCustomStatus);
- spComboBox2.setEnabled(spCustomStatus);
- spComboBox3.setEnabled(spCustomStatus);
-
- if (spUnchangedRadioButton.isSelected()) {
- spAllowAltFormesCheckBox.setEnabled(false);
- spAllowAltFormesCheckBox.setSelected(false);
- } else {
- spAllowAltFormesCheckBox.setEnabled(true);
- }
-
- if (spRandomizeStarterHeldItemsCheckBox.isSelected()) {
- spBanBadItemsCheckBox.setEnabled(true);
- } else {
- spBanBadItemsCheckBox.setEnabled(false);
- spBanBadItemsCheckBox.setSelected(false);
- }
-
- if (stpUnchangedRadioButton.isSelected()) {
- stpRandomize600BSTCheckBox.setEnabled(false);
- stpRandomize600BSTCheckBox.setSelected(false);
- stpAllowAltFormesCheckBox.setEnabled(false);
- stpAllowAltFormesCheckBox.setSelected(false);
- stpSwapMegaEvosCheckBox.setEnabled(false);
- stpSwapMegaEvosCheckBox.setSelected(false);
- stpFixMusicCheckBox.setEnabled(false);
- stpFixMusicCheckBox.setSelected(false);
- } else {
- stpRandomize600BSTCheckBox.setEnabled(true);
- stpAllowAltFormesCheckBox.setEnabled(true);
- stpSwapMegaEvosCheckBox.setEnabled(true);
- stpFixMusicCheckBox.setEnabled(true);
- }
-
- if (stpRandomSimilarStrengthRadioButton.isSelected()) {
- stpLimitMainGameLegendariesCheckBox.setEnabled(stpLimitMainGameLegendariesCheckBox.isVisible());
- } else {
- stpLimitMainGameLegendariesCheckBox.setEnabled(false);
- stpLimitMainGameLegendariesCheckBox.setSelected(false);
- }
-
- if (stpPercentageLevelModifierCheckBox.isSelected()) {
- stpPercentageLevelModifierSlider.setEnabled(true);
- } else {
- stpPercentageLevelModifierSlider.setEnabled(false);
- stpPercentageLevelModifierSlider.setValue(0);
- }
-
- if (igtUnchangedRadioButton.isSelected()) {
- igtRandomizeItemsCheckBox.setEnabled(false);
- igtRandomizeItemsCheckBox.setSelected(false);
- igtRandomizeIVsCheckBox.setEnabled(false);
- igtRandomizeIVsCheckBox.setSelected(false);
- igtRandomizeNicknamesCheckBox.setEnabled(false);
- igtRandomizeNicknamesCheckBox.setSelected(false);
- igtRandomizeOTsCheckBox.setEnabled(false);
- igtRandomizeOTsCheckBox.setSelected(false);
- } else {
- igtRandomizeItemsCheckBox.setEnabled(true);
- igtRandomizeIVsCheckBox.setEnabled(true);
- igtRandomizeNicknamesCheckBox.setEnabled(true);
- igtRandomizeOTsCheckBox.setEnabled(true);
- }
-
- if (mdUpdateMovesCheckBox.isSelected()) {
- mdUpdateComboBox.setEnabled(true);
- } else {
- mdUpdateComboBox.setEnabled(false);
- }
-
- if (pmsMetronomeOnlyModeRadioButton.isSelected() || pmsUnchangedRadioButton.isSelected()) {
- pmsGuaranteedLevel1MovesCheckBox.setEnabled(false);
- pmsGuaranteedLevel1MovesCheckBox.setSelected(false);
- pmsForceGoodDamagingCheckBox.setEnabled(false);
- pmsForceGoodDamagingCheckBox.setSelected(false);
- pmsReorderDamagingMovesCheckBox.setEnabled(false);
- pmsReorderDamagingMovesCheckBox.setSelected(false);
- pmsNoGameBreakingMovesCheckBox.setEnabled(false);
- pmsNoGameBreakingMovesCheckBox.setSelected(false);
- pmsEvolutionMovesCheckBox.setEnabled(false);
- pmsEvolutionMovesCheckBox.setSelected(false);
- } else {
- pmsGuaranteedLevel1MovesCheckBox.setEnabled(true);
- pmsForceGoodDamagingCheckBox.setEnabled(true);
- pmsReorderDamagingMovesCheckBox.setEnabled(true);
- pmsNoGameBreakingMovesCheckBox.setEnabled(true);
- pmsEvolutionMovesCheckBox.setEnabled(true);
- }
-
- if (pmsGuaranteedLevel1MovesCheckBox.isSelected()) {
- pmsGuaranteedLevel1MovesSlider.setEnabled(true);
- } else {
- pmsGuaranteedLevel1MovesSlider.setEnabled(false);
- pmsGuaranteedLevel1MovesSlider.setValue(pmsGuaranteedLevel1MovesSlider.getMinimum());
- }
-
- if (pmsForceGoodDamagingCheckBox.isSelected()) {
- pmsForceGoodDamagingSlider.setEnabled(true);
- } else {
- pmsForceGoodDamagingSlider.setEnabled(false);
- pmsForceGoodDamagingSlider.setValue(pmsForceGoodDamagingSlider.getMinimum());
- }
-
- if (isTrainerSetting(TRAINER_UNCHANGED)) {
- tpSimilarStrengthCheckBox.setEnabled(false);
- tpSimilarStrengthCheckBox.setSelected(false);
- tpDontUseLegendariesCheckBox.setEnabled(false);
- tpDontUseLegendariesCheckBox.setSelected(false);
- tpNoEarlyWonderGuardCheckBox.setEnabled(false);
- tpNoEarlyWonderGuardCheckBox.setSelected(false);
- tpAllowAlternateFormesCheckBox.setEnabled(false);
- tpAllowAlternateFormesCheckBox.setSelected(false);
- tpSwapMegaEvosCheckBox.setEnabled(false);
- tpSwapMegaEvosCheckBox.setSelected(false);
- tpRandomShinyTrainerPokemonCheckBox.setEnabled(false);
- tpRandomShinyTrainerPokemonCheckBox.setSelected(false);
- tpBetterMovesetsCheckBox.setEnabled(false);
- tpBetterMovesetsCheckBox.setSelected(false);
- tpDoubleBattleModeCheckBox.setEnabled(false);
- tpDoubleBattleModeCheckBox.setSelected(false);
- tpBossTrainersCheckBox.setEnabled(false);
- tpBossTrainersCheckBox.setSelected(false);
- tpImportantTrainersCheckBox.setEnabled(false);
- tpImportantTrainersCheckBox.setSelected(false);
- tpRegularTrainersCheckBox.setEnabled(false);
- tpRegularTrainersCheckBox.setSelected(false);
- tpBossTrainersItemsCheckBox.setEnabled(false);
- tpBossTrainersItemsCheckBox.setSelected(false);
- tpImportantTrainersItemsCheckBox.setEnabled(false);
- tpImportantTrainersItemsCheckBox.setSelected(false);
- tpRegularTrainersItemsCheckBox.setEnabled(false);
- tpRegularTrainersItemsCheckBox.setSelected(false);
- tpConsumableItemsOnlyCheckBox.setEnabled(false);
- tpConsumableItemsOnlyCheckBox.setSelected(false);
- tpSensibleItemsCheckBox.setEnabled(false);
- tpSensibleItemsCheckBox.setSelected(false);
- tpHighestLevelGetsItemCheckBox.setEnabled(false);
- tpHighestLevelGetsItemCheckBox.setSelected(false);
- tpEliteFourUniquePokemonCheckBox.setEnabled(false);
- tpEliteFourUniquePokemonCheckBox.setSelected(false);
- } else {
- tpSimilarStrengthCheckBox.setEnabled(true);
- tpDontUseLegendariesCheckBox.setEnabled(true);
- tpNoEarlyWonderGuardCheckBox.setEnabled(true);
- tpAllowAlternateFormesCheckBox.setEnabled(true);
- if (currentRestrictions == null || currentRestrictions.allowTrainerSwapMegaEvolvables(
- romHandler.forceSwapStaticMegaEvos(), isTrainerSetting(TRAINER_TYPE_THEMED))) {
- tpSwapMegaEvosCheckBox.setEnabled(true);
- } else {
- tpSwapMegaEvosCheckBox.setEnabled(false);
- tpSwapMegaEvosCheckBox.setSelected(false);
- }
- tpRandomShinyTrainerPokemonCheckBox.setEnabled(true);
- tpBetterMovesetsCheckBox.setEnabled(true);
- tpDoubleBattleModeCheckBox.setEnabled(tpDoubleBattleModeCheckBox.isVisible());
- tpBossTrainersCheckBox.setEnabled(tpBossTrainersCheckBox.isVisible());
- tpImportantTrainersCheckBox.setEnabled(tpImportantTrainersCheckBox.isVisible());
- tpRegularTrainersCheckBox.setEnabled(tpRegularTrainersCheckBox.isVisible());
- tpBossTrainersItemsCheckBox.setEnabled(tpBossTrainersItemsCheckBox.isVisible());
- tpImportantTrainersItemsCheckBox.setEnabled(tpImportantTrainersItemsCheckBox.isVisible());
- tpRegularTrainersItemsCheckBox.setEnabled(tpRegularTrainersItemsCheckBox.isVisible());
- tpEliteFourUniquePokemonCheckBox.setEnabled(tpEliteFourUniquePokemonCheckBox.isVisible());
- }
-
- if (tpForceFullyEvolvedAtCheckBox.isSelected()) {
- tpForceFullyEvolvedAtSlider.setEnabled(true);
- } else {
- tpForceFullyEvolvedAtSlider.setEnabled(false);
- tpForceFullyEvolvedAtSlider.setValue(tpForceFullyEvolvedAtSlider.getMinimum());
- }
-
- if (tpPercentageLevelModifierCheckBox.isSelected()) {
- tpPercentageLevelModifierSlider.setEnabled(true);
- } else {
- tpPercentageLevelModifierSlider.setEnabled(false);
- tpPercentageLevelModifierSlider.setValue(0);
- }
-
- if (tpBossTrainersCheckBox.isSelected()) {
- tpBossTrainersSpinner.setEnabled(true);
- } else {
- tpBossTrainersSpinner.setEnabled(false);
- tpBossTrainersSpinner.setValue(1);
- }
-
- if (tpImportantTrainersCheckBox.isSelected()) {
- tpImportantTrainersSpinner.setEnabled(true);
- } else {
- tpImportantTrainersSpinner.setEnabled(false);
- tpImportantTrainersSpinner.setValue(1);
- }
-
- if (tpRegularTrainersCheckBox.isSelected()) {
- tpRegularTrainersSpinner.setEnabled(true);
- } else {
- tpRegularTrainersSpinner.setEnabled(false);
- tpRegularTrainersSpinner.setValue(1);
- }
-
- if (tpBossTrainersItemsCheckBox.isSelected() || tpImportantTrainersItemsCheckBox.isSelected() ||
- tpRegularTrainersItemsCheckBox.isSelected()) {
- tpConsumableItemsOnlyCheckBox.setEnabled(true);
- tpSensibleItemsCheckBox.setEnabled(true);
- tpHighestLevelGetsItemCheckBox.setEnabled(true);
- } else {
- tpConsumableItemsOnlyCheckBox.setEnabled(false);
- tpSensibleItemsCheckBox.setEnabled(false);
- tpHighestLevelGetsItemCheckBox.setEnabled(false);
- }
-
- if (!peRandomEveryLevelRadioButton.isSelected() && (!spUnchangedRadioButton.isSelected() || !isTrainerSetting(TRAINER_UNCHANGED))) {
- tpRivalCarriesStarterCheckBox.setEnabled(true);
- } else {
- tpRivalCarriesStarterCheckBox.setEnabled(false);
- tpRivalCarriesStarterCheckBox.setSelected(false);
- }
-
- if (isTrainerSetting(TRAINER_TYPE_THEMED)) {
- tpWeightTypesCheckBox.setEnabled(true);
- } else {
- tpWeightTypesCheckBox.setEnabled(false);
- tpWeightTypesCheckBox.setSelected(false);
- }
-
- if (tpEliteFourUniquePokemonCheckBox.isSelected()) {
- tpEliteFourUniquePokemonSpinner.setEnabled(true);
- } else {
- tpEliteFourUniquePokemonSpinner.setEnabled(false);
- tpEliteFourUniquePokemonSpinner.setValue(1);
- }
-
- if (!totpUnchangedRadioButton.isSelected() || !totpAllyUnchangedRadioButton.isSelected()) {
- totpAllowAltFormesCheckBox.setEnabled(true);
- } else {
- totpAllowAltFormesCheckBox.setEnabled(false);
- totpAllowAltFormesCheckBox.setSelected(false);
- }
-
- if (totpPercentageLevelModifierCheckBox.isSelected()) {
- totpPercentageLevelModifierSlider.setEnabled(true);
- } else {
- totpPercentageLevelModifierSlider.setEnabled(false);
- totpPercentageLevelModifierSlider.setValue(0);
- }
-
- if (wpRandomRadioButton.isSelected()) {
- wpARNoneRadioButton.setEnabled(true);
- wpARSimilarStrengthRadioButton.setEnabled(true);
- wpARCatchEmAllModeRadioButton.setEnabled(true);
- wpARTypeThemeAreasRadioButton.setEnabled(true);
- wpBalanceShakingGrassPokemonCheckBox.setEnabled(true);
- } else if (wpArea1To1RadioButton.isSelected()) {
- wpARNoneRadioButton.setEnabled(true);
- wpARSimilarStrengthRadioButton.setEnabled(true);
- wpARCatchEmAllModeRadioButton.setEnabled(true);
- wpARTypeThemeAreasRadioButton.setEnabled(true);
- wpBalanceShakingGrassPokemonCheckBox.setEnabled(false);
- } else if (wpGlobal1To1RadioButton.isSelected()) {
- if (wpARCatchEmAllModeRadioButton.isSelected() || wpARTypeThemeAreasRadioButton.isSelected()) {
- wpARNoneRadioButton.setSelected(true);
- }
- wpARNoneRadioButton.setEnabled(true);
- wpARSimilarStrengthRadioButton.setEnabled(true);
- wpARCatchEmAllModeRadioButton.setEnabled(false);
- wpARTypeThemeAreasRadioButton.setEnabled(false);
- wpBalanceShakingGrassPokemonCheckBox.setEnabled(false);
- } else {
- wpARNoneRadioButton.setEnabled(false);
- wpARNoneRadioButton.setSelected(true);
- wpARSimilarStrengthRadioButton.setEnabled(false);
- wpARCatchEmAllModeRadioButton.setEnabled(false);
- wpARTypeThemeAreasRadioButton.setEnabled(false);
- wpBalanceShakingGrassPokemonCheckBox.setEnabled(false);
- }
-
- if (wpUnchangedRadioButton.isSelected()) {
- wpUseTimeBasedEncountersCheckBox.setEnabled(false);
- wpUseTimeBasedEncountersCheckBox.setSelected(false);
- wpDontUseLegendariesCheckBox.setEnabled(false);
- wpDontUseLegendariesCheckBox.setSelected(false);
- wpAllowAltFormesCheckBox.setEnabled(false);
- wpAllowAltFormesCheckBox.setSelected(false);
- } else {
- wpUseTimeBasedEncountersCheckBox.setEnabled(true);
- wpDontUseLegendariesCheckBox.setEnabled(true);
- wpAllowAltFormesCheckBox.setEnabled(true);
- }
-
- if (wpRandomizeHeldItemsCheckBox.isSelected()
- && wpRandomizeHeldItemsCheckBox.isVisible()
- && wpRandomizeHeldItemsCheckBox.isEnabled()) { // ??? why all three
- wpBanBadItemsCheckBox.setEnabled(true);
- } else {
- wpBanBadItemsCheckBox.setEnabled(false);
- wpBanBadItemsCheckBox.setSelected(false);
- }
-
- if (wpSetMinimumCatchRateCheckBox.isSelected()) {
- wpSetMinimumCatchRateSlider.setEnabled(true);
- } else {
- wpSetMinimumCatchRateSlider.setEnabled(false);
- wpSetMinimumCatchRateSlider.setValue(0);
- }
-
- if (wpPercentageLevelModifierCheckBox.isSelected()) {
- wpPercentageLevelModifierSlider.setEnabled(true);
- } else {
- wpPercentageLevelModifierSlider.setEnabled(false);
- wpPercentageLevelModifierSlider.setValue(0);
- }
-
- if (pmsMetronomeOnlyModeRadioButton.isSelected()) {
- tmUnchangedRadioButton.setEnabled(false);
- tmRandomRadioButton.setEnabled(false);
- tmUnchangedRadioButton.setSelected(true);
-
- mtUnchangedRadioButton.setEnabled(false);
- mtRandomRadioButton.setEnabled(false);
- mtUnchangedRadioButton.setSelected(true);
-
- tmLevelupMoveSanityCheckBox.setEnabled(false);
- tmLevelupMoveSanityCheckBox.setSelected(false);
- tmKeepFieldMoveTMsCheckBox.setEnabled(false);
- tmKeepFieldMoveTMsCheckBox.setSelected(false);
- tmForceGoodDamagingCheckBox.setEnabled(false);
- tmForceGoodDamagingCheckBox.setSelected(false);
- tmNoGameBreakingMovesCheckBox.setEnabled(false);
- tmNoGameBreakingMovesCheckBox.setSelected(false);
- tmFollowEvolutionsCheckBox.setEnabled(false);
- tmFollowEvolutionsCheckBox.setSelected(false);
-
- mtLevelupMoveSanityCheckBox.setEnabled(false);
- mtLevelupMoveSanityCheckBox.setSelected(false);
- mtKeepFieldMoveTutorsCheckBox.setEnabled(false);
- mtKeepFieldMoveTutorsCheckBox.setSelected(false);
- mtForceGoodDamagingCheckBox.setEnabled(false);
- mtForceGoodDamagingCheckBox.setSelected(false);
- mtNoGameBreakingMovesCheckBox.setEnabled(false);
- mtNoGameBreakingMovesCheckBox.setSelected(false);
- mtFollowEvolutionsCheckBox.setEnabled(false);
- mtFollowEvolutionsCheckBox.setSelected(false);
- } else {
- tmUnchangedRadioButton.setEnabled(true);
- tmRandomRadioButton.setEnabled(true);
-
- mtUnchangedRadioButton.setEnabled(true);
- mtRandomRadioButton.setEnabled(true);
-
- if (!(pmsUnchangedRadioButton.isSelected()) || !(tmUnchangedRadioButton.isSelected())
- || !(thcUnchangedRadioButton.isSelected())) {
- tmLevelupMoveSanityCheckBox.setEnabled(true);
- } else {
- tmLevelupMoveSanityCheckBox.setEnabled(false);
- tmLevelupMoveSanityCheckBox.setSelected(false);
- }
-
- if ((!thcUnchangedRadioButton.isSelected()) || (tmLevelupMoveSanityCheckBox.isSelected())) {
- tmFollowEvolutionsCheckBox.setEnabled(followEvolutionControlsEnabled);
- }
- else {
- tmFollowEvolutionsCheckBox.setEnabled(false);
- tmFollowEvolutionsCheckBox.setSelected(false);
- }
-
- if (!(tmUnchangedRadioButton.isSelected())) {
- tmKeepFieldMoveTMsCheckBox.setEnabled(true);
- tmForceGoodDamagingCheckBox.setEnabled(true);
- tmNoGameBreakingMovesCheckBox.setEnabled(true);
- } else {
- tmKeepFieldMoveTMsCheckBox.setEnabled(false);
- tmKeepFieldMoveTMsCheckBox.setSelected(false);
- tmForceGoodDamagingCheckBox.setEnabled(false);
- tmForceGoodDamagingCheckBox.setSelected(false);
- tmNoGameBreakingMovesCheckBox.setEnabled(false);
- tmNoGameBreakingMovesCheckBox.setSelected(false);
- }
-
- if (romHandler.hasMoveTutors()
- && (!(pmsUnchangedRadioButton.isSelected()) || !(mtUnchangedRadioButton.isSelected())
- || !(mtcUnchangedRadioButton.isSelected()))) {
- mtLevelupMoveSanityCheckBox.setEnabled(true);
- } else {
- mtLevelupMoveSanityCheckBox.setEnabled(false);
- mtLevelupMoveSanityCheckBox.setSelected(false);
- }
-
- if (!(mtcUnchangedRadioButton.isSelected()) || (mtLevelupMoveSanityCheckBox.isSelected())) {
- mtFollowEvolutionsCheckBox.setEnabled(followEvolutionControlsEnabled);
- }
- else {
- mtFollowEvolutionsCheckBox.setEnabled(false);
- mtFollowEvolutionsCheckBox.setSelected(false);
- }
-
- if (romHandler.hasMoveTutors() && !(mtUnchangedRadioButton.isSelected())) {
- mtKeepFieldMoveTutorsCheckBox.setEnabled(true);
- mtForceGoodDamagingCheckBox.setEnabled(true);
- mtNoGameBreakingMovesCheckBox.setEnabled(true);
- } else {
- mtKeepFieldMoveTutorsCheckBox.setEnabled(false);
- mtKeepFieldMoveTutorsCheckBox.setSelected(false);
- mtForceGoodDamagingCheckBox.setEnabled(false);
- mtForceGoodDamagingCheckBox.setSelected(false);
- mtNoGameBreakingMovesCheckBox.setEnabled(false);
- mtNoGameBreakingMovesCheckBox.setSelected(false);
- }
- }
-
- if (tmForceGoodDamagingCheckBox.isSelected()) {
- tmForceGoodDamagingSlider.setEnabled(true);
- } else {
- tmForceGoodDamagingSlider.setEnabled(false);
- tmForceGoodDamagingSlider.setValue(tmForceGoodDamagingSlider.getMinimum());
- }
-
- if (mtForceGoodDamagingCheckBox.isSelected()) {
- mtForceGoodDamagingSlider.setEnabled(true);
- } else {
- mtForceGoodDamagingSlider.setEnabled(false);
- mtForceGoodDamagingSlider.setValue(mtForceGoodDamagingSlider.getMinimum());
- }
-
- tmFullHMCompatibilityCheckBox.setEnabled(!thcFullCompatibilityRadioButton.isSelected());
-
- if (fiRandomRadioButton.isSelected() && fiRandomRadioButton.isVisible() && fiRandomRadioButton.isEnabled()) {
- fiBanBadItemsCheckBox.setEnabled(true);
- } else if (fiRandomEvenDistributionRadioButton.isSelected() && fiRandomEvenDistributionRadioButton.isVisible()
- && fiRandomEvenDistributionRadioButton.isEnabled()) {
- fiBanBadItemsCheckBox.setEnabled(true);
- } else {
- fiBanBadItemsCheckBox.setEnabled(false);
- fiBanBadItemsCheckBox.setSelected(false);
- }
-
- if (shRandomRadioButton.isSelected() && shRandomRadioButton.isVisible() && shRandomRadioButton.isEnabled()) {
- shBanBadItemsCheckBox.setEnabled(true);
- shBanRegularShopItemsCheckBox.setEnabled(true);
- shBanOverpoweredShopItemsCheckBox.setEnabled(true);
- shBalanceShopItemPricesCheckBox.setEnabled(true);
- shGuaranteeEvolutionItemsCheckBox.setEnabled(true);
- shGuaranteeXItemsCheckBox.setEnabled(true);
- } else {
- shBanBadItemsCheckBox.setEnabled(false);
- shBanBadItemsCheckBox.setSelected(false);
- shBanRegularShopItemsCheckBox.setEnabled(false);
- shBanRegularShopItemsCheckBox.setSelected(false);
- shBanOverpoweredShopItemsCheckBox.setEnabled(false);
- shBanOverpoweredShopItemsCheckBox.setSelected(false);
- shBalanceShopItemPricesCheckBox.setEnabled(false);
- shBalanceShopItemPricesCheckBox.setSelected(false);
- shGuaranteeEvolutionItemsCheckBox.setEnabled(false);
- shGuaranteeEvolutionItemsCheckBox.setSelected(false);
- shGuaranteeXItemsCheckBox.setEnabled(false);
- shGuaranteeXItemsCheckBox.setSelected(false);
- }
-
- if (puRandomRadioButton.isSelected() && puRandomRadioButton.isVisible() && puRandomRadioButton.isEnabled()) {
- puBanBadItemsCheckBox.setEnabled(true);
- } else {
- puBanBadItemsCheckBox.setEnabled(false);
- puBanBadItemsCheckBox.setSelected(false);
- }
- }
-
- private void initTweaksPanel() {
- tweakCheckBoxes = new ArrayList<>();
- int numTweaks = MiscTweak.allTweaks.size();
- for (int i = 0; i < numTweaks; i++) {
- MiscTweak ct = MiscTweak.allTweaks.get(i);
- JCheckBox tweakBox = new JCheckBox();
- tweakBox.setText(ct.getTweakName());
- tweakBox.setToolTipText(ct.getTooltipText());
- tweakCheckBoxes.add(tweakBox);
- }
- }
-
- private void makeTweaksLayout(List<JCheckBox> tweaks) {
- liveTweaksPanel = new JPanel(new GridBagLayout());
- TitledBorder border = BorderFactory.createTitledBorder("Misc. Tweaks");
- border.setTitleFont(border.getTitleFont().deriveFont(Font.BOLD));
- liveTweaksPanel.setBorder(border);
-
- int numTweaks = tweaks.size();
- Iterator<JCheckBox> tweaksIterator = tweaks.iterator();
-
- GridBagConstraints c = new GridBagConstraints();
- c.anchor = GridBagConstraints.FIRST_LINE_START;
- c.insets = new Insets(5,5,0,5);
-
- int TWEAK_COLS = 4;
- int numCols = Math.min(TWEAK_COLS, numTweaks);
-
- for (int row = 0; row <= numTweaks / numCols; row++) {
- for (int col = 0; col < numCols; col++) {
- if (!tweaksIterator.hasNext()) break;
- c.gridx = col;
- c.gridy = row;
- liveTweaksPanel.add(tweaksIterator.next(),c);
- }
- }
-
- // Pack the checkboxes together
-
- GridBagConstraints horizontalC = new GridBagConstraints();
- horizontalC.gridx = numCols;
- horizontalC.gridy = 0;
- horizontalC.weightx = 0.1;
-
- GridBagConstraints verticalC = new GridBagConstraints();
- verticalC.gridx = 0;
- verticalC.gridy = (numTweaks / numCols) + 1;
- verticalC.weighty = 0.1;
-
- liveTweaksPanel.add(new JSeparator(SwingConstants.HORIZONTAL),horizontalC);
- liveTweaksPanel.add(new JSeparator(SwingConstants.VERTICAL),verticalC);
- }
-
- private void populateDropdowns() {
- List<Pokemon> currentStarters = romHandler.getStarters();
- List<Pokemon> allPokes =
- romHandler.generationOfPokemon() >= 6 ?
- romHandler.getPokemonInclFormes()
- .stream()
- .filter(pk -> pk == null || !pk.actuallyCosmetic)
- .collect(Collectors.toList()) :
- romHandler.getPokemon();
- String[] pokeNames = new String[allPokes.size()];
- pokeNames[0] = "Random";
- for (int i = 1; i < allPokes.size(); i++) {
- pokeNames[i] = allPokes.get(i).fullName();
-
- }
-
- spComboBox1.setModel(new DefaultComboBoxModel<>(pokeNames));
- spComboBox1.setSelectedIndex(allPokes.indexOf(currentStarters.get(0)));
- spComboBox2.setModel(new DefaultComboBoxModel<>(pokeNames));
- spComboBox2.setSelectedIndex(allPokes.indexOf(currentStarters.get(1)));
- if (!romHandler.isYellow()) {
- spComboBox3.setModel(new DefaultComboBoxModel<>(pokeNames));
- spComboBox3.setSelectedIndex(allPokes.indexOf(currentStarters.get(2)));
- }
-
- String[] baseStatGenerationNumbers = new String[Math.min(3, GlobalConstants.HIGHEST_POKEMON_GEN - romHandler.generationOfPokemon())];
- int j = Math.max(6,romHandler.generationOfPokemon() + 1);
- for (int i = 0; i < baseStatGenerationNumbers.length; i++) {
- baseStatGenerationNumbers[i] = String.valueOf(j);
- j++;
- }
- pbsUpdateComboBox.setModel(new DefaultComboBoxModel<>(baseStatGenerationNumbers));
-
- String[] moveGenerationNumbers = new String[GlobalConstants.HIGHEST_POKEMON_GEN - romHandler.generationOfPokemon()];
- j = romHandler.generationOfPokemon() + 1;
- for (int i = 0; i < moveGenerationNumbers.length; i++) {
- moveGenerationNumbers[i] = String.valueOf(j);
- j++;
- }
- mdUpdateComboBox.setModel(new DefaultComboBoxModel<>(moveGenerationNumbers));
-
-
- tpComboBox.setModel(new DefaultComboBoxModel<>(getTrainerSettingsForGeneration(romHandler.generationOfPokemon())));
- tpComboBox.setRenderer(new DefaultListCellRenderer() {
- @Override
- public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
- JComponent comp = (JComponent) super.getListCellRendererComponent(list,
- value, index, isSelected, cellHasFocus);
-
- if (index >= 0 && value != null) {
- list.setToolTipText(bundle.getString(trainerSettingToolTips.get(trainerSettings.indexOf(value))));
- }
- return comp;
- }
- });
- }
-
- private ImageIcon makeMascotIcon() {
- try {
- BufferedImage handlerImg = romHandler.getMascotImage();
-
- if (handlerImg == null) {
- return emptyIcon;
- }
-
- BufferedImage nImg = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB);
- int hW = handlerImg.getWidth();
- int hH = handlerImg.getHeight();
- nImg.getGraphics().drawImage(handlerImg, 64 - hW / 2, 64 - hH / 2, frame);
- return new ImageIcon(nImg);
- } catch (Exception ex) {
- return emptyIcon;
- }
- }
-
- private void checkCustomNames() {
- String[] cnamefiles = new String[] { SysConstants.tnamesFile, SysConstants.tclassesFile,
- SysConstants.nnamesFile };
-
- boolean foundFile = false;
- for (int file = 0; file < 3; file++) {
- File currentFile = new File(SysConstants.ROOT_PATH + cnamefiles[file]);
- if (currentFile.exists()) {
- foundFile = true;
- break;
- }
- }
-
- if (foundFile) {
- int response = JOptionPane.showConfirmDialog(frame,
- bundle.getString("GUI.convertNameFilesDialog.text"),
- bundle.getString("GUI.convertNameFilesDialog.title"), JOptionPane.YES_NO_OPTION);
- if (response == JOptionPane.YES_OPTION) {
- try {
- CustomNamesSet newNamesData = CustomNamesSet.importOldNames();
- byte[] data = newNamesData.getBytes();
- FileFunctions.writeBytesToFile(SysConstants.customNamesFile, data);
- } catch (IOException ex) {
- JOptionPane.showMessageDialog(frame, bundle.getString("GUI.convertNameFilesFailed"));
- }
- }
-
- haveCheckedCustomNames = true;
- }
-
- }
-
- private void testForRequiredConfigs() {
- try {
- Utils.testForRequiredConfigs();
- } catch (FileNotFoundException e) {
- JOptionPane.showMessageDialog(null,
- String.format(bundle.getString("GUI.configFileMissing"), e.getMessage()));
- System.exit(1);
- }
- }
-
- private ExpCurve[] getEXPCurvesForGeneration(int generation) {
- ExpCurve[] result;
- if (generation < 3) {
- result = new ExpCurve[]{ ExpCurve.MEDIUM_FAST, ExpCurve.MEDIUM_SLOW, ExpCurve.FAST, ExpCurve.SLOW };
- } else {
- result = new ExpCurve[]{ ExpCurve.MEDIUM_FAST, ExpCurve.MEDIUM_SLOW, ExpCurve.FAST, ExpCurve.SLOW, ExpCurve.ERRATIC, ExpCurve.FLUCTUATING };
- }
- return result;
- }
-
- private String[] getTrainerSettingsForGeneration(int generation) {
- List<String> result = new ArrayList<>(trainerSettings);
- if (generation != 5) {
- result.remove(bundle.getString("GUI.tpMain3RandomEvenDistributionMainGame.text"));
- }
- return result.toArray(new String[0]);
- }
-
- private boolean isTrainerSetting(int setting) {
- return trainerSettings.indexOf(tpComboBox.getSelectedItem()) == setting;
- }
-
- public static void main(String[] args) {
- String firstCliArg = args.length > 0 ? args[0] : "";
- // invoke as CLI program
- if (firstCliArg.equals("cli")) {
- // snip the "cli" flag arg off the args array and invoke command
- String[] commandArgs = Arrays.copyOfRange(args, 1, args.length);
- int exitCode = CliRandomizer.invoke(commandArgs);
- System.exit(exitCode);
- } else {
- launcherInput = firstCliArg;
- if (launcherInput.equals("please-use-the-launcher")) usedLauncher = true;
- SwingUtilities.invokeLater(() -> {
- frame = new JFrame("NewRandomizerGUI");
- try {
- String lafName = javax.swing.UIManager.getSystemLookAndFeelClassName();
- // NEW: Only set Native LaF on windows.
- if (lafName.equalsIgnoreCase("com.sun.java.swing.plaf.windows.WindowsLookAndFeel")) {
- javax.swing.UIManager.setLookAndFeel(lafName);
- }
- } catch (ClassNotFoundException | InstantiationException | UnsupportedLookAndFeelException | IllegalAccessException ex) {
- java.util.logging.Logger.getLogger(NewRandomizerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null,
- ex);
- }
- frame.setContentPane(new NewRandomizerGUI().mainPanel);
- frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- frame.pack();
- frame.setVisible(true);
- });
- }
- }
+ private JTabbedPane tabbedPane1;
+ private JCheckBox raceModeCheckBox;
+ private JButton openROMButton;
+ private JButton randomizeSaveButton;
+ private JButton premadeSeedButton;
+ private JButton settingsButton;
+ private JButton loadSettingsButton;
+ private JButton saveSettingsButton;
+ private JPanel mainPanel;
+ private JRadioButton pbsUnchangedRadioButton;
+ private JRadioButton pbsShuffleRadioButton;
+ private JRadioButton pbsRandomRadioButton;
+ private JRadioButton pbsLegendariesSlowRadioButton;
+ private JRadioButton pbsStrongLegendariesSlowRadioButton;
+ private JRadioButton pbsAllMediumFastRadioButton;
+ private JCheckBox pbsStandardizeEXPCurvesCheckBox;
+ private JCheckBox pbsFollowEvolutionsCheckBox;
+ private JCheckBox pbsUpdateBaseStatsCheckBox;
+ private JCheckBox ptIsDualTypeCheckBox;
+ private JRadioButton ptUnchangedRadioButton;
+ private JRadioButton ptRandomFollowEvolutionsRadioButton;
+ private JRadioButton ptRandomCompletelyRadioButton;
+ private JRadioButton paUnchangedRadioButton;
+ private JRadioButton paRandomRadioButton;
+ private JCheckBox paAllowWonderGuardCheckBox;
+ private JCheckBox paFollowEvolutionsCheckBox;
+ private JCheckBox paTrappingAbilitiesCheckBox;
+ private JCheckBox paNegativeAbilitiesCheckBox;
+ private JCheckBox paBadAbilitiesCheckBox;
+ private JRadioButton peUnchangedRadioButton;
+ private JRadioButton peRandomRadioButton;
+ private JCheckBox peSimilarStrengthCheckBox;
+ private JCheckBox peSameTypingCheckBox;
+ private JCheckBox peLimitEvolutionsToThreeCheckBox;
+ private JCheckBox peForceChangeCheckBox;
+ private JCheckBox peChangeImpossibleEvosCheckBox;
+ private JCheckBox peMakeEvolutionsEasierCheckBox;
+ private JRadioButton spUnchangedRadioButton;
+ private JRadioButton spCustomRadioButton;
+ private JRadioButton spRandomCompletelyRadioButton;
+ private JRadioButton spRandomTwoEvosRadioButton;
+ private JComboBox<String> spComboBox1;
+ private JComboBox<String> spComboBox2;
+ private JComboBox<String> spComboBox3;
+ private JCheckBox spRandomizeStarterHeldItemsCheckBox;
+ private JCheckBox spBanBadItemsCheckBox;
+ private JRadioButton stpUnchangedRadioButton;
+ private JRadioButton stpSwapLegendariesSwapStandardsRadioButton;
+ private JRadioButton stpRandomCompletelyRadioButton;
+ private JRadioButton stpRandomSimilarStrengthRadioButton;
+ private JCheckBox stpLimitMainGameLegendariesCheckBox;
+ private JCheckBox stpRandomize600BSTCheckBox;
+ private JRadioButton igtUnchangedRadioButton;
+ private JRadioButton igtRandomizeGivenPokemonOnlyRadioButton;
+ private JRadioButton igtRandomizeBothRequestedGivenRadioButton;
+ private JCheckBox igtRandomizeNicknamesCheckBox;
+ private JCheckBox igtRandomizeOTsCheckBox;
+ private JCheckBox igtRandomizeIVsCheckBox;
+ private JCheckBox igtRandomizeItemsCheckBox;
+ private JCheckBox mdRandomizeMovePowerCheckBox;
+ private JCheckBox mdRandomizeMoveAccuracyCheckBox;
+ private JCheckBox mdRandomizeMovePPCheckBox;
+ private JCheckBox mdRandomizeMoveTypesCheckBox;
+ private JCheckBox mdRandomizeMoveCategoryCheckBox;
+ private JCheckBox mdUpdateMovesCheckBox;
+ private JCheckBox mdLegacyCheckBox;
+ private JRadioButton pmsUnchangedRadioButton;
+ private JRadioButton pmsRandomPreferringSameTypeRadioButton;
+ private JRadioButton pmsRandomCompletelyRadioButton;
+ private JRadioButton pmsMetronomeOnlyModeRadioButton;
+ private JCheckBox pmsGuaranteedLevel1MovesCheckBox;
+ private JCheckBox pmsReorderDamagingMovesCheckBox;
+ private JCheckBox pmsNoGameBreakingMovesCheckBox;
+ private JCheckBox pmsForceGoodDamagingCheckBox;
+ private JSlider pmsGuaranteedLevel1MovesSlider;
+ private JSlider pmsForceGoodDamagingSlider;
+ private JCheckBox tpRivalCarriesStarterCheckBox;
+ private JCheckBox tpSimilarStrengthCheckBox;
+ private JCheckBox tpWeightTypesCheckBox;
+ private JCheckBox tpDontUseLegendariesCheckBox;
+ private JCheckBox tpNoEarlyWonderGuardCheckBox;
+ private JCheckBox tpRandomizeTrainerNamesCheckBox;
+ private JCheckBox tpRandomizeTrainerClassNamesCheckBox;
+ private JCheckBox tpForceFullyEvolvedAtCheckBox;
+ private JSlider tpForceFullyEvolvedAtSlider;
+ private JSlider tpPercentageLevelModifierSlider;
+ private JCheckBox tpEliteFourUniquePokemonCheckBox;
+ private JSpinner tpEliteFourUniquePokemonSpinner;
+ private JCheckBox tpPercentageLevelModifierCheckBox;
+ private JRadioButton wpUnchangedRadioButton;
+ private JRadioButton wpRandomRadioButton;
+ private JRadioButton wpArea1To1RadioButton;
+ private JRadioButton wpGlobal1To1RadioButton;
+ private JRadioButton wpARNoneRadioButton;
+ private JRadioButton wpARSimilarStrengthRadioButton;
+ private JRadioButton wpARCatchEmAllModeRadioButton;
+ private JRadioButton wpARTypeThemeAreasRadioButton;
+ private JCheckBox wpUseTimeBasedEncountersCheckBox;
+ private JCheckBox wpDontUseLegendariesCheckBox;
+ private JCheckBox wpSetMinimumCatchRateCheckBox;
+ private JCheckBox wpRandomizeHeldItemsCheckBox;
+ private JCheckBox wpBanBadItemsCheckBox;
+ private JCheckBox wpBalanceShakingGrassPokemonCheckBox;
+ private JCheckBox wpPercentageLevelModifierCheckBox;
+ private JSlider wpPercentageLevelModifierSlider;
+ private JSlider wpSetMinimumCatchRateSlider;
+ private JRadioButton tmUnchangedRadioButton;
+ private JRadioButton tmRandomRadioButton;
+ private JCheckBox tmFullHMCompatibilityCheckBox;
+ private JCheckBox tmLevelupMoveSanityCheckBox;
+ private JCheckBox tmKeepFieldMoveTMsCheckBox;
+ private JCheckBox tmForceGoodDamagingCheckBox;
+ private JSlider tmForceGoodDamagingSlider;
+ private JRadioButton thcUnchangedRadioButton;
+ private JRadioButton thcRandomPreferSameTypeRadioButton;
+ private JRadioButton thcRandomCompletelyRadioButton;
+ private JRadioButton thcFullCompatibilityRadioButton;
+ private JRadioButton mtUnchangedRadioButton;
+ private JRadioButton mtRandomRadioButton;
+ private JCheckBox mtLevelupMoveSanityCheckBox;
+ private JCheckBox mtKeepFieldMoveTutorsCheckBox;
+ private JCheckBox mtForceGoodDamagingCheckBox;
+ private JSlider mtForceGoodDamagingSlider;
+ private JRadioButton mtcUnchangedRadioButton;
+ private JRadioButton mtcRandomPreferSameTypeRadioButton;
+ private JRadioButton mtcRandomCompletelyRadioButton;
+ private JRadioButton mtcFullCompatibilityRadioButton;
+ private JRadioButton fiUnchangedRadioButton;
+ private JRadioButton fiShuffleRadioButton;
+ private JRadioButton fiRandomRadioButton;
+ private JRadioButton fiRandomEvenDistributionRadioButton;
+ private JCheckBox fiBanBadItemsCheckBox;
+ private JRadioButton shUnchangedRadioButton;
+ private JRadioButton shShuffleRadioButton;
+ private JRadioButton shRandomRadioButton;
+ private JCheckBox shBanOverpoweredShopItemsCheckBox;
+ private JCheckBox shBanBadItemsCheckBox;
+ private JCheckBox shBanRegularShopItemsCheckBox;
+ private JCheckBox shBalanceShopItemPricesCheckBox;
+ private JCheckBox shGuaranteeEvolutionItemsCheckBox;
+ private JCheckBox shGuaranteeXItemsCheckBox;
+ private JCheckBox miscBWExpPatchCheckBox;
+ private JCheckBox miscNerfXAccuracyCheckBox;
+ private JCheckBox miscFixCritRateCheckBox;
+ private JCheckBox miscFastestTextCheckBox;
+ private JCheckBox miscRunningShoesIndoorsCheckBox;
+ private JCheckBox miscRandomizePCPotionCheckBox;
+ private JCheckBox miscAllowPikachuEvolutionCheckBox;
+ private JCheckBox miscGiveNationalDexAtCheckBox;
+ private JCheckBox miscUpdateTypeEffectivenessCheckBox;
+ private JCheckBox miscLowerCasePokemonNamesCheckBox;
+ private JCheckBox miscRandomizeCatchingTutorialCheckBox;
+ private JCheckBox miscBanLuckyEggCheckBox;
+ private JCheckBox miscNoFreeLuckyEggCheckBox;
+ private JCheckBox miscBanBigMoneyManiacCheckBox;
+ private JPanel pokemonAbilitiesPanel;
+ private JPanel moveTutorPanel;
+ private JPanel mtMovesPanel;
+ private JPanel mtCompatPanel;
+ private JLabel mtNoExistLabel;
+ private JPanel shopItemsPanel;
+ private JLabel mtNoneAvailableLabel;
+ private JPanel miscTweaksPanel;
+ private JLabel gameMascotLabel;
+ private JPanel baseTweaksPanel;
+ private JLabel romNameLabel;
+ private JLabel romCodeLabel;
+ private JLabel romSupportLabel;
+ private JCheckBox tmNoGameBreakingMovesCheckBox;
+ private JCheckBox mtNoGameBreakingMovesCheckBox;
+ private JCheckBox limitPokemonCheckBox;
+ private JButton limitPokemonButton;
+ private JCheckBox tpAllowAlternateFormesCheckBox;
+ private JLabel versionLabel;
+ private JCheckBox pbsFollowMegaEvosCheckBox;
+ private JCheckBox paFollowMegaEvosCheckBox;
+ private JCheckBox ptFollowMegaEvosCheckBox;
+ private JCheckBox spAllowAltFormesCheckBox;
+ private JCheckBox stpAllowAltFormesCheckBox;
+ private JCheckBox stpSwapMegaEvosCheckBox;
+ private JCheckBox tpSwapMegaEvosCheckBox;
+ private JCheckBox wpAllowAltFormesCheckBox;
+ private JCheckBox tpDoubleBattleModeCheckBox;
+ private JCheckBox tpBossTrainersCheckBox;
+ private JCheckBox tpImportantTrainersCheckBox;
+ private JCheckBox tpRegularTrainersCheckBox;
+ private JSpinner tpBossTrainersSpinner;
+ private JSpinner tpImportantTrainersSpinner;
+ private JSpinner tpRegularTrainersSpinner;
+ private JLabel tpAdditionalPokemonForLabel;
+ private JCheckBox peAllowAltFormesCheckBox;
+ private JCheckBox miscSOSBattlesCheckBox;
+ private JCheckBox tpRandomShinyTrainerPokemonCheckBox;
+ private JRadioButton totpUnchangedRadioButton;
+ private JRadioButton totpRandomRadioButton;
+ private JRadioButton totpRandomSimilarStrengthRadioButton;
+ private JRadioButton totpAllyUnchangedRadioButton;
+ private JRadioButton totpAllyRandomRadioButton;
+ private JRadioButton totpAllyRandomSimilarStrengthRadioButton;
+ private JPanel totpAllyPanel;
+ private JPanel totpAuraPanel;
+ private JRadioButton totpAuraUnchangedRadioButton;
+ private JRadioButton totpAuraRandomRadioButton;
+ private JRadioButton totpAuraRandomSameStrengthRadioButton;
+ private JCheckBox totpPercentageLevelModifierCheckBox;
+ private JSlider totpPercentageLevelModifierSlider;
+ private JCheckBox totpRandomizeHeldItemsCheckBox;
+ private JCheckBox totpAllowAltFormesCheckBox;
+ private JPanel totpPanel;
+ private JCheckBox pmsEvolutionMovesCheckBox;
+ private JComboBox<String> pbsUpdateComboBox;
+ private JComboBox<String> mdUpdateComboBox;
+ private JCheckBox paWeighDuplicatesTogetherCheckBox;
+ private JCheckBox miscBalanceStaticLevelsCheckBox;
+ private JCheckBox miscRetainAltFormesCheckBox;
+ private JComboBox pbsEXPCurveComboBox;
+ private JCheckBox miscRunWithoutRunningShoesCheckBox;
+ private JCheckBox peRemoveTimeBasedEvolutionsCheckBox;
+ private JCheckBox tmFollowEvolutionsCheckBox;
+ private JCheckBox mtFollowEvolutionsCheckBox;
+ private JCheckBox stpPercentageLevelModifierCheckBox;
+ private JSlider stpPercentageLevelModifierSlider;
+ private JCheckBox stpFixMusicCheckBox;
+ private JCheckBox miscFasterHPAndEXPBarsCheckBox;
+ private JCheckBox tpBossTrainersItemsCheckBox;
+ private JCheckBox tpImportantTrainersItemsCheckBox;
+ private JCheckBox tpRegularTrainersItemsCheckBox;
+ private JLabel tpHeldItemsLabel;
+ private JCheckBox tpConsumableItemsOnlyCheckBox;
+ private JCheckBox tpSensibleItemsCheckBox;
+ private JCheckBox tpHighestLevelGetsItemCheckBox;
+ private JPanel pickupItemsPanel;
+ private JRadioButton puUnchangedRadioButton;
+ private JRadioButton puRandomRadioButton;
+ private JCheckBox puBanBadItemsCheckBox;
+ private JCheckBox miscForceChallengeModeCheckBox;
+ private JCheckBox pbsAssignEvoStatsRandomlyCheckBox;
+ private JCheckBox noIrregularAltFormesCheckBox;
+ private JRadioButton peRandomEveryLevelRadioButton;
+ private JCheckBox miscFastDistortionWorldCheckBox;
+ private JComboBox tpComboBox;
+ private JCheckBox tpBetterMovesetsCheckBox;
+ private JCheckBox paEnsureTwoAbilitiesCheckbox;
+
+ private static JFrame frame;
+
+ private static String launcherInput = "";
+ public static boolean usedLauncher = false;
+
+ private GenRestrictions currentRestrictions;
+ private OperationDialog opDialog;
+
+ private ResourceBundle bundle;
+ protected RomHandler.Factory[] checkHandlers;
+ private RomHandler romHandler;
+
+ private boolean presetMode = false;
+ private boolean initialPopup = true;
+ private boolean showInvalidRomPopup = true;
+
+ private List<JCheckBox> tweakCheckBoxes;
+ private JPanel liveTweaksPanel = new JPanel();
+
+ private JFileChooser romOpenChooser = new JFileChooser();
+ private JFileChooser romSaveChooser = new JFileChooser();
+ private JFileChooser qsOpenChooser = new JFileChooser();
+ private JFileChooser qsSaveChooser = new JFileChooser();
+ private JFileChooser qsUpdateChooser = new JFileChooser();
+ private JFileChooser gameUpdateChooser = new JFileChooser();
+
+ private JPopupMenu settingsMenu;
+ private JMenuItem customNamesEditorMenuItem;
+ private JMenuItem loadGetSettingsMenuItem;
+ private JMenuItem keepOrUnloadGameAfterRandomizingMenuItem;
+
+ private ImageIcon emptyIcon = new ImageIcon(getClass().getResource("/com/sneed/pkrandom/newgui/emptyIcon.png"));
+ private boolean haveCheckedCustomNames, unloadGameOnSuccess;
+ private Map<String, String> gameUpdates = new TreeMap<>();
+
+ private List<String> trainerSettings = new ArrayList<>();
+ private List<String> trainerSettingToolTips = new ArrayList<>();
+ private final int TRAINER_UNCHANGED = 0, TRAINER_RANDOM = 1, TRAINER_RANDOM_EVEN = 2, TRAINER_RANDOM_EVEN_MAIN = 3,
+ TRAINER_TYPE_THEMED = 4, TRAINER_TYPE_THEMED_ELITE4_GYMS = 5;
+
+ public NewRandomizerGUI() {
+ ToolTipManager.sharedInstance().setInitialDelay(400);
+ ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE);
+ bundle = ResourceBundle.getBundle("com/sneed/pkrandom/newgui/Bundle");
+ testForRequiredConfigs();
+ checkHandlers = new RomHandler.Factory[] { new Gen1RomHandler.Factory(), new Gen2RomHandler.Factory(),
+ new Gen3RomHandler.Factory(), new Gen4RomHandler.Factory(), new Gen5RomHandler.Factory(),
+ new Gen6RomHandler.Factory(), new Gen7RomHandler.Factory() };
+
+ haveCheckedCustomNames = false;
+ initExplicit();
+ initTweaksPanel();
+ initFileChooserDirectories();
+
+ if (!haveCheckedCustomNames) {
+ checkCustomNames();
+ }
+
+ new Thread(() -> {
+ String latestVersionString = "???";
+
+ try {
+
+ URL url = new URL(SysConstants.API_URL_ZX);
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ conn.setRequestMethod("GET");
+ conn.setRequestProperty("Accept", "application/json");
+ conn.setConnectTimeout(2000);
+ conn.setReadTimeout(2000);
+
+ BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
+
+ String output;
+ while ((output = br.readLine()) != null) {
+ String[] a = output.split("tag_name\":\"");
+ if (a.length > 1) {
+ latestVersionString = a[1].split("\",")[0];
+ }
+ }
+
+ conn.disconnect();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }).run();
+
+ frame.setTitle(String.format(bundle.getString("GUI.windowTitle"),Version.VERSION_STRING));
+
+ openROMButton.addActionListener(e -> loadROM());
+ pbsUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ pbsShuffleRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ pbsRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ pbsFollowMegaEvosCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ pbsFollowEvolutionsCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ pbsStandardizeEXPCurvesCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ paUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ paRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ peUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ peRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ peRandomEveryLevelRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ peAllowAltFormesCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ spUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ spCustomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ spRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ spRandomTwoEvosRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ stpUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ stpSwapLegendariesSwapStandardsRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ stpRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ stpRandomSimilarStrengthRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ stpPercentageLevelModifierCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ igtUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ igtRandomizeGivenPokemonOnlyRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ igtRandomizeBothRequestedGivenRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ pmsUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ pmsRandomPreferringSameTypeRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ pmsRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ pmsMetronomeOnlyModeRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ pmsGuaranteedLevel1MovesCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ pmsForceGoodDamagingCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpForceFullyEvolvedAtCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpPercentageLevelModifierCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpEliteFourUniquePokemonCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ wpUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ wpRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ wpArea1To1RadioButton.addActionListener(e -> enableOrDisableSubControls());
+ wpGlobal1To1RadioButton.addActionListener(e -> enableOrDisableSubControls());
+ wpSetMinimumCatchRateCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ wpRandomizeHeldItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ wpPercentageLevelModifierCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tmUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ tmRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ tmForceGoodDamagingCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ thcUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ thcRandomPreferSameTypeRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ thcRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ thcFullCompatibilityRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ mtUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ mtRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ mtForceGoodDamagingCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ mtcUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ mtcRandomPreferSameTypeRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ mtcRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ mtcFullCompatibilityRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ fiUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ fiShuffleRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ fiRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ fiRandomEvenDistributionRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ shUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ shShuffleRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ shRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ puUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ puRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ randomizeSaveButton.addActionListener(e -> saveROM());
+ premadeSeedButton.addActionListener(e -> presetLoader());
+ loadSettingsButton.addActionListener(e -> loadQS());
+ saveSettingsButton.addActionListener(e -> saveQS());
+ settingsButton.addActionListener(e -> settingsMenu.show(settingsButton,0,settingsButton.getHeight()));
+ customNamesEditorMenuItem.addActionListener(e -> new CustomNamesEditorDialog(frame));
+ loadGetSettingsMenuItem.addActionListener(e -> loadGetSettingsMenuItemActionPerformed());
+ keepOrUnloadGameAfterRandomizingMenuItem.addActionListener(e -> keepOrUnloadGameAfterRandomizingMenuItemActionPerformed());
+ limitPokemonButton.addActionListener(e -> {
+ NewGenerationLimitDialog gld = new NewGenerationLimitDialog(frame, currentRestrictions,
+ romHandler.generationOfPokemon(), romHandler.forceSwapStaticMegaEvos());
+ if (gld.pressedOK()) {
+ currentRestrictions = gld.getChoice();
+ if (currentRestrictions != null && !currentRestrictions.allowTrainerSwapMegaEvolvables(
+ romHandler.forceSwapStaticMegaEvos(), isTrainerSetting(TRAINER_TYPE_THEMED))) {
+ tpSwapMegaEvosCheckBox.setEnabled(false);
+ tpSwapMegaEvosCheckBox.setSelected(false);
+ }
+ }
+ });
+ limitPokemonCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpAllowAlternateFormesCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpBossTrainersCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpImportantTrainersCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpRegularTrainersCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpBossTrainersItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpImportantTrainersItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tpRegularTrainersItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ totpUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ totpRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ totpRandomSimilarStrengthRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ totpAllyUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ totpAllyRandomRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ totpAllyRandomSimilarStrengthRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ totpPercentageLevelModifierCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ pbsUpdateBaseStatsCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ mdUpdateMovesCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ frame.addComponentListener(new ComponentListener() {
+ @Override
+ public void componentResized(ComponentEvent e) {
+
+ }
+
+ @Override
+ public void componentMoved(ComponentEvent e) {
+
+ }
+
+ @Override
+ public void componentShown(ComponentEvent e) {
+ showInitialPopup();
+ }
+
+ @Override
+ public void componentHidden(ComponentEvent e) {
+
+ }
+ });
+ ptUnchangedRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ ptRandomFollowEvolutionsRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ ptRandomCompletelyRadioButton.addActionListener(e -> enableOrDisableSubControls());
+ spRandomizeStarterHeldItemsCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ tmLevelupMoveSanityCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ mtLevelupMoveSanityCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ noIrregularAltFormesCheckBox.addActionListener(e -> enableOrDisableSubControls());
+ ptIsDualTypeCheckBox.addActionListener(e->enableOrDisableSubControls());
+ tpComboBox.addItemListener(e -> {
+ if (e.getStateChange() == ItemEvent.SELECTED) {
+ enableOrDisableSubControls();
+ }
+ });
+ }
+
+ private void showInitialPopup() {
+ if (!usedLauncher) {
+ String message = bundle.getString("GUI.pleaseUseTheLauncher");
+ Object[] messages = {message};
+ JOptionPane.showMessageDialog(frame, messages);
+ }
+ }
+
+ private void showInvalidRomPopup() {
+ if (showInvalidRomPopup) {
+ String message = String.format(bundle.getString("GUI.invalidRomMessage"));
+ JLabel label = new JLabel("<html><b>Randomizing ROM hacks or bad ROM dumps is not supported and may cause issues.</b>");
+ JCheckBox checkbox = new JCheckBox("Don't show this again");
+ Object[] messages = {message, label, checkbox};
+ Object[] options = {"OK"};
+ JOptionPane.showOptionDialog(frame,
+ messages,
+ "Invalid ROM detected",
+ JOptionPane.OK_OPTION,
+ JOptionPane.WARNING_MESSAGE,
+ null,
+ options,
+ null);
+ showInvalidRomPopup = !checkbox.isSelected();
+ }
+ }
+
+ private void initFileChooserDirectories() {
+ romOpenChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
+ romSaveChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
+ if (new File(SysConstants.ROOT_PATH + "settings/").exists()) {
+ qsOpenChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH + "settings/"));
+ qsSaveChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH + "settings/"));
+ qsUpdateChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH + "settings/"));
+ } else {
+ qsOpenChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
+ qsSaveChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
+ qsUpdateChooser.setCurrentDirectory(new File(SysConstants.ROOT_PATH));
+ }
+ }
+
+ private void initExplicit() {
+
+ versionLabel.setText(String.format(bundle.getString("GUI.versionLabel.text"), Version.VERSION_STRING));
+ mtNoExistLabel.setVisible(false);
+ mtNoneAvailableLabel.setVisible(false);
+ baseTweaksPanel.add(liveTweaksPanel);
+ liveTweaksPanel.setVisible(false);
+
+ romOpenChooser.setFileFilter(new ROMFilter());
+
+ romSaveChooser.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
+ romSaveChooser.setFileFilter(new ROMFilter());
+
+ qsOpenChooser.setFileFilter(new QSFileFilter());
+
+ qsSaveChooser.setDialogType(javax.swing.JFileChooser.SAVE_DIALOG);
+ qsSaveChooser.setFileFilter(new QSFileFilter());
+
+ qsUpdateChooser.setFileFilter(new QSFileFilter());
+
+ settingsMenu = new JPopupMenu();
+
+ SpinnerModel bossTrainerModel = new SpinnerNumberModel(
+ 1,
+ 1,
+ 5,
+ 1
+ );
+ SpinnerModel importantTrainerModel = new SpinnerNumberModel(
+ 1,
+ 1,
+ 5,
+ 1
+ );
+ SpinnerModel regularTrainerModel = new SpinnerNumberModel(
+ 1,
+ 1,
+ 5,
+ 1
+ );
+
+ SpinnerModel eliteFourUniquePokemonModel = new SpinnerNumberModel(
+ 1,
+ 1,
+ 2,
+ 1
+ );
+
+ List<String> keys = new ArrayList<>(bundle.keySet());
+ Collections.sort(keys);
+ for (String k: keys) {
+ if (k.matches("^GUI\\.tpMain.*\\.text$")) {
+ trainerSettings.add(bundle.getString(k));
+ trainerSettingToolTips.add(k.replace("text","toolTipText"));
+ }
+ }
+
+ tpBossTrainersSpinner.setModel(bossTrainerModel);
+ tpImportantTrainersSpinner.setModel(importantTrainerModel);
+ tpRegularTrainersSpinner.setModel(regularTrainerModel);
+ tpEliteFourUniquePokemonSpinner.setModel(eliteFourUniquePokemonModel);
+
+ customNamesEditorMenuItem = new JMenuItem();
+ customNamesEditorMenuItem.setText(bundle.getString("GUI.customNamesEditorMenuItem.text"));
+ settingsMenu.add(customNamesEditorMenuItem);
+
+ loadGetSettingsMenuItem = new JMenuItem();
+ loadGetSettingsMenuItem.setText(bundle.getString("GUI.loadGetSettingsMenuItem.text"));
+ settingsMenu.add(loadGetSettingsMenuItem);
+
+ keepOrUnloadGameAfterRandomizingMenuItem = new JMenuItem();
+ if (this.unloadGameOnSuccess) {
+ keepOrUnloadGameAfterRandomizingMenuItem.setText(bundle.getString("GUI.keepGameLoadedAfterRandomizingMenuItem.text"));
+ } else {
+ keepOrUnloadGameAfterRandomizingMenuItem.setText(bundle.getString("GUI.unloadGameAfterRandomizingMenuItem.text"));
+ }
+ settingsMenu.add(keepOrUnloadGameAfterRandomizingMenuItem);
+ }
+
+ private void loadROM() {
+ romOpenChooser.setSelectedFile(null);
+ int returnVal = romOpenChooser.showOpenDialog(mainPanel);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ final File fh = romOpenChooser.getSelectedFile();
+ try {
+ Utils.validateRomFile(fh);
+ } catch (Utils.InvalidROMException e) {
+ switch (e.getType()) {
+ case LENGTH:
+ JOptionPane.showMessageDialog(mainPanel,
+ String.format(bundle.getString("GUI.tooShortToBeARom"), fh.getName()));
+ return;
+ case ZIP_FILE:
+ JOptionPane.showMessageDialog(mainPanel,
+ String.format(bundle.getString("GUI.openedZIPfile"), fh.getName()));
+ return;
+ case RAR_FILE:
+ JOptionPane.showMessageDialog(mainPanel,
+ String.format(bundle.getString("GUI.openedRARfile"), fh.getName()));
+ return;
+ case IPS_FILE:
+ JOptionPane.showMessageDialog(mainPanel,
+ String.format(bundle.getString("GUI.openedIPSfile"), fh.getName()));
+ return;
+ case UNREADABLE:
+ JOptionPane.showMessageDialog(mainPanel,
+ String.format(bundle.getString("GUI.unreadableRom"), fh.getName()));
+ return;
+ }
+ }
+
+ for (RomHandler.Factory rhf : checkHandlers) {
+ if (rhf.isLoadable(fh.getAbsolutePath())) {
+ this.romHandler = rhf.create(RandomSource.instance());
+ if (!usedLauncher && this.romHandler instanceof Abstract3DSRomHandler) {
+ String message = bundle.getString("GUI.pleaseUseTheLauncher");
+ Object[] messages = {message};
+ JOptionPane.showMessageDialog(frame, messages);
+ this.romHandler = null;
+ return;
+ }
+ opDialog = new OperationDialog(bundle.getString("GUI.loadingText"), frame, true);
+ Thread t = new Thread(() -> {
+ boolean romLoaded = false;
+ SwingUtilities.invokeLater(() -> opDialog.setVisible(true));
+ try {
+ this.romHandler.loadRom(fh.getAbsolutePath());
+ if (gameUpdates.containsKey(this.romHandler.getROMCode())) {
+ this.romHandler.loadGameUpdate(gameUpdates.get(this.romHandler.getROMCode()));
+ }
+ romLoaded = true;
+ } catch (EncryptedROMException ex) {
+ JOptionPane.showMessageDialog(mainPanel,
+ String.format(bundle.getString("GUI.encryptedRom"), fh.getAbsolutePath()));
+ } catch (Exception ex) {
+ attemptToLogException(ex, "GUI.loadFailed", "GUI.loadFailedNoLog", null, null);
+ }
+ final boolean loadSuccess = romLoaded;
+ SwingUtilities.invokeLater(() -> {
+ this.opDialog.setVisible(false);
+ this.initialState();
+ if (loadSuccess) {
+ this.romLoaded();
+ }
+ });
+ });
+ t.start();
+
+ return;
+ }
+ }
+ JOptionPane.showMessageDialog(mainPanel,
+ String.format(bundle.getString("GUI.unsupportedRom"), fh.getName()));
+ }
+ }
+
+ private void saveROM() {
+ if (romHandler == null) {
+ return; // none loaded
+ }
+ if (raceModeCheckBox.isSelected() && isTrainerSetting(TRAINER_UNCHANGED) && wpUnchangedRadioButton.isSelected()) {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.raceModeRequirements"));
+ return;
+ }
+ if (limitPokemonCheckBox.isSelected()
+ && (this.currentRestrictions == null || this.currentRestrictions.nothingSelected())) {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.pokeLimitNotChosen"));
+ return;
+ }
+ SaveType outputType = askForSaveType();
+ romSaveChooser.setSelectedFile(null);
+ boolean allowed = false;
+ File fh = null;
+ if (outputType == SaveType.FILE) {
+ romSaveChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+ int returnVal = romSaveChooser.showSaveDialog(frame);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ fh = romSaveChooser.getSelectedFile();
+ // Fix or add extension
+ List<String> extensions = new ArrayList<>(Arrays.asList("sgb", "gbc", "gba", "nds", "cxi"));
+ extensions.remove(this.romHandler.getDefaultExtension());
+ fh = FileFunctions.fixFilename(fh, this.romHandler.getDefaultExtension(), extensions);
+ allowed = true;
+ if (this.romHandler instanceof AbstractDSRomHandler || this.romHandler instanceof Abstract3DSRomHandler) {
+ String currentFN = this.romHandler.loadedFilename();
+ if (currentFN.equals(fh.getAbsolutePath())) {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.cantOverwriteDS"));
+ allowed = false;
+ }
+ }
+ }
+ } else if (outputType == SaveType.DIRECTORY) {
+ romSaveChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+ int returnVal = romSaveChooser.showSaveDialog(frame);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ fh = romSaveChooser.getSelectedFile();
+ allowed = true;
+ }
+ }
+
+ if (allowed && fh != null) {
+ // Get a seed
+ long seed = RandomSource.pickSeed();
+ // Apply it
+ RandomSource.seed(seed);
+ presetMode = false;
+
+ try {
+
+ CustomNamesSet cns = FileFunctions.getCustomNames();
+ performRandomization(fh.getAbsolutePath(), seed, cns, outputType == SaveType.DIRECTORY);
+ } catch (IOException ex) {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.cantLoadCustomNames"));
+ }
+ }
+ }
+
+ private void loadQS() {
+ if (this.romHandler == null) {
+ return;
+ }
+ qsOpenChooser.setSelectedFile(null);
+ int returnVal = qsOpenChooser.showOpenDialog(frame);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ File fh = qsOpenChooser.getSelectedFile();
+ try {
+ FileInputStream fis = new FileInputStream(fh);
+ Settings settings = Settings.read(fis);
+ fis.close();
+
+ SwingUtilities.invokeLater(() -> {
+ // load settings
+ initialState();
+ romLoaded();
+ Settings.TweakForROMFeedback feedback = settings.tweakForRom(this.romHandler);
+ if (feedback.isChangedStarter() && settings.getStartersMod() == Settings.StartersMod.CUSTOM) {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.starterUnavailable"));
+ }
+ this.restoreStateFromSettings(settings);
+
+ if (settings.isUpdatedFromOldVersion()) {
+ // show a warning dialog, but load it
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.settingsFileOlder"));
+ }
+
+ JOptionPane.showMessageDialog(frame,
+ String.format(bundle.getString("GUI.settingsLoaded"), fh.getName()));
+ });
+ } catch (UnsupportedOperationException ex) {
+ ex.printStackTrace();
+ JOptionPane.showMessageDialog(frame, ex.getMessage());
+ } catch (IllegalArgumentException ex) {
+ ex.printStackTrace();
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.invalidSettingsFile"));
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.settingsLoadFailed"));
+ }
+ }
+ }
+
+ private void saveQS() {
+ if (this.romHandler == null) {
+ return;
+ }
+ qsSaveChooser.setSelectedFile(null);
+ int returnVal = qsSaveChooser.showSaveDialog(frame);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ File fh = qsSaveChooser.getSelectedFile();
+ // Fix or add extension
+ fh = FileFunctions.fixFilename(fh, "rnqs");
+ // Save now?
+ try {
+ FileOutputStream fos = new FileOutputStream(fh);
+ getCurrentSettings().write(fos);
+ fos.close();
+ } catch (IOException ex) {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.settingsSaveFailed"));
+ }
+ }
+ }
+
+ private void performRandomization(final String filename, final long seed, CustomNamesSet customNames, boolean saveAsDirectory) {
+ final Settings settings = createSettingsFromState(customNames);
+ final boolean raceMode = settings.isRaceMode();
+ // Setup verbose log
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintStream log;
+ try {
+ log = new PrintStream(baos, false, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ log = new PrintStream(baos);
+ }
+
+ final PrintStream verboseLog = log;
+
+ try {
+ final AtomicInteger finishedCV = new AtomicInteger(0);
+ opDialog = new OperationDialog(bundle.getString("GUI.savingText"), frame, true);
+ Thread t = new Thread(() -> {
+ SwingUtilities.invokeLater(() -> opDialog.setVisible(true));
+ boolean succeededSave = false;
+ try {
+ romHandler.setLog(verboseLog);
+ finishedCV.set(new Randomizer(settings, romHandler, bundle, saveAsDirectory).randomize(filename,
+ verboseLog, seed));
+ succeededSave = true;
+ } catch (RandomizationException ex) {
+ attemptToLogException(ex, "GUI.saveFailedMessage",
+ "GUI.saveFailedMessageNoLog", true, settings.toString(), Long.toString(seed));
+ if (verboseLog != null) {
+ verboseLog.close();
+ }
+ } catch (CannotWriteToLocationException ex) {
+ JOptionPane.showMessageDialog(mainPanel, String.format(bundle.getString("GUI.cannotWriteToLocation"), filename));
+ if (verboseLog != null) {
+ verboseLog.close();
+ }
+ } catch (Exception ex) {
+ attemptToLogException(ex, "GUI.saveFailedIO", "GUI.saveFailedIONoLog", settings.toString(), Long.toString(seed));
+ if (verboseLog != null) {
+ verboseLog.close();
+ }
+ }
+ if (succeededSave) {
+ SwingUtilities.invokeLater(() -> {
+ opDialog.setVisible(false);
+ // Log?
+ verboseLog.close();
+ byte[] out = baos.toByteArray();
+
+ if (raceMode) {
+ JOptionPane.showMessageDialog(frame,
+ String.format(bundle.getString("GUI.raceModeCheckValuePopup"),
+ finishedCV.get()));
+ } else {
+ int response = JOptionPane.showConfirmDialog(frame,
+ bundle.getString("GUI.saveLogDialog.text"),
+ bundle.getString("GUI.saveLogDialog.title"),
+ JOptionPane.YES_NO_OPTION);
+ if (response == JOptionPane.YES_OPTION) {
+ try {
+ FileOutputStream fos = new FileOutputStream(filename + ".log");
+ fos.write(0xEF);
+ fos.write(0xBB);
+ fos.write(0xBF);
+ fos.write(out);
+ fos.close();
+ } catch (IOException e) {
+ JOptionPane.showMessageDialog(frame,
+ bundle.getString("GUI.logSaveFailed"));
+ return;
+ }
+ JOptionPane.showMessageDialog(frame,
+ String.format(bundle.getString("GUI.logSaved"), filename));
+ }
+ }
+ if (presetMode) {
+ JOptionPane.showMessageDialog(frame,
+ bundle.getString("GUI.randomizationDone"));
+ // Done
+ if (this.unloadGameOnSuccess) {
+ romHandler = null;
+ initialState();
+ } else {
+ reinitializeRomHandler();
+ }
+ } else {
+ // Compile a config string
+ try {
+ String configString = getCurrentSettings().toString();
+ // Show the preset maker
+ new PresetMakeDialog(frame, seed, configString);
+ } catch (IOException ex) {
+ JOptionPane.showMessageDialog(frame,
+ bundle.getString("GUI.cantLoadCustomNames"));
+ }
+
+ // Done
+ if (this.unloadGameOnSuccess) {
+ romHandler = null;
+ initialState();
+ } else {
+ reinitializeRomHandler();
+ }
+ }
+ });
+ } else {
+ SwingUtilities.invokeLater(() -> {
+ opDialog.setVisible(false);
+ romHandler = null;
+ initialState();
+ });
+ }
+ });
+ t.start();
+ } catch (Exception ex) {
+ attemptToLogException(ex, "GUI.saveFailed", "GUI.saveFailedNoLog", settings.toString(), Long.toString(seed));
+ if (verboseLog != null) {
+ verboseLog.close();
+ }
+ }
+ }
+
+ private void presetLoader() {
+ PresetLoadDialog pld = new PresetLoadDialog(this,frame);
+ if (pld.isCompleted()) {
+ // Apply it
+ long seed = pld.getSeed();
+ String config = pld.getConfigString();
+ this.romHandler = pld.getROM();
+ if (gameUpdates.containsKey(this.romHandler.getROMCode())) {
+ this.romHandler.loadGameUpdate(gameUpdates.get(this.romHandler.getROMCode()));
+ }
+ this.romLoaded();
+ Settings settings;
+ try {
+ settings = Settings.fromString(config);
+ settings.tweakForRom(this.romHandler);
+ this.restoreStateFromSettings(settings);
+ } catch (UnsupportedEncodingException | IllegalArgumentException e) {
+ // settings load failed
+ e.printStackTrace();
+ this.romHandler = null;
+ initialState();
+ }
+ SaveType outputType = askForSaveType();
+ romSaveChooser.setSelectedFile(null);
+ boolean allowed = false;
+ File fh = null;
+ if (outputType == SaveType.FILE) {
+ romSaveChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+ int returnVal = romSaveChooser.showSaveDialog(frame);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ fh = romSaveChooser.getSelectedFile();
+ // Fix or add extension
+ List<String> extensions = new ArrayList<>(Arrays.asList("sgb", "gbc", "gba", "nds", "cxi"));
+ extensions.remove(this.romHandler.getDefaultExtension());
+ fh = FileFunctions.fixFilename(fh, this.romHandler.getDefaultExtension(), extensions);
+ allowed = true;
+ if (this.romHandler instanceof AbstractDSRomHandler || this.romHandler instanceof Abstract3DSRomHandler) {
+ String currentFN = this.romHandler.loadedFilename();
+ if (currentFN.equals(fh.getAbsolutePath())) {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.cantOverwriteDS"));
+ allowed = false;
+ }
+ }
+ } else {
+ this.romHandler = null;
+ initialState();
+ }
+ } else if (outputType == SaveType.DIRECTORY) {
+ romSaveChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+ int returnVal = romSaveChooser.showSaveDialog(frame);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ fh = romSaveChooser.getSelectedFile();
+ allowed = true;
+ } else {
+ this.romHandler = null;
+ initialState();
+ }
+ }
+
+ if (allowed && fh != null) {
+ // Apply the seed we were given
+ RandomSource.seed(seed);
+ presetMode = true;
+ performRandomization(fh.getAbsolutePath(), seed, pld.getCustomNames(), outputType == SaveType.DIRECTORY);
+ }
+ }
+
+ }
+
+
+ private enum SaveType {
+ FILE, DIRECTORY, INVALID
+ }
+
+ private SaveType askForSaveType() {
+ SaveType saveType = SaveType.FILE;
+ if (romHandler.hasGameUpdateLoaded()) {
+ String text = bundle.getString("GUI.savingWithGameUpdate");
+ String url = "https://github.com/Ajarmar/universal-pokemon-randomizer-zx/wiki/Randomizing-the-3DS-games#managing-game-updates";
+ showMessageDialogWithLink(text, url);
+ saveType = SaveType.DIRECTORY;
+ } else if (romHandler.generationOfPokemon() == 6 || romHandler.generationOfPokemon() == 7) {
+ Object[] options3DS = {"CXI", "LayeredFS"};
+ String question = "Would you like to output your 3DS game as a CXI file or as a LayeredFS directory?";
+ JLabel label = new JLabel("<html><a href=\"https://github.com/Ajarmar/universal-pokemon-randomizer-zx/wiki/Randomizing-the-3DS-games#changes-to-saving-a-rom-when-working-with-3ds-games\">For more information, click here.</a>");
+ label.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ Desktop desktop = java.awt.Desktop.getDesktop();
+ try {
+ desktop.browse(new URI("https://github.com/Ajarmar/universal-pokemon-randomizer-zx/wiki/Randomizing-the-3DS-games#changes-to-saving-a-rom-when-working-with-3ds-games"));
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ });
+ label.setCursor(new java.awt.Cursor(Cursor.HAND_CURSOR));
+ Object[] messages = {question,label};
+ int returnVal3DS = JOptionPane.showOptionDialog(frame,
+ messages,
+ "3DS Output Choice",
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.QUESTION_MESSAGE,
+ null,
+ options3DS,
+ null);
+ if (returnVal3DS < 0) {
+ saveType = SaveType.INVALID;
+ } else {
+ saveType = SaveType.values()[returnVal3DS];
+ }
+ }
+ return saveType;
+ }
+
+ private void applyGameUpdateMenuItemActionPerformed() {
+
+ if (romHandler == null) return;
+
+ gameUpdateChooser.setSelectedFile(null);
+ gameUpdateChooser.setFileFilter(new GameUpdateFilter());
+ int returnVal = gameUpdateChooser.showOpenDialog(frame);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ File fh = gameUpdateChooser.getSelectedFile();
+
+ // On the 3DS, the update has the same title ID as the base game, save for the 8th character,
+ // which is 'E' instead of '0'. We can use this to detect if the update matches the game.
+ String actualUpdateTitleId = Abstract3DSRomHandler.getTitleIdFromFile(fh.getAbsolutePath());
+ if (actualUpdateTitleId == null) {
+ // Error: couldn't find a title ID in the update
+ JOptionPane.showMessageDialog(frame, String.format(bundle.getString("GUI.invalidGameUpdate"), fh.getName()));
+ return;
+ }
+ Abstract3DSRomHandler ctrRomHandler = (Abstract3DSRomHandler) romHandler;
+ String baseGameTitleId = ctrRomHandler.getTitleIdFromLoadedROM();
+ char[] baseGameTitleIdChars = baseGameTitleId.toCharArray();
+ baseGameTitleIdChars[7] = 'E';
+ String expectedUpdateTitleId = String.valueOf(baseGameTitleIdChars);
+ if (actualUpdateTitleId.equals(expectedUpdateTitleId)) {
+ try {
+ romHandler.loadGameUpdate(fh.getAbsolutePath());
+ } catch (EncryptedROMException ex) {
+ JOptionPane.showMessageDialog(mainPanel,
+ String.format(bundle.getString("GUI.encryptedRom"), fh.getAbsolutePath()));
+ return;
+ }
+ gameUpdates.put(romHandler.getROMCode(), fh.getAbsolutePath());
+ setRomNameLabel();
+ String text = String.format(bundle.getString("GUI.gameUpdateApplied"), romHandler.getROMName());
+ String url = "https://github.com/Ajarmar/universal-pokemon-randomizer-zx/wiki/Randomizing-the-3DS-games#3ds-game-updates";
+ showMessageDialogWithLink(text, url);
+ } else {
+ // Error: update is not for the correct game
+ JOptionPane.showMessageDialog(frame, String.format(bundle.getString("GUI.nonMatchingGameUpdate"), fh.getName(), romHandler.getROMName()));
+ }
+ }
+ }
+
+ private void loadGetSettingsMenuItemActionPerformed() {
+
+ if (romHandler == null) return;
+
+ String currentSettingsString = "Current Settings String:";
+ JTextField currentSettingsStringField = new JTextField();
+ currentSettingsStringField.setEditable(false);
+ try {
+ String theSettingsString = Version.VERSION + getCurrentSettings().toString();
+ currentSettingsStringField.setColumns(Settings.LENGTH_OF_SETTINGS_DATA * 2);
+ currentSettingsStringField.setText(theSettingsString);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ String loadSettingsString = "Load Settings String:";
+ JTextField loadSettingsStringField = new JTextField();
+ Object[] messages = {currentSettingsString,currentSettingsStringField,loadSettingsString,loadSettingsStringField};
+ Object[] options = {"Load","Cancel"};
+ int choice = JOptionPane.showOptionDialog(
+ frame,
+ messages,
+ "Get/Load Settings String",
+ JOptionPane.YES_NO_OPTION,
+ JOptionPane.QUESTION_MESSAGE,
+ null,
+ options,
+ null
+ );
+ if (choice == 0) {
+ String configString = loadSettingsStringField.getText().trim();
+ if (configString.length() > 0) {
+ if (configString.length() < 3) {
+ JOptionPane.showMessageDialog(frame,bundle.getString("GUI.invalidSettingsString"));
+ } else {
+ try {
+ int settingsStringVersionNumber = Integer.parseInt(configString.substring(0, 3));
+ if (settingsStringVersionNumber < Version.VERSION) {
+ JOptionPane.showMessageDialog(frame,bundle.getString("GUI.settingsStringOlder"));
+ String updatedSettingsString = new SettingsUpdater().update(settingsStringVersionNumber, configString.substring(3));
+ Settings settings = Settings.fromString(updatedSettingsString);
+ settings.tweakForRom(this.romHandler);
+ restoreStateFromSettings(settings);
+ JOptionPane.showMessageDialog(frame,bundle.getString("GUI.settingsStringLoaded"));
+ } else if (settingsStringVersionNumber > Version.VERSION) {
+ JOptionPane.showMessageDialog(frame,bundle.getString("GUI.settingsStringTooNew"));
+ } else {
+ Settings settings = Settings.fromString(configString.substring(3));
+ settings.tweakForRom(this.romHandler);
+ restoreStateFromSettings(settings);
+ JOptionPane.showMessageDialog(frame,bundle.getString("GUI.settingsStringLoaded"));
+ }
+ } catch (UnsupportedEncodingException | IllegalArgumentException ex) {
+ JOptionPane.showMessageDialog(frame,bundle.getString("GUI.invalidSettingsString"));
+ }
+ }
+
+ }
+ }
+ }
+
+ private void keepOrUnloadGameAfterRandomizingMenuItemActionPerformed() {
+ this.unloadGameOnSuccess = !this.unloadGameOnSuccess;
+ if (this.unloadGameOnSuccess) {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.unloadGameAfterRandomizing"));
+ keepOrUnloadGameAfterRandomizingMenuItem.setText(bundle.getString("GUI.keepGameLoadedAfterRandomizingMenuItem.text"));
+ } else {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.keepGameLoadedAfterRandomizing"));
+ keepOrUnloadGameAfterRandomizingMenuItem.setText(bundle.getString("GUI.unloadGameAfterRandomizingMenuItem.text"));
+ }
+ }
+
+ private void showMessageDialogWithLink(String text, String url) {
+ JLabel label = new JLabel("<html><a href=\"" + url + "\">For more information, click here.</a>");
+ label.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ Desktop desktop = java.awt.Desktop.getDesktop();
+ try {
+ desktop.browse(new URI(url));
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+ });
+ label.setCursor(new java.awt.Cursor(Cursor.HAND_CURSOR));
+ Object[] messages = {text,label};
+ JOptionPane.showMessageDialog(frame, messages);
+ }
+
+
+ // This is only intended to be used with the "Keep Game Loaded After Randomizing" setting; it assumes that
+ // the game has already been loaded once, and we just need to reload the same game to reinitialize the
+ // RomHandler. Don't use this for other purposes unless you know what you're doing.
+ private void reinitializeRomHandler() {
+ String currentFN = this.romHandler.loadedFilename();
+ for (RomHandler.Factory rhf : checkHandlers) {
+ if (rhf.isLoadable(currentFN)) {
+ this.romHandler = rhf.create(RandomSource.instance());
+ opDialog = new OperationDialog(bundle.getString("GUI.loadingText"), frame, true);
+ Thread t = new Thread(() -> {
+ SwingUtilities.invokeLater(() -> opDialog.setVisible(true));
+ try {
+ this.romHandler.loadRom(currentFN);
+ if (gameUpdates.containsKey(this.romHandler.getROMCode())) {
+ this.romHandler.loadGameUpdate(gameUpdates.get(this.romHandler.getROMCode()));
+ }
+ } catch (Exception ex) {
+ attemptToLogException(ex, "GUI.loadFailed", "GUI.loadFailedNoLog", null, null);
+ }
+ SwingUtilities.invokeLater(() -> {
+ this.opDialog.setVisible(false);
+ });
+ });
+ t.start();
+
+ return;
+ }
+ }
+ }
+
+ private void restoreStateFromSettings(Settings settings) {
+
+ limitPokemonCheckBox.setSelected(settings.isLimitPokemon());
+ currentRestrictions = settings.getCurrentRestrictions();
+ if (currentRestrictions != null) {
+ currentRestrictions.limitToGen(romHandler.generationOfPokemon());
+ }
+ noIrregularAltFormesCheckBox.setSelected(settings.isBanIrregularAltFormes());
+ raceModeCheckBox.setSelected(settings.isRaceMode());
+
+ peChangeImpossibleEvosCheckBox.setSelected(settings.isChangeImpossibleEvolutions());
+ mdUpdateMovesCheckBox.setSelected(settings.isUpdateMoves());
+ mdUpdateComboBox.setSelectedIndex(Math.max(0,settings.getUpdateMovesToGeneration() - (romHandler.generationOfPokemon()+1)));
+ tpRandomizeTrainerNamesCheckBox.setSelected(settings.isRandomizeTrainerNames());
+ tpRandomizeTrainerClassNamesCheckBox.setSelected(settings.isRandomizeTrainerClassNames());
+ ptIsDualTypeCheckBox.setSelected(settings.isDualTypeOnly());
+
+ pbsRandomRadioButton.setSelected(settings.getBaseStatisticsMod() == Settings.BaseStatisticsMod.RANDOM);
+ pbsShuffleRadioButton.setSelected(settings.getBaseStatisticsMod() == Settings.BaseStatisticsMod.SHUFFLE);
+ pbsUnchangedRadioButton.setSelected(settings.getBaseStatisticsMod() == Settings.BaseStatisticsMod.UNCHANGED);
+ pbsFollowEvolutionsCheckBox.setSelected(settings.isBaseStatsFollowEvolutions());
+ pbsUpdateBaseStatsCheckBox.setSelected(settings.isUpdateBaseStats());
+ pbsUpdateComboBox.setSelectedIndex(Math.max(0,settings.getUpdateBaseStatsToGeneration() - (Math.max(6,romHandler.generationOfPokemon()+1))));
+ pbsStandardizeEXPCurvesCheckBox.setSelected(settings.isStandardizeEXPCurves());
+ pbsLegendariesSlowRadioButton.setSelected(settings.getExpCurveMod() == Settings.ExpCurveMod.LEGENDARIES);
+ pbsStrongLegendariesSlowRadioButton.setSelected(settings.getExpCurveMod() == Settings.ExpCurveMod.STRONG_LEGENDARIES);
+ pbsAllMediumFastRadioButton.setSelected(settings.getExpCurveMod() == Settings.ExpCurveMod.ALL);
+ ExpCurve[] expCurves = getEXPCurvesForGeneration(romHandler.generationOfPokemon());
+ int index = 0;
+ for (int i = 0; i < expCurves.length; i++) {
+ if (expCurves[i] == settings.getSelectedEXPCurve()) {
+ index = i;
+ }
+ }
+ pbsEXPCurveComboBox.setSelectedIndex(index);
+ pbsFollowMegaEvosCheckBox.setSelected(settings.isBaseStatsFollowMegaEvolutions());
+ pbsAssignEvoStatsRandomlyCheckBox.setSelected(settings.isAssignEvoStatsRandomly());
+
+ paUnchangedRadioButton.setSelected(settings.getAbilitiesMod() == Settings.AbilitiesMod.UNCHANGED);
+ paRandomRadioButton.setSelected(settings.getAbilitiesMod() == Settings.AbilitiesMod.RANDOMIZE);
+ paAllowWonderGuardCheckBox.setSelected(settings.isAllowWonderGuard());
+ paFollowEvolutionsCheckBox.setSelected(settings.isAbilitiesFollowEvolutions());
+ paTrappingAbilitiesCheckBox.setSelected(settings.isBanTrappingAbilities());
+ paNegativeAbilitiesCheckBox.setSelected(settings.isBanNegativeAbilities());
+ paBadAbilitiesCheckBox.setSelected(settings.isBanBadAbilities());
+ paFollowMegaEvosCheckBox.setSelected(settings.isAbilitiesFollowMegaEvolutions());
+ paWeighDuplicatesTogetherCheckBox.setSelected(settings.isWeighDuplicateAbilitiesTogether());
+ paEnsureTwoAbilitiesCheckbox.setSelected(settings.isEnsureTwoAbilities());
+
+ ptRandomFollowEvolutionsRadioButton.setSelected(settings.getTypesMod() == Settings.TypesMod.RANDOM_FOLLOW_EVOLUTIONS);
+ ptRandomCompletelyRadioButton.setSelected(settings.getTypesMod() == Settings.TypesMod.COMPLETELY_RANDOM);
+ ptUnchangedRadioButton.setSelected(settings.getTypesMod() == Settings.TypesMod.UNCHANGED);
+ ptFollowMegaEvosCheckBox.setSelected(settings.isTypesFollowMegaEvolutions());
+ pmsNoGameBreakingMovesCheckBox.setSelected(settings.doBlockBrokenMoves());
+
+ peMakeEvolutionsEasierCheckBox.setSelected(settings.isMakeEvolutionsEasier());
+ peRemoveTimeBasedEvolutionsCheckBox.setSelected(settings.isRemoveTimeBasedEvolutions());
+
+ spCustomRadioButton.setSelected(settings.getStartersMod() == Settings.StartersMod.CUSTOM);
+ spRandomCompletelyRadioButton.setSelected(settings.getStartersMod() == Settings.StartersMod.COMPLETELY_RANDOM);
+ spUnchangedRadioButton.setSelected(settings.getStartersMod() == Settings.StartersMod.UNCHANGED);
+ spRandomTwoEvosRadioButton.setSelected(settings.getStartersMod() == Settings.StartersMod.RANDOM_WITH_TWO_EVOLUTIONS);
+ spRandomizeStarterHeldItemsCheckBox.setSelected(settings.isRandomizeStartersHeldItems());
+ spBanBadItemsCheckBox.setSelected(settings.isBanBadRandomStarterHeldItems());
+ spAllowAltFormesCheckBox.setSelected(settings.isAllowStarterAltFormes());
+
+ int[] customStarters = settings.getCustomStarters();
+ spComboBox1.setSelectedIndex(customStarters[0] - 1);
+ spComboBox2.setSelectedIndex(customStarters[1] - 1);
+ spComboBox3.setSelectedIndex(customStarters[2] - 1);
+
+ peUnchangedRadioButton.setSelected(settings.getEvolutionsMod() == Settings.EvolutionsMod.UNCHANGED);
+ peRandomRadioButton.setSelected(settings.getEvolutionsMod() == Settings.EvolutionsMod.RANDOM);
+ peRandomEveryLevelRadioButton.setSelected(settings.getEvolutionsMod() == Settings.EvolutionsMod.RANDOM_EVERY_LEVEL);
+ peSimilarStrengthCheckBox.setSelected(settings.isEvosSimilarStrength());
+ peSameTypingCheckBox.setSelected(settings.isEvosSameTyping());
+ peLimitEvolutionsToThreeCheckBox.setSelected(settings.isEvosMaxThreeStages());
+ peForceChangeCheckBox.setSelected(settings.isEvosForceChange());
+ peAllowAltFormesCheckBox.setSelected(settings.isEvosAllowAltFormes());
+
+ mdRandomizeMoveAccuracyCheckBox.setSelected(settings.isRandomizeMoveAccuracies());
+ mdRandomizeMoveCategoryCheckBox.setSelected(settings.isRandomizeMoveCategory());
+ mdRandomizeMovePowerCheckBox.setSelected(settings.isRandomizeMovePowers());
+ mdRandomizeMovePPCheckBox.setSelected(settings.isRandomizeMovePPs());
+ mdRandomizeMoveTypesCheckBox.setSelected(settings.isRandomizeMoveTypes());
+
+ pmsRandomCompletelyRadioButton.setSelected(settings.getMovesetsMod() == Settings.MovesetsMod.COMPLETELY_RANDOM);
+ pmsRandomPreferringSameTypeRadioButton.setSelected(settings.getMovesetsMod() == Settings.MovesetsMod.RANDOM_PREFER_SAME_TYPE);
+ pmsUnchangedRadioButton.setSelected(settings.getMovesetsMod() == Settings.MovesetsMod.UNCHANGED);
+ pmsMetronomeOnlyModeRadioButton.setSelected(settings.getMovesetsMod() == Settings.MovesetsMod.METRONOME_ONLY);
+ pmsGuaranteedLevel1MovesCheckBox.setSelected(settings.isStartWithGuaranteedMoves());
+ pmsGuaranteedLevel1MovesSlider.setValue(settings.getGuaranteedMoveCount());
+ pmsReorderDamagingMovesCheckBox.setSelected(settings.isReorderDamagingMoves());
+ pmsForceGoodDamagingCheckBox.setSelected(settings.isMovesetsForceGoodDamaging());
+ pmsForceGoodDamagingSlider.setValue(settings.getMovesetsGoodDamagingPercent());
+ pmsNoGameBreakingMovesCheckBox.setSelected(settings.isBlockBrokenMovesetMoves());
+ pmsEvolutionMovesCheckBox.setSelected(settings.isEvolutionMovesForAll());
+
+ tpSimilarStrengthCheckBox.setSelected(settings.isTrainersUsePokemonOfSimilarStrength());
+ tpComboBox.setSelectedItem(trainerSettings.get(settings.getTrainersMod().ordinal()));
+ tpRivalCarriesStarterCheckBox.setSelected(settings.isRivalCarriesStarterThroughout());
+ tpWeightTypesCheckBox.setSelected(settings.isTrainersMatchTypingDistribution());
+ tpDontUseLegendariesCheckBox.setSelected(settings.isTrainersBlockLegendaries());
+ tpNoEarlyWonderGuardCheckBox.setSelected(settings.isTrainersBlockEarlyWonderGuard());
+ tpForceFullyEvolvedAtCheckBox.setSelected(settings.isTrainersForceFullyEvolved());
+ tpForceFullyEvolvedAtSlider.setValue(settings.getTrainersForceFullyEvolvedLevel());
+ tpPercentageLevelModifierCheckBox.setSelected(settings.isTrainersLevelModified());
+ tpPercentageLevelModifierSlider.setValue(settings.getTrainersLevelModifier());
+ tpEliteFourUniquePokemonCheckBox.setSelected(settings.getEliteFourUniquePokemonNumber() > 0);
+ tpEliteFourUniquePokemonSpinner.setValue(settings.getEliteFourUniquePokemonNumber() > 0 ? settings.getEliteFourUniquePokemonNumber() : 1);
+ tpAllowAlternateFormesCheckBox.setSelected(settings.isAllowTrainerAlternateFormes());
+ tpSwapMegaEvosCheckBox.setSelected(settings.isSwapTrainerMegaEvos());
+ tpDoubleBattleModeCheckBox.setSelected(settings.isDoubleBattleMode());
+ tpBossTrainersCheckBox.setSelected(settings.getAdditionalBossTrainerPokemon() > 0);
+ tpBossTrainersSpinner.setValue(settings.getAdditionalBossTrainerPokemon() > 0 ? settings.getAdditionalBossTrainerPokemon() : 1);
+ tpImportantTrainersCheckBox.setSelected(settings.getAdditionalImportantTrainerPokemon() > 0);
+ tpImportantTrainersSpinner.setValue(settings.getAdditionalImportantTrainerPokemon() > 0 ? settings.getAdditionalImportantTrainerPokemon() : 1);
+ tpRegularTrainersCheckBox.setSelected(settings.getAdditionalRegularTrainerPokemon() > 0);
+ tpRegularTrainersSpinner.setValue(settings.getAdditionalRegularTrainerPokemon() > 0 ? settings.getAdditionalRegularTrainerPokemon() : 1);
+ tpBossTrainersItemsCheckBox.setSelected(settings.isRandomizeHeldItemsForBossTrainerPokemon());
+ tpImportantTrainersItemsCheckBox.setSelected(settings.isRandomizeHeldItemsForImportantTrainerPokemon());
+ tpRegularTrainersItemsCheckBox.setSelected(settings.isRandomizeHeldItemsForRegularTrainerPokemon());
+ tpConsumableItemsOnlyCheckBox.setSelected(settings.isConsumableItemsOnlyForTrainers());
+ tpSensibleItemsCheckBox.setSelected(settings.isSensibleItemsOnlyForTrainers());
+ tpHighestLevelGetsItemCheckBox.setSelected(settings.isHighestLevelGetsItemsForTrainers());
+
+ tpRandomShinyTrainerPokemonCheckBox.setSelected(settings.isShinyChance());
+ tpBetterMovesetsCheckBox.setSelected(settings.isBetterTrainerMovesets());
+
+ totpUnchangedRadioButton.setSelected(settings.getTotemPokemonMod() == Settings.TotemPokemonMod.UNCHANGED);
+ totpRandomRadioButton.setSelected(settings.getTotemPokemonMod() == Settings.TotemPokemonMod.RANDOM);
+ totpRandomSimilarStrengthRadioButton.setSelected(settings.getTotemPokemonMod() == Settings.TotemPokemonMod.SIMILAR_STRENGTH);
+ totpAllyUnchangedRadioButton.setSelected(settings.getAllyPokemonMod() == Settings.AllyPokemonMod.UNCHANGED);
+ totpAllyRandomRadioButton.setSelected(settings.getAllyPokemonMod() == Settings.AllyPokemonMod.RANDOM);
+ totpAllyRandomSimilarStrengthRadioButton.setSelected(settings.getAllyPokemonMod() == Settings.AllyPokemonMod.SIMILAR_STRENGTH);
+ totpAuraUnchangedRadioButton.setSelected(settings.getAuraMod() == Settings.AuraMod.UNCHANGED);
+ totpAuraRandomRadioButton.setSelected(settings.getAuraMod() == Settings.AuraMod.RANDOM);
+ totpAuraRandomSameStrengthRadioButton.setSelected(settings.getAuraMod() == Settings.AuraMod.SAME_STRENGTH);
+ totpRandomizeHeldItemsCheckBox.setSelected(settings.isRandomizeTotemHeldItems());
+ totpAllowAltFormesCheckBox.setSelected(settings.isAllowTotemAltFormes());
+ totpPercentageLevelModifierCheckBox.setSelected(settings.isTotemLevelsModified());
+ totpPercentageLevelModifierSlider.setValue(settings.getTotemLevelModifier());
+
+ wpARCatchEmAllModeRadioButton
+ .setSelected(settings.getWildPokemonRestrictionMod() == Settings.WildPokemonRestrictionMod.CATCH_EM_ALL);
+ wpArea1To1RadioButton.setSelected(settings.getWildPokemonMod() == Settings.WildPokemonMod.AREA_MAPPING);
+ wpARNoneRadioButton.setSelected(settings.getWildPokemonRestrictionMod() == Settings.WildPokemonRestrictionMod.NONE);
+ wpARTypeThemeAreasRadioButton
+ .setSelected(settings.getWildPokemonRestrictionMod() == Settings.WildPokemonRestrictionMod.TYPE_THEME_AREAS);
+ wpGlobal1To1RadioButton.setSelected(settings.getWildPokemonMod() == Settings.WildPokemonMod.GLOBAL_MAPPING);
+ wpRandomRadioButton.setSelected(settings.getWildPokemonMod() == Settings.WildPokemonMod.RANDOM);
+ wpUnchangedRadioButton.setSelected(settings.getWildPokemonMod() == Settings.WildPokemonMod.UNCHANGED);
+ wpUseTimeBasedEncountersCheckBox.setSelected(settings.isUseTimeBasedEncounters());
+
+ wpSetMinimumCatchRateCheckBox.setSelected(settings.isUseMinimumCatchRate());
+ wpSetMinimumCatchRateSlider.setValue(settings.getMinimumCatchRateLevel());
+ wpDontUseLegendariesCheckBox.setSelected(settings.isBlockWildLegendaries());
+ wpARSimilarStrengthRadioButton
+ .setSelected(settings.getWildPokemonRestrictionMod() == Settings.WildPokemonRestrictionMod.SIMILAR_STRENGTH);
+ wpRandomizeHeldItemsCheckBox.setSelected(settings.isRandomizeWildPokemonHeldItems());
+ wpBanBadItemsCheckBox.setSelected(settings.isBanBadRandomWildPokemonHeldItems());
+ wpBalanceShakingGrassPokemonCheckBox.setSelected(settings.isBalanceShakingGrass());
+ wpPercentageLevelModifierCheckBox.setSelected(settings.isWildLevelsModified());
+ wpPercentageLevelModifierSlider.setValue(settings.getWildLevelModifier());
+ wpAllowAltFormesCheckBox.setSelected(settings.isAllowWildAltFormes());
+
+ stpUnchangedRadioButton.setSelected(settings.getStaticPokemonMod() == Settings.StaticPokemonMod.UNCHANGED);
+ stpSwapLegendariesSwapStandardsRadioButton.setSelected(settings.getStaticPokemonMod() == Settings.StaticPokemonMod.RANDOM_MATCHING);
+ stpRandomCompletelyRadioButton
+ .setSelected(settings.getStaticPokemonMod() == Settings.StaticPokemonMod.COMPLETELY_RANDOM);
+ stpRandomSimilarStrengthRadioButton
+ .setSelected(settings.getStaticPokemonMod() == Settings.StaticPokemonMod.SIMILAR_STRENGTH);
+ stpLimitMainGameLegendariesCheckBox.setSelected(settings.isLimitMainGameLegendaries());
+ stpRandomize600BSTCheckBox.setSelected(settings.isLimit600());
+ stpAllowAltFormesCheckBox.setSelected(settings.isAllowStaticAltFormes());
+ stpSwapMegaEvosCheckBox.setSelected(settings.isSwapStaticMegaEvos());
+ stpPercentageLevelModifierCheckBox.setSelected(settings.isStaticLevelModified());
+ stpPercentageLevelModifierSlider.setValue(settings.getStaticLevelModifier());
+ stpFixMusicCheckBox.setSelected(settings.isCorrectStaticMusic());
+
+ thcRandomCompletelyRadioButton
+ .setSelected(settings.getTmsHmsCompatibilityMod() == Settings.TMsHMsCompatibilityMod.COMPLETELY_RANDOM);
+ thcRandomPreferSameTypeRadioButton
+ .setSelected(settings.getTmsHmsCompatibilityMod() == Settings.TMsHMsCompatibilityMod.RANDOM_PREFER_TYPE);
+ thcUnchangedRadioButton
+ .setSelected(settings.getTmsHmsCompatibilityMod() == Settings.TMsHMsCompatibilityMod.UNCHANGED);
+ tmRandomRadioButton.setSelected(settings.getTmsMod() == Settings.TMsMod.RANDOM);
+ tmUnchangedRadioButton.setSelected(settings.getTmsMod() == Settings.TMsMod.UNCHANGED);
+ tmLevelupMoveSanityCheckBox.setSelected(settings.isTmLevelUpMoveSanity());
+ tmKeepFieldMoveTMsCheckBox.setSelected(settings.isKeepFieldMoveTMs());
+ thcFullCompatibilityRadioButton.setSelected(settings.getTmsHmsCompatibilityMod() == Settings.TMsHMsCompatibilityMod.FULL);
+ tmFullHMCompatibilityCheckBox.setSelected(settings.isFullHMCompat());
+ tmForceGoodDamagingCheckBox.setSelected(settings.isTmsForceGoodDamaging());
+ tmForceGoodDamagingSlider.setValue(settings.getTmsGoodDamagingPercent());
+ tmNoGameBreakingMovesCheckBox.setSelected(settings.isBlockBrokenTMMoves());
+ tmFollowEvolutionsCheckBox.setSelected(settings.isTmsFollowEvolutions());
+
+ mtcRandomCompletelyRadioButton
+ .setSelected(settings.getMoveTutorsCompatibilityMod() == Settings.MoveTutorsCompatibilityMod.COMPLETELY_RANDOM);
+ mtcRandomPreferSameTypeRadioButton
+ .setSelected(settings.getMoveTutorsCompatibilityMod() == Settings.MoveTutorsCompatibilityMod.RANDOM_PREFER_TYPE);
+ mtcUnchangedRadioButton
+ .setSelected(settings.getMoveTutorsCompatibilityMod() == Settings.MoveTutorsCompatibilityMod.UNCHANGED);
+ mtRandomRadioButton.setSelected(settings.getMoveTutorMovesMod() == Settings.MoveTutorMovesMod.RANDOM);
+ mtUnchangedRadioButton.setSelected(settings.getMoveTutorMovesMod() == Settings.MoveTutorMovesMod.UNCHANGED);
+ mtLevelupMoveSanityCheckBox.setSelected(settings.isTutorLevelUpMoveSanity());
+ mtKeepFieldMoveTutorsCheckBox.setSelected(settings.isKeepFieldMoveTutors());
+ mtcFullCompatibilityRadioButton
+ .setSelected(settings.getMoveTutorsCompatibilityMod() == Settings.MoveTutorsCompatibilityMod.FULL);
+ mtForceGoodDamagingCheckBox.setSelected(settings.isTutorsForceGoodDamaging());
+ mtForceGoodDamagingSlider.setValue(settings.getTutorsGoodDamagingPercent());
+ mtNoGameBreakingMovesCheckBox.setSelected(settings.isBlockBrokenTutorMoves());
+ mtFollowEvolutionsCheckBox.setSelected(settings.isTutorFollowEvolutions());
+
+ igtRandomizeBothRequestedGivenRadioButton
+ .setSelected(settings.getInGameTradesMod() == Settings.InGameTradesMod.RANDOMIZE_GIVEN_AND_REQUESTED);
+ igtRandomizeGivenPokemonOnlyRadioButton.setSelected(settings.getInGameTradesMod() == Settings.InGameTradesMod.RANDOMIZE_GIVEN);
+ igtRandomizeItemsCheckBox.setSelected(settings.isRandomizeInGameTradesItems());
+ igtRandomizeIVsCheckBox.setSelected(settings.isRandomizeInGameTradesIVs());
+ igtRandomizeNicknamesCheckBox.setSelected(settings.isRandomizeInGameTradesNicknames());
+ igtRandomizeOTsCheckBox.setSelected(settings.isRandomizeInGameTradesOTs());
+ igtUnchangedRadioButton.setSelected(settings.getInGameTradesMod() == Settings.InGameTradesMod.UNCHANGED);
+
+ fiRandomRadioButton.setSelected(settings.getFieldItemsMod() == Settings.FieldItemsMod.RANDOM);
+ fiRandomEvenDistributionRadioButton.setSelected(settings.getFieldItemsMod() == Settings.FieldItemsMod.RANDOM_EVEN);
+ fiShuffleRadioButton.setSelected(settings.getFieldItemsMod() == Settings.FieldItemsMod.SHUFFLE);
+ fiUnchangedRadioButton.setSelected(settings.getFieldItemsMod() == Settings.FieldItemsMod.UNCHANGED);
+ fiBanBadItemsCheckBox.setSelected(settings.isBanBadRandomFieldItems());
+
+ shRandomRadioButton.setSelected(settings.getShopItemsMod() == Settings.ShopItemsMod.RANDOM);
+ shShuffleRadioButton.setSelected(settings.getShopItemsMod() == Settings.ShopItemsMod.SHUFFLE);
+ shUnchangedRadioButton.setSelected(settings.getShopItemsMod() == Settings.ShopItemsMod.UNCHANGED);
+ shBanBadItemsCheckBox.setSelected(settings.isBanBadRandomShopItems());
+ shBanRegularShopItemsCheckBox.setSelected(settings.isBanRegularShopItems());
+ shBanOverpoweredShopItemsCheckBox.setSelected(settings.isBanOPShopItems());
+ shBalanceShopItemPricesCheckBox.setSelected(settings.isBalanceShopPrices());
+ shGuaranteeEvolutionItemsCheckBox.setSelected(settings.isGuaranteeEvolutionItems());
+ shGuaranteeXItemsCheckBox.setSelected(settings.isGuaranteeXItems());
+
+ puUnchangedRadioButton.setSelected(settings.getPickupItemsMod() == Settings.PickupItemsMod.UNCHANGED);
+ puRandomRadioButton.setSelected(settings.getPickupItemsMod() == Settings.PickupItemsMod.RANDOM);
+ puBanBadItemsCheckBox.setSelected(settings.isBanBadRandomPickupItems());
+
+ int mtsSelected = settings.getCurrentMiscTweaks();
+ int mtCount = MiscTweak.allTweaks.size();
+
+ for (int mti = 0; mti < mtCount; mti++) {
+ MiscTweak mt = MiscTweak.allTweaks.get(mti);
+ JCheckBox mtCB = tweakCheckBoxes.get(mti);
+ mtCB.setSelected((mtsSelected & mt.getValue()) != 0);
+ }
+
+ this.enableOrDisableSubControls();
+ }
+
+ private Settings createSettingsFromState(CustomNamesSet customNames) {
+ Settings settings = new Settings();
+ settings.setRomName(this.romHandler.getROMName());
+
+ settings.setLimitPokemon(limitPokemonCheckBox.isSelected() && limitPokemonCheckBox.isVisible());
+ settings.setCurrentRestrictions(currentRestrictions);
+ settings.setBanIrregularAltFormes(noIrregularAltFormesCheckBox.isSelected() && noIrregularAltFormesCheckBox.isVisible());
+ settings.setRaceMode(raceModeCheckBox.isSelected());
+
+ settings.setChangeImpossibleEvolutions(peChangeImpossibleEvosCheckBox.isSelected() && peChangeImpossibleEvosCheckBox.isVisible());
+ settings.setUpdateMoves(mdUpdateMovesCheckBox.isSelected() && mdUpdateMovesCheckBox.isVisible());
+ settings.setUpdateMovesToGeneration(mdUpdateComboBox.getSelectedIndex() + (romHandler.generationOfPokemon()+1));
+ settings.setRandomizeTrainerNames(tpRandomizeTrainerNamesCheckBox.isSelected());
+ settings.setRandomizeTrainerClassNames(tpRandomizeTrainerClassNamesCheckBox.isSelected());
+
+ settings.setBaseStatisticsMod(pbsUnchangedRadioButton.isSelected(), pbsShuffleRadioButton.isSelected(),
+ pbsRandomRadioButton.isSelected());
+ settings.setBaseStatsFollowEvolutions(pbsFollowEvolutionsCheckBox.isSelected());
+ settings.setUpdateBaseStats(pbsUpdateBaseStatsCheckBox.isSelected() && pbsUpdateBaseStatsCheckBox.isVisible());
+ settings.setUpdateBaseStatsToGeneration(pbsUpdateComboBox.getSelectedIndex() + (Math.max(6,romHandler.generationOfPokemon()+1)));
+ settings.setStandardizeEXPCurves(pbsStandardizeEXPCurvesCheckBox.isSelected());
+ settings.setExpCurveMod(pbsLegendariesSlowRadioButton.isSelected(), pbsStrongLegendariesSlowRadioButton.isSelected(),
+ pbsAllMediumFastRadioButton.isSelected());
+ ExpCurve[] expCurves = getEXPCurvesForGeneration(romHandler.generationOfPokemon());
+ settings.setSelectedEXPCurve(expCurves[pbsEXPCurveComboBox.getSelectedIndex()]);
+ settings.setBaseStatsFollowMegaEvolutions(pbsFollowMegaEvosCheckBox.isSelected() && pbsFollowMegaEvosCheckBox.isVisible());
+ settings.setAssignEvoStatsRandomly(pbsAssignEvoStatsRandomlyCheckBox.isSelected() && pbsAssignEvoStatsRandomlyCheckBox.isVisible());
+
+ settings.setAbilitiesMod(paUnchangedRadioButton.isSelected(), paRandomRadioButton.isSelected());
+ settings.setAllowWonderGuard(paAllowWonderGuardCheckBox.isSelected());
+ settings.setAbilitiesFollowEvolutions(paFollowEvolutionsCheckBox.isSelected());
+ settings.setBanTrappingAbilities(paTrappingAbilitiesCheckBox.isSelected());
+ settings.setBanNegativeAbilities(paNegativeAbilitiesCheckBox.isSelected());
+ settings.setBanBadAbilities(paBadAbilitiesCheckBox.isSelected());
+ settings.setAbilitiesFollowMegaEvolutions(paFollowMegaEvosCheckBox.isSelected());
+ settings.setWeighDuplicateAbilitiesTogether(paWeighDuplicatesTogetherCheckBox.isSelected());
+ settings.setEnsureTwoAbilities(paEnsureTwoAbilitiesCheckbox.isSelected());
+
+ settings.setTypesMod(ptUnchangedRadioButton.isSelected(), ptRandomFollowEvolutionsRadioButton.isSelected(),
+ ptRandomCompletelyRadioButton.isSelected());
+ settings.setTypesFollowMegaEvolutions(ptFollowMegaEvosCheckBox.isSelected() && ptFollowMegaEvosCheckBox.isVisible());
+ settings.setBlockBrokenMovesetMoves(pmsNoGameBreakingMovesCheckBox.isSelected());
+ settings.setDualTypeOnly(ptIsDualTypeCheckBox.isSelected());
+
+ settings.setMakeEvolutionsEasier(peMakeEvolutionsEasierCheckBox.isSelected());
+ settings.setRemoveTimeBasedEvolutions(peRemoveTimeBasedEvolutionsCheckBox.isSelected());
+
+ settings.setStartersMod(spUnchangedRadioButton.isSelected(), spCustomRadioButton.isSelected(), spRandomCompletelyRadioButton.isSelected(),
+ spRandomTwoEvosRadioButton.isSelected());
+ settings.setRandomizeStartersHeldItems(spRandomizeStarterHeldItemsCheckBox.isSelected() && spRandomizeStarterHeldItemsCheckBox.isVisible());
+ settings.setBanBadRandomStarterHeldItems(spBanBadItemsCheckBox.isSelected() && spBanBadItemsCheckBox.isVisible());
+ settings.setAllowStarterAltFormes(spAllowAltFormesCheckBox.isSelected() && spAllowAltFormesCheckBox.isVisible());
+
+ int[] customStarters = new int[] { spComboBox1.getSelectedIndex() + 1,
+ spComboBox2.getSelectedIndex() + 1, spComboBox3.getSelectedIndex() + 1 };
+ settings.setCustomStarters(customStarters);
+
+ settings.setEvolutionsMod(peUnchangedRadioButton.isSelected(), peRandomRadioButton.isSelected(), peRandomEveryLevelRadioButton.isSelected());
+ settings.setEvosSimilarStrength(peSimilarStrengthCheckBox.isSelected());
+ settings.setEvosSameTyping(peSameTypingCheckBox.isSelected());
+ settings.setEvosMaxThreeStages(peLimitEvolutionsToThreeCheckBox.isSelected());
+ settings.setEvosForceChange(peForceChangeCheckBox.isSelected());
+ settings.setEvosAllowAltFormes(peAllowAltFormesCheckBox.isSelected() && peAllowAltFormesCheckBox.isVisible());
+
+ settings.setRandomizeMoveAccuracies(mdRandomizeMoveAccuracyCheckBox.isSelected());
+ settings.setRandomizeMoveCategory(mdRandomizeMoveCategoryCheckBox.isSelected());
+ settings.setRandomizeMovePowers(mdRandomizeMovePowerCheckBox.isSelected());
+ settings.setRandomizeMovePPs(mdRandomizeMovePPCheckBox.isSelected());
+ settings.setRandomizeMoveTypes(mdRandomizeMoveTypesCheckBox.isSelected());
+
+ settings.setMovesetsMod(pmsUnchangedRadioButton.isSelected(), pmsRandomPreferringSameTypeRadioButton.isSelected(),
+ pmsRandomCompletelyRadioButton.isSelected(), pmsMetronomeOnlyModeRadioButton.isSelected());
+ settings.setStartWithGuaranteedMoves(pmsGuaranteedLevel1MovesCheckBox.isSelected() && pmsGuaranteedLevel1MovesCheckBox.isVisible());
+ settings.setGuaranteedMoveCount(pmsGuaranteedLevel1MovesSlider.getValue());
+ settings.setReorderDamagingMoves(pmsReorderDamagingMovesCheckBox.isSelected());
+
+ settings.setMovesetsForceGoodDamaging(pmsForceGoodDamagingCheckBox.isSelected());
+ settings.setMovesetsGoodDamagingPercent(pmsForceGoodDamagingSlider.getValue());
+ settings.setBlockBrokenMovesetMoves(pmsNoGameBreakingMovesCheckBox.isSelected());
+ settings.setEvolutionMovesForAll(pmsEvolutionMovesCheckBox.isVisible() &&
+ pmsEvolutionMovesCheckBox.isSelected());
+
+ settings.setTrainersMod(isTrainerSetting(TRAINER_UNCHANGED), isTrainerSetting(TRAINER_RANDOM),
+ isTrainerSetting(TRAINER_RANDOM_EVEN), isTrainerSetting(TRAINER_RANDOM_EVEN_MAIN),
+ isTrainerSetting(TRAINER_TYPE_THEMED), isTrainerSetting(TRAINER_TYPE_THEMED_ELITE4_GYMS));
+ settings.setTrainersUsePokemonOfSimilarStrength(tpSimilarStrengthCheckBox.isSelected());
+ settings.setRivalCarriesStarterThroughout(tpRivalCarriesStarterCheckBox.isSelected());
+ settings.setTrainersMatchTypingDistribution(tpWeightTypesCheckBox.isSelected());
+ settings.setTrainersBlockLegendaries(tpDontUseLegendariesCheckBox.isSelected());
+ settings.setTrainersBlockEarlyWonderGuard(tpNoEarlyWonderGuardCheckBox.isSelected());
+ settings.setTrainersForceFullyEvolved(tpForceFullyEvolvedAtCheckBox.isSelected());
+ settings.setTrainersForceFullyEvolvedLevel(tpForceFullyEvolvedAtSlider.getValue());
+ settings.setTrainersLevelModified(tpPercentageLevelModifierCheckBox.isSelected());
+ settings.setTrainersLevelModifier(tpPercentageLevelModifierSlider.getValue());
+ settings.setEliteFourUniquePokemonNumber(tpEliteFourUniquePokemonCheckBox.isVisible() && tpEliteFourUniquePokemonCheckBox.isSelected() ? (int)tpEliteFourUniquePokemonSpinner.getValue() : 0);
+ settings.setAllowTrainerAlternateFormes(tpAllowAlternateFormesCheckBox.isSelected() && tpAllowAlternateFormesCheckBox.isVisible());
+ settings.setSwapTrainerMegaEvos(tpSwapMegaEvosCheckBox.isSelected() && tpSwapMegaEvosCheckBox.isVisible());
+ settings.setDoubleBattleMode(tpDoubleBattleModeCheckBox.isVisible() && tpDoubleBattleModeCheckBox.isSelected());
+ settings.setAdditionalBossTrainerPokemon(tpBossTrainersCheckBox.isVisible() && tpBossTrainersCheckBox.isSelected() ? (int)tpBossTrainersSpinner.getValue() : 0);
+ settings.setAdditionalImportantTrainerPokemon(tpImportantTrainersCheckBox.isVisible() && tpImportantTrainersCheckBox.isSelected() ? (int)tpImportantTrainersSpinner.getValue() : 0);
+ settings.setAdditionalRegularTrainerPokemon(tpRegularTrainersCheckBox.isVisible() && tpRegularTrainersCheckBox.isSelected() ? (int)tpRegularTrainersSpinner.getValue() : 0);
+ settings.setShinyChance(tpRandomShinyTrainerPokemonCheckBox.isVisible() && tpRandomShinyTrainerPokemonCheckBox.isSelected());
+ settings.setBetterTrainerMovesets(tpBetterMovesetsCheckBox.isVisible() && tpBetterMovesetsCheckBox.isSelected());
+ settings.setRandomizeHeldItemsForBossTrainerPokemon(tpBossTrainersItemsCheckBox.isVisible() && tpBossTrainersItemsCheckBox.isSelected());
+ settings.setRandomizeHeldItemsForImportantTrainerPokemon(tpImportantTrainersItemsCheckBox.isVisible() && tpImportantTrainersItemsCheckBox.isSelected());
+ settings.setRandomizeHeldItemsForRegularTrainerPokemon(tpRegularTrainersItemsCheckBox.isVisible() && tpRegularTrainersItemsCheckBox.isSelected());
+ settings.setConsumableItemsOnlyForTrainers(tpConsumableItemsOnlyCheckBox.isVisible() && tpConsumableItemsOnlyCheckBox.isSelected());
+ settings.setSensibleItemsOnlyForTrainers(tpSensibleItemsCheckBox.isVisible() && tpSensibleItemsCheckBox.isSelected());
+ settings.setHighestLevelGetsItemsForTrainers(tpHighestLevelGetsItemCheckBox.isVisible() && tpHighestLevelGetsItemCheckBox.isSelected());
+
+ settings.setTotemPokemonMod(totpUnchangedRadioButton.isSelected(), totpRandomRadioButton.isSelected(), totpRandomSimilarStrengthRadioButton.isSelected());
+ settings.setAllyPokemonMod(totpAllyUnchangedRadioButton.isSelected(), totpAllyRandomRadioButton.isSelected(), totpAllyRandomSimilarStrengthRadioButton.isSelected());
+ settings.setAuraMod(totpAuraUnchangedRadioButton.isSelected(), totpAuraRandomRadioButton.isSelected(), totpAuraRandomSameStrengthRadioButton.isSelected());
+ settings.setRandomizeTotemHeldItems(totpRandomizeHeldItemsCheckBox.isSelected());
+ settings.setAllowTotemAltFormes(totpAllowAltFormesCheckBox.isSelected());
+ settings.setTotemLevelsModified(totpPercentageLevelModifierCheckBox.isSelected());
+ settings.setTotemLevelModifier(totpPercentageLevelModifierSlider.getValue());
+
+ settings.setWildPokemonMod(wpUnchangedRadioButton.isSelected(), wpRandomRadioButton.isSelected(), wpArea1To1RadioButton.isSelected(),
+ wpGlobal1To1RadioButton.isSelected());
+ settings.setWildPokemonRestrictionMod(wpARNoneRadioButton.isSelected(), wpARSimilarStrengthRadioButton.isSelected(),
+ wpARCatchEmAllModeRadioButton.isSelected(), wpARTypeThemeAreasRadioButton.isSelected());
+ settings.setUseTimeBasedEncounters(wpUseTimeBasedEncountersCheckBox.isSelected());
+ settings.setUseMinimumCatchRate(wpSetMinimumCatchRateCheckBox.isSelected());
+ settings.setMinimumCatchRateLevel(wpSetMinimumCatchRateSlider.getValue());
+ settings.setBlockWildLegendaries(wpDontUseLegendariesCheckBox.isSelected());
+ settings.setRandomizeWildPokemonHeldItems(wpRandomizeHeldItemsCheckBox.isSelected() && wpRandomizeHeldItemsCheckBox.isVisible());
+ settings.setBanBadRandomWildPokemonHeldItems(wpBanBadItemsCheckBox.isSelected() && wpBanBadItemsCheckBox.isVisible());
+ settings.setBalanceShakingGrass(wpBalanceShakingGrassPokemonCheckBox.isSelected() && wpBalanceShakingGrassPokemonCheckBox.isVisible());
+ settings.setWildLevelsModified(wpPercentageLevelModifierCheckBox.isSelected());
+ settings.setWildLevelModifier(wpPercentageLevelModifierSlider.getValue());
+ settings.setAllowWildAltFormes(wpAllowAltFormesCheckBox.isSelected() && wpAllowAltFormesCheckBox.isVisible());
+
+ settings.setStaticPokemonMod(stpUnchangedRadioButton.isSelected(), stpSwapLegendariesSwapStandardsRadioButton.isSelected(),
+ stpRandomCompletelyRadioButton.isSelected(), stpRandomSimilarStrengthRadioButton.isSelected());
+ settings.setLimitMainGameLegendaries(stpLimitMainGameLegendariesCheckBox.isSelected() && stpLimitMainGameLegendariesCheckBox.isVisible());
+ settings.setLimit600(stpRandomize600BSTCheckBox.isSelected());
+ settings.setAllowStaticAltFormes(stpAllowAltFormesCheckBox.isSelected() && stpAllowAltFormesCheckBox.isVisible());
+ settings.setSwapStaticMegaEvos(stpSwapMegaEvosCheckBox.isSelected() && stpSwapMegaEvosCheckBox.isVisible());
+ settings.setStaticLevelModified(stpPercentageLevelModifierCheckBox.isSelected());
+ settings.setStaticLevelModifier(stpPercentageLevelModifierSlider.getValue());
+ settings.setCorrectStaticMusic(stpFixMusicCheckBox.isSelected() && stpFixMusicCheckBox.isVisible());
+
+ settings.setTmsMod(tmUnchangedRadioButton.isSelected(), tmRandomRadioButton.isSelected());
+
+ settings.setTmsHmsCompatibilityMod(thcUnchangedRadioButton.isSelected(), thcRandomPreferSameTypeRadioButton.isSelected(),
+ thcRandomCompletelyRadioButton.isSelected(), thcFullCompatibilityRadioButton.isSelected());
+ settings.setTmLevelUpMoveSanity(tmLevelupMoveSanityCheckBox.isSelected());
+ settings.setKeepFieldMoveTMs(tmKeepFieldMoveTMsCheckBox.isSelected());
+ settings.setFullHMCompat(tmFullHMCompatibilityCheckBox.isSelected() && tmFullHMCompatibilityCheckBox.isVisible());
+ settings.setTmsForceGoodDamaging(tmForceGoodDamagingCheckBox.isSelected());
+ settings.setTmsGoodDamagingPercent(tmForceGoodDamagingSlider.getValue());
+ settings.setBlockBrokenTMMoves(tmNoGameBreakingMovesCheckBox.isSelected());
+ settings.setTmsFollowEvolutions(tmFollowEvolutionsCheckBox.isSelected());
+
+ settings.setMoveTutorMovesMod(mtUnchangedRadioButton.isSelected(), mtRandomRadioButton.isSelected());
+ settings.setMoveTutorsCompatibilityMod(mtcUnchangedRadioButton.isSelected(), mtcRandomPreferSameTypeRadioButton.isSelected(),
+ mtcRandomCompletelyRadioButton.isSelected(), mtcFullCompatibilityRadioButton.isSelected());
+ settings.setTutorLevelUpMoveSanity(mtLevelupMoveSanityCheckBox.isSelected());
+ settings.setKeepFieldMoveTutors(mtKeepFieldMoveTutorsCheckBox.isSelected());
+ settings.setTutorsForceGoodDamaging(mtForceGoodDamagingCheckBox.isSelected());
+ settings.setTutorsGoodDamagingPercent(mtForceGoodDamagingSlider.getValue());
+ settings.setBlockBrokenTutorMoves(mtNoGameBreakingMovesCheckBox.isSelected());
+ settings.setTutorFollowEvolutions(mtFollowEvolutionsCheckBox.isSelected());
+
+ settings.setInGameTradesMod(igtUnchangedRadioButton.isSelected(), igtRandomizeGivenPokemonOnlyRadioButton.isSelected(), igtRandomizeBothRequestedGivenRadioButton.isSelected());
+ settings.setRandomizeInGameTradesItems(igtRandomizeItemsCheckBox.isSelected());
+ settings.setRandomizeInGameTradesIVs(igtRandomizeIVsCheckBox.isSelected());
+ settings.setRandomizeInGameTradesNicknames(igtRandomizeNicknamesCheckBox.isSelected());
+ settings.setRandomizeInGameTradesOTs(igtRandomizeOTsCheckBox.isSelected());
+
+ settings.setFieldItemsMod(fiUnchangedRadioButton.isSelected(), fiShuffleRadioButton.isSelected(), fiRandomRadioButton.isSelected(), fiRandomEvenDistributionRadioButton.isSelected());
+ settings.setBanBadRandomFieldItems(fiBanBadItemsCheckBox.isSelected());
+
+ settings.setShopItemsMod(shUnchangedRadioButton.isSelected(), shShuffleRadioButton.isSelected(), shRandomRadioButton.isSelected());
+ settings.setBanBadRandomShopItems(shBanBadItemsCheckBox.isSelected());
+ settings.setBanRegularShopItems(shBanRegularShopItemsCheckBox.isSelected());
+ settings.setBanOPShopItems(shBanOverpoweredShopItemsCheckBox.isSelected());
+ settings.setBalanceShopPrices(shBalanceShopItemPricesCheckBox.isSelected());
+ settings.setGuaranteeEvolutionItems(shGuaranteeEvolutionItemsCheckBox.isSelected());
+ settings.setGuaranteeXItems(shGuaranteeXItemsCheckBox.isSelected());
+
+ settings.setPickupItemsMod(puUnchangedRadioButton.isSelected(), puRandomRadioButton.isSelected());
+ settings.setBanBadRandomPickupItems(puBanBadItemsCheckBox.isSelected());
+
+ int currentMiscTweaks = 0;
+ int mtCount = MiscTweak.allTweaks.size();
+
+ for (int mti = 0; mti < mtCount; mti++) {
+ MiscTweak mt = MiscTweak.allTweaks.get(mti);
+ JCheckBox mtCB = tweakCheckBoxes.get(mti);
+ if (mtCB.isSelected()) {
+ currentMiscTweaks |= mt.getValue();
+ }
+ }
+
+ settings.setCurrentMiscTweaks(currentMiscTweaks);
+
+ settings.setCustomNames(customNames);
+
+ return settings;
+ }
+
+ private Settings getCurrentSettings() throws IOException {
+ return createSettingsFromState(FileFunctions.getCustomNames());
+ }
+
+ private void attemptToLogException(Exception ex, String baseMessageKey, String noLogMessageKey,
+ String settingsString, String seedString) {
+ attemptToLogException(ex, baseMessageKey, noLogMessageKey, false, settingsString, seedString);
+ }
+
+ private void attemptToLogException(Exception ex, String baseMessageKey, String noLogMessageKey, boolean showMessage,
+ String settingsString, String seedString) {
+
+ // Make sure the operation dialog doesn't show up over the error
+ // dialog
+ SwingUtilities.invokeLater(() -> NewRandomizerGUI.this.opDialog.setVisible(false));
+
+ Date now = new Date();
+ SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
+ try {
+ String errlog = "error_" + ft.format(now) + ".txt";
+ PrintStream ps = new PrintStream(new FileOutputStream(errlog));
+ ps.println("Randomizer Version: " + Version.VERSION_STRING);
+ if (seedString != null) {
+ ps.println("Seed: " + seedString);
+ }
+ if (settingsString != null) {
+ ps.println("Settings String: " + Version.VERSION + settingsString);
+ }
+ ps.println("Java Version: " + System.getProperty("java.version") + ", " + System.getProperty("java.vm.name"));
+ PrintStream e1 = System.err;
+ System.setErr(ps);
+ if (this.romHandler != null) {
+ try {
+ ps.println("ROM: " + romHandler.getROMName());
+ ps.println("Code: " + romHandler.getROMCode());
+ ps.println("Reported Support Level: " + romHandler.getSupportLevel());
+ ps.println();
+ } catch (Exception ex2) {
+ // Do nothing, just don't fail
+ }
+ }
+ ex.printStackTrace();
+ ps.println();
+ ps.println("--ROM Diagnostics--");
+ if (!romHandler.isRomValid()) {
+ ps.println(bundle.getString("Log.InvalidRomLoaded"));
+ }
+ romHandler.printRomDiagnostics(ps);
+ System.setErr(e1);
+ ps.close();
+ if (showMessage) {
+ JOptionPane.showMessageDialog(mainPanel,
+ String.format(bundle.getString(baseMessageKey), ex.getMessage(), errlog));
+ } else {
+ JOptionPane.showMessageDialog(mainPanel, String.format(bundle.getString(baseMessageKey), errlog));
+ }
+ } catch (Exception logex) {
+ if (showMessage) {
+ JOptionPane.showMessageDialog(mainPanel, String.format(bundle.getString(noLogMessageKey), ex.getMessage()));
+ } else {
+ JOptionPane.showMessageDialog(mainPanel, bundle.getString(noLogMessageKey));
+ }
+ }
+ }
+
+ public String getValidRequiredROMName(String config, CustomNamesSet customNames)
+ throws UnsupportedEncodingException, InvalidSupplementFilesException {
+ try {
+ Utils.validatePresetSupplementFiles(config, customNames);
+ } catch (InvalidSupplementFilesException e) {
+ switch (e.getType()) {
+ case CUSTOM_NAMES:
+ JOptionPane.showMessageDialog(null, bundle.getString("GUI.presetDifferentCustomNames"));
+ break;
+ default:
+ throw e;
+ }
+ }
+ byte[] data = Base64.getDecoder().decode(config);
+
+ int nameLength = data[Settings.LENGTH_OF_SETTINGS_DATA] & 0xFF;
+ if (data.length != Settings.LENGTH_OF_SETTINGS_DATA + 9 + nameLength) {
+ return null; // not valid length
+ }
+ return new String(data, Settings.LENGTH_OF_SETTINGS_DATA + 1, nameLength, "US-ASCII");
+ }
+
+ private void initialState() {
+
+ romNameLabel.setText(bundle.getString("GUI.noRomLoaded"));
+ romCodeLabel.setText("");
+ romSupportLabel.setText("");
+
+ gameMascotLabel.setIcon(emptyIcon);
+
+ limitPokemonCheckBox.setVisible(true);
+ limitPokemonCheckBox.setEnabled(false);
+ limitPokemonCheckBox.setSelected(false);
+ limitPokemonButton.setVisible(true);
+ limitPokemonButton.setEnabled(false);
+ noIrregularAltFormesCheckBox.setVisible(true);
+ noIrregularAltFormesCheckBox.setEnabled(false);
+ noIrregularAltFormesCheckBox.setSelected(false);
+ raceModeCheckBox.setVisible(true);
+ raceModeCheckBox.setEnabled(false);
+ raceModeCheckBox.setSelected(false);
+
+ currentRestrictions = null;
+
+ openROMButton.setVisible(true);
+ openROMButton.setEnabled(true);
+ openROMButton.setSelected(false);
+ randomizeSaveButton.setVisible(true);
+ randomizeSaveButton.setEnabled(true);
+ randomizeSaveButton.setSelected(false);
+ premadeSeedButton.setVisible(true);
+ premadeSeedButton.setEnabled(true);
+ premadeSeedButton.setSelected(false);
+ settingsButton.setVisible(true);
+ settingsButton.setEnabled(true);
+ settingsButton.setSelected(false);
+
+ loadSettingsButton.setVisible(true);
+ loadSettingsButton.setEnabled(false);
+ loadSettingsButton.setSelected(false);
+ saveSettingsButton.setVisible(true);
+ saveSettingsButton.setEnabled(false);
+ saveSettingsButton.setSelected(false);
+ pbsUnchangedRadioButton.setVisible(true);
+ pbsUnchangedRadioButton.setEnabled(false);
+ pbsUnchangedRadioButton.setSelected(false);
+ pbsShuffleRadioButton.setVisible(true);
+ pbsShuffleRadioButton.setEnabled(false);
+ pbsShuffleRadioButton.setSelected(false);
+ pbsRandomRadioButton.setVisible(true);
+ pbsRandomRadioButton.setEnabled(false);
+ pbsRandomRadioButton.setSelected(false);
+ pbsLegendariesSlowRadioButton.setVisible(true);
+ pbsLegendariesSlowRadioButton.setEnabled(false);
+ pbsLegendariesSlowRadioButton.setSelected(false);
+ pbsStrongLegendariesSlowRadioButton.setVisible(true);
+ pbsStrongLegendariesSlowRadioButton.setEnabled(false);
+ pbsStrongLegendariesSlowRadioButton.setSelected(false);
+ pbsAllMediumFastRadioButton.setVisible(true);
+ pbsAllMediumFastRadioButton.setEnabled(false);
+ pbsAllMediumFastRadioButton.setSelected(false);
+ pbsStandardizeEXPCurvesCheckBox.setVisible(true);
+ pbsStandardizeEXPCurvesCheckBox.setEnabled(false);
+ pbsStandardizeEXPCurvesCheckBox.setSelected(false);
+ pbsEXPCurveComboBox.setVisible(true);
+ pbsEXPCurveComboBox.setEnabled(false);
+ pbsEXPCurveComboBox.setSelectedIndex(0);
+ pbsEXPCurveComboBox.setModel(new DefaultComboBoxModel<>(new String[] { "Medium Fast" }));
+ pbsFollowEvolutionsCheckBox.setVisible(true);
+ pbsFollowEvolutionsCheckBox.setEnabled(false);
+ pbsFollowEvolutionsCheckBox.setSelected(false);
+ pbsUpdateBaseStatsCheckBox.setVisible(true);
+ pbsUpdateBaseStatsCheckBox.setEnabled(false);
+ pbsUpdateBaseStatsCheckBox.setSelected(false);
+ pbsFollowMegaEvosCheckBox.setVisible(true);
+ pbsFollowMegaEvosCheckBox.setEnabled(false);
+ pbsFollowMegaEvosCheckBox.setSelected(false);
+ pbsUpdateComboBox.setVisible(true);
+ pbsUpdateComboBox.setEnabled(false);
+ pbsUpdateComboBox.setSelectedIndex(0);
+ pbsUpdateComboBox.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
+ pbsAssignEvoStatsRandomlyCheckBox.setVisible(true);
+ pbsAssignEvoStatsRandomlyCheckBox.setEnabled(false);
+ pbsAssignEvoStatsRandomlyCheckBox.setSelected(false);
+ ptUnchangedRadioButton.setVisible(true);
+ ptUnchangedRadioButton.setEnabled(false);
+ ptUnchangedRadioButton.setSelected(false);
+ ptRandomFollowEvolutionsRadioButton.setVisible(true);
+ ptRandomFollowEvolutionsRadioButton.setEnabled(false);
+ ptRandomFollowEvolutionsRadioButton.setSelected(false);
+ ptRandomCompletelyRadioButton.setVisible(true);
+ ptRandomCompletelyRadioButton.setEnabled(false);
+ ptRandomCompletelyRadioButton.setSelected(false);
+ ptFollowMegaEvosCheckBox.setVisible(true);
+ ptFollowMegaEvosCheckBox.setEnabled(false);
+ ptFollowMegaEvosCheckBox.setSelected(false);
+ ptIsDualTypeCheckBox.setVisible(true);
+ ptIsDualTypeCheckBox.setEnabled(false);
+ ptIsDualTypeCheckBox.setSelected(false);
+ pokemonAbilitiesPanel.setVisible(true);
+ paUnchangedRadioButton.setVisible(true);
+ paUnchangedRadioButton.setEnabled(false);
+ paUnchangedRadioButton.setSelected(false);
+ paRandomRadioButton.setVisible(true);
+ paRandomRadioButton.setEnabled(false);
+ paRandomRadioButton.setSelected(false);
+ paAllowWonderGuardCheckBox.setVisible(true);
+ paAllowWonderGuardCheckBox.setEnabled(false);
+ paAllowWonderGuardCheckBox.setSelected(false);
+ paFollowEvolutionsCheckBox.setVisible(true);
+ paFollowEvolutionsCheckBox.setEnabled(false);
+ paFollowEvolutionsCheckBox.setSelected(false);
+ paTrappingAbilitiesCheckBox.setVisible(true);
+ paTrappingAbilitiesCheckBox.setEnabled(false);
+ paTrappingAbilitiesCheckBox.setSelected(false);
+ paNegativeAbilitiesCheckBox.setVisible(true);
+ paNegativeAbilitiesCheckBox.setEnabled(false);
+ paNegativeAbilitiesCheckBox.setSelected(false);
+ paBadAbilitiesCheckBox.setVisible(true);
+ paBadAbilitiesCheckBox.setEnabled(false);
+ paBadAbilitiesCheckBox.setSelected(false);
+ paFollowMegaEvosCheckBox.setVisible(true);
+ paFollowMegaEvosCheckBox.setEnabled(false);
+ paFollowMegaEvosCheckBox.setSelected(false);
+ paWeighDuplicatesTogetherCheckBox.setVisible(true);
+ paWeighDuplicatesTogetherCheckBox.setEnabled(false);
+ paWeighDuplicatesTogetherCheckBox.setSelected(false);
+ paEnsureTwoAbilitiesCheckbox.setVisible(true);
+ paEnsureTwoAbilitiesCheckbox.setEnabled(false);
+ paEnsureTwoAbilitiesCheckbox.setSelected(false);
+ peUnchangedRadioButton.setVisible(true);
+ peUnchangedRadioButton.setEnabled(false);
+ peUnchangedRadioButton.setSelected(false);
+ peRandomRadioButton.setVisible(true);
+ peRandomRadioButton.setEnabled(false);
+ peRandomRadioButton.setSelected(false);
+ peRandomEveryLevelRadioButton.setVisible(true);
+ peRandomEveryLevelRadioButton.setEnabled(false);
+ peRandomEveryLevelRadioButton.setSelected(false);
+ peSimilarStrengthCheckBox.setVisible(true);
+ peSimilarStrengthCheckBox.setEnabled(false);
+ peSimilarStrengthCheckBox.setSelected(false);
+ peSameTypingCheckBox.setVisible(true);
+ peSameTypingCheckBox.setEnabled(false);
+ peSameTypingCheckBox.setSelected(false);
+ peLimitEvolutionsToThreeCheckBox.setVisible(true);
+ peLimitEvolutionsToThreeCheckBox.setEnabled(false);
+ peLimitEvolutionsToThreeCheckBox.setSelected(false);
+ peForceChangeCheckBox.setVisible(true);
+ peForceChangeCheckBox.setEnabled(false);
+ peForceChangeCheckBox.setSelected(false);
+ peChangeImpossibleEvosCheckBox.setVisible(true);
+ peChangeImpossibleEvosCheckBox.setEnabled(false);
+ peChangeImpossibleEvosCheckBox.setSelected(false);
+ peMakeEvolutionsEasierCheckBox.setVisible(true);
+ peMakeEvolutionsEasierCheckBox.setEnabled(false);
+ peMakeEvolutionsEasierCheckBox.setSelected(false);
+ peRemoveTimeBasedEvolutionsCheckBox.setVisible(true);
+ peRemoveTimeBasedEvolutionsCheckBox.setEnabled(false);
+ peRemoveTimeBasedEvolutionsCheckBox.setSelected(false);
+ peAllowAltFormesCheckBox.setVisible(true);
+ peAllowAltFormesCheckBox.setEnabled(false);
+ peAllowAltFormesCheckBox.setSelected(false);
+ spUnchangedRadioButton.setVisible(true);
+ spUnchangedRadioButton.setEnabled(false);
+ spUnchangedRadioButton.setSelected(false);
+ spCustomRadioButton.setVisible(true);
+ spCustomRadioButton.setEnabled(false);
+ spCustomRadioButton.setSelected(false);
+ spRandomCompletelyRadioButton.setVisible(true);
+ spRandomCompletelyRadioButton.setEnabled(false);
+ spRandomCompletelyRadioButton.setSelected(false);
+ spRandomTwoEvosRadioButton.setVisible(true);
+ spRandomTwoEvosRadioButton.setEnabled(false);
+ spRandomTwoEvosRadioButton.setSelected(false);
+ spComboBox1.setVisible(true);
+ spComboBox1.setEnabled(false);
+ spComboBox1.setSelectedIndex(0);
+ spComboBox1.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
+ spComboBox2.setVisible(true);
+ spComboBox2.setEnabled(false);
+ spComboBox2.setSelectedIndex(0);
+ spComboBox2.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
+ spComboBox3.setVisible(true);
+ spComboBox3.setEnabled(false);
+ spComboBox3.setSelectedIndex(0);
+ spComboBox3.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
+ spRandomizeStarterHeldItemsCheckBox.setVisible(true);
+ spRandomizeStarterHeldItemsCheckBox.setEnabled(false);
+ spRandomizeStarterHeldItemsCheckBox.setSelected(false);
+ spBanBadItemsCheckBox.setVisible(true);
+ spBanBadItemsCheckBox.setEnabled(false);
+ spBanBadItemsCheckBox.setSelected(false);
+ spAllowAltFormesCheckBox.setVisible(true);
+ spAllowAltFormesCheckBox.setEnabled(false);
+ spAllowAltFormesCheckBox.setSelected(false);
+ stpUnchangedRadioButton.setVisible(true);
+ stpUnchangedRadioButton.setEnabled(false);
+ stpUnchangedRadioButton.setSelected(false);
+ stpSwapLegendariesSwapStandardsRadioButton.setVisible(true);
+ stpSwapLegendariesSwapStandardsRadioButton.setEnabled(false);
+ stpSwapLegendariesSwapStandardsRadioButton.setSelected(false);
+ stpRandomCompletelyRadioButton.setVisible(true);
+ stpRandomCompletelyRadioButton.setEnabled(false);
+ stpRandomCompletelyRadioButton.setSelected(false);
+ stpRandomSimilarStrengthRadioButton.setVisible(true);
+ stpRandomSimilarStrengthRadioButton.setEnabled(false);
+ stpRandomSimilarStrengthRadioButton.setSelected(false);
+ stpPercentageLevelModifierCheckBox.setVisible(true);
+ stpPercentageLevelModifierCheckBox.setEnabled(false);
+ stpPercentageLevelModifierCheckBox.setSelected(false);
+ stpPercentageLevelModifierSlider.setVisible(true);
+ stpPercentageLevelModifierSlider.setEnabled(false);
+ stpPercentageLevelModifierSlider.setValue(0);
+ stpLimitMainGameLegendariesCheckBox.setVisible(true);
+ stpLimitMainGameLegendariesCheckBox.setEnabled(false);
+ stpLimitMainGameLegendariesCheckBox.setSelected(false);
+ stpRandomize600BSTCheckBox.setVisible(true);
+ stpRandomize600BSTCheckBox.setEnabled(false);
+ stpRandomize600BSTCheckBox.setSelected(false);
+ stpAllowAltFormesCheckBox.setVisible(true);
+ stpAllowAltFormesCheckBox.setEnabled(false);
+ stpAllowAltFormesCheckBox.setSelected(false);
+ stpSwapMegaEvosCheckBox.setVisible(true);
+ stpSwapMegaEvosCheckBox.setEnabled(false);
+ stpSwapMegaEvosCheckBox.setSelected(false);
+ stpFixMusicCheckBox.setVisible(true);
+ stpFixMusicCheckBox.setEnabled(false);
+ stpFixMusicCheckBox.setSelected(false);
+ igtUnchangedRadioButton.setVisible(true);
+ igtUnchangedRadioButton.setEnabled(false);
+ igtUnchangedRadioButton.setSelected(false);
+ igtRandomizeGivenPokemonOnlyRadioButton.setVisible(true);
+ igtRandomizeGivenPokemonOnlyRadioButton.setEnabled(false);
+ igtRandomizeGivenPokemonOnlyRadioButton.setSelected(false);
+ igtRandomizeBothRequestedGivenRadioButton.setVisible(true);
+ igtRandomizeBothRequestedGivenRadioButton.setEnabled(false);
+ igtRandomizeBothRequestedGivenRadioButton.setSelected(false);
+ igtRandomizeNicknamesCheckBox.setVisible(true);
+ igtRandomizeNicknamesCheckBox.setEnabled(false);
+ igtRandomizeNicknamesCheckBox.setSelected(false);
+ igtRandomizeOTsCheckBox.setVisible(true);
+ igtRandomizeOTsCheckBox.setEnabled(false);
+ igtRandomizeOTsCheckBox.setSelected(false);
+ igtRandomizeIVsCheckBox.setVisible(true);
+ igtRandomizeIVsCheckBox.setEnabled(false);
+ igtRandomizeIVsCheckBox.setSelected(false);
+ igtRandomizeItemsCheckBox.setVisible(true);
+ igtRandomizeItemsCheckBox.setEnabled(false);
+ igtRandomizeItemsCheckBox.setSelected(false);
+ mdRandomizeMovePowerCheckBox.setVisible(true);
+ mdRandomizeMovePowerCheckBox.setEnabled(false);
+ mdRandomizeMovePowerCheckBox.setSelected(false);
+ mdRandomizeMoveAccuracyCheckBox.setVisible(true);
+ mdRandomizeMoveAccuracyCheckBox.setEnabled(false);
+ mdRandomizeMoveAccuracyCheckBox.setSelected(false);
+ mdRandomizeMovePPCheckBox.setVisible(true);
+ mdRandomizeMovePPCheckBox.setEnabled(false);
+ mdRandomizeMovePPCheckBox.setSelected(false);
+ mdRandomizeMoveTypesCheckBox.setVisible(true);
+ mdRandomizeMoveTypesCheckBox.setEnabled(false);
+ mdRandomizeMoveTypesCheckBox.setSelected(false);
+ mdRandomizeMoveCategoryCheckBox.setVisible(true);
+ mdRandomizeMoveCategoryCheckBox.setEnabled(false);
+ mdRandomizeMoveCategoryCheckBox.setSelected(false);
+ mdUpdateMovesCheckBox.setVisible(true);
+ mdUpdateMovesCheckBox.setEnabled(false);
+ mdUpdateMovesCheckBox.setSelected(false);
+ mdUpdateComboBox.setVisible(true);
+ mdUpdateComboBox.setEnabled(false);
+ mdUpdateComboBox.setSelectedIndex(0);
+ mdUpdateComboBox.setModel(new DefaultComboBoxModel<>(new String[] { "--" }));
+ pmsUnchangedRadioButton.setVisible(true);
+ pmsUnchangedRadioButton.setEnabled(false);
+ pmsUnchangedRadioButton.setSelected(false);
+ pmsRandomPreferringSameTypeRadioButton.setVisible(true);
+ pmsRandomPreferringSameTypeRadioButton.setEnabled(false);
+ pmsRandomPreferringSameTypeRadioButton.setSelected(false);
+ pmsRandomCompletelyRadioButton.setVisible(true);
+ pmsRandomCompletelyRadioButton.setEnabled(false);
+ pmsRandomCompletelyRadioButton.setSelected(false);
+ pmsMetronomeOnlyModeRadioButton.setVisible(true);
+ pmsMetronomeOnlyModeRadioButton.setEnabled(false);
+ pmsMetronomeOnlyModeRadioButton.setSelected(false);
+ pmsGuaranteedLevel1MovesCheckBox.setVisible(true);
+ pmsGuaranteedLevel1MovesCheckBox.setEnabled(false);
+ pmsGuaranteedLevel1MovesCheckBox.setSelected(false);
+ pmsReorderDamagingMovesCheckBox.setVisible(true);
+ pmsReorderDamagingMovesCheckBox.setEnabled(false);
+ pmsReorderDamagingMovesCheckBox.setSelected(false);
+ pmsNoGameBreakingMovesCheckBox.setVisible(true);
+ pmsNoGameBreakingMovesCheckBox.setEnabled(false);
+ pmsNoGameBreakingMovesCheckBox.setSelected(false);
+ pmsForceGoodDamagingCheckBox.setVisible(true);
+ pmsForceGoodDamagingCheckBox.setEnabled(false);
+ pmsForceGoodDamagingCheckBox.setSelected(false);
+ pmsGuaranteedLevel1MovesSlider.setVisible(true);
+ pmsGuaranteedLevel1MovesSlider.setEnabled(false);
+ pmsGuaranteedLevel1MovesSlider.setValue(pmsGuaranteedLevel1MovesSlider.getMinimum());
+ pmsForceGoodDamagingSlider.setVisible(true);
+ pmsForceGoodDamagingSlider.setEnabled(false);
+ pmsForceGoodDamagingSlider.setValue(pmsForceGoodDamagingSlider.getMinimum());
+ pmsEvolutionMovesCheckBox.setVisible(true);
+ pmsEvolutionMovesCheckBox.setEnabled(false);
+ pmsEvolutionMovesCheckBox.setSelected(false);
+ tpComboBox.setVisible(true);
+ tpComboBox.setEnabled(false);
+ tpComboBox.setModel(new DefaultComboBoxModel<>(new String[] { "Unchanged" }));
+ tpRivalCarriesStarterCheckBox.setVisible(true);
+ tpRivalCarriesStarterCheckBox.setEnabled(false);
+ tpRivalCarriesStarterCheckBox.setSelected(false);
+ tpSimilarStrengthCheckBox.setVisible(true);
+ tpSimilarStrengthCheckBox.setEnabled(false);
+ tpSimilarStrengthCheckBox.setSelected(false);
+ tpWeightTypesCheckBox.setVisible(true);
+ tpWeightTypesCheckBox.setEnabled(false);
+ tpWeightTypesCheckBox.setSelected(false);
+ tpDontUseLegendariesCheckBox.setVisible(true);
+ tpDontUseLegendariesCheckBox.setEnabled(false);
+ tpDontUseLegendariesCheckBox.setSelected(false);
+ tpNoEarlyWonderGuardCheckBox.setVisible(true);
+ tpNoEarlyWonderGuardCheckBox.setEnabled(false);
+ tpNoEarlyWonderGuardCheckBox.setSelected(false);
+ tpRandomizeTrainerNamesCheckBox.setVisible(true);
+ tpRandomizeTrainerNamesCheckBox.setEnabled(false);
+ tpRandomizeTrainerNamesCheckBox.setSelected(false);
+ tpRandomizeTrainerClassNamesCheckBox.setVisible(true);
+ tpRandomizeTrainerClassNamesCheckBox.setEnabled(false);
+ tpRandomizeTrainerClassNamesCheckBox.setSelected(false);
+ tpForceFullyEvolvedAtCheckBox.setVisible(true);
+ tpForceFullyEvolvedAtCheckBox.setEnabled(false);
+ tpForceFullyEvolvedAtCheckBox.setSelected(false);
+ tpForceFullyEvolvedAtSlider.setVisible(true);
+ tpForceFullyEvolvedAtSlider.setEnabled(false);
+ tpForceFullyEvolvedAtSlider.setValue(tpForceFullyEvolvedAtSlider.getMinimum());
+ tpPercentageLevelModifierSlider.setVisible(true);
+ tpPercentageLevelModifierSlider.setEnabled(false);
+ tpPercentageLevelModifierSlider.setValue(0);
+ tpPercentageLevelModifierCheckBox.setVisible(true);
+ tpPercentageLevelModifierCheckBox.setEnabled(false);
+ tpPercentageLevelModifierCheckBox.setSelected(false);
+
+ tpEliteFourUniquePokemonCheckBox.setVisible(true);
+ tpEliteFourUniquePokemonCheckBox.setEnabled(false);
+ tpEliteFourUniquePokemonCheckBox.setSelected(false);
+ tpEliteFourUniquePokemonSpinner.setVisible(true);
+ tpEliteFourUniquePokemonSpinner.setEnabled(false);
+ tpEliteFourUniquePokemonSpinner.setValue(1);
+
+ tpAllowAlternateFormesCheckBox.setVisible(true);
+ tpAllowAlternateFormesCheckBox.setEnabled(false);
+ tpAllowAlternateFormesCheckBox.setSelected(false);
+ tpSwapMegaEvosCheckBox.setVisible(true);
+ tpSwapMegaEvosCheckBox.setEnabled(false);
+ tpSwapMegaEvosCheckBox.setSelected(false);
+ tpDoubleBattleModeCheckBox.setVisible(true);
+ tpDoubleBattleModeCheckBox.setEnabled(false);
+ tpDoubleBattleModeCheckBox.setSelected(false);
+ tpBossTrainersCheckBox.setVisible(true);
+ tpBossTrainersCheckBox.setEnabled(false);
+ tpBossTrainersCheckBox.setSelected(false);
+ tpImportantTrainersCheckBox.setVisible(true);
+ tpImportantTrainersCheckBox.setEnabled(false);
+ tpImportantTrainersCheckBox.setSelected(false);
+ tpRegularTrainersCheckBox.setVisible(true);
+ tpRegularTrainersCheckBox.setEnabled(false);
+ tpRegularTrainersCheckBox.setSelected(false);
+ tpBossTrainersSpinner.setVisible(true);
+ tpBossTrainersSpinner.setEnabled(false);
+ tpBossTrainersSpinner.setValue(1);
+ tpImportantTrainersSpinner.setVisible(true);
+ tpImportantTrainersSpinner.setEnabled(false);
+ tpImportantTrainersSpinner.setValue(1);
+ tpRegularTrainersSpinner.setVisible(true);
+ tpRegularTrainersSpinner.setEnabled(false);
+ tpRegularTrainersSpinner.setValue(1);
+ tpAdditionalPokemonForLabel.setVisible(true);
+ tpHeldItemsLabel.setVisible(true);
+ tpBossTrainersItemsCheckBox.setVisible(true);
+ tpBossTrainersItemsCheckBox.setEnabled(false);
+ tpBossTrainersItemsCheckBox.setSelected(false);
+ tpImportantTrainersItemsCheckBox.setVisible(true);
+ tpImportantTrainersItemsCheckBox.setEnabled(false);
+ tpImportantTrainersItemsCheckBox.setSelected(false);
+ tpRegularTrainersItemsCheckBox.setVisible(true);
+ tpRegularTrainersItemsCheckBox.setEnabled(false);
+ tpRegularTrainersItemsCheckBox.setSelected(false);
+ tpConsumableItemsOnlyCheckBox.setVisible(true);
+ tpConsumableItemsOnlyCheckBox.setEnabled(false);
+ tpConsumableItemsOnlyCheckBox.setSelected(false);
+ tpSensibleItemsCheckBox.setVisible(true);
+ tpSensibleItemsCheckBox.setEnabled(false);
+ tpSensibleItemsCheckBox.setSelected(false);
+ tpHighestLevelGetsItemCheckBox.setVisible(true);
+ tpHighestLevelGetsItemCheckBox.setEnabled(false);
+ tpHighestLevelGetsItemCheckBox.setSelected(false);
+ tpRandomShinyTrainerPokemonCheckBox.setVisible(true);
+ tpRandomShinyTrainerPokemonCheckBox.setEnabled(false);
+ tpBetterMovesetsCheckBox.setVisible(true);
+ tpBetterMovesetsCheckBox.setEnabled(false);
+ tpBetterMovesetsCheckBox.setSelected(false);
+ totpPanel.setVisible(true);
+ totpAllyPanel.setVisible(true);
+ totpAuraPanel.setVisible(true);
+ totpUnchangedRadioButton.setVisible(true);
+ totpUnchangedRadioButton.setEnabled(false);
+ totpUnchangedRadioButton.setSelected(true);
+ totpRandomRadioButton.setVisible(true);
+ totpRandomRadioButton.setEnabled(false);
+ totpRandomRadioButton.setSelected(false);
+ totpRandomSimilarStrengthRadioButton.setVisible(true);
+ totpRandomSimilarStrengthRadioButton.setEnabled(false);
+ totpRandomSimilarStrengthRadioButton.setSelected(false);
+ totpAllyUnchangedRadioButton.setVisible(true);
+ totpAllyUnchangedRadioButton.setEnabled(false);
+ totpAllyUnchangedRadioButton.setSelected(true);
+ totpAllyRandomRadioButton.setVisible(true);
+ totpAllyRandomRadioButton.setEnabled(false);
+ totpAllyRandomRadioButton.setSelected(false);
+ totpAllyRandomSimilarStrengthRadioButton.setVisible(true);
+ totpAllyRandomSimilarStrengthRadioButton.setEnabled(false);
+ totpAllyRandomSimilarStrengthRadioButton.setSelected(false);
+ totpAuraUnchangedRadioButton.setVisible(true);
+ totpAuraUnchangedRadioButton.setEnabled(false);
+ totpAuraUnchangedRadioButton.setSelected(true);
+ totpAuraRandomRadioButton.setVisible(true);
+ totpAuraRandomRadioButton.setEnabled(false);
+ totpAuraRandomRadioButton.setSelected(false);
+ totpAuraRandomSameStrengthRadioButton.setVisible(true);
+ totpAuraRandomSameStrengthRadioButton.setEnabled(false);
+ totpAuraRandomSameStrengthRadioButton.setSelected(false);
+ totpPercentageLevelModifierCheckBox.setVisible(true);
+ totpPercentageLevelModifierCheckBox.setEnabled(false);
+ totpPercentageLevelModifierCheckBox.setSelected(false);
+ totpPercentageLevelModifierSlider.setVisible(true);
+ totpPercentageLevelModifierSlider.setEnabled(false);
+ totpPercentageLevelModifierSlider.setValue(0);
+ totpRandomizeHeldItemsCheckBox.setVisible(true);
+ totpRandomizeHeldItemsCheckBox.setEnabled(false);
+ totpRandomizeHeldItemsCheckBox.setSelected(false);
+ totpAllowAltFormesCheckBox.setVisible(true);
+ totpAllowAltFormesCheckBox.setEnabled(false);
+ totpAllowAltFormesCheckBox.setSelected(false);
+ wpUnchangedRadioButton.setVisible(true);
+ wpUnchangedRadioButton.setEnabled(false);
+ wpUnchangedRadioButton.setSelected(false);
+ wpRandomRadioButton.setVisible(true);
+ wpRandomRadioButton.setEnabled(false);
+ wpRandomRadioButton.setSelected(false);
+ wpArea1To1RadioButton.setVisible(true);
+ wpArea1To1RadioButton.setEnabled(false);
+ wpArea1To1RadioButton.setSelected(false);
+ wpGlobal1To1RadioButton.setVisible(true);
+ wpGlobal1To1RadioButton.setEnabled(false);
+ wpGlobal1To1RadioButton.setSelected(false);
+ wpARNoneRadioButton.setVisible(true);
+ wpARNoneRadioButton.setEnabled(false);
+ wpARNoneRadioButton.setSelected(false);
+ wpARSimilarStrengthRadioButton.setVisible(true);
+ wpARSimilarStrengthRadioButton.setEnabled(false);
+ wpARSimilarStrengthRadioButton.setSelected(false);
+ wpARCatchEmAllModeRadioButton.setVisible(true);
+ wpARCatchEmAllModeRadioButton.setEnabled(false);
+ wpARCatchEmAllModeRadioButton.setSelected(false);
+ wpARTypeThemeAreasRadioButton.setVisible(true);
+ wpARTypeThemeAreasRadioButton.setEnabled(false);
+ wpARTypeThemeAreasRadioButton.setSelected(false);
+ wpUseTimeBasedEncountersCheckBox.setVisible(true);
+ wpUseTimeBasedEncountersCheckBox.setEnabled(false);
+ wpUseTimeBasedEncountersCheckBox.setSelected(false);
+ wpDontUseLegendariesCheckBox.setVisible(true);
+ wpDontUseLegendariesCheckBox.setEnabled(false);
+ wpDontUseLegendariesCheckBox.setSelected(false);
+ wpSetMinimumCatchRateCheckBox.setVisible(true);
+ wpSetMinimumCatchRateCheckBox.setEnabled(false);
+ wpSetMinimumCatchRateCheckBox.setSelected(false);
+ wpRandomizeHeldItemsCheckBox.setVisible(true);
+ wpRandomizeHeldItemsCheckBox.setEnabled(false);
+ wpRandomizeHeldItemsCheckBox.setSelected(false);
+ wpBanBadItemsCheckBox.setVisible(true);
+ wpBanBadItemsCheckBox.setEnabled(false);
+ wpBanBadItemsCheckBox.setSelected(false);
+ wpBalanceShakingGrassPokemonCheckBox.setVisible(true);
+ wpBalanceShakingGrassPokemonCheckBox.setEnabled(false);
+ wpBalanceShakingGrassPokemonCheckBox.setSelected(false);
+ wpPercentageLevelModifierCheckBox.setVisible(true);
+ wpPercentageLevelModifierCheckBox.setEnabled(false);
+ wpPercentageLevelModifierCheckBox.setSelected(false);
+ wpPercentageLevelModifierSlider.setVisible(true);
+ wpPercentageLevelModifierSlider.setEnabled(false);
+ wpPercentageLevelModifierSlider.setValue(0);
+ wpSetMinimumCatchRateSlider.setVisible(true);
+ wpSetMinimumCatchRateSlider.setEnabled(false);
+ wpSetMinimumCatchRateSlider.setValue(wpSetMinimumCatchRateSlider.getMinimum());
+ wpAllowAltFormesCheckBox.setVisible(true);
+ wpAllowAltFormesCheckBox.setEnabled(false);
+ wpAllowAltFormesCheckBox.setSelected(false);
+ tmUnchangedRadioButton.setVisible(true);
+ tmUnchangedRadioButton.setEnabled(false);
+ tmUnchangedRadioButton.setSelected(false);
+ tmRandomRadioButton.setVisible(true);
+ tmRandomRadioButton.setEnabled(false);
+ tmRandomRadioButton.setSelected(false);
+ tmNoGameBreakingMovesCheckBox.setVisible(true);
+ tmNoGameBreakingMovesCheckBox.setEnabled(false);
+ tmNoGameBreakingMovesCheckBox.setSelected(false);
+ tmFullHMCompatibilityCheckBox.setVisible(true);
+ tmFullHMCompatibilityCheckBox.setEnabled(false);
+ tmFullHMCompatibilityCheckBox.setSelected(false);
+ tmLevelupMoveSanityCheckBox.setVisible(true);
+ tmLevelupMoveSanityCheckBox.setEnabled(false);
+ tmLevelupMoveSanityCheckBox.setSelected(false);
+ tmKeepFieldMoveTMsCheckBox.setVisible(true);
+ tmKeepFieldMoveTMsCheckBox.setEnabled(false);
+ tmKeepFieldMoveTMsCheckBox.setSelected(false);
+ tmForceGoodDamagingCheckBox.setVisible(true);
+ tmForceGoodDamagingCheckBox.setEnabled(false);
+ tmForceGoodDamagingCheckBox.setSelected(false);
+ tmForceGoodDamagingSlider.setVisible(true);
+ tmForceGoodDamagingSlider.setEnabled(false);
+ tmForceGoodDamagingSlider.setValue(tmForceGoodDamagingSlider.getMinimum());
+ tmFollowEvolutionsCheckBox.setVisible(true);
+ tmFollowEvolutionsCheckBox.setEnabled(false);
+ tmFollowEvolutionsCheckBox.setSelected(false);
+ thcUnchangedRadioButton.setVisible(true);
+ thcUnchangedRadioButton.setEnabled(false);
+ thcUnchangedRadioButton.setSelected(false);
+ thcRandomPreferSameTypeRadioButton.setVisible(true);
+ thcRandomPreferSameTypeRadioButton.setEnabled(false);
+ thcRandomPreferSameTypeRadioButton.setSelected(false);
+ thcRandomCompletelyRadioButton.setVisible(true);
+ thcRandomCompletelyRadioButton.setEnabled(false);
+ thcRandomCompletelyRadioButton.setSelected(false);
+ thcFullCompatibilityRadioButton.setVisible(true);
+ thcFullCompatibilityRadioButton.setEnabled(false);
+ thcFullCompatibilityRadioButton.setSelected(false);
+ mtUnchangedRadioButton.setVisible(true);
+ mtUnchangedRadioButton.setEnabled(false);
+ mtUnchangedRadioButton.setSelected(false);
+ mtRandomRadioButton.setVisible(true);
+ mtRandomRadioButton.setEnabled(false);
+ mtRandomRadioButton.setSelected(false);
+ mtNoGameBreakingMovesCheckBox.setVisible(true);
+ mtNoGameBreakingMovesCheckBox.setEnabled(false);
+ mtNoGameBreakingMovesCheckBox.setSelected(false);
+ mtLevelupMoveSanityCheckBox.setVisible(true);
+ mtLevelupMoveSanityCheckBox.setEnabled(false);
+ mtLevelupMoveSanityCheckBox.setSelected(false);
+ mtKeepFieldMoveTutorsCheckBox.setVisible(true);
+ mtKeepFieldMoveTutorsCheckBox.setEnabled(false);
+ mtKeepFieldMoveTutorsCheckBox.setSelected(false);
+ mtForceGoodDamagingCheckBox.setVisible(true);
+ mtForceGoodDamagingCheckBox.setEnabled(false);
+ mtForceGoodDamagingCheckBox.setSelected(false);
+ mtForceGoodDamagingSlider.setVisible(true);
+ mtForceGoodDamagingSlider.setEnabled(false);
+ mtForceGoodDamagingSlider.setValue(mtForceGoodDamagingSlider.getMinimum());
+ mtFollowEvolutionsCheckBox.setVisible(true);
+ mtFollowEvolutionsCheckBox.setEnabled(false);
+ mtFollowEvolutionsCheckBox.setSelected(false);
+ mtcUnchangedRadioButton.setVisible(true);
+ mtcUnchangedRadioButton.setEnabled(false);
+ mtcUnchangedRadioButton.setSelected(false);
+ mtcRandomPreferSameTypeRadioButton.setVisible(true);
+ mtcRandomPreferSameTypeRadioButton.setEnabled(false);
+ mtcRandomPreferSameTypeRadioButton.setSelected(false);
+ mtcRandomCompletelyRadioButton.setVisible(true);
+ mtcRandomCompletelyRadioButton.setEnabled(false);
+ mtcRandomCompletelyRadioButton.setSelected(false);
+ mtcFullCompatibilityRadioButton.setVisible(true);
+ mtcFullCompatibilityRadioButton.setEnabled(false);
+ mtcFullCompatibilityRadioButton.setSelected(false);
+ fiUnchangedRadioButton.setVisible(true);
+ fiUnchangedRadioButton.setEnabled(false);
+ fiUnchangedRadioButton.setSelected(false);
+ fiShuffleRadioButton.setVisible(true);
+ fiShuffleRadioButton.setEnabled(false);
+ fiShuffleRadioButton.setSelected(false);
+ fiRandomRadioButton.setVisible(true);
+ fiRandomRadioButton.setEnabled(false);
+ fiRandomRadioButton.setSelected(false);
+ fiRandomEvenDistributionRadioButton.setVisible(true);
+ fiRandomEvenDistributionRadioButton.setEnabled(false);
+ fiRandomEvenDistributionRadioButton.setSelected(false);
+ fiBanBadItemsCheckBox.setVisible(true);
+ fiBanBadItemsCheckBox.setEnabled(false);
+ fiBanBadItemsCheckBox.setSelected(false);
+ shUnchangedRadioButton.setVisible(true);
+ shUnchangedRadioButton.setEnabled(false);
+ shUnchangedRadioButton.setSelected(false);
+ shShuffleRadioButton.setVisible(true);
+ shShuffleRadioButton.setEnabled(false);
+ shShuffleRadioButton.setSelected(false);
+ shRandomRadioButton.setVisible(true);
+ shRandomRadioButton.setEnabled(false);
+ shRandomRadioButton.setSelected(false);
+ shBanOverpoweredShopItemsCheckBox.setVisible(true);
+ shBanOverpoweredShopItemsCheckBox.setEnabled(false);
+ shBanOverpoweredShopItemsCheckBox.setSelected(false);
+ shBanBadItemsCheckBox.setVisible(true);
+ shBanBadItemsCheckBox.setEnabled(false);
+ shBanBadItemsCheckBox.setSelected(false);
+ shBanRegularShopItemsCheckBox.setVisible(true);
+ shBanRegularShopItemsCheckBox.setEnabled(false);
+ shBanRegularShopItemsCheckBox.setSelected(false);
+ shBalanceShopItemPricesCheckBox.setVisible(true);
+ shBalanceShopItemPricesCheckBox.setEnabled(false);
+ shBalanceShopItemPricesCheckBox.setSelected(false);
+ shGuaranteeEvolutionItemsCheckBox.setVisible(true);
+ shGuaranteeEvolutionItemsCheckBox.setEnabled(false);
+ shGuaranteeEvolutionItemsCheckBox.setSelected(false);
+ shGuaranteeXItemsCheckBox.setVisible(true);
+ shGuaranteeXItemsCheckBox.setEnabled(false);
+ shGuaranteeXItemsCheckBox.setSelected(false);
+ puUnchangedRadioButton.setVisible(true);
+ puUnchangedRadioButton.setEnabled(false);
+ puUnchangedRadioButton.setSelected(false);
+ puRandomRadioButton.setVisible(true);
+ puRandomRadioButton.setEnabled(false);
+ puRandomRadioButton.setSelected(false);
+ puBanBadItemsCheckBox.setVisible(true);
+ puBanBadItemsCheckBox.setEnabled(false);
+ puBanBadItemsCheckBox.setSelected(false);
+ miscBWExpPatchCheckBox.setVisible(true);
+ miscBWExpPatchCheckBox.setEnabled(false);
+ miscBWExpPatchCheckBox.setSelected(false);
+ miscNerfXAccuracyCheckBox.setVisible(true);
+ miscNerfXAccuracyCheckBox.setEnabled(false);
+ miscNerfXAccuracyCheckBox.setSelected(false);
+ miscFixCritRateCheckBox.setVisible(true);
+ miscFixCritRateCheckBox.setEnabled(false);
+ miscFixCritRateCheckBox.setSelected(false);
+ miscFastestTextCheckBox.setVisible(true);
+ miscFastestTextCheckBox.setEnabled(false);
+ miscFastestTextCheckBox.setSelected(false);
+ miscRunningShoesIndoorsCheckBox.setVisible(true);
+ miscRunningShoesIndoorsCheckBox.setEnabled(false);
+ miscRunningShoesIndoorsCheckBox.setSelected(false);
+ miscRandomizePCPotionCheckBox.setVisible(true);
+ miscRandomizePCPotionCheckBox.setEnabled(false);
+ miscRandomizePCPotionCheckBox.setSelected(false);
+ miscAllowPikachuEvolutionCheckBox.setVisible(true);
+ miscAllowPikachuEvolutionCheckBox.setEnabled(false);
+ miscAllowPikachuEvolutionCheckBox.setSelected(false);
+ miscGiveNationalDexAtCheckBox.setVisible(true);
+ miscGiveNationalDexAtCheckBox.setEnabled(false);
+ miscGiveNationalDexAtCheckBox.setSelected(false);
+ miscUpdateTypeEffectivenessCheckBox.setVisible(true);
+ miscUpdateTypeEffectivenessCheckBox.setEnabled(false);
+ miscUpdateTypeEffectivenessCheckBox.setSelected(false);
+ miscLowerCasePokemonNamesCheckBox.setVisible(true);
+ miscLowerCasePokemonNamesCheckBox.setEnabled(false);
+ miscLowerCasePokemonNamesCheckBox.setSelected(false);
+ miscRandomizeCatchingTutorialCheckBox.setVisible(true);
+ miscRandomizeCatchingTutorialCheckBox.setEnabled(false);
+ miscRandomizeCatchingTutorialCheckBox.setSelected(false);
+ miscBanLuckyEggCheckBox.setVisible(true);
+ miscBanLuckyEggCheckBox.setEnabled(false);
+ miscBanLuckyEggCheckBox.setSelected(false);
+ miscNoFreeLuckyEggCheckBox.setVisible(true);
+ miscNoFreeLuckyEggCheckBox.setEnabled(false);
+ miscNoFreeLuckyEggCheckBox.setSelected(false);
+ miscBanBigMoneyManiacCheckBox.setVisible(true);
+ miscBanBigMoneyManiacCheckBox.setEnabled(false);
+ miscBanBigMoneyManiacCheckBox.setSelected(false);
+ mtNoExistLabel.setVisible(false);
+ mtNoneAvailableLabel.setVisible(false);
+
+ liveTweaksPanel.setVisible(false);
+ miscTweaksPanel.setVisible(true);
+ }
+
+ private void romLoaded() {
+
+ try {
+ int pokemonGeneration = romHandler.generationOfPokemon();
+
+ setRomNameLabel();
+ romCodeLabel.setText(romHandler.getROMCode());
+ romSupportLabel.setText(bundle.getString("GUI.romSupportPrefix") + " "
+ + this.romHandler.getSupportLevel());
+
+ if (!romHandler.isRomValid()) {
+ romNameLabel.setForeground(Color.RED);
+ romCodeLabel.setForeground(Color.RED);
+ romSupportLabel.setForeground(Color.RED);
+ romSupportLabel.setText("<html>" + bundle.getString("GUI.romSupportPrefix") + " <b>Unofficial ROM</b>");
+ showInvalidRomPopup();
+ } else {
+ romNameLabel.setForeground(Color.BLACK);
+ romCodeLabel.setForeground(Color.BLACK);
+ romSupportLabel.setForeground(Color.BLACK);
+ }
+
+ limitPokemonCheckBox.setVisible(true);
+ limitPokemonCheckBox.setEnabled(true);
+ limitPokemonButton.setVisible(true);
+
+ noIrregularAltFormesCheckBox.setVisible(pokemonGeneration >= 4);
+ noIrregularAltFormesCheckBox.setEnabled(pokemonGeneration >= 4);
+
+ raceModeCheckBox.setEnabled(true);
+
+ loadSettingsButton.setEnabled(true);
+ saveSettingsButton.setEnabled(true);
+
+ // Pokemon Traits
+
+ // Pokemon Base Statistics
+ pbsUnchangedRadioButton.setEnabled(true);
+ pbsUnchangedRadioButton.setSelected(true);
+ pbsShuffleRadioButton.setEnabled(true);
+ pbsRandomRadioButton.setEnabled(true);
+
+ pbsStandardizeEXPCurvesCheckBox.setEnabled(true);
+ pbsLegendariesSlowRadioButton.setSelected(true);
+ pbsUpdateBaseStatsCheckBox.setEnabled(pokemonGeneration < 8);
+ pbsFollowMegaEvosCheckBox.setVisible(romHandler.hasMegaEvolutions());
+ pbsUpdateComboBox.setVisible(pokemonGeneration < 8);
+ ExpCurve[] expCurves = getEXPCurvesForGeneration(pokemonGeneration);
+ String[] expCurveNames = new String[expCurves.length];
+ for (int i = 0; i < expCurves.length; i++) {
+ expCurveNames[i] = expCurves[i].toString();
+ }
+ pbsEXPCurveComboBox.setModel(new DefaultComboBoxModel<>(expCurveNames));
+ pbsEXPCurveComboBox.setSelectedIndex(0);
+
+ // Pokemon Types
+ ptUnchangedRadioButton.setEnabled(true);
+ ptUnchangedRadioButton.setSelected(true);
+ ptRandomFollowEvolutionsRadioButton.setEnabled(true);
+ ptRandomCompletelyRadioButton.setEnabled(true);
+ ptFollowMegaEvosCheckBox.setVisible(romHandler.hasMegaEvolutions());
+ ptIsDualTypeCheckBox.setEnabled(false);
+
+ // Pokemon Abilities
+ if (pokemonGeneration >= 3) {
+ paUnchangedRadioButton.setEnabled(true);
+ paUnchangedRadioButton.setSelected(true);
+ paRandomRadioButton.setEnabled(true);
+
+ paAllowWonderGuardCheckBox.setEnabled(false);
+ paFollowEvolutionsCheckBox.setEnabled(false);
+ paTrappingAbilitiesCheckBox.setEnabled(false);
+ paNegativeAbilitiesCheckBox.setEnabled(false);
+ paBadAbilitiesCheckBox.setEnabled(false);
+ paFollowMegaEvosCheckBox.setVisible(romHandler.hasMegaEvolutions());
+ paWeighDuplicatesTogetherCheckBox.setEnabled(false);
+ paEnsureTwoAbilitiesCheckbox.setEnabled(false);
+ } else {
+ pokemonAbilitiesPanel.setVisible(false);
+ }
+
+ // Pokemon Evolutions
+ peUnchangedRadioButton.setEnabled(true);
+ peUnchangedRadioButton.setSelected(true);
+ peRandomRadioButton.setEnabled(true);
+ peRandomEveryLevelRadioButton.setVisible(pokemonGeneration >= 3);
+ peRandomEveryLevelRadioButton.setEnabled(pokemonGeneration >= 3);
+ peChangeImpossibleEvosCheckBox.setEnabled(true);
+ peMakeEvolutionsEasierCheckBox.setEnabled(true);
+ peRemoveTimeBasedEvolutionsCheckBox.setEnabled(true);
+ peAllowAltFormesCheckBox.setVisible(pokemonGeneration >= 7);
+
+ // Starters, Statics & Trades
+
+ // Starter Pokemon
+ spUnchangedRadioButton.setEnabled(true);
+ spUnchangedRadioButton.setSelected(true);
+
+ spCustomRadioButton.setEnabled(true);
+ spRandomCompletelyRadioButton.setEnabled(true);
+ spRandomTwoEvosRadioButton.setEnabled(true);
+ spAllowAltFormesCheckBox.setVisible(romHandler.hasStarterAltFormes());
+ if (romHandler.isYellow()) {
+ spComboBox3.setVisible(false);
+ }
+ populateDropdowns();
+
+ boolean supportsStarterHeldItems = romHandler.supportsStarterHeldItems();
+ spRandomizeStarterHeldItemsCheckBox.setEnabled(supportsStarterHeldItems);
+ spRandomizeStarterHeldItemsCheckBox.setVisible(supportsStarterHeldItems);
+ spBanBadItemsCheckBox.setEnabled(false);
+ spBanBadItemsCheckBox.setVisible(supportsStarterHeldItems);
+
+ stpUnchangedRadioButton.setEnabled(true);
+ stpUnchangedRadioButton.setSelected(true);
+ if (romHandler.canChangeStaticPokemon()) {
+ stpSwapLegendariesSwapStandardsRadioButton.setEnabled(true);
+ stpRandomCompletelyRadioButton.setEnabled(true);
+ stpRandomSimilarStrengthRadioButton.setEnabled(true);
+ stpLimitMainGameLegendariesCheckBox.setVisible(romHandler.hasMainGameLegendaries());
+ stpLimitMainGameLegendariesCheckBox.setEnabled(false);
+ stpAllowAltFormesCheckBox.setVisible(romHandler.hasStaticAltFormes());
+ stpSwapMegaEvosCheckBox.setVisible(pokemonGeneration == 6 && !romHandler.forceSwapStaticMegaEvos());
+ stpPercentageLevelModifierCheckBox.setVisible(true);
+ stpPercentageLevelModifierCheckBox.setEnabled(true);
+ stpPercentageLevelModifierSlider.setVisible(true);
+ stpPercentageLevelModifierSlider.setEnabled(false);
+ stpFixMusicCheckBox.setVisible(romHandler.hasStaticMusicFix());
+ stpFixMusicCheckBox.setEnabled(false);
+ } else {
+ stpSwapLegendariesSwapStandardsRadioButton.setVisible(false);
+ stpRandomCompletelyRadioButton.setVisible(false);
+ stpRandomSimilarStrengthRadioButton.setVisible(false);
+ stpRandomize600BSTCheckBox.setVisible(false);
+ stpLimitMainGameLegendariesCheckBox.setVisible(false);
+ stpPercentageLevelModifierCheckBox.setVisible(false);
+ stpPercentageLevelModifierSlider.setVisible(false);
+ stpFixMusicCheckBox.setVisible(false);
+ }
+
+ igtUnchangedRadioButton.setEnabled(true);
+ igtUnchangedRadioButton.setSelected(true);
+ igtRandomizeGivenPokemonOnlyRadioButton.setEnabled(true);
+ igtRandomizeBothRequestedGivenRadioButton.setEnabled(true);
+
+ igtRandomizeNicknamesCheckBox.setEnabled(false);
+ igtRandomizeOTsCheckBox.setEnabled(false);
+ igtRandomizeIVsCheckBox.setEnabled(false);
+ igtRandomizeItemsCheckBox.setEnabled(false);
+
+ if (pokemonGeneration == 1) {
+ igtRandomizeOTsCheckBox.setVisible(false);
+ igtRandomizeIVsCheckBox.setVisible(false);
+ igtRandomizeItemsCheckBox.setVisible(false);
+ }
+
+ // Move Data
+ mdRandomizeMovePowerCheckBox.setEnabled(true);
+ mdRandomizeMoveAccuracyCheckBox.setEnabled(true);
+ mdRandomizeMovePPCheckBox.setEnabled(true);
+ mdRandomizeMoveTypesCheckBox.setEnabled(true);
+ mdRandomizeMoveCategoryCheckBox.setEnabled(romHandler.hasPhysicalSpecialSplit());
+ mdRandomizeMoveCategoryCheckBox.setVisible(romHandler.hasPhysicalSpecialSplit());
+ mdUpdateMovesCheckBox.setEnabled(pokemonGeneration < 8);
+ mdUpdateMovesCheckBox.setVisible(pokemonGeneration < 8);
+
+ // Pokemon Movesets
+ pmsUnchangedRadioButton.setEnabled(true);
+ pmsUnchangedRadioButton.setSelected(true);
+ pmsRandomPreferringSameTypeRadioButton.setEnabled(true);
+ pmsRandomCompletelyRadioButton.setEnabled(true);
+ pmsMetronomeOnlyModeRadioButton.setEnabled(true);
+
+ pmsGuaranteedLevel1MovesCheckBox.setVisible(romHandler.supportsFourStartingMoves());
+ pmsGuaranteedLevel1MovesSlider.setVisible(romHandler.supportsFourStartingMoves());
+ pmsEvolutionMovesCheckBox.setVisible(pokemonGeneration >= 7);
+
+ tpComboBox.setEnabled(true);
+ tpAllowAlternateFormesCheckBox.setVisible(romHandler.hasFunctionalFormes());
+ tpForceFullyEvolvedAtCheckBox.setEnabled(true);
+ tpPercentageLevelModifierCheckBox.setEnabled(true);
+ tpSwapMegaEvosCheckBox.setVisible(romHandler.hasMegaEvolutions());
+ tpDoubleBattleModeCheckBox.setVisible(pokemonGeneration >= 3);
+
+ boolean additionalPokemonAvailable = pokemonGeneration >= 3;
+
+ tpAdditionalPokemonForLabel.setVisible(additionalPokemonAvailable);
+ tpBossTrainersCheckBox.setVisible(additionalPokemonAvailable);
+ tpBossTrainersCheckBox.setEnabled(false);
+ tpBossTrainersSpinner.setVisible(additionalPokemonAvailable);
+ tpImportantTrainersCheckBox.setVisible(additionalPokemonAvailable);
+ tpImportantTrainersCheckBox.setEnabled(false);
+ tpImportantTrainersSpinner.setVisible(additionalPokemonAvailable);
+ tpRegularTrainersCheckBox.setVisible(additionalPokemonAvailable);
+ tpRegularTrainersCheckBox.setEnabled(false);
+ tpRegularTrainersSpinner.setVisible(additionalPokemonAvailable);
+
+ boolean trainersHeldItemSupport = pokemonGeneration >= 3;
+ tpHeldItemsLabel.setVisible(trainersHeldItemSupport);
+ tpBossTrainersItemsCheckBox.setVisible(trainersHeldItemSupport);
+ tpBossTrainersItemsCheckBox.setEnabled(false);
+ tpImportantTrainersItemsCheckBox.setVisible(trainersHeldItemSupport);
+ tpImportantTrainersItemsCheckBox.setEnabled(false);
+ tpRegularTrainersItemsCheckBox.setVisible(trainersHeldItemSupport);
+ tpRegularTrainersItemsCheckBox.setEnabled(false);
+ tpConsumableItemsOnlyCheckBox.setVisible(trainersHeldItemSupport);
+ tpConsumableItemsOnlyCheckBox.setEnabled(false);
+ tpSensibleItemsCheckBox.setVisible(trainersHeldItemSupport);
+ tpSensibleItemsCheckBox.setEnabled(false);
+ tpHighestLevelGetsItemCheckBox.setVisible(trainersHeldItemSupport);
+ tpHighestLevelGetsItemCheckBox.setEnabled(false);
+
+ tpEliteFourUniquePokemonCheckBox.setVisible(pokemonGeneration >= 3);
+ tpEliteFourUniquePokemonSpinner.setVisible(pokemonGeneration >= 3);
+
+ tpRandomizeTrainerNamesCheckBox.setEnabled(true);
+ tpRandomizeTrainerClassNamesCheckBox.setEnabled(true);
+ tpNoEarlyWonderGuardCheckBox.setVisible(pokemonGeneration >= 3);
+ tpRandomShinyTrainerPokemonCheckBox.setVisible(pokemonGeneration >= 7);
+ tpBetterMovesetsCheckBox.setVisible(pokemonGeneration >= 3);
+
+ totpPanel.setVisible(pokemonGeneration == 7);
+ if (totpPanel.isVisible()) {
+ totpUnchangedRadioButton.setEnabled(true);
+ totpRandomRadioButton.setEnabled(true);
+ totpRandomSimilarStrengthRadioButton.setEnabled(true);
+
+ totpAllyPanel.setVisible(pokemonGeneration == 7);
+ totpAllyUnchangedRadioButton.setEnabled(true);
+ totpAllyRandomRadioButton.setEnabled(true);
+ totpAllyRandomSimilarStrengthRadioButton.setEnabled(true);
+
+ totpAuraPanel.setVisible(pokemonGeneration == 7);
+ totpAuraUnchangedRadioButton.setEnabled(true);
+ totpAuraRandomRadioButton.setEnabled(true);
+ totpAuraRandomSameStrengthRadioButton.setEnabled(true);
+
+ totpRandomizeHeldItemsCheckBox.setEnabled(true);
+ totpAllowAltFormesCheckBox.setEnabled(false);
+ totpPercentageLevelModifierCheckBox.setEnabled(true);
+ totpPercentageLevelModifierSlider.setEnabled(false);
+ }
+
+ // Wild Pokemon
+ wpUnchangedRadioButton.setEnabled(true);
+ wpUnchangedRadioButton.setSelected(true);
+ wpRandomRadioButton.setEnabled(true);
+ wpArea1To1RadioButton.setEnabled(true);
+ wpGlobal1To1RadioButton.setEnabled(true);
+
+ wpARNoneRadioButton.setSelected(true);
+
+ wpUseTimeBasedEncountersCheckBox.setVisible(romHandler.hasTimeBasedEncounters());
+ wpSetMinimumCatchRateCheckBox.setEnabled(true);
+ wpRandomizeHeldItemsCheckBox.setEnabled(true);
+ wpRandomizeHeldItemsCheckBox.setVisible(pokemonGeneration != 1);
+ wpBanBadItemsCheckBox.setVisible(pokemonGeneration != 1);
+ wpBalanceShakingGrassPokemonCheckBox.setVisible(pokemonGeneration == 5);
+ wpPercentageLevelModifierCheckBox.setEnabled(true);
+ wpAllowAltFormesCheckBox.setVisible(romHandler.hasWildAltFormes());
+
+ tmUnchangedRadioButton.setEnabled(true);
+ tmUnchangedRadioButton.setSelected(true);
+ tmRandomRadioButton.setEnabled(true);
+ tmFullHMCompatibilityCheckBox.setVisible(pokemonGeneration < 7);
+ if (tmFullHMCompatibilityCheckBox.isVisible()) {
+ tmFullHMCompatibilityCheckBox.setEnabled(true);
+ }
+
+ thcUnchangedRadioButton.setEnabled(true);
+ thcUnchangedRadioButton.setSelected(true);
+ thcRandomPreferSameTypeRadioButton.setEnabled(true);
+ thcRandomCompletelyRadioButton.setEnabled(true);
+ thcFullCompatibilityRadioButton.setEnabled(true);
+
+ if (romHandler.hasMoveTutors()) {
+ mtMovesPanel.setVisible(true);
+ mtCompatPanel.setVisible(true);
+ mtNoExistLabel.setVisible(false);
+
+ mtUnchangedRadioButton.setEnabled(true);
+ mtUnchangedRadioButton.setSelected(true);
+ mtRandomRadioButton.setEnabled(true);
+
+ mtcUnchangedRadioButton.setEnabled(true);
+ mtcUnchangedRadioButton.setSelected(true);
+ mtcRandomPreferSameTypeRadioButton.setEnabled(true);
+ mtcRandomCompletelyRadioButton.setEnabled(true);
+ mtcFullCompatibilityRadioButton.setEnabled(true);
+ } else {
+ mtMovesPanel.setVisible(false);
+ mtCompatPanel.setVisible(false);
+ mtNoExistLabel.setVisible(true);
+ }
+
+ fiUnchangedRadioButton.setEnabled(true);
+ fiUnchangedRadioButton.setSelected(true);
+ fiShuffleRadioButton.setEnabled(true);
+ fiRandomRadioButton.setEnabled(true);
+ fiRandomEvenDistributionRadioButton.setEnabled(true);
+
+ shopItemsPanel.setVisible(romHandler.hasShopRandomization());
+ shUnchangedRadioButton.setEnabled(true);
+ shUnchangedRadioButton.setSelected(true);
+ shShuffleRadioButton.setEnabled(true);
+ shRandomRadioButton.setEnabled(true);
+
+ pickupItemsPanel.setVisible(romHandler.abilitiesPerPokemon() > 0);
+ puUnchangedRadioButton.setEnabled(true);
+ puUnchangedRadioButton.setSelected(true);
+ puRandomRadioButton.setEnabled(true);
+
+ int mtsAvailable = romHandler.miscTweaksAvailable();
+ int mtCount = MiscTweak.allTweaks.size();
+ List<JCheckBox> usableCheckBoxes = new ArrayList<>();
+
+ for (int mti = 0; mti < mtCount; mti++) {
+ MiscTweak mt = MiscTweak.allTweaks.get(mti);
+ JCheckBox mtCB = tweakCheckBoxes.get(mti);
+ mtCB.setSelected(false);
+ if ((mtsAvailable & mt.getValue()) != 0) {
+ mtCB.setVisible(true);
+ mtCB.setEnabled(true);
+ usableCheckBoxes.add(mtCB);
+ } else {
+ mtCB.setVisible(false);
+ mtCB.setEnabled(false);
+ }
+ }
+
+ if (usableCheckBoxes.size() > 0) {
+ setTweaksPanel(usableCheckBoxes);
+ //tabbedPane1.setComponentAt(7,makeTweaksLayout(usableCheckBoxes));
+ //miscTweaksPanel.setLayout(makeTweaksLayout(usableCheckBoxes));
+ } else {
+ mtNoneAvailableLabel.setVisible(true);
+ liveTweaksPanel.setVisible(false);
+ miscTweaksPanel.setVisible(true);
+ //miscTweaksPanel.setLayout(noTweaksLayout);
+ }
+
+ gameMascotLabel.setIcon(makeMascotIcon());
+
+ if (romHandler instanceof AbstractDSRomHandler) {
+ ((AbstractDSRomHandler) romHandler).closeInnerRom();
+ } else if (romHandler instanceof Abstract3DSRomHandler) {
+ ((Abstract3DSRomHandler) romHandler).closeInnerRom();
+ }
+ } catch (Exception e) {
+ attemptToLogException(e, "GUI.processFailed","GUI.processFailedNoLog", null, null);
+ romHandler = null;
+ initialState();
+ }
+ }
+
+ private void setRomNameLabel() {
+ if (romHandler.hasGameUpdateLoaded()) {
+ romNameLabel.setText(romHandler.getROMName() + " (" + romHandler.getGameUpdateVersion() + ")");
+ } else {
+ romNameLabel.setText(romHandler.getROMName());
+ }
+ }
+
+ private void setTweaksPanel(List<JCheckBox> usableCheckBoxes) {
+ mtNoneAvailableLabel.setVisible(false);
+ miscTweaksPanel.setVisible(false);
+ baseTweaksPanel.remove(liveTweaksPanel);
+ makeTweaksLayout(usableCheckBoxes);
+ GridBagConstraints c = new GridBagConstraints();
+ c.fill = GridBagConstraints.BOTH;
+ c.weightx = 0.1;
+ c.weighty = 0.1;
+ c.gridx = 1;
+ c.gridy = 1;
+ baseTweaksPanel.add(liveTweaksPanel,c);
+ liveTweaksPanel.setVisible(true);
+ }
+
+ private void enableOrDisableSubControls() {
+
+ if (limitPokemonCheckBox.isSelected()) {
+ limitPokemonButton.setEnabled(true);
+ } else {
+ limitPokemonButton.setEnabled(false);
+ }
+
+ boolean followEvolutionControlsEnabled = !peRandomEveryLevelRadioButton.isSelected();
+ boolean followMegaEvolutionControlsEnabled = !(peRandomEveryLevelRadioButton.isSelected() && !noIrregularAltFormesCheckBox.isSelected() && peAllowAltFormesCheckBox.isSelected());
+
+ if (peRandomEveryLevelRadioButton.isSelected()) {
+ // If Evolve Every Level is enabled, unselect all "Follow Evolutions" controls
+ pbsFollowEvolutionsCheckBox.setSelected(false);
+ ptRandomFollowEvolutionsRadioButton.setEnabled(false);
+ if (ptRandomFollowEvolutionsRadioButton.isSelected()) {
+ ptRandomFollowEvolutionsRadioButton.setSelected(false);
+ ptRandomCompletelyRadioButton.setSelected(true);
+ }
+ spRandomTwoEvosRadioButton.setEnabled(false);
+ if (spRandomTwoEvosRadioButton.isSelected()) {
+ spRandomTwoEvosRadioButton.setSelected(false);
+ spRandomCompletelyRadioButton.setSelected(true);
+ }
+ paFollowEvolutionsCheckBox.setSelected(false);
+ tmFollowEvolutionsCheckBox.setSelected(false);
+ mtFollowEvolutionsCheckBox.setSelected(false);
+
+ // If the Follow Mega Evolution controls should be disabled, deselect them here too
+ if (!followMegaEvolutionControlsEnabled) {
+ pbsFollowMegaEvosCheckBox.setSelected(false);
+ ptFollowMegaEvosCheckBox.setSelected(false);
+ paFollowMegaEvosCheckBox.setSelected(false);
+ }
+
+ // Also disable/unselect all the settings that make evolutions easier/possible,
+ // since they aren't relevant in this scenario at all.
+ peChangeImpossibleEvosCheckBox.setEnabled(false);
+ peChangeImpossibleEvosCheckBox.setSelected(false);
+ peMakeEvolutionsEasierCheckBox.setEnabled(false);
+ peMakeEvolutionsEasierCheckBox.setSelected(false);
+ peRemoveTimeBasedEvolutionsCheckBox.setEnabled(false);
+ peRemoveTimeBasedEvolutionsCheckBox.setSelected(false);
+
+ // Disable "Force Fully Evolved" Trainer Pokemon
+ tpForceFullyEvolvedAtCheckBox.setSelected(false);
+ tpForceFullyEvolvedAtCheckBox.setEnabled(false);
+ tpForceFullyEvolvedAtSlider.setEnabled(false);
+ tpForceFullyEvolvedAtSlider.setValue(tpForceFullyEvolvedAtSlider.getMinimum());
+ } else {
+ // All other "Follow Evolutions" controls get properly set/unset below
+ // except this one, so manually enable it again.
+ ptRandomFollowEvolutionsRadioButton.setEnabled(true);
+ spRandomTwoEvosRadioButton.setEnabled(true);
+
+ // The controls that make evolutions easier/possible, however,
+ // need to all be manually re-enabled.
+ peChangeImpossibleEvosCheckBox.setEnabled(true);
+ peMakeEvolutionsEasierCheckBox.setEnabled(true);
+ peRemoveTimeBasedEvolutionsCheckBox.setEnabled(true);
+
+ // Re-enable "Force Fully Evolved" Trainer Pokemon
+ tpForceFullyEvolvedAtCheckBox.setEnabled(true);
+ }
+
+ if (pbsUnchangedRadioButton.isSelected()) {
+ pbsFollowEvolutionsCheckBox.setEnabled(false);
+ pbsFollowEvolutionsCheckBox.setSelected(false);
+ pbsFollowMegaEvosCheckBox.setEnabled(false);
+ pbsFollowMegaEvosCheckBox.setSelected(false);
+ } else {
+ pbsFollowEvolutionsCheckBox.setEnabled(followEvolutionControlsEnabled);
+ pbsFollowMegaEvosCheckBox.setEnabled(followMegaEvolutionControlsEnabled);
+ }
+
+ if (pbsRandomRadioButton.isSelected()) {
+ if (pbsFollowEvolutionsCheckBox.isSelected() || pbsFollowMegaEvosCheckBox.isSelected()) {
+ pbsAssignEvoStatsRandomlyCheckBox.setEnabled(true);
+ } else {
+ pbsAssignEvoStatsRandomlyCheckBox.setEnabled(false);
+ pbsAssignEvoStatsRandomlyCheckBox.setSelected(false);
+ }
+ } else {
+ pbsAssignEvoStatsRandomlyCheckBox.setEnabled(false);
+ pbsAssignEvoStatsRandomlyCheckBox.setSelected(false);
+ }
+
+ if (pbsStandardizeEXPCurvesCheckBox.isSelected()) {
+ pbsLegendariesSlowRadioButton.setEnabled(true);
+ pbsStrongLegendariesSlowRadioButton.setEnabled(true);
+ pbsAllMediumFastRadioButton.setEnabled(true);
+ pbsEXPCurveComboBox.setEnabled(true);
+ } else {
+ pbsLegendariesSlowRadioButton.setEnabled(false);
+ pbsLegendariesSlowRadioButton.setSelected(true);
+ pbsStrongLegendariesSlowRadioButton.setEnabled(false);
+ pbsAllMediumFastRadioButton.setEnabled(false);
+ pbsEXPCurveComboBox.setEnabled(false);
+ }
+
+ if (pbsUpdateBaseStatsCheckBox.isSelected()) {
+ pbsUpdateComboBox.setEnabled(true);
+ } else {
+ pbsUpdateComboBox.setEnabled(false);
+ }
+
+ if (ptUnchangedRadioButton.isSelected()) {
+ ptFollowMegaEvosCheckBox.setEnabled(false);
+ ptFollowMegaEvosCheckBox.setSelected(false);
+ ptIsDualTypeCheckBox.setEnabled(false);
+ ptIsDualTypeCheckBox.setSelected(false);
+ } else {
+ ptFollowMegaEvosCheckBox.setEnabled(followMegaEvolutionControlsEnabled);
+ ptIsDualTypeCheckBox.setEnabled(true);
+ }
+
+ if (paRandomRadioButton.isSelected()) {
+ paAllowWonderGuardCheckBox.setEnabled(true);
+ paFollowEvolutionsCheckBox.setEnabled(followEvolutionControlsEnabled);
+ paFollowMegaEvosCheckBox.setEnabled(followMegaEvolutionControlsEnabled);
+ paTrappingAbilitiesCheckBox.setEnabled(true);
+ paNegativeAbilitiesCheckBox.setEnabled(true);
+ paBadAbilitiesCheckBox.setEnabled(true);
+ paWeighDuplicatesTogetherCheckBox.setEnabled(true);
+ paEnsureTwoAbilitiesCheckbox.setEnabled(true);
+ } else {
+ paAllowWonderGuardCheckBox.setEnabled(false);
+ paAllowWonderGuardCheckBox.setSelected(false);
+ paFollowEvolutionsCheckBox.setEnabled(false);
+ paFollowEvolutionsCheckBox.setSelected(false);
+ paTrappingAbilitiesCheckBox.setEnabled(false);
+ paTrappingAbilitiesCheckBox.setSelected(false);
+ paNegativeAbilitiesCheckBox.setEnabled(false);
+ paNegativeAbilitiesCheckBox.setSelected(false);
+ paBadAbilitiesCheckBox.setEnabled(false);
+ paBadAbilitiesCheckBox.setSelected(false);
+ paFollowMegaEvosCheckBox.setEnabled(false);
+ paFollowMegaEvosCheckBox.setSelected(false);
+ paWeighDuplicatesTogetherCheckBox.setEnabled(false);
+ paWeighDuplicatesTogetherCheckBox.setSelected(false);
+ paEnsureTwoAbilitiesCheckbox.setEnabled(false);
+ paEnsureTwoAbilitiesCheckbox.setSelected(false);
+ }
+
+ if (peRandomRadioButton.isSelected()) {
+ peSimilarStrengthCheckBox.setEnabled(true);
+ peSameTypingCheckBox.setEnabled(true);
+ peLimitEvolutionsToThreeCheckBox.setEnabled(true);
+ peForceChangeCheckBox.setEnabled(true);
+ peAllowAltFormesCheckBox.setEnabled(true);
+ } else if (peRandomEveryLevelRadioButton.isSelected()) {
+ peSimilarStrengthCheckBox.setEnabled(false);
+ peSimilarStrengthCheckBox.setSelected(false);
+ peSameTypingCheckBox.setEnabled(true);
+ peLimitEvolutionsToThreeCheckBox.setEnabled(false);
+ peLimitEvolutionsToThreeCheckBox.setSelected(false);
+ peForceChangeCheckBox.setEnabled(true);
+ peAllowAltFormesCheckBox.setEnabled(true);
+ } else {
+ peSimilarStrengthCheckBox.setEnabled(false);
+ peSimilarStrengthCheckBox.setSelected(false);
+ peSameTypingCheckBox.setEnabled(false);
+ peSameTypingCheckBox.setSelected(false);
+ peLimitEvolutionsToThreeCheckBox.setEnabled(false);
+ peLimitEvolutionsToThreeCheckBox.setSelected(false);
+ peForceChangeCheckBox.setEnabled(false);
+ peForceChangeCheckBox.setSelected(false);
+ peAllowAltFormesCheckBox.setEnabled(false);
+ peAllowAltFormesCheckBox.setSelected(false);
+ }
+
+ boolean spCustomStatus = spCustomRadioButton.isSelected();
+ spComboBox1.setEnabled(spCustomStatus);
+ spComboBox2.setEnabled(spCustomStatus);
+ spComboBox3.setEnabled(spCustomStatus);
+
+ if (spUnchangedRadioButton.isSelected()) {
+ spAllowAltFormesCheckBox.setEnabled(false);
+ spAllowAltFormesCheckBox.setSelected(false);
+ } else {
+ spAllowAltFormesCheckBox.setEnabled(true);
+ }
+
+ if (spRandomizeStarterHeldItemsCheckBox.isSelected()) {
+ spBanBadItemsCheckBox.setEnabled(true);
+ } else {
+ spBanBadItemsCheckBox.setEnabled(false);
+ spBanBadItemsCheckBox.setSelected(false);
+ }
+
+ if (stpUnchangedRadioButton.isSelected()) {
+ stpRandomize600BSTCheckBox.setEnabled(false);
+ stpRandomize600BSTCheckBox.setSelected(false);
+ stpAllowAltFormesCheckBox.setEnabled(false);
+ stpAllowAltFormesCheckBox.setSelected(false);
+ stpSwapMegaEvosCheckBox.setEnabled(false);
+ stpSwapMegaEvosCheckBox.setSelected(false);
+ stpFixMusicCheckBox.setEnabled(false);
+ stpFixMusicCheckBox.setSelected(false);
+ } else {
+ stpRandomize600BSTCheckBox.setEnabled(true);
+ stpAllowAltFormesCheckBox.setEnabled(true);
+ stpSwapMegaEvosCheckBox.setEnabled(true);
+ stpFixMusicCheckBox.setEnabled(true);
+ }
+
+ if (stpRandomSimilarStrengthRadioButton.isSelected()) {
+ stpLimitMainGameLegendariesCheckBox.setEnabled(stpLimitMainGameLegendariesCheckBox.isVisible());
+ } else {
+ stpLimitMainGameLegendariesCheckBox.setEnabled(false);
+ stpLimitMainGameLegendariesCheckBox.setSelected(false);
+ }
+
+ if (stpPercentageLevelModifierCheckBox.isSelected()) {
+ stpPercentageLevelModifierSlider.setEnabled(true);
+ } else {
+ stpPercentageLevelModifierSlider.setEnabled(false);
+ stpPercentageLevelModifierSlider.setValue(0);
+ }
+
+ if (igtUnchangedRadioButton.isSelected()) {
+ igtRandomizeItemsCheckBox.setEnabled(false);
+ igtRandomizeItemsCheckBox.setSelected(false);
+ igtRandomizeIVsCheckBox.setEnabled(false);
+ igtRandomizeIVsCheckBox.setSelected(false);
+ igtRandomizeNicknamesCheckBox.setEnabled(false);
+ igtRandomizeNicknamesCheckBox.setSelected(false);
+ igtRandomizeOTsCheckBox.setEnabled(false);
+ igtRandomizeOTsCheckBox.setSelected(false);
+ } else {
+ igtRandomizeItemsCheckBox.setEnabled(true);
+ igtRandomizeIVsCheckBox.setEnabled(true);
+ igtRandomizeNicknamesCheckBox.setEnabled(true);
+ igtRandomizeOTsCheckBox.setEnabled(true);
+ }
+
+ if (mdUpdateMovesCheckBox.isSelected()) {
+ mdUpdateComboBox.setEnabled(true);
+ } else {
+ mdUpdateComboBox.setEnabled(false);
+ }
+
+ if (pmsMetronomeOnlyModeRadioButton.isSelected() || pmsUnchangedRadioButton.isSelected()) {
+ pmsGuaranteedLevel1MovesCheckBox.setEnabled(false);
+ pmsGuaranteedLevel1MovesCheckBox.setSelected(false);
+ pmsForceGoodDamagingCheckBox.setEnabled(false);
+ pmsForceGoodDamagingCheckBox.setSelected(false);
+ pmsReorderDamagingMovesCheckBox.setEnabled(false);
+ pmsReorderDamagingMovesCheckBox.setSelected(false);
+ pmsNoGameBreakingMovesCheckBox.setEnabled(false);
+ pmsNoGameBreakingMovesCheckBox.setSelected(false);
+ pmsEvolutionMovesCheckBox.setEnabled(false);
+ pmsEvolutionMovesCheckBox.setSelected(false);
+ } else {
+ pmsGuaranteedLevel1MovesCheckBox.setEnabled(true);
+ pmsForceGoodDamagingCheckBox.setEnabled(true);
+ pmsReorderDamagingMovesCheckBox.setEnabled(true);
+ pmsNoGameBreakingMovesCheckBox.setEnabled(true);
+ pmsEvolutionMovesCheckBox.setEnabled(true);
+ }
+
+ if (pmsGuaranteedLevel1MovesCheckBox.isSelected()) {
+ pmsGuaranteedLevel1MovesSlider.setEnabled(true);
+ } else {
+ pmsGuaranteedLevel1MovesSlider.setEnabled(false);
+ pmsGuaranteedLevel1MovesSlider.setValue(pmsGuaranteedLevel1MovesSlider.getMinimum());
+ }
+
+ if (pmsForceGoodDamagingCheckBox.isSelected()) {
+ pmsForceGoodDamagingSlider.setEnabled(true);
+ } else {
+ pmsForceGoodDamagingSlider.setEnabled(false);
+ pmsForceGoodDamagingSlider.setValue(pmsForceGoodDamagingSlider.getMinimum());
+ }
+
+ if (isTrainerSetting(TRAINER_UNCHANGED)) {
+ tpSimilarStrengthCheckBox.setEnabled(false);
+ tpSimilarStrengthCheckBox.setSelected(false);
+ tpDontUseLegendariesCheckBox.setEnabled(false);
+ tpDontUseLegendariesCheckBox.setSelected(false);
+ tpNoEarlyWonderGuardCheckBox.setEnabled(false);
+ tpNoEarlyWonderGuardCheckBox.setSelected(false);
+ tpAllowAlternateFormesCheckBox.setEnabled(false);
+ tpAllowAlternateFormesCheckBox.setSelected(false);
+ tpSwapMegaEvosCheckBox.setEnabled(false);
+ tpSwapMegaEvosCheckBox.setSelected(false);
+ tpRandomShinyTrainerPokemonCheckBox.setEnabled(false);
+ tpRandomShinyTrainerPokemonCheckBox.setSelected(false);
+ tpBetterMovesetsCheckBox.setEnabled(false);
+ tpBetterMovesetsCheckBox.setSelected(false);
+ tpDoubleBattleModeCheckBox.setEnabled(false);
+ tpDoubleBattleModeCheckBox.setSelected(false);
+ tpBossTrainersCheckBox.setEnabled(false);
+ tpBossTrainersCheckBox.setSelected(false);
+ tpImportantTrainersCheckBox.setEnabled(false);
+ tpImportantTrainersCheckBox.setSelected(false);
+ tpRegularTrainersCheckBox.setEnabled(false);
+ tpRegularTrainersCheckBox.setSelected(false);
+ tpBossTrainersItemsCheckBox.setEnabled(false);
+ tpBossTrainersItemsCheckBox.setSelected(false);
+ tpImportantTrainersItemsCheckBox.setEnabled(false);
+ tpImportantTrainersItemsCheckBox.setSelected(false);
+ tpRegularTrainersItemsCheckBox.setEnabled(false);
+ tpRegularTrainersItemsCheckBox.setSelected(false);
+ tpConsumableItemsOnlyCheckBox.setEnabled(false);
+ tpConsumableItemsOnlyCheckBox.setSelected(false);
+ tpSensibleItemsCheckBox.setEnabled(false);
+ tpSensibleItemsCheckBox.setSelected(false);
+ tpHighestLevelGetsItemCheckBox.setEnabled(false);
+ tpHighestLevelGetsItemCheckBox.setSelected(false);
+ tpEliteFourUniquePokemonCheckBox.setEnabled(false);
+ tpEliteFourUniquePokemonCheckBox.setSelected(false);
+ } else {
+ tpSimilarStrengthCheckBox.setEnabled(true);
+ tpDontUseLegendariesCheckBox.setEnabled(true);
+ tpNoEarlyWonderGuardCheckBox.setEnabled(true);
+ tpAllowAlternateFormesCheckBox.setEnabled(true);
+ if (currentRestrictions == null || currentRestrictions.allowTrainerSwapMegaEvolvables(
+ romHandler.forceSwapStaticMegaEvos(), isTrainerSetting(TRAINER_TYPE_THEMED))) {
+ tpSwapMegaEvosCheckBox.setEnabled(true);
+ } else {
+ tpSwapMegaEvosCheckBox.setEnabled(false);
+ tpSwapMegaEvosCheckBox.setSelected(false);
+ }
+ tpRandomShinyTrainerPokemonCheckBox.setEnabled(true);
+ tpBetterMovesetsCheckBox.setEnabled(true);
+ tpDoubleBattleModeCheckBox.setEnabled(tpDoubleBattleModeCheckBox.isVisible());
+ tpBossTrainersCheckBox.setEnabled(tpBossTrainersCheckBox.isVisible());
+ tpImportantTrainersCheckBox.setEnabled(tpImportantTrainersCheckBox.isVisible());
+ tpRegularTrainersCheckBox.setEnabled(tpRegularTrainersCheckBox.isVisible());
+ tpBossTrainersItemsCheckBox.setEnabled(tpBossTrainersItemsCheckBox.isVisible());
+ tpImportantTrainersItemsCheckBox.setEnabled(tpImportantTrainersItemsCheckBox.isVisible());
+ tpRegularTrainersItemsCheckBox.setEnabled(tpRegularTrainersItemsCheckBox.isVisible());
+ tpEliteFourUniquePokemonCheckBox.setEnabled(tpEliteFourUniquePokemonCheckBox.isVisible());
+ }
+
+ if (tpForceFullyEvolvedAtCheckBox.isSelected()) {
+ tpForceFullyEvolvedAtSlider.setEnabled(true);
+ } else {
+ tpForceFullyEvolvedAtSlider.setEnabled(false);
+ tpForceFullyEvolvedAtSlider.setValue(tpForceFullyEvolvedAtSlider.getMinimum());
+ }
+
+ if (tpPercentageLevelModifierCheckBox.isSelected()) {
+ tpPercentageLevelModifierSlider.setEnabled(true);
+ } else {
+ tpPercentageLevelModifierSlider.setEnabled(false);
+ tpPercentageLevelModifierSlider.setValue(0);
+ }
+
+ if (tpBossTrainersCheckBox.isSelected()) {
+ tpBossTrainersSpinner.setEnabled(true);
+ } else {
+ tpBossTrainersSpinner.setEnabled(false);
+ tpBossTrainersSpinner.setValue(1);
+ }
+
+ if (tpImportantTrainersCheckBox.isSelected()) {
+ tpImportantTrainersSpinner.setEnabled(true);
+ } else {
+ tpImportantTrainersSpinner.setEnabled(false);
+ tpImportantTrainersSpinner.setValue(1);
+ }
+
+ if (tpRegularTrainersCheckBox.isSelected()) {
+ tpRegularTrainersSpinner.setEnabled(true);
+ } else {
+ tpRegularTrainersSpinner.setEnabled(false);
+ tpRegularTrainersSpinner.setValue(1);
+ }
+
+ if (tpBossTrainersItemsCheckBox.isSelected() || tpImportantTrainersItemsCheckBox.isSelected() ||
+ tpRegularTrainersItemsCheckBox.isSelected()) {
+ tpConsumableItemsOnlyCheckBox.setEnabled(true);
+ tpSensibleItemsCheckBox.setEnabled(true);
+ tpHighestLevelGetsItemCheckBox.setEnabled(true);
+ } else {
+ tpConsumableItemsOnlyCheckBox.setEnabled(false);
+ tpSensibleItemsCheckBox.setEnabled(false);
+ tpHighestLevelGetsItemCheckBox.setEnabled(false);
+ }
+
+ if (!peRandomEveryLevelRadioButton.isSelected() && (!spUnchangedRadioButton.isSelected() || !isTrainerSetting(TRAINER_UNCHANGED))) {
+ tpRivalCarriesStarterCheckBox.setEnabled(true);
+ } else {
+ tpRivalCarriesStarterCheckBox.setEnabled(false);
+ tpRivalCarriesStarterCheckBox.setSelected(false);
+ }
+
+ if (isTrainerSetting(TRAINER_TYPE_THEMED)) {
+ tpWeightTypesCheckBox.setEnabled(true);
+ } else {
+ tpWeightTypesCheckBox.setEnabled(false);
+ tpWeightTypesCheckBox.setSelected(false);
+ }
+
+ if (tpEliteFourUniquePokemonCheckBox.isSelected()) {
+ tpEliteFourUniquePokemonSpinner.setEnabled(true);
+ } else {
+ tpEliteFourUniquePokemonSpinner.setEnabled(false);
+ tpEliteFourUniquePokemonSpinner.setValue(1);
+ }
+
+ if (!totpUnchangedRadioButton.isSelected() || !totpAllyUnchangedRadioButton.isSelected()) {
+ totpAllowAltFormesCheckBox.setEnabled(true);
+ } else {
+ totpAllowAltFormesCheckBox.setEnabled(false);
+ totpAllowAltFormesCheckBox.setSelected(false);
+ }
+
+ if (totpPercentageLevelModifierCheckBox.isSelected()) {
+ totpPercentageLevelModifierSlider.setEnabled(true);
+ } else {
+ totpPercentageLevelModifierSlider.setEnabled(false);
+ totpPercentageLevelModifierSlider.setValue(0);
+ }
+
+ if (wpRandomRadioButton.isSelected()) {
+ wpARNoneRadioButton.setEnabled(true);
+ wpARSimilarStrengthRadioButton.setEnabled(true);
+ wpARCatchEmAllModeRadioButton.setEnabled(true);
+ wpARTypeThemeAreasRadioButton.setEnabled(true);
+ wpBalanceShakingGrassPokemonCheckBox.setEnabled(true);
+ } else if (wpArea1To1RadioButton.isSelected()) {
+ wpARNoneRadioButton.setEnabled(true);
+ wpARSimilarStrengthRadioButton.setEnabled(true);
+ wpARCatchEmAllModeRadioButton.setEnabled(true);
+ wpARTypeThemeAreasRadioButton.setEnabled(true);
+ wpBalanceShakingGrassPokemonCheckBox.setEnabled(false);
+ } else if (wpGlobal1To1RadioButton.isSelected()) {
+ if (wpARCatchEmAllModeRadioButton.isSelected() || wpARTypeThemeAreasRadioButton.isSelected()) {
+ wpARNoneRadioButton.setSelected(true);
+ }
+ wpARNoneRadioButton.setEnabled(true);
+ wpARSimilarStrengthRadioButton.setEnabled(true);
+ wpARCatchEmAllModeRadioButton.setEnabled(false);
+ wpARTypeThemeAreasRadioButton.setEnabled(false);
+ wpBalanceShakingGrassPokemonCheckBox.setEnabled(false);
+ } else {
+ wpARNoneRadioButton.setEnabled(false);
+ wpARNoneRadioButton.setSelected(true);
+ wpARSimilarStrengthRadioButton.setEnabled(false);
+ wpARCatchEmAllModeRadioButton.setEnabled(false);
+ wpARTypeThemeAreasRadioButton.setEnabled(false);
+ wpBalanceShakingGrassPokemonCheckBox.setEnabled(false);
+ }
+
+ if (wpUnchangedRadioButton.isSelected()) {
+ wpUseTimeBasedEncountersCheckBox.setEnabled(false);
+ wpUseTimeBasedEncountersCheckBox.setSelected(false);
+ wpDontUseLegendariesCheckBox.setEnabled(false);
+ wpDontUseLegendariesCheckBox.setSelected(false);
+ wpAllowAltFormesCheckBox.setEnabled(false);
+ wpAllowAltFormesCheckBox.setSelected(false);
+ } else {
+ wpUseTimeBasedEncountersCheckBox.setEnabled(true);
+ wpDontUseLegendariesCheckBox.setEnabled(true);
+ wpAllowAltFormesCheckBox.setEnabled(true);
+ }
+
+ if (wpRandomizeHeldItemsCheckBox.isSelected()
+ && wpRandomizeHeldItemsCheckBox.isVisible()
+ && wpRandomizeHeldItemsCheckBox.isEnabled()) { // ??? why all three
+ wpBanBadItemsCheckBox.setEnabled(true);
+ } else {
+ wpBanBadItemsCheckBox.setEnabled(false);
+ wpBanBadItemsCheckBox.setSelected(false);
+ }
+
+ if (wpSetMinimumCatchRateCheckBox.isSelected()) {
+ wpSetMinimumCatchRateSlider.setEnabled(true);
+ } else {
+ wpSetMinimumCatchRateSlider.setEnabled(false);
+ wpSetMinimumCatchRateSlider.setValue(0);
+ }
+
+ if (wpPercentageLevelModifierCheckBox.isSelected()) {
+ wpPercentageLevelModifierSlider.setEnabled(true);
+ } else {
+ wpPercentageLevelModifierSlider.setEnabled(false);
+ wpPercentageLevelModifierSlider.setValue(0);
+ }
+
+ if (pmsMetronomeOnlyModeRadioButton.isSelected()) {
+ tmUnchangedRadioButton.setEnabled(false);
+ tmRandomRadioButton.setEnabled(false);
+ tmUnchangedRadioButton.setSelected(true);
+
+ mtUnchangedRadioButton.setEnabled(false);
+ mtRandomRadioButton.setEnabled(false);
+ mtUnchangedRadioButton.setSelected(true);
+
+ tmLevelupMoveSanityCheckBox.setEnabled(false);
+ tmLevelupMoveSanityCheckBox.setSelected(false);
+ tmKeepFieldMoveTMsCheckBox.setEnabled(false);
+ tmKeepFieldMoveTMsCheckBox.setSelected(false);
+ tmForceGoodDamagingCheckBox.setEnabled(false);
+ tmForceGoodDamagingCheckBox.setSelected(false);
+ tmNoGameBreakingMovesCheckBox.setEnabled(false);
+ tmNoGameBreakingMovesCheckBox.setSelected(false);
+ tmFollowEvolutionsCheckBox.setEnabled(false);
+ tmFollowEvolutionsCheckBox.setSelected(false);
+
+ mtLevelupMoveSanityCheckBox.setEnabled(false);
+ mtLevelupMoveSanityCheckBox.setSelected(false);
+ mtKeepFieldMoveTutorsCheckBox.setEnabled(false);
+ mtKeepFieldMoveTutorsCheckBox.setSelected(false);
+ mtForceGoodDamagingCheckBox.setEnabled(false);
+ mtForceGoodDamagingCheckBox.setSelected(false);
+ mtNoGameBreakingMovesCheckBox.setEnabled(false);
+ mtNoGameBreakingMovesCheckBox.setSelected(false);
+ mtFollowEvolutionsCheckBox.setEnabled(false);
+ mtFollowEvolutionsCheckBox.setSelected(false);
+ } else {
+ tmUnchangedRadioButton.setEnabled(true);
+ tmRandomRadioButton.setEnabled(true);
+
+ mtUnchangedRadioButton.setEnabled(true);
+ mtRandomRadioButton.setEnabled(true);
+
+ if (!(pmsUnchangedRadioButton.isSelected()) || !(tmUnchangedRadioButton.isSelected())
+ || !(thcUnchangedRadioButton.isSelected())) {
+ tmLevelupMoveSanityCheckBox.setEnabled(true);
+ } else {
+ tmLevelupMoveSanityCheckBox.setEnabled(false);
+ tmLevelupMoveSanityCheckBox.setSelected(false);
+ }
+
+ if ((!thcUnchangedRadioButton.isSelected()) || (tmLevelupMoveSanityCheckBox.isSelected())) {
+ tmFollowEvolutionsCheckBox.setEnabled(followEvolutionControlsEnabled);
+ }
+ else {
+ tmFollowEvolutionsCheckBox.setEnabled(false);
+ tmFollowEvolutionsCheckBox.setSelected(false);
+ }
+
+ if (!(tmUnchangedRadioButton.isSelected())) {
+ tmKeepFieldMoveTMsCheckBox.setEnabled(true);
+ tmForceGoodDamagingCheckBox.setEnabled(true);
+ tmNoGameBreakingMovesCheckBox.setEnabled(true);
+ } else {
+ tmKeepFieldMoveTMsCheckBox.setEnabled(false);
+ tmKeepFieldMoveTMsCheckBox.setSelected(false);
+ tmForceGoodDamagingCheckBox.setEnabled(false);
+ tmForceGoodDamagingCheckBox.setSelected(false);
+ tmNoGameBreakingMovesCheckBox.setEnabled(false);
+ tmNoGameBreakingMovesCheckBox.setSelected(false);
+ }
+
+ if (romHandler.hasMoveTutors()
+ && (!(pmsUnchangedRadioButton.isSelected()) || !(mtUnchangedRadioButton.isSelected())
+ || !(mtcUnchangedRadioButton.isSelected()))) {
+ mtLevelupMoveSanityCheckBox.setEnabled(true);
+ } else {
+ mtLevelupMoveSanityCheckBox.setEnabled(false);
+ mtLevelupMoveSanityCheckBox.setSelected(false);
+ }
+
+ if (!(mtcUnchangedRadioButton.isSelected()) || (mtLevelupMoveSanityCheckBox.isSelected())) {
+ mtFollowEvolutionsCheckBox.setEnabled(followEvolutionControlsEnabled);
+ }
+ else {
+ mtFollowEvolutionsCheckBox.setEnabled(false);
+ mtFollowEvolutionsCheckBox.setSelected(false);
+ }
+
+ if (romHandler.hasMoveTutors() && !(mtUnchangedRadioButton.isSelected())) {
+ mtKeepFieldMoveTutorsCheckBox.setEnabled(true);
+ mtForceGoodDamagingCheckBox.setEnabled(true);
+ mtNoGameBreakingMovesCheckBox.setEnabled(true);
+ } else {
+ mtKeepFieldMoveTutorsCheckBox.setEnabled(false);
+ mtKeepFieldMoveTutorsCheckBox.setSelected(false);
+ mtForceGoodDamagingCheckBox.setEnabled(false);
+ mtForceGoodDamagingCheckBox.setSelected(false);
+ mtNoGameBreakingMovesCheckBox.setEnabled(false);
+ mtNoGameBreakingMovesCheckBox.setSelected(false);
+ }
+ }
+
+ if (tmForceGoodDamagingCheckBox.isSelected()) {
+ tmForceGoodDamagingSlider.setEnabled(true);
+ } else {
+ tmForceGoodDamagingSlider.setEnabled(false);
+ tmForceGoodDamagingSlider.setValue(tmForceGoodDamagingSlider.getMinimum());
+ }
+
+ if (mtForceGoodDamagingCheckBox.isSelected()) {
+ mtForceGoodDamagingSlider.setEnabled(true);
+ } else {
+ mtForceGoodDamagingSlider.setEnabled(false);
+ mtForceGoodDamagingSlider.setValue(mtForceGoodDamagingSlider.getMinimum());
+ }
+
+ tmFullHMCompatibilityCheckBox.setEnabled(!thcFullCompatibilityRadioButton.isSelected());
+
+ if (fiRandomRadioButton.isSelected() && fiRandomRadioButton.isVisible() && fiRandomRadioButton.isEnabled()) {
+ fiBanBadItemsCheckBox.setEnabled(true);
+ } else if (fiRandomEvenDistributionRadioButton.isSelected() && fiRandomEvenDistributionRadioButton.isVisible()
+ && fiRandomEvenDistributionRadioButton.isEnabled()) {
+ fiBanBadItemsCheckBox.setEnabled(true);
+ } else {
+ fiBanBadItemsCheckBox.setEnabled(false);
+ fiBanBadItemsCheckBox.setSelected(false);
+ }
+
+ if (shRandomRadioButton.isSelected() && shRandomRadioButton.isVisible() && shRandomRadioButton.isEnabled()) {
+ shBanBadItemsCheckBox.setEnabled(true);
+ shBanRegularShopItemsCheckBox.setEnabled(true);
+ shBanOverpoweredShopItemsCheckBox.setEnabled(true);
+ shBalanceShopItemPricesCheckBox.setEnabled(true);
+ shGuaranteeEvolutionItemsCheckBox.setEnabled(true);
+ shGuaranteeXItemsCheckBox.setEnabled(true);
+ } else {
+ shBanBadItemsCheckBox.setEnabled(false);
+ shBanBadItemsCheckBox.setSelected(false);
+ shBanRegularShopItemsCheckBox.setEnabled(false);
+ shBanRegularShopItemsCheckBox.setSelected(false);
+ shBanOverpoweredShopItemsCheckBox.setEnabled(false);
+ shBanOverpoweredShopItemsCheckBox.setSelected(false);
+ shBalanceShopItemPricesCheckBox.setEnabled(false);
+ shBalanceShopItemPricesCheckBox.setSelected(false);
+ shGuaranteeEvolutionItemsCheckBox.setEnabled(false);
+ shGuaranteeEvolutionItemsCheckBox.setSelected(false);
+ shGuaranteeXItemsCheckBox.setEnabled(false);
+ shGuaranteeXItemsCheckBox.setSelected(false);
+ }
+
+ if (puRandomRadioButton.isSelected() && puRandomRadioButton.isVisible() && puRandomRadioButton.isEnabled()) {
+ puBanBadItemsCheckBox.setEnabled(true);
+ } else {
+ puBanBadItemsCheckBox.setEnabled(false);
+ puBanBadItemsCheckBox.setSelected(false);
+ }
+ }
+
+ private void initTweaksPanel() {
+ tweakCheckBoxes = new ArrayList<>();
+ int numTweaks = MiscTweak.allTweaks.size();
+ for (int i = 0; i < numTweaks; i++) {
+ MiscTweak ct = MiscTweak.allTweaks.get(i);
+ JCheckBox tweakBox = new JCheckBox();
+ tweakBox.setText(ct.getTweakName());
+ tweakBox.setToolTipText(ct.getTooltipText());
+ tweakCheckBoxes.add(tweakBox);
+ }
+ }
+
+ private void makeTweaksLayout(List<JCheckBox> tweaks) {
+ liveTweaksPanel = new JPanel(new GridBagLayout());
+ TitledBorder border = BorderFactory.createTitledBorder("Misc. Tweaks");
+ border.setTitleFont(border.getTitleFont().deriveFont(Font.BOLD));
+ liveTweaksPanel.setBorder(border);
+
+ int numTweaks = tweaks.size();
+ Iterator<JCheckBox> tweaksIterator = tweaks.iterator();
+
+ GridBagConstraints c = new GridBagConstraints();
+ c.anchor = GridBagConstraints.FIRST_LINE_START;
+ c.insets = new Insets(5,5,0,5);
+
+ int TWEAK_COLS = 4;
+ int numCols = Math.min(TWEAK_COLS, numTweaks);
+
+ for (int row = 0; row <= numTweaks / numCols; row++) {
+ for (int col = 0; col < numCols; col++) {
+ if (!tweaksIterator.hasNext()) break;
+ c.gridx = col;
+ c.gridy = row;
+ liveTweaksPanel.add(tweaksIterator.next(),c);
+ }
+ }
+
+ // Pack the checkboxes together
+
+ GridBagConstraints horizontalC = new GridBagConstraints();
+ horizontalC.gridx = numCols;
+ horizontalC.gridy = 0;
+ horizontalC.weightx = 0.1;
+
+ GridBagConstraints verticalC = new GridBagConstraints();
+ verticalC.gridx = 0;
+ verticalC.gridy = (numTweaks / numCols) + 1;
+ verticalC.weighty = 0.1;
+
+ liveTweaksPanel.add(new JSeparator(SwingConstants.HORIZONTAL),horizontalC);
+ liveTweaksPanel.add(new JSeparator(SwingConstants.VERTICAL),verticalC);
+ }
+
+ private void populateDropdowns() {
+ List<Pokemon> currentStarters = romHandler.getStarters();
+ List<Pokemon> allPokes =
+ romHandler.generationOfPokemon() >= 6 ?
+ romHandler.getPokemonInclFormes()
+ .stream()
+ .filter(pk -> pk == null || !pk.actuallyCosmetic)
+ .collect(Collectors.toList()) :
+ romHandler.getPokemon();
+ String[] pokeNames = new String[allPokes.size()];
+ pokeNames[0] = "Random";
+ for (int i = 1; i < allPokes.size(); i++) {
+ pokeNames[i] = allPokes.get(i).fullName();
+
+ }
+
+ spComboBox1.setModel(new DefaultComboBoxModel<>(pokeNames));
+ spComboBox1.setSelectedIndex(allPokes.indexOf(currentStarters.get(0)));
+ spComboBox2.setModel(new DefaultComboBoxModel<>(pokeNames));
+ spComboBox2.setSelectedIndex(allPokes.indexOf(currentStarters.get(1)));
+ if (!romHandler.isYellow()) {
+ spComboBox3.setModel(new DefaultComboBoxModel<>(pokeNames));
+ spComboBox3.setSelectedIndex(allPokes.indexOf(currentStarters.get(2)));
+ }
+
+ String[] baseStatGenerationNumbers = new String[Math.min(3, GlobalConstants.HIGHEST_POKEMON_GEN - romHandler.generationOfPokemon())];
+ int j = Math.max(6,romHandler.generationOfPokemon() + 1);
+ for (int i = 0; i < baseStatGenerationNumbers.length; i++) {
+ baseStatGenerationNumbers[i] = String.valueOf(j);
+ j++;
+ }
+ pbsUpdateComboBox.setModel(new DefaultComboBoxModel<>(baseStatGenerationNumbers));
+
+ String[] moveGenerationNumbers = new String[GlobalConstants.HIGHEST_POKEMON_GEN - romHandler.generationOfPokemon()];
+ j = romHandler.generationOfPokemon() + 1;
+ for (int i = 0; i < moveGenerationNumbers.length; i++) {
+ moveGenerationNumbers[i] = String.valueOf(j);
+ j++;
+ }
+ mdUpdateComboBox.setModel(new DefaultComboBoxModel<>(moveGenerationNumbers));
+
+
+ tpComboBox.setModel(new DefaultComboBoxModel<>(getTrainerSettingsForGeneration(romHandler.generationOfPokemon())));
+ tpComboBox.setRenderer(new DefaultListCellRenderer() {
+ @Override
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+ JComponent comp = (JComponent) super.getListCellRendererComponent(list,
+ value, index, isSelected, cellHasFocus);
+
+ if (index >= 0 && value != null) {
+ list.setToolTipText(bundle.getString(trainerSettingToolTips.get(trainerSettings.indexOf(value))));
+ }
+ return comp;
+ }
+ });
+ }
+
+ private ImageIcon makeMascotIcon() {
+ try {
+ BufferedImage handlerImg = romHandler.getMascotImage();
+
+ if (handlerImg == null) {
+ return emptyIcon;
+ }
+
+ BufferedImage nImg = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB);
+ int hW = handlerImg.getWidth();
+ int hH = handlerImg.getHeight();
+ nImg.getGraphics().drawImage(handlerImg, 64 - hW / 2, 64 - hH / 2, frame);
+ return new ImageIcon(nImg);
+ } catch (Exception ex) {
+ return emptyIcon;
+ }
+ }
+
+ private void checkCustomNames() {
+ String[] cnamefiles = new String[] { SysConstants.tnamesFile, SysConstants.tclassesFile,
+ SysConstants.nnamesFile };
+
+ boolean foundFile = false;
+ for (int file = 0; file < 3; file++) {
+ File currentFile = new File(SysConstants.ROOT_PATH + cnamefiles[file]);
+ if (currentFile.exists()) {
+ foundFile = true;
+ break;
+ }
+ }
+
+ if (foundFile) {
+ int response = JOptionPane.showConfirmDialog(frame,
+ bundle.getString("GUI.convertNameFilesDialog.text"),
+ bundle.getString("GUI.convertNameFilesDialog.title"), JOptionPane.YES_NO_OPTION);
+ if (response == JOptionPane.YES_OPTION) {
+ try {
+ CustomNamesSet newNamesData = CustomNamesSet.importOldNames();
+ byte[] data = newNamesData.getBytes();
+ FileFunctions.writeBytesToFile(SysConstants.customNamesFile, data);
+ } catch (IOException ex) {
+ JOptionPane.showMessageDialog(frame, bundle.getString("GUI.convertNameFilesFailed"));
+ }
+ }
+
+ haveCheckedCustomNames = true;
+ }
+
+ }
+
+ private void testForRequiredConfigs() {
+ try {
+ Utils.testForRequiredConfigs();
+ } catch (FileNotFoundException e) {
+ JOptionPane.showMessageDialog(null,
+ String.format(bundle.getString("GUI.configFileMissing"), e.getMessage()));
+ System.exit(1);
+ }
+ }
+
+ private ExpCurve[] getEXPCurvesForGeneration(int generation) {
+ ExpCurve[] result;
+ if (generation < 3) {
+ result = new ExpCurve[]{ ExpCurve.MEDIUM_FAST, ExpCurve.MEDIUM_SLOW, ExpCurve.FAST, ExpCurve.SLOW };
+ } else {
+ result = new ExpCurve[]{ ExpCurve.MEDIUM_FAST, ExpCurve.MEDIUM_SLOW, ExpCurve.FAST, ExpCurve.SLOW, ExpCurve.ERRATIC, ExpCurve.FLUCTUATING };
+ }
+ return result;
+ }
+
+ private String[] getTrainerSettingsForGeneration(int generation) {
+ List<String> result = new ArrayList<>(trainerSettings);
+ if (generation != 5) {
+ result.remove(bundle.getString("GUI.tpMain3RandomEvenDistributionMainGame.text"));
+ }
+ return result.toArray(new String[0]);
+ }
+
+ private boolean isTrainerSetting(int setting) {
+ return trainerSettings.indexOf(tpComboBox.getSelectedItem()) == setting;
+ }
+
+ public static void main(String[] args) {
+ String firstCliArg = args.length > 0 ? args[0] : "";
+ // invoke as CLI program
+ if (firstCliArg.equals("cli")) {
+ // snip the "cli" flag arg off the args array and invoke command
+ String[] commandArgs = Arrays.copyOfRange(args, 1, args.length);
+ int exitCode = CliRandomizer.invoke(commandArgs);
+ System.exit(exitCode);
+ } else {
+ launcherInput = firstCliArg;
+ if (launcherInput.equals("please-use-the-launcher")) usedLauncher = true;
+ SwingUtilities.invokeLater(() -> {
+ frame = new JFrame("NewRandomizerGUI");
+ try {
+ String lafName = javax.swing.UIManager.getSystemLookAndFeelClassName();
+ // NEW: Only set Native LaF on windows.
+ if (lafName.equalsIgnoreCase("com.sun.java.swing.plaf.windows.WindowsLookAndFeel")) {
+ javax.swing.UIManager.setLookAndFeel(lafName);
+ }
+ } catch (ClassNotFoundException | InstantiationException | UnsupportedLookAndFeelException | IllegalAccessException ex) {
+ java.util.logging.Logger.getLogger(NewRandomizerGUI.class.getName()).log(java.util.logging.Level.SEVERE, null,
+ ex);
+ }
+ frame.setContentPane(new NewRandomizerGUI().mainPanel);
+ frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
+ frame.pack();
+ frame.setVisible(true);
+ });
+ }
+ }
}
diff --git a/src/com/sneed/pkrandom/newgui/OperationDialog.java b/src/com/sneed/pkrandom/newgui/OperationDialog.java
index 2a2a1b2..b0289a7 100644
--- a/src/com/sneed/pkrandom/newgui/OperationDialog.java
+++ b/src/com/sneed/pkrandom/newgui/OperationDialog.java
@@ -32,13 +32,13 @@ import java.io.IOException;
import java.io.InputStream;
/**
- *
+ *
* @author Stewart
*/
public class OperationDialog extends javax.swing.JDialog {
/**
- *
+ *
*/
private static final long serialVersionUID = 5965463550336235236L;
@@ -59,10 +59,6 @@ public class OperationDialog extends javax.swing.JDialog {
setLocationRelativeTo(parent);
}
- public void setLoadingLabelText(String text) {
- loadingLabel.setText(text);
- }
-
/* @formatter:off */
/**
* This method is called from within the constructor to initialize the form.