summaryrefslogtreecommitdiff
path: root/src/com/pkrandom/newgui
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/pkrandom/newgui')
-rw-r--r--src/com/pkrandom/newgui/Bundle.properties638
-rw-r--r--src/com/pkrandom/newgui/CustomNamesEditorDialog.java309
-rw-r--r--src/com/pkrandom/newgui/GameUpdateFilter.java49
-rw-r--r--src/com/pkrandom/newgui/NewGenerationLimitDialog.form156
-rw-r--r--src/com/pkrandom/newgui/NewGenerationLimitDialog.java168
-rw-r--r--src/com/pkrandom/newgui/NewRandomizerGUI.form3901
-rw-r--r--src/com/pkrandom/newgui/NewRandomizerGUI.java3700
-rw-r--r--src/com/pkrandom/newgui/OperationDialog.java137
-rw-r--r--src/com/pkrandom/newgui/PresetFileFilter.java56
-rw-r--r--src/com/pkrandom/newgui/PresetLoadDialog.java504
-rw-r--r--src/com/pkrandom/newgui/PresetMakeDialog.java265
-rw-r--r--src/com/pkrandom/newgui/QSFileFilter.java55
-rw-r--r--src/com/pkrandom/newgui/ROMFilter.java56
-rw-r--r--src/com/pkrandom/newgui/emptyIcon.pngbin0 -> 230 bytes
-rw-r--r--src/com/pkrandom/newgui/loading.gifbin0 -> 3208 bytes
15 files changed, 9994 insertions, 0 deletions
diff --git a/src/com/pkrandom/newgui/Bundle.properties b/src/com/pkrandom/newgui/Bundle.properties
new file mode 100644
index 0000000..4ff82f2
--- /dev/null
+++ b/src/com/pkrandom/newgui/Bundle.properties
@@ -0,0 +1,638 @@
+# To change this template, choose Tools | Templates
+# and open the template in the editor.
+
+GUI.versionLabel.text=Pokemon Randomizer
+GUI.generalOptionsPanel.title=General Options
+GUI.limitPokemonCheckBox.text=Limit Pokemon
+GUI.limitPokemonCheckBox.toolTipText=<html>Select this to allow yourself to limit the Pokemon used by the randomization.<br /><b>If this box isn't checked all Pokemon will be allowed.</b>
+GUI.raceModeCheckBox.toolTipText=<html>Select this to enable certain things which are useful for a speedrun race of the ROM you create.<br />The ability to save a log file will be disabled, and a check value will be generated.<br />You can send this value around with the preset file to ensure that everyone has the same ROM to race with.
+GUI.raceModeCheckBox.text=Race Mode
+GUI.noIrregularAltFormesCheckBox.text=No Irregular Alt Formes
+GUI.noIrregularAltFormesCheckBox.toolTipText=<html>Bans "irregular" alternate formes from the Pokemon pool when "Allow Alternate Formes" is selected for Wild Pokemon, Trainer Pokemon, Evolutions, etc.<br />Irregular formes are those that normally cannot exist outside of battle (such as Mega Evolutions and other in-battle transformations like Darmanitan-Z, Zygarde-C, etc),<br />as well as the "Fusion" Pokemon (Kyurem-B/W and Necrozma-DM/DW).<br />These alternate formes still exist and will get randomized base stats, abilities and so on (according to your settings),<br />but they can only be accessed through their regular means (such as by Mega Evolving or transforming because of an Ability).
+GUI.romInformationPanel.title=ROM Information
+GUI.noRomLoaded=NO ROM LOADED
+GUI.openROMButton.toolTipText=
+GUI.openROMButton.text=Open ROM
+GUI.randomizeSaveButton.text=Randomize (Save)
+GUI.premadeSeedButton.text=Premade Seed
+GUI.settingsButton.toolTipText=
+GUI.settingsButton.text=Settings
+GUI.loadSettingsButton.toolTipText=<html>Clicking this button allows you to load predefined settings from a file.<br />If the file was created with a game which has less randomization options<br />than the one you are randomizing now, those options will be set to "Unchanged"/Off.<br />If you load from a newer game, everything that isn't supported will be ignored.
+GUI.loadSettingsButton.text=Load Settings
+GUI.saveSettingsButton.toolTipText=<html>Clicking this will allow you to save the current randomization settings as a file.<br />You can then load these settings when you are randomizing any ROM.<br />The way in which ROMs with more or less features than the current one<br /> are handled is described when you hover over the "Load Settings" button.
+GUI.saveSettingsButton.text=Save Settings
+GUI.pokemonTraitsPanel.title=Pokemon Traits
+GUI.pbsPanel.title=Pokemon Base Statistics
+GUI.pbsUnchangedRadioButton.toolTipText=Don't change Pokemon stats from the base at all.
+GUI.pbsUnchangedRadioButton.text=Unchanged
+GUI.pbsShuffleRadioButton.toolTipText=<html>Shuffle each Pokemon's stats.<br />For example, its base Attack may be swapped with its base Special Attack, etc.<br />This does not make any Pokemon stronger or weaker.
+GUI.pbsShuffleRadioButton.text=Shuffle
+GUI.pbsRandomRadioButton.toolTipText=<html>Randomizes each Pokemon's stats, as long as they fall within the original base stat total.<br />This could make Pokemon stronger or weaker if they get unlucky or lucky rolls on stats they need.<br />Evolutions of a Pokemon will be treated separately from that Pokemon unless you check Follow Evolutions.
+GUI.pbsRandomRadioButton.text=Random
+GUI.pbsLegendariesSlowRadioButton.toolTipText=All legendaries get the "Slow" EXP Curve.
+GUI.pbsLegendariesSlowRadioButton.text=Legendaries: Slow
+GUI.pbsStrongLegendariesSlowRadioButton.toolTipText=<html>Strong legendaries get the "Slow" EXP Curve.<br />This includes all legendaries with >600 BST.
+GUI.pbsStrongLegendariesSlowRadioButton.text=Strong Legendaries: Slow
+GUI.pbsAllMediumFastRadioButton.toolTipText=All Pokemon get the selected EXP Curve.
+GUI.pbsAllMediumFastRadioButton.text=All Pokemon
+GUI.pbsStandardizeEXPCurvesCheckBox.toolTipText=<html>When this is selected, every Pokemon's EXP curve will be changed to the selected EXP curve below,<br />except for the Pokemon forced to use the "Slow" EXP curve, chosen with the settings to the right.<br />This will cause Pokemon to be better or worse based more on their stats/moves/type rather than the difficulty of leveling them;<br />it will also allow for more potential evolutions if you randomize evolutions, since a Pokemon only can evolve into a Pokemon with the same EXP curve.<br /><br />If you're not sure which EXP Curve to pick, Medium Fast and Medium Slow are generally good curves (most Pokemon use these in the regular games).
+GUI.pbsStandardizeEXPCurvesCheckBox.text=Standardize EXP Curves to:
+GUI.pbsFollowEvolutionsCheckBox.toolTipText=<html>When this is selected and base stats are shuffled or randomized, evolutions of a Pokemon will inherit from their base form's rolls.<br />Shuffle: The same new ordering of stats will be used.<br />Randomized: The evolution will have the same proportion of stats as the base form.
+GUI.pbsFollowEvolutionsCheckBox.text=Follow Evolutions
+GUI.pbsUpdateBaseStatsCheckBox.toolTipText=<html>Select this to update the base stats of Pokemon in the loaded game to their values in the generation chosen to the right.<br />This does NOT:<br />* Add any new Pokemon to the game<br />* Split Special Attack and Special Defense in Gen 1.
+GUI.pbsUpdateBaseStatsCheckBox.text=Update Base Stats to Generation:
+GUI.ptPanel.title=Pokemon Types
+GUI.ptUnchangedRadioButton.toolTipText=Don't change Pokemon types at all.
+GUI.ptUnchangedRadioButton.text=Unchanged
+GUI.ptRandomFollowEvolutionsRadioButton.toolTipText=<html>Randomize the types of each Pokemon, but make most evolutions copy the base Pokemon (except perhaps adding an extra secondary type).<br />Evolutions that don't copy types are the Eeveelutions, among others.
+GUI.ptRandomFollowEvolutionsRadioButton.text=Random (follow evolutions)
+GUI.ptRandomCompletelyRadioButton.toolTipText=<html>Randomize Pokemon types completely.<br />Evolutions of a Pokemon are completely separate from that Pokemon, so the type of a Pokemon will likely completely change every evolution.
+GUI.ptRandomCompletelyRadioButton.text=Random (completely)
+GUI.ptIsDualTypeCheckBox.text=Force Dual Typing
+GUI.paPanel.title=Pokemon Abilities
+GUI.paUnchangedRadioButton.toolTipText=Don't change Pokemon abilities from the base at all.
+GUI.paUnchangedRadioButton.text=Unchanged
+GUI.paRandomRadioButton.toolTipText=<html>Give each Pokemon new abilities.<br />Each Pokemon will have a base ability, and a 50% chance of having a 2nd ability different from the first.<br />(50% of the species will have this ability if it is made).<br />In Generation 5 games, each Pokemon will also receive a new random "Dream World" ability.<br />Pokemon such as Shedinja which have Wonder Guard as their ability will keep it to maintain balance.
+GUI.paRandomRadioButton.text=Random
+GUI.paAllowWonderGuardCheckBox.toolTipText=<html>If this is checked, Wonder Guard will be able to be chosen as any Pokemon's ability.<br />This can lead to some very overpowered/broken Pokemon.<br />USE WITH CAUTION!
+GUI.paAllowWonderGuardCheckBox.text=Allow Wonder Guard
+GUI.paFollowEvolutionsCheckBox.toolTipText=<html>When this is selected and abilities are randomized, non-split evolutions of a Pokemon will inherit that Pokemon's random abilities.
+GUI.paFollowEvolutionsCheckBox.text=Follow Evolutions
+GUI.paBanLabel.text=Ban...
+GUI.paTrappingAbilitiesCheckBox.toolTipText=<html>When abilities are randomized, ban abilities that can prevent the opponent from fleeing/switching out from being selected.<br />\nThis bans Arena Trap, Magnet Pull and Shadow Tag.<br />\nHas no effect if abilities are not randomized.<br />\nPokemon that have a trapping ability to begin with will still have their abilities randomized, unlike how Wonder Guard is treated.
+GUI.paTrappingAbilitiesCheckBox.text=Trapping Abilities
+GUI.paNegativeAbilitiesCheckBox.toolTipText=<html>When abilities are randomized, ban abilities that are purely negative in nature from being chosen.<br />\nThis bans Defeatist, Slow Start, Truant, Klutz, Stall.<br />\nHas no effect if abilities are not randomized.<br />\nPokemon that have a negative ability to begin with will still have their abilities randomized, unlike how Wonder Guard is treated.
+GUI.paNegativeAbilitiesCheckBox.text=Negative Abilities
+GUI.paBadAbilitiesCheckBox.toolTipText=<html>When abilities are randomized, ban bad abilities.<br />\nThis bans Minus, Plus, Anticipation, Forewarn, Frisk, Honey Gather, Aura Break, Receiver, Power of Alchemy.<br />If "Double Battle Mode" for Trainers is not selected, it also bans Friend Guard, Healer, Telepathy, Symbiosis, Battery.<br />\nHas no effect if abilities are not randomized.
+GUI.paBadAbilitiesCheckBox.text=Bad Abilities
+GUI.paEnsureTwoAbilitiesCheckbox.toolTipText=<html>When abilities are randomized, ensure each Pokemon has two abilities.
+GUI.paEnsureTwoAbilitiesCheckbox.text=Ensure Two Abilities
+GUI.pePanel.title=Pokemon Evolutions
+GUI.peUnchangedRadioButton.toolTipText=Don't randomize Pokemon evolutions.
+GUI.peUnchangedRadioButton.text=Unchanged
+GUI.peRandomRadioButton.toolTipText=<html>Randomize which species each Pokemon evolves into.<br />\nEvolutions will be mostly unrestricted unless you check some boxes to the right, but the EXP curves of the Pokemon must match.
+GUI.peRandomRadioButton.text=Random
+GUI.peRandomEveryLevelRadioButton.toolTipText=<html>Randomize which species each Pokemon evolves into while forcing them to evolve every single level.<br />All existing evolutions for a given Pokemon will be removed and replaced with a single Level 1 evolution.<br />Evolutions will be mostly unrestricted unless you check some boxes to the right, but the EXP curves of the Pokemon must match.<br />Evolution "loops" are expected and intended with this setting.
+GUI.peRandomEveryLevelRadioButton.text=Random Every Level
+GUI.peSimilarStrengthCheckBox.toolTipText=<html>When this is checked, random evolutions will prefer Pokemon with a similar BST to the original evolution target.<br />Has less precedence than all other modifiers below, so it may not always be strictly enforced.
+GUI.peSimilarStrengthCheckBox.text=Similar Strength
+GUI.peSameTypingCheckBox.toolTipText=<html>When selected, randomized evolutions will share at least one type between the source and target if possible.
+GUI.peSameTypingCheckBox.text=Same Typing
+GUI.peLimitEvolutionsToThreeCheckBox.toolTipText=<html>When selected, there will not be any evolution chains created that are longer than three stages.
+GUI.peLimitEvolutionsToThreeCheckBox.text=Limit Evolutions to Three Stages
+GUI.peForceChangeCheckBox.toolTipText=<html>When selected, every evolution of a Pokemon will be randomized to something different than what it was originally.
+GUI.peForceChangeCheckBox.text=Force Change
+GUI.peChangeImpossibleEvosCheckBox.toolTipText=<html>If this is checked, every evolution that isn't possible to do without trading in the current game will be changed.<br /><b>Takes effect regardless of whether evolutions are randomized or not.</b><br />Some of the types that will be changed are:<ul><li>"Normal" trade evolutions<li>Trade evolutions with another condition, such as held item or Pokemon traded for<li>Day/night evolutions if there isn't day/night in the game<li>Contest-stat evolutions if there aren't contests in the game<li>Location-based evolutions, if those locations don't exist in the game<li>Move-based evolutions, <b>only if you randomize movesets</b></ul>
+GUI.peChangeImpossibleEvosCheckBox.text=Change Impossible Evolutions
+GUI.peMakeEvolutionsEasierCheckBox.toolTipText=<html>If this is checked, Pokemon that evolve at a very high level will evolve at lower levels to make them more viable for shorter playthroughs.<br />Specifically, every Pokemon will evolve to its final stage by level 40, and three-stage evolutions will reach their middle stage by no later than level 30.<br />Additionally, Pokemon that normally evolve by having another specific Pokemon in the party will instead evolve at level 35.<br />Lastly, Pokemon that evolve via friendship will evolve at 160 happiness (down from 220), similar to how it works in the Switch Pokemon games.<br /><b>Takes effect regardless of whether evolutions are randomized or not.</b>
+GUI.peMakeEvolutionsEasierCheckBox.text=Make Evolutions Easier
+GUI.peRemoveTimeBasedEvolutions.toolTipText=<html>If this is checked, evolutions that require a certain time of day will now be possible regardless of the in-game time.<br />Split time-based evolutions (like Eevee => Espeon/Umbreon and Rockruff => Lycanroc) will be changed to stone evolutions instead.
+GUI.peRemoveTimeBasedEvolutions.text=Remove Time-Based Evolutions
+GUI.startersStaticsTradesPanel=Starters, Statics & Trades
+GUI.spPanel.title=Starter Pokemon
+GUI.spUnchangedRadioButton.toolTipText=Don't change the starter Pokemon.
+GUI.spUnchangedRadioButton.text=Unchanged
+GUI.spCustomRadioButton.toolTipText=Lets you pick the 3 starter pokemon you want to use, or "Random" at the top of the selector.
+GUI.spCustomRadioButton.text=Custom
+GUI.spRandomCompletelyRadioButton.toolTipText=Picks 3 random starter Pokemon to be used.
+GUI.spRandomCompletelyRadioButton.text=Random (completely)
+GUI.spRandomTwoEvosRadioButton.toolTipText=<html>Picks 3 random starter Pokemon to be used.<br />These Pokemon must have 2 evolution stages, e.g. be like the starters in the real games.
+GUI.spRandomTwoEvosRadioButton.text=Random (basic Pokemon with 2 evolutions)
+GUI.spRandomizeStarterHeldItemsCheckBox.toolTipText=<html>Checking this will randomize the items held by the starters where possible.<br />In Generation 2 games, each starter will get an individual random item.<br />In Generation 3 games, all the starters will get the same random item.
+GUI.spRandomizeStarterHeldItemsCheckBox.text=Randomize Starter Held Items
+GUI.spBanBadItemsCheckBox.toolTipText=<html>Checking this will remove "bad" items that don't do much from the set of possible random items for starter Pokemon, such as berries and mail.
+GUI.spBanBadItemsCheckBox.text=Ban Bad Items
+GUI.stpPanel.title=Static Pokemon
+GUI.stpUnchangedRadioButton.toolTipText=Static Pokemon remain the same.
+GUI.stpUnchangedRadioButton.text=Unchanged
+GUI.stpSwapLegendariesSwapStandardsRadioButton.toolTipText=<html>Selecting this will replace every static Pokemon encounter, gift or purchase with another random one.<br />In this particular mode, legendary pokemon will always be swapped for other legendaries.<br />Also, normal non-legendary Pokemon will only be swapped for other non-legendaries.<br />In games where Ultra Beasts appear, they will be swapped out for other Ultra Beasts.
+GUI.stpSwapLegendariesSwapStandardsRadioButton.text=Swap Legendaries && Swap Standards
+GUI.stpRandomCompletelyRadioButton.toolTipText=<html>Selecting this will replace every static Pokemon encounter, gift or purchase with another random one.<br />In this particular mode, any Pokemon can replace any other Pokemon, so you could get a Mew in the Game Corner.<br />Or fight Magikarp instead of Mewtwo...
+GUI.stpRandomCompletelyRadioButton.text=Random (completely)
+GUI.stpRandomSimilarStrengthRadioButton.toolTipText=<html>Selecting this will replace every static Pokemon encounter with a Pokemon of similar strength.
+GUI.stpRandomSimilarStrengthRadioButton.text=Random (similar strength)
+GUI.stpLimitMainGameLegendariesCheckBox.toolTipText=<html>Selecting this will set an upper BST limit on what main-game Legendary Pokemon can be randomized into, and also expand the window for what counts <br />as "Similar Strength" for those Pokemon.<br /><br />This only applies to main-game Legendary Pokemon that are catchable and that are directly in your way during the main game, so some Pokemon<br />like Kyurem-B/Kyurem-W in BW2 (not catchable) and Rayquaza in Emerald (have to go out of your way to catch) are not included.
+GUI.stpLimitMainGameLegendariesCheckBox.text=Limit Main-Game Legendaries
+GUI.stpRandomize600BSTCheckBox.toolTipText=<html>Selecting this will enforce pure random on all static Pokemon with 600+ BST.
+GUI.stpRandomize600BSTCheckBox.text=Randomize 600+ BST
+GUI.igtPanel.title=In-Game Trades
+GUI.igtUnchangedRadioButton.toolTipText=In-game trades remain the same.
+GUI.igtUnchangedRadioButton.text=Unchanged
+GUI.igtRandomizeGivenPokemonOnlyRadioButton.toolTipText=<html>Selecting this will randomize the Pokemon you receive from each in-game trade,<br />but the Pokemon requested by the NPC in exchange will remain the same.
+GUI.igtRandomizeGivenPokemonOnlyRadioButton.text=Randomize Given Pokemon Only
+GUI.igtRandomizeBothRequestedGivenRadioButton.toolTipText=<html>Selecting this will replace both the Pokemon you receive from an in-game trade and the Pokemon required to do the trade.
+GUI.igtRandomizeBothRequestedGivenRadioButton.text=Randomize Both Requested && Given Pokemon
+GUI.igtRandomizeNicknamesCheckBox.toolTipText=<html>Check this to randomize the nicknames of the Pokemon you receive.<br />The nicknames will be chosen from a predefined list.<br />If there are no more usable nicknames the original nicknames will be kept for the rest of the trades.
+GUI.igtRandomizeNicknamesCheckBox.text=Randomize Nicknames
+GUI.igtRandomizeOTsCheckBox.toolTipText=<html>Check this to randomize the Original Trainer (ID & name) of the Pokemon you receive from trades.<br />The names will be chosen from the same list as trainer names,<br />with names that are too long to be OT names excluded.
+GUI.igtRandomizeOTsCheckBox.text=Randomize OTs
+GUI.igtRandomizeIVsCheckBox.toolTipText=<html>Check this to randomize the IVs of the Pokemon you receive from ingame trades.<br />In most games these Pokemon have set IVs, so clicking this randomizes those set IVs.
+GUI.igtRandomizeIVsCheckBox.text=Randomize IVs
+GUI.igtRandomizeItemsCheckBox.toolTipText=<html>Check this to give each Pokemon you receive from an ingame trade a random held item.<br />This includes trades that do not normally have a held item on the Pokemon.
+GUI.igtRandomizeItemsCheckBox.text=Randomize Items
+GUI.movesMovesetsPanel=Moves & Movesets
+GUI.mdPanel.title=Move Data
+GUI.mdRandomizeMovePowerCheckBox.toolTipText=<html>Randomize the power of normal damaging moves.<br />Moves will get a new random power generally between 20 and 150 inclusive, with a very small chance of higher values appearing.<br />Non-damaging moves and moves with variable power will be unaffected.<br /><b>NOTE: There is no way to see the updated power of moves in-game in Gen 1!</b>
+GUI.mdRandomizeMovePowerCheckBox.text=Randomize Move Power
+GUI.mdRandomizeMoveAccuracyCheckBox.toolTipText=<html>Randomize the accuracy of most moves.<br />Some restrictions are enforced to reduce the chances of situations like 100% accurate OHKO moves happening.<br />Sure-hit moves are not changed.<br /><b>NOTE: There is no way to see the updated accuracy of moves in-game in Gen 1!</b>
+GUI.mdRandomizeMoveAccuracyCheckBox.text=Randomize Move Accuracy
+GUI.mdRandomizeMovePPCheckBox.toolTipText=<html>Randomize the PP of each move.<br />The maximum PP of each move (before PP Ups) will be randomized to a multiple of 5 between 5 and 40 inclusive.
+GUI.mdRandomizeMovePPCheckBox.text=Randomize Move PP
+GUI.mdRandomizeMoveTypesCheckBox.toolTipText=<html>Randomize the type of most moves.<br />The type of each move other than Struggle and ???-type moves will be re-rolled randomly.<br />This has no real effect on self-status moves, and may have odd side-effects in Gen 1.
+GUI.mdRandomizeMoveTypesCheckBox.text=Randomize Move Types
+GUI.mdRandomizeMoveCategoryCheckBox.toolTipText=<html>Randomize the category of damaging moves between Physical and Special.<br />This does not affect status moves.<br /><b>NOTE: This feature is not available for Gen 1-3 games. This randomizer does NOT add the Physical/Special split to games that don't have it!</b>
+GUI.mdRandomizeMoveCategoryCheckBox.text=Randomize Move Category
+GUI.mdUpdateMovesCheckBox.toolTipText=<html>If this is checked, moves will be updated to their stats (power, accuracy, etc) in the generation chosen to the right where possible.<br /><b>This does NOT add the Fairy type! Moves that were changed to Fairy type will keep their Gen 5 types.</b><br />Note that this only affects move stats, not any secondary effects that may have been added.
+GUI.mdUpdateMovesCheckBox.text=Update Moves to Generation:
+GUI.mdLegacyCheckBox.toolTipText=<html>Instead of updating moves to their Gen 6 stats, update them to their Gen 5 stats instead.<br />This is intended for people who used the "Update Moves" function in old randomizers but don't like the new changes.<br />This is available for every game except Gen 5 games where it would be pointless.
+GUI.mdLegacyCheckBox.text=Legacy
+GUI.pmsPanel.title=Pokemon Movesets
+GUI.pmsUnchangedRadioButton.toolTipText=Don't change Pokemon movesets at all.
+GUI.pmsUnchangedRadioButton.text=Unchanged
+GUI.pmsRandomPreferringSameTypeRadioButton.toolTipText=<html>Randomize Pokemon movesets, preferring moves that are of the type (or one of the types) of the Pokemon.<br />Each Pokemon will get at least one reasonably accurate damaging move to begin with.
+GUI.pmsRandomPreferringSameTypeRadioButton.text=Random (preferring same type)
+GUI.pmsRandomCompletelyRadioButton.toolTipText=<html>Randomize Pokemon movesets, completely ignoring the type of the move and the Pokemon.<br />Each Pokemon will get at least one reasonably accurate damaging move to begin with.
+GUI.pmsRandomCompletelyRadioButton.text=Random (completely)
+GUI.pmsMetronomeOnlyModeRadioButton.toolTipText=<html>Where possible, every Pok\u00e9mon in the entire game will have Metronome as its only move,<br /> with the PP boosted to 40 to make it possible to complete fights without always using Struggle.<br />Does not currently apply to non-standard battles such as the Battle Tower/Frontier or the PWT.
+GUI.pmsMetronomeOnlyModeRadioButton.text=Metronome Only Mode
+GUI.pmsGuaranteedLevel1MovesCheckBox.toolTipText=<html>Check this to make sure every Pokemon gets a guaranteed amount of moves at level 1, instead of them keeping their original move count.<br />Set amount of guaranteed moves with the slider to the right.<br />Setting this to 4 ensures that every Pokemon you catch will have a full moveset.
+GUI.pmsGuaranteedLevel1MovesCheckBox.text=Guaranteed Level 1 Moves
+GUI.pmsReorderDamagingMovesCheckBox.toolTipText=<html>Reorders the randomized movesets so that less powerful damaging moves are learnt before those with high power.\n<br />The positions of non-damaging moves will not change.
+GUI.pmsReorderDamagingMovesCheckBox.text=Reorder Damaging Moves
+GUI.pmsNoGameBreakingMovesCheckBox.toolTipText=<html>Checking this checkbox will stop moves that can break early/late games being available in randomized movesets.<br />In first generation games, Dragon Rage, SonicBoom, Spore, and every OHKO move are banned.<br />In second generation onwards, only SonicBoom and Dragon Rage are banned (because OHKO moves and sleep are significantly less broken).
+GUI.pmsNoGameBreakingMovesCheckBox.text=No Game-Breaking Moves
+GUI.pmsForceGoodDamagingCheckBox.toolTipText=<html>Selecting this option will allow you to use the slider below to select a proportion of the randomized movesets to be forced to be good damaging moves.<br />Note that other moves can still be selected as good damaging moves randomly, this is simply an additional chance.
+GUI.pmsForceGoodDamagingCheckBox.text=Force % of Good Damaging Moves:
+GUI.pmsGuaranteedLevel1MovesSlider.toolTipText=<html>Set amount of guaranteed moves at level 1. Applies to all Pokemon.
+GUI.pmsForceGoodDamagingSlider.toolTipText=<html>Use this slider to select the probability of good damaging moves for the option above.<br />Note that other moves can still be selected as good damaging moves randomly, this is simply an additional chance.
+GUI.foePokemonPanel.title=Foe Pokemon
+GUI.tpPanel.title=Trainer Pokemon
+GUI.tpMain0Unchanged.toolTipText=Don't change trainer Pokemon at all.
+GUI.tpMain0Unchanged.text=Unchanged
+GUI.tpUnchangedRadioButton.toolTipText=Don't change trainer Pokemon at all.
+GUI.tpUnchangedRadioButton.text=Unchanged
+GUI.tpMain1Random.toolTipText=Randomize Trainers' Pokemon completely.
+GUI.tpMain1Random.text=Random
+GUI.tpRandomRadioButton.toolTipText=Randomize Trainers' Pokemon completely.
+GUI.tpRandomRadioButton.text=Random
+GUI.tpMain2RandomEvenDistribution.toolTipText=<html>For all trainers in the game (main-game and post-game), attempt to distribute Pokemon evenly.<br />Any other modifiers like similar strength take precedence, with the goal of reducing Pokemon from appearing too often.
+GUI.tpMain2RandomEvenDistribution.text=Random (even distribution)
+GUI.tpRandomEvenDistributionRadioButton.toolTipText=<html>For all trainers in the game (main-game and post-game), attempt to distribute Pokemon evenly.<br />Any other modifiers like similar strength take precedence, with the goal of reducing Pokemon from appearing too often.
+GUI.tpRandomEvenDistributionRadioButton.text=Random (even distribution)
+GUI.tpMain3RandomEvenDistributionMainGame.toolTipText=<html>For all trainers in the game (main-game trainers only), attempt to distribute Pokemon evenly.<br />Any other modifiers like similar strength take precedence, with the goal of reducing Pokemon from appearing too often.<br />Balancing among main game trainers causes evenness with a standard playthrough, and ignores post-game trainers (they are simply random).<br />This setting is for Gen 5 only.
+GUI.tpMain3RandomEvenDistributionMainGame.text=Random (even distribution, main-game)
+GUI.tpRandomEvenDistributionMainRadioButton.toolTipText=<html>For all trainers in the game (main-game trainers only), attempt to distribute Pokemon evenly.<br />Any other modifiers like similar strength take precedence, with the goal of reducing Pokemon from appearing too often.<br />Balancing among main game trainers causes evenness with a standard playthrough, and ignores post-game trainers (they are simply random).<br />This setting is for Gen 5 only.
+GUI.tpRandomEvenDistributionMainRadioButton.text=Random (even distribution, main-game)
+GUI.tpMain4TypeThemed.toolTipText=<html>Pick a type for each trainer and give them random Pokemon in that type.<br />Certain groups of trainers, such as the trainers in each gym, will all be given the same (random) type.
+GUI.tpMain4TypeThemed.text=Type Themed
+GUI.tpTypeThemedRadioButton.toolTipText=<html>Pick a type for each trainer and give them random Pokemon in that type.<br />Certain groups of trainers, such as the trainers in each gym, will all be given the same (random) type.
+GUI.tpTypeThemedRadioButton.text=Type Themed
+GUI.tpMain5TypeThemedEliteFourGyms.toolTipText=<html>Pick a type for each trainer and give them random Pokemon in that type.<br />Certain groups of trainers, such as the trainers in each gym, will all be given the same (random) type.<br />Only applies to Elite Four and Gym Trainers/Leaders.
+GUI.tpMain5TypeThemedEliteFourGyms.text=Type Themed (Elite Four/Gyms Only)
+GUI.tpRivalCarriesStarterCheckBox.toolTipText=<html>If this is selected, the rival will have their starter in every team they battle you with, evolved if it is far enough through.<br />The rest of their team will be chosen in the same way as every other trainer.
+GUI.tpRivalCarriesStarterCheckBox.text=Rival Carries Starter Through Game
+GUI.tpSimilarStrengthCheckBox.toolTipText=<html>If this is checked, the random Pokemon that replaces each Pokemon will be of similar power to the original.<br />However, preserving other rules such as type theming has precedence over this, so weaker or stronger Pokemon will be chosen if there are no other Pokemon available.
+GUI.tpSimilarStrengthCheckBox.text=Try to Use Pokemon with Similar Strength
+GUI.tpWeightTypesCheckBox.toolTipText=<html>If this is checked, the number of trainers with each type will roughly match up to the number of Pokemon with that type.<br />This should reduce repetition of Pokemon, but may lead to a lot of trainers with the same type in a row.
+GUI.tpWeightTypesCheckBox.text=Weight Types by # of Pokemon
+GUI.tpDontUseLegendariesCheckBox.text=Don't Use Legendaries
+GUI.tpNoEarlyWonderGuardCheckBox.toolTipText=<html>Pokemon such as Shedinja, with the ability "Wonder Guard", are a pain to run into early on when you can't damage them.<br />Selecting this option will make sure that no trainers are given these Pokemon under level 20.<br />By the time you are fighting level 20 trainers you can reasonably be expected to have a counter for each type.
+GUI.tpNoEarlyWonderGuardCheckBox.text=No Early Wonder Guard
+GUI.tpRandomizeTrainerNamesCheckBox.toolTipText=<html>Check this to randomize trainers' names when you fight them.<br />For RBY, this only includes the Gym Leaders and Elite 4, as no-one else has names.<br />For every other game this will replace the names of each individual trainer.
+GUI.tpRandomizeTrainerNamesCheckBox.text=Randomize Trainer Names
+GUI.tpRandomizeTrainerClassNamesCheckBox.toolTipText=<html>Check this to randomize the class names to new names (e.g. "Youngster" could become "Misfit").
+GUI.tpRandomizeTrainerClassNamesCheckBox.text=Randomize Trainer Class Names
+GUI.tpForceFullyEvolvedAtCheckBox.toolTipText=<html>Checking this will force all trainer Pokemon at or above the level you select below to be fully evolved regardless of other settings.<br />Pokemon below the selected level will be randomly picked like normal.
+GUI.tpForceFullyEvolvedAtCheckBox.text=Force Fully Evolved at Level:
+GUI.tpForceFullyEvolvedAtSlider.toolTipText=Use this slider to select the minimum level to force fully evolved Pokemon at if said option is checked above.
+GUI.tpPercentageLevelModifierSlider.toolTipText=<html>Use this slider to select the percentage to change trainer Pokemon levels by.<br />Negative percentages (-50 to 0) will decrease levels, and positive percentages will increase them.
+GUI.tpPercentageLevelModifierCheckBox.toolTipText=<html>Checking this will enable a percentage-based level modifier for every enemy trainer Pokemon in the game.
+GUI.tpPercentageLevelModifierCheckBox.text=Percentage Level Modifier:
+GUI.tpAllowAlternateFormesCheckBox.toolTipText=<html>Allow trainers to have alternate formes of Pokemon, such as the various formes of Rotom or Deoxys.<br />Note that their traits are randomized/shuffled separately from their base formes.
+GUI.tpAllowAlternateFormesCheckBox.text=Allow Alternate Formes
+GUI.wildPokemonPanel.title=Wild Pokemon
+GUI.wpPanel.title=Wild Pokemon
+GUI.wpUnchangedRadioButton.toolTipText=Don't change Wild Pokemon at all.
+GUI.wpUnchangedRadioButton.text=Unchanged
+GUI.wpRandomRadioButton.toolTipText=<html>Completely randomize Wild Pokemon in every area.<br />This should mean that there are many different Pokemon in each area.
+GUI.wpRandomRadioButton.text=Random
+GUI.wpArea1To1RadioButton.toolTipText=<html>Each Pokemon in a given encounter area will be replaced by another Pokemon in every slot it appears in.<br />This will make each area have a handful of random Pokemon.
+GUI.wpArea1To1RadioButton.text=Area 1-to-1 Mapping
+GUI.wpGlobal1To1RadioButton.toolTipText=<html>Every place a certain Pokemon appears in, it will be replaced by another set Pokemon.<br />This mode doesn't support any other rules except similar strength because it is too restrictive on its own.
+GUI.wpGlobal1To1RadioButton.text=Global 1-to-1 Mapping
+GUI.wpARPanel.title=Additional Rule
+GUI.wpARNoneRadioButton.toolTipText=Don't apply any other rules.
+GUI.wpARNoneRadioButton.text=None
+GUI.wpARSimilarStrengthRadioButton.toolTipText=<html>If this is checked, the random Pokemon that replaces each Pokemon will be of similar power to the original.<br />However, preserving other rules such as 1-1 maps has precedence over this, so weaker or stronger Pokemon will be chosen if there are no other Pokemon available.<br />This option is not available alongside Type Themes or Catch-em-All because the Pokemon pool would be too limited in some cases.
+GUI.wpARSimilarStrengthRadioButton.text=Similar Strength
+GUI.wpARCatchEmAllModeRadioButton.toolTipText=<html>If this is turned on, every random Pokemon chosen to replace an encounter will be one that hasn't been chosen before.<br />This should make sure that every Pokemon is catchable.<br />Once every Pokemon has been chosen the Pokemon choice list will start again from full.
+GUI.wpARCatchEmAllModeRadioButton.text=Catch Em All Mode
+GUI.wpARTypeThemeAreasRadioButton.toolTipText=<html>If this is chosen, every encounter area will have only Pokemon of a random type.<br />This may lead to a more realistic experience, or an odd one (e.g. if Fire pokemon are chosen to be in Surfing encounters).
+GUI.wpARTypeThemeAreasRadioButton.text=Type Themed Areas
+GUI.wpUseTimeBasedEncountersCheckBox.toolTipText=<html>This affects games that have either seasons or morning/day/night encounter sets.<br />If this is checked, each of these sets will be treated as a separate "area".<br />So you will have to visit each place in morning/day/night, or in each season, to collect the Pokemon.<br />If this isn't checked, all of morning/day/night and all seasons will use the same encounter data.
+GUI.wpUseTimeBasedEncountersCheckBox.text=Use Time Based Encounters
+GUI.wpDontUseLegendariesCheckBox.text=Don't Use Legendaries
+GUI.wpSetMinimumCatchRateCheckBox.toolTipText=<html>If this is selected, every Pokemon in the game with a catch rate below a certain level will have its catch rate increased.\n<br />The exact minimum catch rate level can be set using the slider to the right.\n<br />The percentages below assume a normal Poke Ball is used while the wild Pokemon is at full health with no status condition.\n<br /><b>Level 1:</b> "Normal" minimum catch rate. ~10% (Gens 1-4)/~18% (Gens 5+) chance for normal Pokemon, ~5% (Gens 1-4)/~10% (Gens 5+) chance for legendary Pokemon.\n<br /><b>Level 2:</b> "Buffed" minimum catch rate. ~17% (Gens 1-4)/~26% (Gens 5+) chance for normal Pokemon, ~9% (Gens 1-4)/~16% (Gens 5+) chance for legendary Pokemon.\n<br /><b>Level 3:</b> "Super" minimum catch rate. ~27% (Gens 1-4)/~37% (Gens 5+) chance for normal Pokemon, ~14% (Gens 1-4)/~22% (Gens 5+) chance for legendary Pokemon.\n<br /><b>Level 4</b>: "Ultra" minimum catch rate. ~34% (Gens 1-4)/~44% (Gens 5+) chance for all Pokemon. \n<br /><b>Level 5:</b> Guaranteed catches (every Pokemon is guaranteed to be caught, so long as they are catchable in the first place).
+GUI.wpSetMinimumCatchRateCheckBox.text=Set Minimum Catch Rate:
+GUI.wpRandomizeHeldItemsCheckBox.toolTipText=<html>Checking this will randomize the items held by Pokemon in the wild, including whether they can have one at all or not.<br />In some cases, these item definitions will also apply to static encounters with legendaries and the like.
+GUI.wpRandomizeHeldItemsCheckBox.text=Randomize Held Items
+GUI.wpBanBadItemsCheckBox.toolTipText=<html>Checking this will remove "bad" items that don't do much from the set of possible random items for wild Pokemon, such as berries and mail.
+GUI.wpBanBadItemsCheckBox.text=Ban Bad Items
+GUI.wpBalanceShakingGrassPokemonCheckBox.toolTipText=<html>Checking this will tune down shaking grass Pokemon at lower levels.
+GUI.wpBalanceShakingGrassPokemonCheckBox.text=Balance Shaking Grass Pokemon
+GUI.wpPercentageLevelModifierCheckBox.toolTipText=<html>Checking this will enable a percentage-based level modifier for every wild Pokemon in the game.
+GUI.wpPercentageLevelModifierCheckBox.text=Percentage Level Modifier:
+GUI.wpPercentageLevelModifierSlider.toolTipText=<html>Use this slider to select the percentage to change wild Pokemon levels by.<br />Negative percentages (-50 to 0) will decrease levels, and positive percentages will increase them.
+GUI.wpSetMinimumCatchRateSlider.toolTipText=<html>If Minimum Catch Rate is selected, allows you to set the level used. The percentages below assume a normal Poke Ball at full health.\n<br /><b>Level 1:</b> "Normal" minimum catch rate. ~10% (Gens 1-4)/~18% (Gens 5+) chance for normal Pokemon, ~5% (Gens 1-4)/~10% (Gens 5+) chance for legendary Pokemon.\n<br /><b>Level 2:</b> "Buffed" minimum catch rate. ~17% (Gens 1-4)/~26% (Gens 5+) chance for normal Pokemon, ~9% (Gens 1-4)/~16% (Gens 5+) chance for legendary Pokemon.\n<br /><b>Level 3:</b> "Super" minimum catch rate. ~27% (Gens 1-4)/~37% (Gens 5+) chance for normal Pokemon, ~14% (Gens 1-4)/~22% (Gens 5+) chance for legendary Pokemon.\n<br /><b>Level 4</b>: "Ultra" minimum catch rate. ~34% (Gens 1-4)/~44% (Gens 5+) chance for all Pokemon. \n<br /><b>Level 5:</b> Guaranteed catches (every Pokemon is guaranteed to be caught, so long as they are catchable in the first place).
+GUI.tmsHMsTutorsPanel.title=TM/HMs & Tutors
+GUI.tmPanel.title=TMs & HMs
+GUI.tmMovesPanel.title=TM/HM Moves
+GUI.tmUnchangedRadioButton.toolTipText=<html>Leave the moves in TMs as they are.<br />If Metronome Only Mode is selected, all TMs are changed to Metronome and this setting has no effect.
+GUI.tmUnchangedRadioButton.text=Unchanged
+GUI.tmRandomRadioButton.toolTipText=<html>Give each TM a new move.<br />HM moves are not affected, nor can they be selected to be put in TMs.<br />Each TM will still be unique.<br />If Metronome Only Mode is selected, all TMs are changed to Metronome and this setting has no effect.
+GUI.tmRandomRadioButton.text=Random
+GUI.tmFullHMCompatibilityCheckBox.toolTipText=<html>If you select this option, then every Pokemon will learn every HM, regardless of any other options you check.
+GUI.tmFullHMCompatibilityCheckBox.text=Full HM Compatibility
+GUI.tmLevelupMoveSanityCheckBox.toolTipText=<html>If you select this option, then Pokemon will be guaranteed to learn TMs of moves that they learn by levelup.<br />Otherwise, move compatibility will be left alone or decided randomly, depending on your other choices.
+GUI.tmLevelupMoveSanityCheckBox.text=TM/Levelup Move Sanity
+GUI.tmKeepFieldMoveTMsCheckBox.toolTipText=<html>If you select this, TMs that contain field-use moves will be left alone.<br />This includes things like Dig & Teleport, but not healing moves (Softboiled).
+GUI.tmKeepFieldMoveTMsCheckBox.text=Keep Field Move TMs
+GUI.tmForceGoodDamagingCheckBox.toolTipText=<html>Selecting this option will allow you to use the slider below to select a proportion of the randomized TMs to be forced to be good damaging moves.<br />Note that other TMs can still be selected as good damaging moves randomly, this is simply an additional chance.
+GUI.tmForceGoodDamagingCheckBox.text=Force % of Good Damaging Moves:
+GUI.tmForceGoodDamagingSlider.toolTipText=<html>Use this slider to select the probability of good damaging moves for the option above.<br />Note that other TMs can still be selected as good damaging moves randomly, this is simply an additional chance.
+GUI.tmNoGameBreakingMovesCheckBox.toolTipText=<html>Checking this checkbox will stop moves that can break early/late games being available in randomized TMs.<br />In first generation games, Dragon Rage, SonicBoom, Spore, and every OHKO move are banned.<br />In second generation onwards, only SonicBoom and Dragon Rage are banned (because OHKO moves and sleep are significantly less broken).
+GUI.tmNoGameBreakingMovesCheckBox.text=No Game-Breaking Moves
+GUI.thcPanel.title=TM/HM Compatibility
+GUI.thcUnchangedRadioButton.toolTipText=<html>Every Pokemon will be able to learn the same TMs that it could before.<br />Note that this applies even if you change the TM moves, which could lead to some odd combinations.
+GUI.thcUnchangedRadioButton.text=Unchanged
+GUI.thcRandomPreferSameTypeRadioButton.toolTipText=<html>Randomize the TMs and HMs that each Pokemon can learn.<br />Each TM or HM will have:<br />A 90% chance of being learnable if the Pokemon has it as (one of) its type(s).<br />A 50% chance of being learnable if the move is Normal and the Pokemon isn't.<br />A 25% chance otherwise.
+GUI.thcRandomPreferSameTypeRadioButton.text=Random (prefer same type)
+GUI.thcRandomCompletelyRadioButton.toolTipText=<html>Randomize the TMs and HMs that each Pokemon can learn.<br />Each TM or HM will have a 50% chance of being learnable regardless of type.
+GUI.thcRandomCompletelyRadioButton.text=Random (completely)
+GUI.thcFullCompatibilityRadioButton.toolTipText=<html>Select this option to allow every Pokemon to learn every TM/HM.<br />This can be fun to mess around with, but it might make the game too easy.
+GUI.thcFullCompatibilityRadioButton.text=Full Compatibility
+GUI.mtPanel.title=Move Tutors
+GUI.mtMovesPanel.title=Move Tutor Moves
+GUI.mtNoExistLabel.text=This game does not have any Move Tutors, or they are not randomizable yet.
+GUI.mtUnchangedRadioButton.toolTipText=<html>Leave the moves taught by tutors as they are.<br />If Metronome Only Mode is selected, all Move Tutors are changed to Metronome and this setting has no effect.
+GUI.mtUnchangedRadioButton.text=Unchanged
+GUI.mtRandomRadioButton.toolTipText=<html>Give each move tutor slot a new move.<br />Each Move Tutor move will still be unique, and they will not overlap with TM/HM moves.<br />If Metronome Only Mode is selected, all Move Tutors are changed to Metronome and this setting has no effect.
+GUI.mtRandomRadioButton.text=Random
+GUI.mtLevelupMoveSanityCheckBox.toolTipText=<html>If you select this option, then Pokemon will be guaranteed to learn move tutors of moves that they learn by levelup.<br />Otherwise, move compatibility will be left alone or decided randomly, depending on your other choices.
+GUI.mtLevelupMoveSanityCheckBox.text=Tutor/Levelup Move Sanity
+GUI.mtKeepFieldMoveTutorsCheckBox.toolTipText=<html>If you select this, move tutors that contain field-use moves will be left alone.<br />This includes things like Headbutt, but not healing moves (Softboiled).
+GUI.mtKeepFieldMoveTutorsCheckBox.text=Keep Field Move Tutors
+GUI.mtForceGoodDamagingCheckBox.toolTipText=<html>Selecting this option will allow you to use the slider below to select a proportion of the randomized tutors to be forced to be good damaging moves.<br />Note that other tutors can still be selected as good damaging moves randomly, this is simply an additional chance.
+GUI.mtForceGoodDamagingCheckBox.text=Force % of Good Damaging Moves:
+GUI.mtForceGoodDamagingSlider.toolTipText=<html>Use this slider to select the probability of good damaging moves for the option above.<br />Note that other tutors can still be selected as good damaging moves randomly, this is simply an additional chance.
+GUI.mtNoGameBreakingMovesCheckBox.toolTipText=<html>Checking this checkbox will stop moves that can break early/late games being available in randomized move tutors.<br />In first generation games, Dragon Rage, SonicBoom, Spore, and every OHKO move are banned.<br />In second generation onwards, only SonicBoom and Dragon Rage are banned (because OHKO moves and sleep are significantly less broken).
+GUI.mtNoGameBreakingMovesCheckBox.text=No Game-Breaking Moves
+GUI.mtcPanel.title=Move Tutor Compatibility
+GUI.mtcUnchangedRadioButton.toolTipText=<html>Every Pokemon will be able to learn the same move tutor moves that it could before.<br />Note that this applies even if you randomize the moves, which could lead to some odd combinations.
+GUI.mtcUnchangedRadioButton.text=Unchanged
+GUI.mtcRandomPreferSameTypeRadioButton.toolTipText=<html>Randomize the Move Tutor moves that each Pokemon can learn.<br />Each move will have:<br />A 90% chance of being learnable if the Pokemon has it as (one of) its type(s).<br />A 50% chance of being learnable if the move is Normal and the Pokemon isn't.<br />A 25% chance otherwise.
+GUI.mtcRandomPreferSameTypeRadioButton.text=Random (prefer same type)
+GUI.mtcRandomCompletelyRadioButton.toolTipText=<html>Randomize the Move Tutor moves that each Pokemon can learn.<br />Each move will have a 50% chance of being learnable regardless of type.
+GUI.mtcRandomCompletelyRadioButton.text=Random (completely)
+GUI.mtcFullCompatibilityRadioButton.toolTipText=<html>Select this option to allow every Pokemon to learn every Move Tutor move.<br />This can be fun to mess around with, but it might make the game too easy.
+GUI.mtcFullCompatibilityRadioButton.text=Full Compatibility
+GUI.itemsPanel.title=Items
+GUI.fiPanel.title=Field Items
+GUI.fiUnchangedRadioButton.toolTipText=Items on the ground and hidden items remain the same.
+GUI.fiUnchangedRadioButton.text=Unchanged
+GUI.fiShuffleRadioButton.toolTipText=<html>Selecting this will take the full set of items that can be picked up from item balls, as well as hidden items,<br />and randomize their order so each item appears in a new place.<br />Key items are left in their original location and glitch items are excluded.<br />This stops item balls containing seriously overpowered items, but more powerful items may be available early on.<br />TMs will remain in the same item balls, but the numbers of the TMs in them will be shuffled among the set.
+GUI.fiShuffleRadioButton.text=Shuffle
+GUI.fiRandomRadioButton.toolTipText=<html>Selecting this will place a new random item in each item ball & hidden item slot.<br />Key items & glitch items are automatically excluded.<br />This means item balls can contain seriously overpowered items such as Master Balls.<br />TMs will remain in the same item balls, but the numbers of the TMs in them will be randomized, including TMs not usually available from item balls.<br />All TMs will still be available at least once in the game.
+GUI.fiRandomRadioButton.text=Random
+GUI.fiRandomEvenDistributionRadioButton.toolTipText=<html>This is the same as Random, except that the randomizer will control the number of times each item is placed. <br />This applies to the entire game, main- and post-game.
+GUI.fiRandomEvenDistributionRadioButton.text=Random (even distribution)
+GUI.fiBanBadItemsCheckBox.toolTipText=<html>Checking this will remove "bad" items that don't do much from the set of possible random items for field items, such as berries and mail.
+GUI.fiBanBadItemsCheckBox.text=Ban Bad Items
+GUI.shPanel.title=Special Shops
+GUI.shUnchangedRadioButton.toolTipText=Items in shops remain the same.
+GUI.shUnchangedRadioButton.text=Unchanged
+GUI.shShuffleRadioButton.toolTipText=Items in non-main shops are shuffled.
+GUI.shShuffleRadioButton.text=Shuffle
+GUI.shRandomRadioButton.toolTipText=Items in non-main shops are randomized.
+GUI.shRandomRadioButton.text=Random
+GUI.shBanOverpoweredShopItemsCheckBox.toolTipText=<html>Checking this will remove overpowered shop items from the pool, such as the Lucky Egg and<br />items that sell for high prices to maniacs.
+GUI.shBanOverpoweredShopItemsCheckBox.text=Ban Overpowered Shop Items
+GUI.shBanBadItemsCheckBox.toolTipText=<html>Checking this will remove "bad" items that don't do much from the set of possible random items for shop items, such as berries and mail.
+GUI.shBanBadItemsCheckBox.text=Ban Bad Items
+GUI.shBanRegularShopItemsCheckBox.toolTipText=<html>Checking this will remove regular shop items from the possible random items for shop items.
+GUI.shBanRegularShopItemsCheckBox.text=Ban Regular Shop Items
+GUI.shBalanceShopItemPricesCheckBox.toolTipText=<html>Checking this will change prices for many items in order to make them more balanced.<br /><b>Be aware:</b> prices for some items are seriously imbalanced without this setting.
+GUI.shBalanceShopItemPricesCheckBox.text=Balance Shop Item Prices
+GUI.shGuaranteeEvolutionItemsCheckBox.toolTipText=<html>Checking this will ensure all evolution items appear in shops.
+GUI.shGuaranteeEvolutionItemsCheckBox.text=Guarantee Evolution Items
+GUI.shGuaranteeXItemsCheckbox.tooltipText=<html>Checking this will ensure all X items (including Guard Spec. and Dire Hit) appear in shops.
+GUI.shGuaranteeXItemsCheckbox.text=Guarantee X Items
+GUI.puPanel.title=Pickup Items
+GUI.puUnchangedRadioButton.toolTipText=Items obtained via the Pickup ability remain the same.
+GUI.puUnchangedRadioButton.text=Unchanged
+GUI.puRandomRadioButton.toolTipText=Items obtained via the Pickup ability are randomized.
+GUI.puRandomRadioButton.text=Random
+GUI.puBanBadItemsCheckBox.toolTipText=<html>Checking this will remove "bad" items that don't do much from the set of possible random items for the Pickup item table, such as berries and mail.
+GUI.puBanBadItemsCheckBox.text=Ban Bad Items
+GUI.miscTweaksPanel.title=Misc. Tweaks
+GUI.miscPanel.title=Misc. Tweaks
+GUI.miscNoneAvailableLabel.text=There are no tweaks available for the currently loaded game.
+GUI.miscBWExpPatchCheckBox.toolTipText=<html>Select this to patch the game you are randomizing to use the Black/White new XP gain system.<br />This system gives EXP in a different way, rewarding players for beating higher level Pokemon with lower levels.<br />This is currently available only for English R/B/Y and G/S/C.
+GUI.miscBWExpPatchCheckBox.text=B/W Exp Patch
+GUI.miscNerfXAccuracyCheckBox.toolTipText=<html>X Accuracy in Generation 1 games is a pretty broken item, given that it gives 100% accuracy to any and all moves used.<br />Apply this code tweak to stop X Accuracy from working on sleep moves, trapping moves & one-hit KO moves.<br />Doing this means that the player cannot use X Accuracy and lock the opponents into infinite sleep/Wrap, nor can they just use one-hit KO moves on everything.<br />Applying this patch will also remove the one-hit KO moves from the "broken moves" list if you use that option, since they aren't really broken without X Accuracy.<br /><b>Credit to Mountebank for this patch.</b>
+GUI.miscNerfXAccuracyCheckBox.text=Nerf X Accuracy
+GUI.miscFixCritRateCheckBox.toolTipText=<html>Selecting this option will "fix" Generation 1's critical hit rate to be the same as the other games (1/16), instead of being based on Speed.<br />Focus Energy and Dire Hit will also be fixed to increase crit rate instead of decreasing it.<br />"High crit rate" moves such as Slash will have double the normal crit chance, like in later games.
+GUI.miscFixCritRateCheckBox.text="Fix" Crit Rate
+GUI.miscFastestTextCheckBox.toolTipText=<html>Selecting this option will make all text boxes in the game show up with minimum delay, regardless of the text speed the player sets in Options.<br />
+GUI.miscFastestTextCheckBox.text=Fastest Text
+GUI.miscRunningShoesIndoorsCheckBox.toolTipText=<html>Selecting this option will allow you to use the Running Shoes in any location, just like in later games.
+GUI.miscRunningShoesIndoorsCheckBox.text=Running Shoes Indoors
+GUI.miscRandomizePCPotionCheckBox.toolTipText=<html>Selecting this option will randomize the Potion that is in your item PC at the beginning of the game to any other "useful" item.
+GUI.miscRandomizePCPotionCheckBox.text=Randomize PC Potion
+GUI.miscAllowPikachuEvolutionCheckBox.toolTipText=<html>Selecting this option will let you evolve Pikachu into Raichu with a Thunder Stone like any other game.
+GUI.miscAllowPikachuEvolutionCheckBox.text=Allow Pikachu Evolution
+GUI.miscGiveNationalDexAtCheckBox.toolTipText=<html>If this is checked then the National Dex will be given to the player at the start of the game with the regular Pokedex.<br />It is useful for tracking Pokemon outside of the regional dex when using the Pokedex.<br /><b>Important caveats:</b><br /><b>For FRLG only:</b> this setting is <i>necessary</i> for Kanto Pokemon to evolve into Non-Kanto Pokemon, i.e. Golbat evolving into Crobat.<br /><b>For DPPt only:</b> the National Dex will instead be obtained after speaking to Professor Rowan once after obtaining the regular Pokedex.
+GUI.miscGiveNationalDexAtCheckBox.text=Give National Dex at Start
+GUI.miscUpdateTypeEffectivenessCheckBox.toolTipText=<html>If this is checked, the type weaknesses/strengths/immunities will be updated to what they are in Gen 6 and up. <b>This does NOT add the Fairy type.</b><br />For Gen 1, this changes the following:<br /><ul><li>Ice is now not very effective against Fire.<li>Poison is now neutral against Bug.<li>Bug is now not very effective against Poison.<li>Ghost is now super effective against Psychic.</ul>For Gens 2-5, this changes the following:<br /><ul><li>Ghost is now neutral against Steel.<li>Dark is now neutral against Steel.</ul>
+GUI.miscUpdateTypeEffectivenessCheckBox.text=Update Type Effectiveness
+GUI.forceChallengeMode.toolTipText=<html>If this is checked, then Challenge Mode will be forcibly enabled, bypassing the Key System entirely.<br /><b>You will <i>not</i> be able to access Easy or Normal Mode if you enable this setting.</b>
+GUI.forceChallengeMode.text=Force Challenge Mode
+GUI.miscLowerCasePokemonNamesCheckBox.toolTipText=<html>If this is selected, all Pokemon names will be made into Camel Case.<br />e.g. VENUSAUR becomes Venusaur.<br />This looks better in Gen3/Gen4 games, and OK in Gen1/Gen2 games.
+GUI.miscLowerCasePokemonNamesCheckBox.text=Lower Case Pokemon Names
+GUI.miscRandomizeCatchingTutorialCheckBox.toolTipText=<html>Selecting this option will randomize the Pokemon participating in the game's catching tutorial.
+GUI.miscRandomizeCatchingTutorialCheckBox.text=Randomize Catching Tutorial
+GUI.miscBanLuckyEggCheckBox.toolTipText=<html>Bans Lucky Egg from showing up as any kind of randomized item.<br />If the original game contains a Lucky Egg in any non-randomized place, that will still be the case.
+GUI.miscBanLuckyEggCheckBox.text=Ban Lucky Egg
+GUI.miscNoFreeLuckyEggCheckBox.toolTipText=<html>Causes Professor Juniper to not give you a Lucky Egg for free in the Chargestone Cave (BW)/Celestial Tower (BW2).
+GUI.miscNoFreeLuckyEggCheckBox.text=No Free Lucky Egg
+GUI.miscBanBigMoneyManiacCheckBox.toolTipText=<html>Bans maniac items worth more than $10,000 from showing up as any kind of randomized item.
+GUI.miscBanBigMoneyManiacCheckBox.text=Ban Big Money Maniac Items
+GUI.cantWriteConfigFile=WARNING: The randomizer is unable to write its config file to the directory it is in.\nThis means that it will probably be unable to save the randomized ROMs it creates.\nPlease run the randomizer from a directory where you can write files.\nYou can try to use the randomizer as-is, but it will probably not work.
+GUI.copyNameFilesDialog.text=You appear to have customized name files in the config directory left over from an old version of the randomizer.\nWould you like these files to be copied to the main program directory so they are used in this version?
+GUI.copyNameFilesDialog.title=Copy custom names?
+GUI.convertNameFilesDialog.text=You appear to have customized name files in the randomizer directory left over from an old version of the randomizer.\nWould you like these files to be converted to the new custom names format so they are used in this version?
+GUI.convertNameFilesDialog.title=Convert custom names?
+GUI.copyNameFilesFailed=At least one file was not able to be copied.
+GUI.convertNameFilesFailed=Could not convert custom names to the new format.
+GUI.configFileMissing=The file %s is missing from the configuration and so this program cannot start.\nPlease make sure you extract the program from the ZIP file before running it.
+GUI.loadingText=Loading...
+GUI.savingText=Saving...
+GUI.loadFailed=There was an unhandled exception trying to load your ROM.\nA log file containing some details has been saved to %s.\nPlease include this file in any bug reports you do.
+GUI.loadFailedNoLog=There was an unhandled exception trying to load your ROM.
+GUI.unreadableRom=Could not read %s from disk.\nPlease ensure you have read access to the ROM you're trying to open.
+GUI.tooShortToBeARom=%s appears to be a blank or nearly blank file.\nCheck to make sure you're opening the right file.
+GUI.openedZIPfile=%s is a ZIP archive, not a ROM.\nYou should extract it and try to randomize the actual ROM file inside.
+GUI.openedRARfile=%s is a RAR archive, not a ROM.\nYou should extract it and try to randomize the actual ROM file inside.
+GUI.openedIPSfile=%s is an IPS patch, not a ROM.\nYou should apply it to a ROM first before trying to randomize the result.
+GUI.unsupportedRom=Could not load %s - it's not a supported ROM.
+GUI.encryptedRom=<html>Could not load %s as it appears to be an encrypted ROM.<br />Universal Pokemon Randomizer ZX does not currently support encrypted 3DS ROMs.<br/>If you believe your ROM is actually decrypted, please try decrypting your ROM with a different tool or try using a different ROM.
+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.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.
+GUI.presetFailNicknames=Can't use this preset because you have a different set of random nicknames to the creator.\nHave them make you a rndp file instead.
+GUI.presetDifferentCustomNames=You don't have the same set of custom names as the creator. If you continue, you will have different custom names (if that setting is in use).\nIf you want to play with the same custom names, have them send you a preset file (.rndp) instead.
+GUI.starterUnavailable=Could not set one of the custom starters from the settings file because it does not exist in this generation.
+GUI.saveFailedMessage=Error during randomization: %s.\nIf this is the first time you've seen this message, try again.\nIf it keeps happening, try loosening any restrictive settings you've selected.\nA log file containing some details has been saved to %s.\nPlease include this file in any bug reports you do.
+GUI.saveFailedMessageNoLog=Error during randomization: %s.\nIf this is the first time you've seen this message, try again.\nIf it keeps happening, try loosening any restrictive settings you've selected.
+GUI.saveFailedIO=There was an unhandled exception trying to save your ROM to disk.\nA log file containing some details has been saved to %s.\nPlease include this file in any bug reports you do.
+GUI.saveFailedIONoLog=There was an unhandled exception trying to save your ROM to disk.
+GUI.cannotWriteToLocation=The randomizer is not allowed to write this file: %s.\nPlease try saving your ROM to a different location.
+GUI.raceModeCheckValuePopup=Your check value for the race is:\n%08X\nDistribute this along with the preset file, if you're the race maker!\nIf you received this in a race, compare it to the value the race maker gave.
+GUI.saveLogDialog.text=Do you want to save a log file of the randomization performed?\nThis may allow you to gain an unfair advantage, do not do so if you are doing something like a race.
+GUI.saveLogDialog.title=Save Log?
+GUI.logSaveFailed=Could not save log file!
+GUI.logSaved=Log file saved to\n%s.log
+GUI.randomizationDone=Randomization Complete. You can now play!
+GUI.saveFailed=There was an unhandled exception trying to save your ROM.\nA log file containing some details has been saved to %s.\nPlease include this file in any bug reports you do.
+GUI.saveFailedNoLog=There was an unhandled exception trying to save your ROM.
+GUI.cantOverwriteDS=You cannot overwrite the original ROM when you save a DS randomization.\nPlease choose a different filename.
+GUI.noUpdates=No new updates found.
+GUI.settingsFileOlder=This settings file was created by an older randomizer version.\nThe randomizer will attempt to open it anyway, but you should look out for new options added since you made it.\nTo prevent this message from appearing every time you load this settings file, re-save your settings file.
+GUI.settingsFileNewer=This settings file is for a newer randomizer version.\nYou should upgrade your randomizer.
+GUI.invalidSettingsFile=Settings file is not valid.
+GUI.settingsLoaded=Settings loaded from %s.
+GUI.settingsLoadFailed=Settings file load failed. Please try again.
+GUI.settingsSaveFailed=Settings file save failed. Please try again.
+GUI.cantLoadCustomNames=Could not initialise custom names data.\nPlease redownload the randomizer and try again.
+GUI.customNamesEditorMenuItem.text=Custom Names Editor
+GUI.mtMovesPanel.toolTipText=
+GUI.mtMovesPanel.text=
+GUI.mtCompatPanel.toolTipText=
+GUI.mtCompatPanel.text=
+GUI.shopItemsPanel.toolTipText=
+GUI.shopItemsPanel.text=
+GUI.miscTweaksPanel.toolTipText=
+GUI.miscTweaksPanel.text=
+GUI.gameMascotLabel.toolTipText=
+GUI.gameMascotLabel.text=
+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:
+GenerationLimitDialog.gen1CB.text=Generation 1
+GenerationLimitDialog.gen2CB.text=Generation 2
+GenerationLimitDialog.gen3CB.text=Generation 3
+GenerationLimitDialog.gen4CB.text=Generation 4
+GenerationLimitDialog.gen5CB.text=Generation 5
+GenerationLimitDialog.okButton.text=OK
+GenerationLimitDialog.gen2Short=Gen 2
+GenerationLimitDialog.gen4Short=Gen 4
+GenerationLimitDialog.gen1Short=Gen 1
+GenerationLimitDialog.gen3Short=Gen 3
+GenerationLimitDialog.title=Choose Pokemon to allow
+GenerationLimitDialog.cancelButton.text=Cancel
+GenerationLimitDialog.warningRomHackLabel.text=<html><center>WARNING: This functionality will NOT work correctly with ROM hacks<br /> that change the available Pokemon or add new ones!</center>
+GenerationLimitDialog.warningXYLabel.text=<html><center>To prevent X/Y from softlocking, you must<br />select at least one of Generations 1, 2, 3, or 4</center>
+CodeTweaksDialog.headerLabel.text=Choose tweaks to enable...
+CodeTweaksDialog.title=Code Tweaks
+CodeTweaksDialog.okButton.text=OK
+CodeTweaksDialog.cancelButton.text=Cancel
+PresetMakeDialog.doneButton.text=Done
+PresetMakeDialog.title=Randomization Completed - Seed Details
+PresetMakeDialog.produceFileButton.text=Produce File
+PresetMakeDialog.gameRandomizedLabel.text=Your game has been successfully randomized!
+PresetMakeDialog.settingsToGiveLabel.text=Below are the settings you can give to other people to produce the same randomization as you just did.
+PresetMakeDialog.seedFieldLabel.text=Random Seed:
+PresetMakeDialog.configStringFieldLabel.text=Config String:
+PresetMakeDialog.canProduceFileLabel.text=Alternatively you can produce a file which contains this data which you can then send to people.
+PresetLoadDialog.romFileButton.text=...
+PresetLoadDialog.presetFileButton.text=...
+PresetLoadDialog.acceptButton.text=Apply Randomization Settings
+PresetLoadDialog.presetFileLabel.text=Preset File:
+PresetLoadDialog.cancelButton.text=Cancel
+PresetLoadDialog.romRequiredLabel.text=ROM Required: Enter settings above first.
+PresetLoadDialog.title=Use Preset
+PresetLoadDialog.seedBoxLabel.text=Random Seed:
+PresetLoadDialog.configStringBoxLabel.text=Config String:
+PresetLoadDialog.orLabel.text=-OR-
+PresetLoadDialog.romFileBoxLabel.text=Rom File:
+PresetLoadDialog.romRequiredLabel.textWithROM=ROM Required: %s
+PresetLoadDialog.invalidSeedFile=The seed file did not contain valid settings.
+PresetLoadDialog.loadingSeedFileFailed=Could not load seed file.
+PresetLoadDialog.notRequiredROM=This isn't the required ROM.\nRequired: %s\nThis ROM: %s
+PresetLoadDialog.newerVersionRequired=The preset file was generated with a newer randomizer version. Try downloading the latest version.
+PresetLoadDialog.olderVersionRequired=The preset file was generated with an older randomizer version. It can only be used with version %s.
+CodeTweaks.bwPatch.name=B/W Exp Patch
+CodeTweaks.bwPatch.toolTipText=<html>Select this to patch the game you are randomizing to use the Black/White new XP gain system.<br />This system gives EXP in a different way, rewarding players for beating higher level Pokemon with lower levels.<br />This is currently available only for English R/B/Y and G/S/C.
+CodeTweaks.nerfXAcc.name=Nerf X Accuracy
+CodeTweaks.nerfXAcc.toolTipText=<html>X Accuracy in Generation 1 games is a pretty broken item, given that it gives 100% accuracy to any and all moves used.<br />Apply this code tweak to stop X Accuracy from working on sleep moves, trapping moves & one-hit KO moves.<br />Doing this means that the player cannot use X Accuracy and lock the opponents into infinite sleep/Wrap, nor can they just use one-hit KO moves on everything.<br />Applying this patch will also remove the one-hit KO moves from the "broken moves" list if you use that option, since they aren't really broken without X Accuracy.<br /><b>Credit to Mountebank for this patch.</b>
+CodeTweaks.critRateFix.name="Fix" Crit Rate
+CodeTweaks.critRateFix.toolTipText=<html>Selecting this option will "fix" Generation 1's critical hit rate to be the same as the other games (1/16), instead of being based on Speed.<br />Focus Energy and Dire Hit will also be fixed to increase crit rate instead of decreasing it.<br />"High crit rate" moves such as Slash will have double the normal crit chance, like in later games.
+CodeTweaks.fastestText.toolTipText=<html>Selecting this option will make all text boxes in the game show up with minimum delay, regardless of the text speed the player sets in Options.<br />
+CodeTweaks.fastestText.name=Fastest Text
+CodeTweaks.runningShoes.toolTipText=<html>Selecting this option will allow you to use the Running Shoes in any location, just like in later games.
+CodeTweaks.runningShoes.name=Running Shoes Indoors
+CodeTweaks.pcPotion.toolTipText=<html>Selecting this option will randomize the Potion that is in your item PC at the beginning of the game to any other "useful" item.
+CodeTweaks.pcPotion.name=Randomize PC Potion
+CodeTweaks.pikachuEvo.toolTipText=<html>Selecting this option will let you evolve Pikachu into Raichu with a Thunder Stone like any other game.
+CodeTweaks.pikachuEvo.name=Allow Pikachu Evolution
+CodeTweaks.nationalDex.toolTipText=<html>If this is checked then the National Dex will be given to the player at the start of the game with the regular Pokedex.<br />This is only <i>necessary</i> for FRLG, where certain Pokemon can't evolve if you don't have it.<br />It is useful in other games for tracking Pokemon outside of the regional dex when using the Pokedex.
+CodeTweaks.nationalDex.name=Give National Dex at Start
+CodeTweaks.typeEffectiveness.toolTipText=<html>If this is checked, the type weakness/strengths/immunities will be updated to the current set.<br />For RBY, this means Ghost will be Super Effective against Psychic, among other changes.
+CodeTweaks.typeEffectiveness.name=Update Type Effectiveness
+CodeTweaks.forceChallengeMode.toolTipText=<html>If this is checked, then Challenge Mode will be forcibly enabled, bypassing the Key System entirely.<br /><b>You will <i>not</i> be able to access Easy or Normal Mode if you enable this setting.</b>
+CodeTweaks.forceChallengeMode.name=Force Challenge Mode
+CodeTweaks.lowerCaseNames.toolTipText=<html>If this is selected, all Pokemon names will be made into Camel Case.<br />e.g. VENUSAUR becomes Venusaur.<br />This looks better in Gen3/Gen4 games, and OK in Gen1/Gen2 games.
+CodeTweaks.lowerCaseNames.name=Lower Case Pokemon Names
+CodeTweaks.catchingTutorial.toolTipText=<html>Selecting this option will randomize the Pokemon participating in the game's catching tutorial.
+CodeTweaks.catchingTutorial.name=Randomize Catching Tutorial
+CodeTweaks.luckyEgg.toolTipText=<html>Bans Lucky Egg from showing up as any kind of randomized item.<br />If the original game contains a Lucky Egg in any non-randomized place, that will still be the case.
+CodeTweaks.luckyEgg.name=Ban Lucky Egg
+CodeTweaks.freeLuckyEgg.toolTipText=<html>Causes Professor Juniper to not give you a Lucky Egg for free in the Chargestone Cave (BW)/Celestial Tower (BW2).
+CodeTweaks.freeLuckyEgg.name=No Free Lucky Egg
+CodeTweaks.maniacItems.toolTipText=<html>Bans maniac items worth more than $10,000 from showing up as any kind of randomized item.
+CodeTweaks.maniacItems.name=Ban Big Money Maniac Items
+CodeTweaks.sosBattles.toolTipText=<html>Makes it possible for every Pokemon to call allies during wild Pokemon battles.<br />Without this setting, only Pokemon that could call allies in the base game will be able to call allies.
+CodeTweaks.sosBattles.name=All Wild Pokemon Can Call Allies
+CodeTweaks.balanceStaticLevels.toolTipText=<html>Changes levels of Static Pokemon to be more balanced. Currently applies only to fossil Pokemon in FRLG and BW1.
+CodeTweaks.balanceStaticLevels.name=Balance Static Pokemon Levels
+CodeTweaks.retainAltFormes.toolTipText=<html>Lets all party Pokemon that are in an alternate forme retain their alternate forme when the game is reset.<br />Without this setting, Mega Evolutions, Primal Reversions, Ash-Greninja, Zygarde Complete Forme, and Ultra Necrozma will revert to their base forme upon reset.<br />In ORAS and Gen 7, this setting also prevents certain alternate formes from being reverted after a battle if these formes are <i>not</i> the result of an in-battle transformation.<br />This includes Primal Groudon, Primal Kyogre, Wishiwashi School Form, and Minior.
+CodeTweaks.retainAltFormes.name=Don't Revert Temporary Alt Formes
+CodeTweaks.runWithoutRunningShoes.toolTipText=<html>Allows you to run before acquiring the Running Shoes.
+CodeTweaks.runWithoutRunningShoes.name=Run Without Running Shoes
+CodeTweaks.fasterHpAndExpBars.toolTipText=<html>Doubles the scrolling speed of the HP and EXP bars that appear in battle.<br />In practice, this makes them scroll at the same speed as in the Gen 3 games.
+CodeTweaks.fasterHpAndExpBars.name=Faster HP and EXP Bars
+CodeTweaks.fastDistortionWorld.name=Fast Distortion World
+CodeTweaks.fastDistortionWorld.toolTipText=<html>Cuts out most of the Distortion World by instantly warping you to the Cyrus fight when you enter it.
+CodeTweaks.updateRotomFormeTyping.name=Update Rotom Appliance Typings
+CodeTweaks.updateRotomFormeTyping.toolTipText=<html>Updates the typings of Rotom's alternate formes (i.e., the appliances) to match the typings they have in Gen 5 and onwards.<br />For example, Wash Rotom will change from Electric/Ghost to Electric/Water.
+CodeTweaks.disableLowHpMusic.name=Disable Low HP Music
+CodeTweaks.disableLowHpMusic.toolTipText=<html>Disables the music that plays when one of the player's Pokemon is at low HP in battle, ensuring that the current song will continue playing no matter what.
+CustomNamesEditorDialog.trainerNamesSP.TabConstraints.tabTitle=Trainer Names
+CustomNamesEditorDialog.title=Custom Names Editor
+CustomNamesEditorDialog.closeBtn.text=Close
+CustomNamesEditorDialog.saveBtn.text=Save
+CustomNamesEditorDialog.nicknamesSP.TabConstraints.tabTitle=Pokemon Nicknames
+CustomNamesEditorDialog.doublesTrainerClassesSP.TabConstraints.tabTitle=Doubles Trainer Classes
+CustomNamesEditorDialog.doublesTrainerNamesSP.TabConstraints.tabTitle=Doubles Trainer Names
+CustomNamesEditorDialog.trainerClassesSP.TabConstraints.tabTitle=Trainer Classes
+GUI.pbsFollowMegaEvosCheckBox.text=Follow Mega Evolutions
+GUI.pbsFollowMegaEvosCheckBox.toolTipText=<html>When this is selected and base stats are shuffled or randomized, Mega Evolutions will inherit from their base form's rolls.<br />Shuffle: The same new ordering of stats will be used.<br />Randomized: The Mega Evolution will have the same proportion of stats as the base form.<br />Not recommended for use in Gen 7 unless you know what you're doing; see the Important Information page on the wiki for more info.
+GUI.paFollowMegaEvosCheckBox.text=Follow Mega Evolutions
+GUI.paFollowMegaEvosCheckBox.toolTipText=<html>When this is selected and abilities are randomized, non-split Mega Evolutions of a Pokemon will inherit that Pokemon's random abilities.<br />Not recommended for use in Gen 7 unless you know what you're doing; see the Important Information page on the wiki for more info.
+GUI.ptFollowMegaEvosCheckBox.text=Follow Mega Evolutions
+GUI.ptFollowMegaEvosCheckBox.toolTipText=<html>When this is selected and types are randomized, non-split Mega Evolutions of a Pokemon will inherit that Pokemon's random types (perhaps adding another type).<br />Not recommended for use in Gen 7 unless you know what you're doing; see the Important Information page on the wiki for more info.
+GUI.spAllowAltFormesCheckBox.text=Allow Alternate Formes
+GUI.spAllowAltFormesCheckBox.toolTipText=<html>Allow alternate formes of Pokemon, such as the various formes of Rotom or Deoxys, to appear as Starter Pokemon.<br />Note that their traits are randomized/shuffled separately from their base formes.
+GUI.stpAllowAltFormesCheckBox.text=Allow Alternate Formes
+GUI.stpAllowAltFormesCheckBox.toolTipText=<html>Allow alternate formes of Pokemon, such as the various formes of Rotom or Deoxys, to appear as Static Pokemon.<br />Note that their traits are randomized/shuffled separately from their base formes.
+GUI.stpSwapMegaEvosCheckBox.text=Swap Mega Evolvables
+GUI.stpSwapMegaEvosCheckBox.toolTipText=<html>Swap Statics capable of Mega Evolution with another Pokemon capable of Mega Evolution.<br />This affects Lucario in X/Y and Latios/Latias in OR/AS.
+GUI.stpPercentageLevelModifierCheckBox.text=Percentage Level Modifier:
+GUI.stpPercentageLevelModifierCheckBox.tooltipText=Checking this will enable a percentage-based level modifier for every Static Pokemon.
+GUI.tpSwapMegaEvosCheckBox.text=Swap Mega Evolvables
+GUI.tpSwapMegaEvosCheckBox.toolTipText=<html>Swap Trainer Pokemon capable of Mega Evolution with another Pokemon capable of Mega Evolution.<br />This only affects Trainer Pokemon that actually hold a Mega Stone (so, for example, it will affect Diantha's Gardevoir but not every Gardevoir)<br />If the "Limit Pokemon" general option is used to remove all Mega Evolutions from the game, this setting will be disabled.
+GUI.ptForceDualTypeCheckBox.text=Force Dual Types
+GUI.ptForceDualTypeCheckBox.toolTipText=Checking this will force all Pokemon to have two types when types are randomized
+GUI.wpAllowAltFormesCheckBox.text=Allow Alternate Formes
+GUI.wpAllowAltFormesCheckBox.toolTipText=<html>Allow alternate formes of Pokemon, such as the various formes of Rotom or Deoxys, to appear as Wild Pokemon.<br />Note that their traits are randomized/shuffled separately from their base formes.
+GUI.tpDoubleBattleModeCheckBox.text=Double Battle Mode
+GUI.tpDoubleBattleModeCheckBox.toolTipText=<html>Sets all Trainer battles to be double battles instead of single battles. The first rival battle is excluded.<br /><br /><b>Be aware that there are a few issues with this mode.</b> In particular: <br /><ul><li>Entering a double battle with a single Pokemon causes some generation-dependent issues:<br /><ul><li>Gen 3: The empty spot will be filled by a duplicate of the single Pokemon, and entering the "Pokémon" menu will softlock the game.<li>Gen 4: The empty spot will be filled by a garbled sprite that only can use Struggle.<li>Gen 6/7: The empty spot will be filled by a shiny Bulbasaur that cannot act.</ul><li>In Gen 5 games, Trainer pairs that are double battles in the regular game will have one incorrect text box if you let them spot you.<li>In Gen 6 games, regular Trainers will have some text issues if you talk to them directly.</ul>
+GUI.tpAddMorePokemonForLabel.text=Additional Pokemon for...
+GUI.tpBossTrainersCheckBox.text=Boss Trainers
+GUI.tpImportantTrainersCheckBox.text=Important Trainers
+GUI.tpRegularTrainersCheckBox.text=Regular Trainers
+GUI.tpBossTrainersCheckBox.toolTipText=<html>Check this to add additional Pokemon to "Boss" Trainers (select amount of new Pokemon below). Trainers will not get more than 6 total Pokemon.<br />Boss Trainers include Gym Leaders, Kahunas, Team Leaders, Elite Four, and Champions.
+GUI.tpImportantTrainersCheckBox.toolTipText=<html>Check this to add additional Pokemon to "Important" Trainers (select amount of new Pokemon below). Trainers will not get more than 6 total Pokemon.<br />Important Trainers include Rivals/Friends, Team Admins, and other important story battles (such as Colress in BW2 and Sycamore in XY).
+GUI.tpRegularTrainersCheckBox.toolTipText=<html>Check this to add additional Pokemon to regular Trainers (select amount of new Pokemon below). Trainers will not get more than 6 total Pokemon.<br />Regular Trainers include all trainers that don't qualify as "Boss" or "Important" Trainers.
+GUI.peAllowAltFormesCheckBox.text=Allow Alternate Formes
+GUI.peAllowAltFormesCheckBox.toolTipText=<html>Allow Pokemon to evolve into alternate formes of Pokemon, including into regional variants.
+GUI.tpRandomShinyTrainerPokemonCheckBox.text=Random Shiny Trainer Pokemon
+GUI.tpRandomShinyTrainerPokemonCheckBox.toolTipText=Gives a 1/256 chance of Trainer Pokemon being shiny.
+GUI.totpPanel.title=Totem Pokemon
+GUI.totpAllyPanel.title=Ally Pokemon
+GUI.totpAuraPanel.title=Auras
+GUI.totpRandomizeHeldItemsCheckBox.text=Randomize Held Items
+GUI.totpAllowAltFormesCheckBox.text=Allow Alternate Formes
+GUI.totpPercentageLevelModifierCheckBox.text=Percentage Level Modifier:
+GUI.totpUnchangedRadioButton.text=Unchanged
+GUI.totpRandomRadioButton.text=Random
+GUI.totpRandomSimilarStrengthRadioButton.text=Random (similar strength)
+GUI.totpAllyUnchangedRadioButton.text=Unchanged
+GUI.totpAllyRandomRadioButton.text=Random
+GUI.totpAllyRandomSimilarStrengthRadioButton.text=Random (similar strength)
+GUI.totpAuraUnchangedRadioButton.text=Unchanged
+GUI.totpAuraRandomRadioButton.text=Random
+GUI.totpAuraRandomRadioButton.toolTipText.=<html>Auras will be completely randomized.<br />The possible auras are +1/+2/+3 to a single stat or to every stat.
+GUI.totpAuraRandomSameStrengthRadioButton.text=Random (same strength)
+GUI.totpAuraRandomSameStrengthRadioButton.toolTipText=<html>Auras will be randomized to auras with the same net gain of stages.<br />For example, a Totem Pokemon that previously had +2 Speed could get +2 Defense instead.<br />Totem Pokemon with +1/+2 to every stat will not have their auras randomized, since those auras are the only ones with 5 and 10 stages respectively.
+GUI.totpUnchangedRadioButton.toolTipText=Don't change Totem Pokemon species.
+GUI.totpRandomRadioButton.toolTipText=Randomize Totem Pokemon species.
+GUI.totpRandomSimilarStrengthRadioButton.toolTipText=Replace every Totem Pokemon with a Pokemon of similar strength.
+GUI.totpAllyRandomRadioButton.toolTipText=Randomize Ally Pokemon completely.
+GUI.totpAllyRandomSimilarStrengthRadioButton.toolTipText=Replace Ally Pokemon with Pokemon of similar strength.
+GUI.totpAuraUnchangedRadioButton.toolTipText=Don't change auras.
+GUI.totpRandomizeHeldItemsCheckBox.toolTipText=Replace Totem Pokemon's held items with different consumable items.
+GUI.totpAllowAltFormesCheckBox.toolTipText=Allows alternate formes of Pokemon to appear as Totem/Ally Pokemon.
+GUI.totpPercentageLevelModifierCheckBox.toolTipText=Checking this will enable a percentage-based level modifier for every Totem/Ally Pokemon.
+GUI.totpAllyUnchangedRadioButton.toolTipText=Don't change Ally Pokemon.
+GUI.pmsEvolutionMovesCheckBox.text=Evolution Moves for All Pokemon
+GUI.pmsEvolutionMovesCheckBox.toolTipText=<html>Selecting this option will cause every Pokemon to learn a move upon evolution.<br /><br /><b>Use carefully with Sun/Moon 1.0 - </b>due to a glitch, if a Pokemon has an evolution move and also learns a move<br />on the level that it evolved at, it will only learn the evolution move upon evolving.
+GUI.windowTitle=Pokemon Randomizer
+GUI.paWeighDuplicatesTogetherCheckBox.text=Combine Duplicate Abilities
+GUI.paWeighDuplicatesTogetherCheckBox.toolTipText=<html>This setting causes abilities that have the exact same effect to be considered as the same ability for randomization probability purposes. Every variation of the respective abilities can still appear.<br />This applies to:<br /><b>Gen 3+:</b> Insomnia/Vital Spirit, Clear Body/White Smoke, Huge Power/Pure Power, Battle Armor/Shell Armor, Cloud Nine/Air Lock<br /><b>Gen 4+:</b> Filter/Solid Rock<br /><b>Gen 5+:</b> Rough Skin/Iron Barbs, Mold Breaker/Turboblaze/Teravolt<br /><b>Gen 7+:</b> Wimp Out/Emergency Exit, Queenly Majesty/Dazzling, Gooey/Tangling Hair, Receiver/Power of Alchemy, Clear Body/White Smoke/Full Metal Body, Multiscale/Shadow Shield, Filter/Solid Rock/Prism Armor
+GUI.gameUpdateApplied=<html>Update saved for game: %s.<br />Note that if the update file is moved or renamed, you will have to reapply it.
+GUI.nonMatchingGameUpdate=<html>Supplied file %s is not a valid game update for %s.<br />Please check your game updates and try again.
+GUI.invalidGameUpdate=<html>Supplied file %s does not appear to be a valid game update.</br />Please check if the file is a valid game update.
+GUI.savingWithGameUpdate=<html>You've supplied a game update, so your game can only be output as a LayeredFS directory.<br /><b>Make sure you have this same game update installed in Citra or on your 3DS!</b>
+GUI.keepGameLoadedAfterRandomizingMenuItem.text=Keep Game Loaded After Randomizing
+GUI.unloadGameAfterRandomizingMenuItem.text=Unload Game After Randomizing
+GUI.keepGameLoadedAfterRandomizing=Your loaded game and settings will now remain after a successful randomization.
+GUI.unloadGameAfterRandomizing=Your loaded game and settings will now be unloaded after a successful randomization (this is the default setting).
+GUI.firstStart=Welcome to the Universal Pokemon Randomizer ZX! You are using version %s.
+GUI.loadGetSettingsMenuItem.text=Get/Load Settings String
+GUI.invalidSettingsString=The settings string you attempted to load is invalid.
+GUI.settingsStringTooNew=The settings string was generated with a newer randomizer version. Try downloading the latest version.
+GUI.settingsStringTooOld=The settings string was generated with an older randomizer version. It can only be used with version %s.
+GUI.settingsStringLoaded=Settings loaded from string.
+GUI.settingsStringOlder=This settings string was created by an older randomizer version.\nThe randomizer will attempt to open it anyway, but you should look out for new options added since you made it.
+GUI.pleaseUseTheLauncher=WARNING!!!\nTo randomize 3DS games make sure you have more than 4G of ram and start the randomizer by toggling the -Xmx4096M flag in the VM options.
+GUI.invalidRomMessage=The selected ROM does not appear to be a clean, official ROM.\nThe randomizer will still attempt to load it, but you may experience issues.
+GUI.tmFollowEvolutionsCheckBox.text=Follow Evolutions
+GUI.tmFollowEvolutionsCheckBox.toolTipText=<html>When this is selected and TM compatibility is randomized, evolutions of a Pokemon will inherit that Pokemon's TM compatibilities.<br />Additionally, when a Pokemon evolves, each TM will have:<br /><b>Random (prefer same type)</b>: A 90% chance of becoming learnable if the Pokemon just gained its type through evolution, a 10% chance otherwise.<br/><b>Random (completely)</b>: A 25% chance of becoming learnable regardless of type.
+GUI.mtFollowEvolutionsCheckBox.text=Follow Evolutions
+GUI.mtFollowEvolutionsCheckBox.toolTipText=<html>When this is selected and move tutor compatibility is randomized, evolutions of a Pokemon will inherit that Pokemon's move tutor compatibilities.<br />Additionally, when a Pokemon evolves, each move will have:<br /><b>Random (prefer same type)</b>: A 90% chance of becoming learnable if the Pokemon just gained its type through evolution, a 10% chance otherwise.<br/><b>Random (completely)</b>: A 25% chance of becoming learnable regardless of type.
+GUI.stpFixMusicAllCheckBox.text=Fix Music
+GUI.stpFixMusicAllCheckBox.toolTipText=<html>Fixes the music for all Static Pokemon encounters so that even when randomized, encounters that should have special music will play the correct song.<br />Note that in Gen 4/5, if special music is assigned to a Pokemon then it will <b>always</b> play when battling that Pokemon, even if you just find it normally in the wild.
+GUI.tpHeldItemsLabel.text=Add Held Items to...
+GUI.tpBossTrainersItemsCheckBox.text=Boss Trainers
+GUI.tpBossTrainersItemsCheckBox.toolTipText=<html>Check this to add or replace held items for the Pokemon of "Boss" Trainers.<br />Boss Trainers include Gym Leaders, Kahunas, Team Leaders, Elite Four, and Champions.
+GUI.tpImportantTrainersItemsCheckBox.text=Important Trainers
+GUI.tpImportantTrainersItemsCheckBox.toolTipText=<html>Check this to add or replace held items for the Pokemon of "Important" Trainers.<br />Important Trainers include Rivals/Friends, Team Admins, and other important story battles (such as Colress in BW2 and Sycamore in XY).
+GUI.tpRegularTrainersItemsCheckBox.text=Regular Trainers
+GUI.tpRegularTrainersItemsCheckBox.toolTipText=<html>Check this to add or replace held items for the Pokemon of regular Trainers.<br />Regular Trainers include all trainers that don't qualify as "Boss" or "Important" Trainers.
+GUI.tpConsumableItemsOnlyCheckBox.text=Consumable Only
+GUI.tpConsumableItemsOnlyCheckBox.tooltip=<html>Items will be chosen randomly from all single-use held items that a Pokemon can eat/use on its own.<br />This is mostly berries, with a few other items like Focus Sash and White Herb.</html>
+GUI.tpSensibleItemsCheckBox.text=Sensible Items
+GUI.tpSensibleItemsCheckBox.tooltip=<html>Items will be chosen randomly from a subset of the held items that "make sense" for a given Pokemon.<br />For example, Silk Scarf won't be an option for a given Pokemon unless it knows at least one damaging normal move.<br />Another example is that a Yache berry will only be an option on Pokemon that are weak or double weak to ice.</html>
+GUI.tpHighestLevelGetsItemCheckBox.text=Highest Level Only
+GUI.tpHighestLevelGetsItemCheckBox.tooltip=<html>If this option is selected, a held item will be given only to a trainer's highest level Pokemon (or one of them, if there are multiple at that level).<br />If this is unchecked, all of a Trainer's Pokemon will be given items.</html>
+GUI.pbsAssignEvoStatsRandomlyCheckBox.text=Randomize Added Stats on Evolution
+GUI.pbsAssignEvoStatsRandomlyCheckBox.tooltipText=<html>When a Pokemon evolves, the additional BST it gains will be assigned randomly on top of the pre-evo's stats <br />instead of the evolved Pokemon having the exact same ratio between its stats as the pre-evo.<br /><br />Applies to both regular Evolutions and Mega Evolutions (only if "Follow Evolutions"/"Follow Mega Evolutions" is selected).
+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.
diff --git a/src/com/pkrandom/newgui/CustomNamesEditorDialog.java b/src/com/pkrandom/newgui/CustomNamesEditorDialog.java
new file mode 100644
index 0000000..07954ed
--- /dev/null
+++ b/src/com/pkrandom/newgui/CustomNamesEditorDialog.java
@@ -0,0 +1,309 @@
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- CustomNamesEditorDialog.java - a GUI interface to allow users to edit --*/
+/*-- their custom names for trainers etc. --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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.pkrandom.CustomNamesSet;
+import com.pkrandom.FileFunctions;
+import com.pkrandom.SysConstants;
+
+import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class CustomNamesEditorDialog extends javax.swing.JDialog {
+
+ private static final long serialVersionUID = -1421503126547242929L;
+ private boolean pendingChanges;
+
+ /**
+ * Creates new form CustomNamesEditorDialog
+ */
+ public CustomNamesEditorDialog(java.awt.Frame parent) {
+ super(parent, true);
+ initComponents();
+ setLocationRelativeTo(parent);
+
+ java.awt.EventQueue.invokeLater(() -> setVisible(true));
+
+ // load trainer names etc
+ try {
+ CustomNamesSet cns = FileFunctions.getCustomNames();
+ populateNames(trainerNamesText, cns.getTrainerNames());
+ populateNames(trainerClassesText, cns.getTrainerClasses());
+ populateNames(doublesTrainerNamesText, cns.getDoublesTrainerNames());
+ populateNames(doublesTrainerClassesText, cns.getDoublesTrainerClasses());
+ populateNames(nicknamesText, cns.getPokemonNicknames());
+ } catch (IOException ex) {
+ java.awt.EventQueue.invokeLater(() -> JOptionPane.showMessageDialog(CustomNamesEditorDialog.this,
+ "Your custom names file is for a different randomizer version or otherwise corrupt."));
+ }
+
+ // dialog if there's no custom names file yet
+ if (!new File(SysConstants.ROOT_PATH + SysConstants.customNamesFile).exists()) {
+ java.awt.EventQueue.invokeLater(() -> JOptionPane.showMessageDialog(
+ CustomNamesEditorDialog.this,
+ String.format(
+ "Welcome to the custom names editor!\nThis is where you can edit the names used for options like \"Randomize Trainer Names\".\nThe names are initially populated with a few default names included with the randomizer.\nYou can share your customized name sets with others, too!\nJust send them the %s file created in the randomizer directory.",
+ SysConstants.customNamesFile)));
+ }
+
+ pendingChanges = false;
+
+ addDocListener(trainerNamesText);
+ addDocListener(trainerClassesText);
+ addDocListener(doublesTrainerNamesText);
+ addDocListener(doublesTrainerClassesText);
+ addDocListener(nicknamesText);
+ }
+
+ private void addDocListener(JTextArea textArea) {
+ textArea.getDocument().addDocumentListener(new DocumentListener() {
+
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ pendingChanges = true;
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e) {
+ pendingChanges = true;
+ }
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {
+ pendingChanges = true;
+ }
+ });
+
+ }
+
+ private void formWindowClosing() {// GEN-FIRST:event_formWindowClosing
+ attemptClose();
+ }// GEN-LAST:event_formWindowClosing
+
+ private void saveBtnActionPerformed() {// GEN-FIRST:event_saveBtnActionPerformed
+ save();
+ }// GEN-LAST:event_saveBtnActionPerformed
+
+ private void closeBtnActionPerformed() {// GEN-FIRST:event_closeBtnActionPerformed
+ attemptClose();
+ }// GEN-LAST:event_closeBtnActionPerformed
+
+ private boolean save() {
+ CustomNamesSet cns = new CustomNamesSet();
+ cns.setTrainerNames(getNameList(trainerNamesText));
+ cns.setTrainerClasses(getNameList(trainerClassesText));
+ cns.setDoublesTrainerNames(getNameList(doublesTrainerNamesText));
+ cns.setDoublesTrainerClasses(getNameList(doublesTrainerClassesText));
+ cns.setPokemonNicknames(getNameList(nicknamesText));
+ try {
+ byte[] data = cns.getBytes();
+ FileFunctions.writeBytesToFile(SysConstants.ROOT_PATH + SysConstants.customNamesFile, data);
+ pendingChanges = false;
+ JOptionPane.showMessageDialog(this, "Custom names saved.");
+ return true;
+ } catch (IOException ex) {
+ JOptionPane.showMessageDialog(this, "Could not save changes.");
+ return false;
+ }
+ }
+
+ private void attemptClose() {
+ if (pendingChanges) {
+ int result = JOptionPane
+ .showConfirmDialog(this,
+ "You've made some unsaved changes to your custom names.\nDo you want to save them before closing the editor?");
+ if (result == JOptionPane.YES_OPTION) {
+ if (save()) {
+ dispose();
+ }
+ } else if (result == JOptionPane.NO_OPTION) {
+ dispose();
+ }
+ } else {
+ dispose();
+ }
+ }
+
+ private List<String> getNameList(JTextArea textArea) {
+ String contents = textArea.getText();
+ // standardize newlines
+ contents = contents.replace("\r\n", "\n");
+ contents = contents.replace("\r", "\n");
+ // split by them
+ String[] names = contents.split("\n");
+ List<String> results = new ArrayList<>();
+ for (String name : names) {
+ String ln = name.trim();
+ if (!ln.isEmpty()) {
+ results.add(ln);
+ }
+ }
+ return results;
+ }
+
+ private void populateNames(JTextArea textArea, List<String> names) {
+ StringBuilder sb = new StringBuilder();
+ boolean first = true;
+ for (String name : names) {
+ if (!first) {
+ sb.append(SysConstants.LINE_SEP);
+ }
+ first = false;
+ sb.append(name);
+ }
+ textArea.setText(sb.toString());
+ }
+
+ /* @formatter:off */
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ editorTabsPane = new javax.swing.JTabbedPane();
+ trainerNamesSP = new javax.swing.JScrollPane();
+ trainerNamesText = new JTextArea();
+ trainerClassesSP = new javax.swing.JScrollPane();
+ trainerClassesText = new JTextArea();
+ doublesTrainerNamesSP = new javax.swing.JScrollPane();
+ doublesTrainerNamesText = new JTextArea();
+ doublesTrainerClassesSP = new javax.swing.JScrollPane();
+ doublesTrainerClassesText = new JTextArea();
+ nicknamesSP = new javax.swing.JScrollPane();
+ nicknamesText = new JTextArea();
+ saveBtn = new javax.swing.JButton();
+ closeBtn = new javax.swing.JButton();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
+ java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("com/pkrandom/newgui/Bundle");
+ setTitle(bundle.getString("CustomNamesEditorDialog.title"));
+ setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
+ addWindowListener(new java.awt.event.WindowAdapter() {
+ public void windowClosing(java.awt.event.WindowEvent evt) {
+ formWindowClosing();
+ }
+ });
+
+ trainerNamesSP.setHorizontalScrollBar(null);
+
+ trainerNamesText.setColumns(20);
+ trainerNamesText.setRows(5);
+ trainerNamesSP.setViewportView(trainerNamesText);
+
+ editorTabsPane.addTab(bundle.getString("CustomNamesEditorDialog.trainerNamesSP.TabConstraints.tabTitle"), trainerNamesSP);
+
+ trainerClassesSP.setHorizontalScrollBar(null);
+
+ trainerClassesText.setColumns(20);
+ trainerClassesText.setRows(5);
+ trainerClassesSP.setViewportView(trainerClassesText);
+
+ editorTabsPane.addTab(bundle.getString("CustomNamesEditorDialog.trainerClassesSP.TabConstraints.tabTitle"), trainerClassesSP);
+
+ doublesTrainerNamesSP.setHorizontalScrollBar(null);
+
+ doublesTrainerNamesText.setColumns(20);
+ doublesTrainerNamesText.setRows(5);
+ doublesTrainerNamesSP.setViewportView(doublesTrainerNamesText);
+
+ editorTabsPane.addTab(bundle.getString("CustomNamesEditorDialog.doublesTrainerNamesSP.TabConstraints.tabTitle"), doublesTrainerNamesSP);
+
+ doublesTrainerClassesSP.setHorizontalScrollBar(null);
+
+ doublesTrainerClassesText.setColumns(20);
+ doublesTrainerClassesText.setRows(5);
+ doublesTrainerClassesSP.setViewportView(doublesTrainerClassesText);
+
+ editorTabsPane.addTab(bundle.getString("CustomNamesEditorDialog.doublesTrainerClassesSP.TabConstraints.tabTitle"), doublesTrainerClassesSP);
+
+ nicknamesSP.setHorizontalScrollBar(null);
+
+ nicknamesText.setColumns(20);
+ nicknamesText.setRows(5);
+ nicknamesSP.setViewportView(nicknamesText);
+
+ editorTabsPane.addTab(bundle.getString("CustomNamesEditorDialog.nicknamesSP.TabConstraints.tabTitle"), nicknamesSP);
+
+ saveBtn.setText(bundle.getString("CustomNamesEditorDialog.saveBtn.text"));
+ saveBtn.addActionListener(evt -> saveBtnActionPerformed());
+
+ closeBtn.setText(bundle.getString("CustomNamesEditorDialog.closeBtn.text"));
+ closeBtn.addActionListener(evt -> closeBtnActionPerformed());
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(editorTabsPane, javax.swing.GroupLayout.DEFAULT_SIZE, 616, Short.MAX_VALUE)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(saveBtn)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(closeBtn)))
+ .addContainerGap())
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(editorTabsPane, javax.swing.GroupLayout.DEFAULT_SIZE, 357, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(saveBtn)
+ .addComponent(closeBtn))
+ .addContainerGap())
+ );
+
+ pack();
+ }// </editor-fold>//GEN-END:initComponents
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JButton closeBtn;
+ private javax.swing.JScrollPane doublesTrainerClassesSP;
+ private JTextArea doublesTrainerClassesText;
+ private javax.swing.JScrollPane doublesTrainerNamesSP;
+ private JTextArea doublesTrainerNamesText;
+ private javax.swing.JTabbedPane editorTabsPane;
+ private javax.swing.JScrollPane nicknamesSP;
+ private JTextArea nicknamesText;
+ private javax.swing.JButton saveBtn;
+ private javax.swing.JScrollPane trainerClassesSP;
+ private JTextArea trainerClassesText;
+ private javax.swing.JScrollPane trainerNamesSP;
+ private JTextArea trainerNamesText;
+ // End of variables declaration//GEN-END:variables
+ /* @formatter:on */
+}
diff --git a/src/com/pkrandom/newgui/GameUpdateFilter.java b/src/com/pkrandom/newgui/GameUpdateFilter.java
new file mode 100644
index 0000000..50866bb
--- /dev/null
+++ b/src/com/pkrandom/newgui/GameUpdateFilter.java
@@ -0,0 +1,49 @@
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- GameUpdateFilter.java - a file filter for 3DS game updates. --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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 javax.swing.filechooser.FileFilter;
+import java.io.File;
+
+public class GameUpdateFilter extends FileFilter {
+
+ @Override
+ public boolean accept(File arg0) {
+ if (arg0.isDirectory()) {
+ return true; // needed to allow directory navigation
+ }
+ String filename = arg0.getName();
+ if (!filename.contains(".")) {
+ return false;
+ }
+ String extension = arg0.getName().substring(arg0.getName().lastIndexOf('.') + 1).toLowerCase();
+ return extension.equals("cia");
+ }
+
+ @Override
+ public String getDescription() {
+ return "Nintendo 3DS game update (*.cia)";
+ }
+
+}
diff --git a/src/com/pkrandom/newgui/NewGenerationLimitDialog.form b/src/com/pkrandom/newgui/NewGenerationLimitDialog.form
new file mode 100644
index 0000000..1f87054
--- /dev/null
+++ b/src/com/pkrandom/newgui/NewGenerationLimitDialog.form
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.pkrandom.newgui.NewGenerationLimitDialog">
+ <grid id="27dc6" binding="mainPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <xy x="20" y="20" width="585" height="400"/>
+ </constraints>
+ <properties/>
+ <border type="none"/>
+ <children>
+ <grid id="16c9a" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="9" column="3" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none"/>
+ <children>
+ <hspacer id="b4439">
+ <constraints>
+ <grid row="0" column="1" 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>
+ <component id="ee093" class="javax.swing.JButton" binding="cancelButton" default-binding="true">
+ <constraints>
+ <grid row="0" column="2" 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.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <text value="Cancel"/>
+ </properties>
+ </component>
+ <component id="e979" class="javax.swing.JButton" binding="okButton">
+ <constraints>
+ <grid row="0" column="0" 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.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <text value="OK"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <component id="e29d0" class="javax.swing.JCheckBox" binding="gen1CheckBox">
+ <constraints>
+ <grid row="1" 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 value="Generation 1"/>
+ </properties>
+ </component>
+ <component id="df8a2" class="javax.swing.JCheckBox" binding="gen2CheckBox">
+ <constraints>
+ <grid row="2" 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 value="Generation 2"/>
+ </properties>
+ </component>
+ <component id="c9bd1" class="javax.swing.JCheckBox" binding="gen3CheckBox">
+ <constraints>
+ <grid row="3" 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 value="Generation 3"/>
+ </properties>
+ </component>
+ <component id="6c0c0" class="javax.swing.JCheckBox" binding="gen4CheckBox">
+ <constraints>
+ <grid row="4" 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 value="Generation 4"/>
+ </properties>
+ </component>
+ <component id="9fbe0" class="javax.swing.JCheckBox" binding="gen5CheckBox">
+ <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 value="Generation 5"/>
+ </properties>
+ </component>
+ <component id="88864" class="javax.swing.JCheckBox" binding="gen6CheckBox">
+ <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 value="Generation 6"/>
+ </properties>
+ </component>
+ <component id="8ca76" class="javax.swing.JCheckBox" binding="gen7CheckBox">
+ <constraints>
+ <grid row="7" 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 value="Generation 7"/>
+ </properties>
+ </component>
+ <component id="53cac" class="javax.swing.JLabel" binding="xyWarningLabel">
+ <constraints>
+ <grid row="11" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <font style="1"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GenerationLimitDialog.warningXYLabel.text"/>
+ </properties>
+ </component>
+ <hspacer id="1601f">
+ <constraints>
+ <grid row="0" column="4" 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>
+ <hspacer id="5ea88">
+ <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>
+ <vspacer id="efbd">
+ <constraints>
+ <grid row="10" column="3" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="4ed0d" class="javax.swing.JLabel">
+ <constraints>
+ <grid row="0" 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="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <font style="1"/>
+ <text value="Include Pokemon from:"/>
+ </properties>
+ </component>
+ <component id="92c12" class="javax.swing.JCheckBox" binding="allowEvolutionaryRelativesCheckBox">
+ <constraints>
+ <grid row="8" 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 value="Allow Evolutionary Relatives"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+</form>
diff --git a/src/com/pkrandom/newgui/NewGenerationLimitDialog.java b/src/com/pkrandom/newgui/NewGenerationLimitDialog.java
new file mode 100644
index 0000000..9281749
--- /dev/null
+++ b/src/com/pkrandom/newgui/NewGenerationLimitDialog.java
@@ -0,0 +1,168 @@
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- NewGenerationLimitDialog.java - a GUI interface to allow users to --*/
+/*-- limit which Pokemon appear based on --*/
+/*-- their generation of origin. --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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.pkrandom.pokemon.GenRestrictions;
+
+import javax.swing.*;
+
+public class NewGenerationLimitDialog extends javax.swing.JDialog {
+ private JCheckBox gen1CheckBox;
+ private JCheckBox gen2CheckBox;
+ private JCheckBox gen3CheckBox;
+ private JCheckBox gen4CheckBox;
+ private JCheckBox gen5CheckBox;
+ private JCheckBox gen6CheckBox;
+ private JCheckBox gen7CheckBox;
+ private JButton okButton;
+ private JButton cancelButton;
+ private JPanel mainPanel;
+ private JLabel xyWarningLabel;
+ private JCheckBox allowEvolutionaryRelativesCheckBox;
+
+ private boolean pressedOk;
+ private boolean isXY;
+
+ public NewGenerationLimitDialog(JFrame parent, GenRestrictions current, int generation, boolean isXY) {
+ super(parent, true);
+ add(mainPanel);
+ this.isXY = isXY;
+ initComponents();
+ initialState(generation);
+ if (current != null) {
+ current.limitToGen(generation);
+ restoreFrom(current);
+ }
+ enableAndDisableBoxes();
+ pressedOk = false;
+ setLocationRelativeTo(parent);
+ setVisible(true);
+ }
+
+ public boolean pressedOK() {
+ return pressedOk;
+ }
+
+ public GenRestrictions getChoice() {
+ GenRestrictions gr = new GenRestrictions();
+ gr.allow_gen1 = gen1CheckBox.isSelected();
+ gr.allow_gen2 = gen2CheckBox.isSelected();
+ gr.allow_gen3 = gen3CheckBox.isSelected();
+ gr.allow_gen4 = gen4CheckBox.isSelected();
+ gr.allow_gen5 = gen5CheckBox.isSelected();
+ gr.allow_gen6 = gen6CheckBox.isSelected();
+ gr.allow_gen7 = gen7CheckBox.isSelected();
+ gr.allow_evolutionary_relatives = allowEvolutionaryRelativesCheckBox.isSelected();
+ return gr;
+ }
+
+ private void initialState(int generation) {
+ if (generation < 2) {
+ gen2CheckBox.setVisible(false);
+ }
+ if (generation < 3) {
+ gen3CheckBox.setVisible(false);
+ }
+ if (generation < 4) {
+ gen4CheckBox.setVisible(false);
+ }
+ if (generation < 5) {
+ gen5CheckBox.setVisible(false);
+ }
+ if (generation < 6) {
+ gen6CheckBox.setVisible(false);
+ }
+ if (generation < 7) {
+ gen7CheckBox.setVisible(false);
+ }
+
+ allowEvolutionaryRelativesCheckBox.setEnabled(false);
+ allowEvolutionaryRelativesCheckBox.setSelected(false);
+ }
+
+ private void restoreFrom(GenRestrictions restrict) {
+ gen1CheckBox.setSelected(restrict.allow_gen1);
+ gen2CheckBox.setSelected(restrict.allow_gen2);
+ gen3CheckBox.setSelected(restrict.allow_gen3);
+ gen4CheckBox.setSelected(restrict.allow_gen4);
+ gen5CheckBox.setSelected(restrict.allow_gen5);
+ gen6CheckBox.setSelected(restrict.allow_gen6);
+ gen7CheckBox.setSelected(restrict.allow_gen7);
+ allowEvolutionaryRelativesCheckBox.setSelected(restrict.allow_evolutionary_relatives);
+ }
+
+ private void initComponents() {
+ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+ java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("com/pkrandom/newgui/Bundle");
+ setTitle(bundle.getString("GenerationLimitDialog.title"));
+ gen1CheckBox.addActionListener(ev -> enableAndDisableBoxes());
+ gen2CheckBox.addActionListener(ev -> enableAndDisableBoxes());
+ gen3CheckBox.addActionListener(ev -> enableAndDisableBoxes());
+ gen4CheckBox.addActionListener(ev -> enableAndDisableBoxes());
+ gen5CheckBox.addActionListener(ev -> enableAndDisableBoxes());
+ gen6CheckBox.addActionListener(ev -> enableAndDisableBoxes());
+ gen7CheckBox.addActionListener(ev -> enableAndDisableBoxes());
+ allowEvolutionaryRelativesCheckBox.addActionListener(ev -> enableAndDisableBoxes());
+ okButton.addActionListener(evt -> okButtonActionPerformed());
+ cancelButton.addActionListener(evt -> cancelButtonActionPerformed());
+ xyWarningLabel.setVisible(isXY);
+ if (isXY) {
+ okButton.setEnabled(false);
+ }
+ pack();
+ }
+
+ private void enableAndDisableBoxes() {
+ // To prevent softlocks on the Successor Korrina fight, only turn
+ // on the OK button for XY if at least one of Gens 1-4 is selected.
+ if (isXY) {
+ if (gen1CheckBox.isSelected() || gen2CheckBox.isSelected() || gen3CheckBox.isSelected() || gen4CheckBox.isSelected()) {
+ okButton.setEnabled(true);
+ } else {
+ okButton.setEnabled(false);
+ }
+ }
+
+ if (gen1CheckBox.isSelected() || gen2CheckBox.isSelected() || gen3CheckBox.isSelected() ||
+ gen4CheckBox.isSelected() || gen5CheckBox.isSelected() || gen6CheckBox.isSelected() ||
+ gen7CheckBox.isSelected()) {
+ allowEvolutionaryRelativesCheckBox.setEnabled(true);
+ } else {
+ allowEvolutionaryRelativesCheckBox.setEnabled(false);
+ allowEvolutionaryRelativesCheckBox.setSelected(false);
+ }
+ }
+
+ private void okButtonActionPerformed() {
+ pressedOk = true;
+ setVisible(false);
+ }
+
+ private void cancelButtonActionPerformed() {
+ pressedOk = false;
+ setVisible(false);
+ }
+}
diff --git a/src/com/pkrandom/newgui/NewRandomizerGUI.form b/src/com/pkrandom/newgui/NewRandomizerGUI.form
new file mode 100644
index 0000000..c7c7a4e
--- /dev/null
+++ b/src/com/pkrandom/newgui/NewRandomizerGUI.form
@@ -0,0 +1,3901 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.pkrandom.newgui.NewRandomizerGUI">
+ <grid id="27dc6" binding="mainPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <xy x="7" y="20" width="1350" height="1103"/>
+ </constraints>
+ <properties/>
+ <border type="none">
+ <font/>
+ </border>
+ <children>
+ <grid id="73235" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="2" row-span="3" col-span="1" vsize-policy="3" hsize-policy="3" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="true"/>
+ </properties>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.generalOptionsPanel.title">
+ <font style="1"/>
+ <title-color color="-16777216"/>
+ <color color="-4473925"/>
+ </border>
+ <children>
+ <component id="f2100" class="javax.swing.JCheckBox" binding="raceModeCheckBox" default-binding="true">
+ <constraints>
+ <grid row="2" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="0" right="30" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.raceModeCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.raceModeCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="d9ef2" class="javax.swing.JCheckBox" binding="limitPokemonCheckBox">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="5" left="0" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text value=""/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.limitPokemonCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="cab02" class="javax.swing.JButton" binding="limitPokemonButton" default-binding="true">
+ <constraints>
+ <grid row="0" 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 top="5" left="0" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.limitPokemonCheckBox.text"/>
+ </properties>
+ </component>
+ <component id="41e69" class="javax.swing.JCheckBox" binding="noIrregularAltFormesCheckBox" default-binding="true">
+ <constraints>
+ <grid row="1" column="0" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.noIrregularAltFormesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.noIrregularAltFormesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <vspacer id="7ea6">
+ <constraints>
+ <grid row="6" column="2" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="8" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <grid id="b24ed" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="4" row-span="3" col-span="2" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.romInformationPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <hspacer id="de227">
+ <constraints>
+ <grid row="0" column="1" 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>
+ <component id="de3d7" class="javax.swing.JLabel" binding="romNameLabel">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="5" left="5" bottom="5" right="0" weightx="0.1" weighty="0.1"/>
+ </constraints>
+ <properties>
+ <horizontalAlignment value="0"/>
+ <labelFor value=""/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.noRomLoaded"/>
+ </properties>
+ </component>
+ <component id="41f42" class="javax.swing.JLabel" binding="romCodeLabel">
+ <constraints>
+ <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="5" left="5" bottom="5" right="0" weightx="0.0" weighty="0.1"/>
+ </constraints>
+ <properties>
+ <labelFor value=""/>
+ <text value=""/>
+ </properties>
+ </component>
+ <component id="4bcae" class="javax.swing.JLabel" binding="romSupportLabel">
+ <constraints>
+ <grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="5" left="5" bottom="5" right="0" weightx="0.0" weighty="0.1"/>
+ </constraints>
+ <properties>
+ <text value=""/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <tabbedpane id="d57f7" binding="tabbedPane1" default-binding="true">
+ <constraints>
+ <grid row="7" column="1" row-span="1" col-span="11" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
+ <preferred-size width="200" height="200"/>
+ </grid>
+ <gridbag weightx="0.5" weighty="0.1"/>
+ </constraints>
+ <properties>
+ <tabLayoutPolicy value="1"/>
+ <tabPlacement value="1"/>
+ </properties>
+ <border type="none"/>
+ <children>
+ <grid id="54bda" layout-manager="GridBagLayout">
+ <constraints>
+ <tabbedpane title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.pokemonTraitsPanel.title"/>
+ </constraints>
+ <properties/>
+ <border type="none"/>
+ <children>
+ <grid id="fc2b0" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag top="5" left="0" bottom="0" right="0" weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.pbsPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="576dd" class="javax.swing.JRadioButton" binding="pbsUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="f556c">
+ <constraints>
+ <grid row="1" column="6" 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>
+ <component id="e8460" class="javax.swing.JRadioButton" binding="pbsShuffleRadioButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsShuffleRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsShuffleRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="8625b" class="javax.swing.JRadioButton" binding="pbsLegendariesSlowRadioButton">
+ <constraints>
+ <grid row="1" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsLegendariesSlowRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsLegendariesSlowRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="9be58" class="javax.swing.JRadioButton" binding="pbsStrongLegendariesSlowRadioButton">
+ <constraints>
+ <grid row="2" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsStrongLegendariesSlowRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsStrongLegendariesSlowRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="db430" class="javax.swing.JCheckBox" binding="pbsStandardizeEXPCurvesCheckBox">
+ <constraints>
+ <grid row="1" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsStandardizeEXPCurvesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsStandardizeEXPCurvesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="986c1" class="javax.swing.JCheckBox" binding="pbsFollowEvolutionsCheckBox" default-binding="true">
+ <constraints>
+ <grid row="1" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsFollowEvolutionsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsFollowEvolutionsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="fb58a">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="14884">
+ <constraints>
+ <grid row="5" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <vspacer id="19dac">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="5b04a" class="javax.swing.JCheckBox" binding="pbsUpdateBaseStatsCheckBox">
+ <constraints>
+ <grid row="4" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsUpdateBaseStatsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsUpdateBaseStatsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="6768d" class="javax.swing.JCheckBox" binding="pbsFollowMegaEvosCheckBox">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsFollowMegaEvosCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsFollowMegaEvosCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="4d643" class="javax.swing.JComboBox" binding="pbsUpdateComboBox">
+ <constraints>
+ <grid row="4" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="5" bottom="0" right="0" weightx="0.6" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <model>
+ <item value="--"/>
+ </model>
+ </properties>
+ </component>
+ <component id="7eb1a" class="javax.swing.JComboBox" binding="pbsEXPCurveComboBox">
+ <constraints>
+ <grid row="2" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="20" bottom="0" right="5" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <model>
+ <item value="Medium Fast"/>
+ </model>
+ </properties>
+ </component>
+ <component id="97567" class="javax.swing.JCheckBox" binding="pbsAssignEvoStatsRandomlyCheckBox">
+ <constraints>
+ <grid row="3" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsAssignEvoStatsRandomlyCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsAssignEvoStatsRandomlyCheckBox.tooltipText"/>
+ </properties>
+ </component>
+ <component id="4535b" class="javax.swing.JRadioButton" binding="pbsRandomRadioButton" default-binding="true">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="213c9" class="javax.swing.JRadioButton" binding="pbsAllMediumFastRadioButton">
+ <constraints>
+ <grid row="3" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsAllMediumFastRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pbsAllMediumFastRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <hspacer id="17e6a">
+ <constraints>
+ <grid row="1" column="3" 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>
+ <vspacer id="ae365">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="f48be">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <grid id="54ad9" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.ptPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="fb38a" class="javax.swing.JRadioButton" binding="ptUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <hideActionText value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="ab767">
+ <constraints>
+ <grid row="1" column="3" 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>
+ <vspacer id="8f6b1">
+ <constraints>
+ <grid row="5" column="2" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="bdcac">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="ff766">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="f7a27" class="javax.swing.JRadioButton" binding="ptRandomFollowEvolutionsRadioButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptRandomFollowEvolutionsRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptRandomFollowEvolutionsRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="45dd7" class="javax.swing.JRadioButton" binding="ptRandomCompletelyRadioButton" default-binding="true">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptRandomCompletelyRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptRandomCompletelyRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="360ba" class="javax.swing.JCheckBox" binding="ptFollowMegaEvosCheckBox">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptFollowMegaEvosCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptFollowMegaEvosCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="237b6" class="javax.swing.JCheckBox" binding="ptIsDualTypeCheckBox">
+ <constraints>
+ <grid row="5" column="1" 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>
+ <enabled value="false"/>
+ <selected value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptForceDualTypeCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.ptForceDualTypeCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <grid id="f8946" binding="pokemonAbilitiesPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="2" column="2" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.9" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.paPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="fa40d" class="javax.swing.JRadioButton" binding="paUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="559d2">
+ <constraints>
+ <grid row="1" column="6" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="2747c">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="4" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="d7eda">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="bc08c">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="5bd6c" class="javax.swing.JRadioButton" binding="paRandomRadioButton">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="97cb8" class="javax.swing.JCheckBox" binding="paAllowWonderGuardCheckBox">
+ <constraints>
+ <grid row="1" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="5" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paAllowWonderGuardCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paAllowWonderGuardCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="18744" class="javax.swing.JCheckBox" binding="paFollowEvolutionsCheckBox" default-binding="true">
+ <constraints>
+ <grid row="2" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="5" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paFollowEvolutionsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paFollowEvolutionsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="5694" class="javax.swing.JLabel">
+ <constraints>
+ <grid row="3" 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 top="5" left="0" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paBanLabel.text"/>
+ </properties>
+ </component>
+ <component id="5afb0" class="javax.swing.JCheckBox" binding="paTrappingAbilitiesCheckBox">
+ <constraints>
+ <grid row="3" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="5" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paTrappingAbilitiesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paTrappingAbilitiesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="76ea8" class="javax.swing.JCheckBox" binding="paNegativeAbilitiesCheckBox">
+ <constraints>
+ <grid row="3" 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>
+ <enabled value="false"/>
+ <selected value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paNegativeAbilitiesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paNegativeAbilitiesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="4ac30" class="javax.swing.JCheckBox" binding="paBadAbilitiesCheckBox">
+ <constraints>
+ <grid row="3" column="4" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paBadAbilitiesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paBadAbilitiesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="652d7" class="javax.swing.JCheckBox" binding="paWeighDuplicatesTogetherCheckBox">
+ <constraints>
+ <grid row="1" column="3" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paWeighDuplicatesTogetherCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paWeighDuplicatesTogetherCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="bae4a" class="javax.swing.JCheckBox" binding="paEnsureTwoAbilitiesCheckbox">
+ <constraints>
+ <grid row="1" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paEnsureTwoAbilitiesCheckbox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paEnsureTwoAbilitiesCheckbox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b3439" class="javax.swing.JCheckBox" binding="paFollowMegaEvosCheckBox">
+ <constraints>
+ <grid row="2" column="3" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paFollowMegaEvosCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.paFollowMegaEvosCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <grid id="b4a80" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="2" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.pePanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="9dc25" class="javax.swing.JRadioButton" binding="peUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="25cc7">
+ <constraints>
+ <grid row="1" column="4" 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>
+ <vspacer id="5ed0e">
+ <constraints>
+ <grid row="6" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="cbc8a">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="15fb8">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="577d" class="javax.swing.JRadioButton" binding="peRandomRadioButton">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b5878" class="javax.swing.JCheckBox" binding="peSimilarStrengthCheckBox">
+ <constraints>
+ <grid row="1" column="2" 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.9" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peSimilarStrengthCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peSimilarStrengthCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="4eb8e" class="javax.swing.JCheckBox" binding="peSameTypingCheckBox">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peSameTypingCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peSameTypingCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="6e101" class="javax.swing.JCheckBox" binding="peLimitEvolutionsToThreeCheckBox">
+ <constraints>
+ <grid row="3" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peLimitEvolutionsToThreeCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peLimitEvolutionsToThreeCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="52db5" class="javax.swing.JCheckBox" binding="peForceChangeCheckBox">
+ <constraints>
+ <grid row="4" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peForceChangeCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peForceChangeCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="9fe2f" class="javax.swing.JCheckBox" binding="peChangeImpossibleEvosCheckBox">
+ <constraints>
+ <grid row="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peChangeImpossibleEvosCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peChangeImpossibleEvosCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="4ad81" class="javax.swing.JCheckBox" binding="peMakeEvolutionsEasierCheckBox">
+ <constraints>
+ <grid row="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peMakeEvolutionsEasierCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peMakeEvolutionsEasierCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="81bd3" class="javax.swing.JCheckBox" binding="peAllowAltFormesCheckBox">
+ <constraints>
+ <grid row="5" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peAllowAltFormesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peAllowAltFormesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b091c" class="javax.swing.JCheckBox" binding="peRemoveTimeBasedEvolutionsCheckBox">
+ <constraints>
+ <grid row="3" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peRemoveTimeBasedEvolutions.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peRemoveTimeBasedEvolutions.toolTipText"/>
+ </properties>
+ </component>
+ <component id="7fc31" class="javax.swing.JRadioButton" binding="peRandomEveryLevelRadioButton">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peRandomEveryLevelRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.peRandomEveryLevelRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <vspacer id="44843">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ </children>
+ </grid>
+ <grid id="313b7" layout-manager="GridBagLayout">
+ <constraints>
+ <tabbedpane title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.startersStaticsTradesPanel"/>
+ </constraints>
+ <properties/>
+ <border type="none"/>
+ <children>
+ <grid id="bb7c7" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.1"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.spPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="124c" class="javax.swing.JRadioButton" binding="spUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="8b022">
+ <constraints>
+ <grid row="1" column="6" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="499d4">
+ <constraints>
+ <grid row="5" column="1" row-span="1" col-span="2" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="1b3c2">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="8a064">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="94a4e" class="javax.swing.JRadioButton" binding="spCustomRadioButton">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spCustomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spCustomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="c1c80" class="javax.swing.JRadioButton" binding="spRandomCompletelyRadioButton" default-binding="true">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spRandomCompletelyRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spRandomCompletelyRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="12184" class="javax.swing.JRadioButton" binding="spRandomTwoEvosRadioButton">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spRandomTwoEvosRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spRandomTwoEvosRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="83a64" class="javax.swing.JComboBox" binding="spComboBox1">
+ <constraints>
+ <grid row="2" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <model>
+ <item value="--"/>
+ </model>
+ </properties>
+ </component>
+ <component id="36c27" class="javax.swing.JComboBox" binding="spComboBox2">
+ <constraints>
+ <grid row="2" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="5" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <model>
+ <item value="--"/>
+ </model>
+ </properties>
+ </component>
+ <component id="3169c" class="javax.swing.JComboBox" binding="spComboBox3">
+ <constraints>
+ <grid row="2" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="5" bottom="0" right="5" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <model>
+ <item value="--"/>
+ </model>
+ </properties>
+ </component>
+ <component id="9ddd3" class="javax.swing.JCheckBox" binding="spRandomizeStarterHeldItemsCheckBox">
+ <constraints>
+ <grid row="2" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spRandomizeStarterHeldItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spRandomizeStarterHeldItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="a1ea2" class="javax.swing.JCheckBox" binding="spBanBadItemsCheckBox" default-binding="true">
+ <constraints>
+ <grid row="3" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spBanBadItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spBanBadItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="cad77" class="javax.swing.JCheckBox" binding="spAllowAltFormesCheckBox">
+ <constraints>
+ <grid row="4" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spAllowAltFormesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.spAllowAltFormesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <hspacer id="48447">
+ <constraints>
+ <grid row="1" 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>
+ <vspacer id="2cb29">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="78e2">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="797e9">
+ <constraints>
+ <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <grid id="cb778" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.stpPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="a28a1" class="javax.swing.JRadioButton" binding="stpUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="c4003">
+ <constraints>
+ <grid row="1" column="5" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="6.0" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="ec4fb">
+ <constraints>
+ <grid row="6" column="1" row-span="1" col-span="4" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="a5bb0">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="9076e">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="66089" class="javax.swing.JRadioButton" binding="stpSwapLegendariesSwapStandardsRadioButton">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpSwapLegendariesSwapStandardsRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpSwapLegendariesSwapStandardsRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="17456" class="javax.swing.JRadioButton" binding="stpRandomCompletelyRadioButton" default-binding="true">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpRandomCompletelyRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpRandomCompletelyRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="282a5" class="javax.swing.JRadioButton" binding="stpRandomSimilarStrengthRadioButton">
+ <constraints>
+ <grid row="4" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpRandomSimilarStrengthRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpRandomSimilarStrengthRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="c441c" class="javax.swing.JCheckBox" binding="stpSwapMegaEvosCheckBox">
+ <constraints>
+ <grid row="4" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpSwapMegaEvosCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpSwapMegaEvosCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="84b86" class="javax.swing.JCheckBox" binding="stpPercentageLevelModifierCheckBox">
+ <constraints>
+ <grid row="1" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="6.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpPercentageLevelModifierCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpPercentageLevelModifierCheckBox.tooltipText"/>
+ </properties>
+ </component>
+ <component id="f3518" class="javax.swing.JSlider" binding="stpPercentageLevelModifierSlider">
+ <constraints>
+ <grid row="2" column="4" row-span="3" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <majorTickSpacing value="10"/>
+ <maximum value="50"/>
+ <minimum value="-50"/>
+ <minorTickSpacing value="2"/>
+ <paintLabels value="true"/>
+ <paintTicks value="true"/>
+ <snapToTicks value="true"/>
+ <value value="0"/>
+ </properties>
+ </component>
+ <component id="ae826" class="javax.swing.JCheckBox" binding="stpRandomize600BSTCheckBox">
+ <constraints>
+ <grid row="1" column="2" 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.8" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpRandomize600BSTCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpRandomize600BSTCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="69057" class="javax.swing.JCheckBox" binding="stpAllowAltFormesCheckBox">
+ <constraints>
+ <grid row="3" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpAllowAltFormesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpAllowAltFormesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="cde9e" class="javax.swing.JCheckBox" binding="stpLimitMainGameLegendariesCheckBox">
+ <constraints>
+ <grid row="2" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="1.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpLimitMainGameLegendariesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpLimitMainGameLegendariesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="4f53f" class="javax.swing.JCheckBox" binding="stpFixMusicCheckBox">
+ <constraints>
+ <grid row="5" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpFixMusicAllCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.stpFixMusicAllCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <grid id="f2cab" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.igtPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="4e02b" class="javax.swing.JRadioButton" binding="igtUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="40623">
+ <constraints>
+ <grid row="1" column="3" 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>
+ <vspacer id="d7f82">
+ <constraints>
+ <grid row="5" column="1" row-span="1" col-span="2" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="a626c" class="javax.swing.JRadioButton" binding="igtRandomizeGivenPokemonOnlyRadioButton">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeGivenPokemonOnlyRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeGivenPokemonOnlyRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="f6c7b" class="javax.swing.JRadioButton" binding="igtRandomizeBothRequestedGivenRadioButton">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeBothRequestedGivenRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeBothRequestedGivenRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="963c8">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="9b889">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="5eee5" class="javax.swing.JCheckBox" binding="igtRandomizeNicknamesCheckBox">
+ <constraints>
+ <grid row="1" column="2" 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.8" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeNicknamesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeNicknamesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="719e9" class="javax.swing.JCheckBox" binding="igtRandomizeOTsCheckBox">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeOTsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeOTsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="e1478" class="javax.swing.JCheckBox" binding="igtRandomizeIVsCheckBox">
+ <constraints>
+ <grid row="3" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeIVsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeIVsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="2d4fb" class="javax.swing.JCheckBox" binding="igtRandomizeItemsCheckBox">
+ <constraints>
+ <grid row="4" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.igtRandomizeItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ </children>
+ </grid>
+ <grid id="f599e" layout-manager="GridBagLayout">
+ <constraints>
+ <tabbedpane title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.movesMovesetsPanel"/>
+ </constraints>
+ <properties/>
+ <border type="none"/>
+ <children>
+ <grid id="d5afa" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.mdPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="9cf00" class="javax.swing.JCheckBox" binding="mdRandomizeMovePowerCheckBox">
+ <constraints>
+ <grid row="1" column="1" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMovePowerCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMovePowerCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="bd712">
+ <constraints>
+ <grid row="1" column="4" 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>
+ <vspacer id="ecc10">
+ <constraints>
+ <grid row="5" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="8e64">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="b12e4">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="658bb" class="javax.swing.JCheckBox" binding="mdRandomizeMoveAccuracyCheckBox">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMoveAccuracyCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMoveAccuracyCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="5af2e" class="javax.swing.JCheckBox" binding="mdRandomizeMovePPCheckBox">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMovePPCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMovePPCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="e9417" class="javax.swing.JCheckBox" binding="mdRandomizeMoveTypesCheckBox">
+ <constraints>
+ <grid row="4" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMoveTypesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMoveTypesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="7dbd0" class="javax.swing.JCheckBox" binding="mdRandomizeMoveCategoryCheckBox">
+ <constraints>
+ <grid row="1" column="2" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.6" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMoveCategoryCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdRandomizeMoveCategoryCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="5eccc" class="javax.swing.JCheckBox" binding="mdUpdateMovesCheckBox">
+ <constraints>
+ <grid row="4" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdUpdateMovesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mdUpdateMovesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="19338" class="javax.swing.JComboBox" binding="mdUpdateComboBox">
+ <constraints>
+ <grid row="4" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="2" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="5" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <model>
+ <item value="--"/>
+ </model>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <hspacer id="636b3">
+ <constraints>
+ <grid row="1" 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>
+ <vspacer id="33947">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="bfe59">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="51e99">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <grid id="6490f" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.pmsPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="b296a" class="javax.swing.JRadioButton" binding="pmsUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="5551e">
+ <constraints>
+ <grid row="1" column="4" 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>
+ <vspacer id="98120">
+ <constraints>
+ <grid row="7" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="59331">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="867be">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="556eb" class="javax.swing.JRadioButton" binding="pmsRandomPreferringSameTypeRadioButton">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsRandomPreferringSameTypeRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsRandomPreferringSameTypeRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="c1370" class="javax.swing.JRadioButton" binding="pmsRandomCompletelyRadioButton">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsRandomCompletelyRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsRandomCompletelyRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="bc810" class="javax.swing.JRadioButton" binding="pmsMetronomeOnlyModeRadioButton">
+ <constraints>
+ <grid row="4" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsMetronomeOnlyModeRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsMetronomeOnlyModeRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="d836e" class="javax.swing.JCheckBox" binding="pmsGuaranteedLevel1MovesCheckBox">
+ <constraints>
+ <grid row="1" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsGuaranteedLevel1MovesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsGuaranteedLevel1MovesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="c408b" class="javax.swing.JCheckBox" binding="pmsReorderDamagingMovesCheckBox">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsReorderDamagingMovesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsReorderDamagingMovesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="ee040" class="javax.swing.JCheckBox" binding="pmsNoGameBreakingMovesCheckBox">
+ <constraints>
+ <grid row="3" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsNoGameBreakingMovesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsNoGameBreakingMovesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="aba8f" class="javax.swing.JCheckBox" binding="pmsForceGoodDamagingCheckBox" default-binding="true">
+ <constraints>
+ <grid row="4" column="2" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsForceGoodDamagingCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsForceGoodDamagingCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="451d5" class="javax.swing.JSlider" binding="pmsGuaranteedLevel1MovesSlider">
+ <constraints>
+ <grid row="1" column="3" row-span="2" col-span="1" vsize-policy="0" hsize-policy="6" anchor="9" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="10" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <majorTickSpacing value="1"/>
+ <maximum value="4"/>
+ <minimum value="2"/>
+ <paintLabels value="true"/>
+ <paintTicks value="false"/>
+ <snapToTicks value="true"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsGuaranteedLevel1MovesSlider.toolTipText"/>
+ <value value="2"/>
+ <valueIsAdjusting value="false"/>
+ </properties>
+ </component>
+ <component id="c6162" class="javax.swing.JSlider" binding="pmsForceGoodDamagingSlider" default-binding="true">
+ <constraints>
+ <grid row="5" column="2" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <majorTickSpacing value="20"/>
+ <minorTickSpacing value="5"/>
+ <paintLabels value="true"/>
+ <paintTicks value="true"/>
+ <snapToTicks value="true"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsForceGoodDamagingSlider.toolTipText"/>
+ <value value="0"/>
+ </properties>
+ </component>
+ <component id="7a835" class="javax.swing.JCheckBox" binding="pmsEvolutionMovesCheckBox">
+ <constraints>
+ <grid row="6" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsEvolutionMovesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.pmsEvolutionMovesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ </children>
+ </grid>
+ <grid id="c4c9e" layout-manager="GridBagLayout">
+ <constraints>
+ <tabbedpane title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.foePokemonPanel.title"/>
+ </constraints>
+ <properties/>
+ <border type="none"/>
+ <children>
+ <grid id="6ba9a" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.tpPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <hspacer id="b875b">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="c7847">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="c6902" class="javax.swing.JCheckBox" binding="tpRivalCarriesStarterCheckBox">
+ <constraints>
+ <grid row="1" column="5" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRivalCarriesStarterCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRivalCarriesStarterCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="22cfb" class="javax.swing.JCheckBox" binding="tpSimilarStrengthCheckBox">
+ <constraints>
+ <grid row="2" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpSimilarStrengthCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpSimilarStrengthCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="e225c" class="javax.swing.JCheckBox" binding="tpRandomizeTrainerNamesCheckBox">
+ <constraints>
+ <grid row="1" column="6" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRandomizeTrainerNamesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRandomizeTrainerNamesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="16a2b" class="javax.swing.JCheckBox" binding="tpRandomizeTrainerClassNamesCheckBox">
+ <constraints>
+ <grid row="2" column="6" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRandomizeTrainerClassNamesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRandomizeTrainerClassNamesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="d6ea3" class="javax.swing.JCheckBox" binding="tpForceFullyEvolvedAtCheckBox">
+ <constraints>
+ <grid row="4" column="6" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpForceFullyEvolvedAtCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpForceFullyEvolvedAtCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="63823" class="javax.swing.JSlider" binding="tpForceFullyEvolvedAtSlider">
+ <constraints>
+ <grid row="5" column="6" row-span="2" col-span="2" vsize-policy="0" hsize-policy="6" anchor="9" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <majorTickSpacing value="5"/>
+ <maximum value="65"/>
+ <minimum value="30"/>
+ <minorTickSpacing value="1"/>
+ <paintLabels value="true"/>
+ <paintTicks value="true"/>
+ <snapToTicks value="true"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpForceFullyEvolvedAtSlider.toolTipText"/>
+ <value value="30"/>
+ </properties>
+ </component>
+ <component id="670de" class="javax.swing.JSlider" binding="tpPercentageLevelModifierSlider" default-binding="true">
+ <constraints>
+ <grid row="8" column="6" row-span="2" col-span="2" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <majorTickSpacing value="10"/>
+ <maximum value="50"/>
+ <minimum value="-50"/>
+ <minorTickSpacing value="2"/>
+ <paintLabels value="true"/>
+ <paintTicks value="true"/>
+ <snapToTicks value="true"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpPercentageLevelModifierSlider.toolTipText"/>
+ <value value="0"/>
+ </properties>
+ </component>
+ <component id="8428b" class="javax.swing.JCheckBox" binding="tpPercentageLevelModifierCheckBox" default-binding="true">
+ <constraints>
+ <grid row="7" column="6" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpPercentageLevelModifierCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpPercentageLevelModifierCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="41124">
+ <constraints>
+ <grid row="0" column="8" 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>
+ <component id="5ff08" class="javax.swing.JCheckBox" binding="tpWeightTypesCheckBox">
+ <constraints>
+ <grid row="3" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpWeightTypesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpWeightTypesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="acf1a" class="javax.swing.JCheckBox" binding="tpDontUseLegendariesCheckBox" default-binding="true">
+ <constraints>
+ <grid row="4" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpDontUseLegendariesCheckBox.text"/>
+ </properties>
+ </component>
+ <component id="d0471" class="javax.swing.JCheckBox" binding="tpNoEarlyWonderGuardCheckBox">
+ <constraints>
+ <grid row="5" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpNoEarlyWonderGuardCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpNoEarlyWonderGuardCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="be65d" class="javax.swing.JCheckBox" binding="tpAllowAlternateFormesCheckBox">
+ <constraints>
+ <grid row="6" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpAllowAlternateFormesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpAllowAlternateFormesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="af4d1" class="javax.swing.JCheckBox" binding="tpSwapMegaEvosCheckBox">
+ <constraints>
+ <grid row="7" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpSwapMegaEvosCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpSwapMegaEvosCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="34a10" class="javax.swing.JCheckBox" binding="tpRandomShinyTrainerPokemonCheckBox">
+ <constraints>
+ <grid row="8" column="5" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRandomShinyTrainerPokemonCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRandomShinyTrainerPokemonCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <vspacer id="2342a">
+ <constraints>
+ <grid row="11" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="28e4c" class="javax.swing.JCheckBox" binding="tpEliteFourUniquePokemonCheckBox">
+ <constraints>
+ <grid row="10" column="6" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpEliteFourUniquePokemonCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpEliteFourUniquePokemonCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="727d5" class="javax.swing.JSpinner" binding="tpEliteFourUniquePokemonSpinner">
+ <constraints>
+ <grid row="10" column="7" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ </properties>
+ </component>
+ <component id="69236" class="javax.swing.JComboBox" binding="tpComboBox">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="3" vsize-policy="0" hsize-policy="2" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <model>
+ <item value="Unchanged"/>
+ </model>
+ </properties>
+ </component>
+ <component id="feec4" class="javax.swing.JCheckBox" binding="tpDoubleBattleModeCheckBox">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpDoubleBattleModeCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpDoubleBattleModeCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b62cd" class="javax.swing.JLabel" binding="tpAdditionalPokemonForLabel">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="4" vsize-policy="0" hsize-policy="0" anchor="10" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpAddMorePokemonForLabel.text"/>
+ </properties>
+ </component>
+ <component id="8f956" class="javax.swing.JCheckBox" binding="tpBossTrainersCheckBox">
+ <constraints>
+ <grid row="5" column="1" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpBossTrainersCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpBossTrainersCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="6d5aa" class="javax.swing.JCheckBox" binding="tpImportantTrainersCheckBox">
+ <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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpImportantTrainersCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpImportantTrainersCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="39903" class="javax.swing.JCheckBox" binding="tpRegularTrainersCheckBox">
+ <constraints>
+ <grid row="5" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRegularTrainersCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRegularTrainersCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="181e" class="javax.swing.JSpinner" binding="tpBossTrainersSpinner">
+ <constraints>
+ <grid row="6" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="6" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="4" bottom="0" right="0" weightx="0.0" weighty="0.0" ipadx="10"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ </properties>
+ </component>
+ <component id="e7a99" class="javax.swing.JSpinner" binding="tpImportantTrainersSpinner">
+ <constraints>
+ <grid row="6" 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 top="0" left="4" bottom="0" right="0" weightx="0.0" weighty="0.0" ipadx="10"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ </properties>
+ </component>
+ <component id="da8e4" class="javax.swing.JSpinner" binding="tpRegularTrainersSpinner">
+ <constraints>
+ <grid row="6" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="4" bottom="0" right="0" weightx="0.0" weighty="0.0" ipadx="10"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ </properties>
+ </component>
+ <component id="2918f" class="javax.swing.JLabel" binding="tpHeldItemsLabel">
+ <constraints>
+ <grid row="8" column="1" row-span="1" col-span="4" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpHeldItemsLabel.text"/>
+ </properties>
+ </component>
+ <component id="dad16" class="javax.swing.JCheckBox" binding="tpBossTrainersItemsCheckBox">
+ <constraints>
+ <grid row="9" column="1" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpBossTrainersItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpBossTrainersItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="d7d93" class="javax.swing.JCheckBox" binding="tpImportantTrainersItemsCheckBox">
+ <constraints>
+ <grid row="9" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpImportantTrainersItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpImportantTrainersItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="7fddd" class="javax.swing.JCheckBox" binding="tpRegularTrainersItemsCheckBox">
+ <constraints>
+ <grid row="9" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRegularTrainersItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpRegularTrainersItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="31e9a" class="javax.swing.JCheckBox" binding="tpConsumableItemsOnlyCheckBox">
+ <constraints>
+ <grid row="10" column="1" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpConsumableItemsOnlyCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpConsumableItemsOnlyCheckBox.tooltip"/>
+ </properties>
+ </component>
+ <component id="79d6a" class="javax.swing.JCheckBox" binding="tpSensibleItemsCheckBox">
+ <constraints>
+ <grid row="10" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpSensibleItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpSensibleItemsCheckBox.tooltip"/>
+ </properties>
+ </component>
+ <component id="f3c52" class="javax.swing.JCheckBox" binding="tpHighestLevelGetsItemCheckBox">
+ <constraints>
+ <grid row="10" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpHighestLevelGetsItemCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpHighestLevelGetsItemCheckBox.tooltip"/>
+ </properties>
+ </component>
+ <component id="21090" class="javax.swing.JCheckBox" binding="tpBetterMovesetsCheckBox">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpBetterMovesetsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tpBetterMovesetsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <hspacer id="66d2">
+ <constraints>
+ <grid row="1" 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>
+ <vspacer id="4bb69">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="377fb">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="979ca">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <grid id="ff2a3" binding="totpPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.totpPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="9e1ec" class="javax.swing.JRadioButton" binding="totpUnchangedRadioButton">
+ <constraints>
+ <grid row="1" column="1" 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.01" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="d7892">
+ <constraints>
+ <grid row="1" column="5" 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>
+ <vspacer id="77258">
+ <constraints>
+ <grid row="5" column="1" row-span="1" col-span="2" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="cd5a0">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="18fc9">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <grid id="760ca" binding="totpAllyPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="2" row-span="4" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.totpAllyPanel.title"/>
+ <children>
+ <component id="315a6" class="javax.swing.JRadioButton" binding="totpAllyUnchangedRadioButton">
+ <constraints>
+ <grid row="0" column="0" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAllyUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAllyUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="68af" class="javax.swing.JRadioButton" binding="totpAllyRandomRadioButton">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAllyRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAllyRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="3b30" class="javax.swing.JRadioButton" binding="totpAllyRandomSimilarStrengthRadioButton">
+ <constraints>
+ <grid row="2" column="0" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAllyRandomSimilarStrengthRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAllyRandomSimilarStrengthRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <grid id="1af81" binding="totpAuraPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="3" row-span="4" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.totpAuraPanel.title"/>
+ <children>
+ <component id="f6c3b" class="javax.swing.JRadioButton" binding="totpAuraUnchangedRadioButton">
+ <constraints>
+ <grid row="0" column="0" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAuraUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAuraUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b512" class="javax.swing.JRadioButton" binding="totpAuraRandomRadioButton">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAuraRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAuraRandomRadioButton.toolTipText."/>
+ </properties>
+ </component>
+ <component id="d3f0a" class="javax.swing.JRadioButton" binding="totpAuraRandomSameStrengthRadioButton">
+ <constraints>
+ <grid row="2" column="0" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAuraRandomSameStrengthRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAuraRandomSameStrengthRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <component id="ab28f" class="javax.swing.JSlider" binding="totpPercentageLevelModifierSlider">
+ <constraints>
+ <grid row="4" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <majorTickSpacing value="10"/>
+ <maximum value="50"/>
+ <minimum value="-50"/>
+ <minorTickSpacing value="2"/>
+ <paintLabels value="true"/>
+ <paintTicks value="true"/>
+ <snapToTicks value="true"/>
+ <value value="0"/>
+ </properties>
+ </component>
+ <component id="69ebe" class="javax.swing.JCheckBox" binding="totpPercentageLevelModifierCheckBox">
+ <constraints>
+ <grid row="3" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpPercentageLevelModifierCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpPercentageLevelModifierCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="94ffc" class="javax.swing.JCheckBox" binding="totpRandomizeHeldItemsCheckBox">
+ <constraints>
+ <grid row="1" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpRandomizeHeldItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpRandomizeHeldItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="555b9" class="javax.swing.JCheckBox" binding="totpAllowAltFormesCheckBox">
+ <constraints>
+ <grid row="2" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAllowAltFormesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpAllowAltFormesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="ddde3" class="javax.swing.JRadioButton" binding="totpRandomRadioButton">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="148f2" class="javax.swing.JRadioButton" binding="totpRandomSimilarStrengthRadioButton">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpRandomSimilarStrengthRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.totpRandomSimilarStrengthRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ </children>
+ </grid>
+ <grid id="59ef3" layout-manager="GridBagLayout">
+ <constraints>
+ <tabbedpane title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.wildPokemonPanel.title"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ </properties>
+ <border type="none"/>
+ <children>
+ <grid id="c2161" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.wpPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="34243" class="javax.swing.JRadioButton" binding="wpUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="45277">
+ <constraints>
+ <grid row="1" column="5" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="580fb">
+ <constraints>
+ <grid row="8" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="d940d">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="b2fc4">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="17061" class="javax.swing.JRadioButton" binding="wpRandomRadioButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="4abec" class="javax.swing.JRadioButton" binding="wpArea1To1RadioButton">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpArea1To1RadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpArea1To1RadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="44917" class="javax.swing.JRadioButton" binding="wpGlobal1To1RadioButton">
+ <constraints>
+ <grid row="4" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpGlobal1To1RadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpGlobal1To1RadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <grid id="ff19e" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="2" row-span="6" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="0" right="80" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.wpARPanel.title"/>
+ <children>
+ <component id="6fd8b" class="javax.swing.JRadioButton" binding="wpARNoneRadioButton">
+ <constraints>
+ <grid row="0" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpARNoneRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpARNoneRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="cc8ed">
+ <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>
+ <vspacer id="6eb45">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="697e1">
+ <constraints>
+ <grid row="0" column="0" 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>
+ <component id="f5f68" class="javax.swing.JRadioButton" binding="wpARSimilarStrengthRadioButton">
+ <constraints>
+ <grid row="1" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpARSimilarStrengthRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpARSimilarStrengthRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="f3f94" class="javax.swing.JRadioButton" binding="wpARCatchEmAllModeRadioButton">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpARCatchEmAllModeRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpARCatchEmAllModeRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="bc941" class="javax.swing.JRadioButton" binding="wpARTypeThemeAreasRadioButton">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpARTypeThemeAreasRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpARTypeThemeAreasRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <component id="58553" class="javax.swing.JCheckBox" binding="wpUseTimeBasedEncountersCheckBox">
+ <constraints>
+ <grid row="1" column="3" row-span="1" col-span="2" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpUseTimeBasedEncountersCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpUseTimeBasedEncountersCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="31e5d" class="javax.swing.JCheckBox" binding="wpDontUseLegendariesCheckBox" default-binding="true">
+ <constraints>
+ <grid row="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpDontUseLegendariesCheckBox.text"/>
+ </properties>
+ </component>
+ <component id="daaf0" class="javax.swing.JCheckBox" binding="wpSetMinimumCatchRateCheckBox">
+ <constraints>
+ <grid row="3" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpSetMinimumCatchRateCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpSetMinimumCatchRateCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b72b8" class="javax.swing.JCheckBox" binding="wpRandomizeHeldItemsCheckBox">
+ <constraints>
+ <grid row="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpRandomizeHeldItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpRandomizeHeldItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="7e552" class="javax.swing.JCheckBox" binding="wpBanBadItemsCheckBox" default-binding="true">
+ <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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpBanBadItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpBanBadItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="da56d" class="javax.swing.JCheckBox" binding="wpBalanceShakingGrassPokemonCheckBox">
+ <constraints>
+ <grid row="6" column="3" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpBalanceShakingGrassPokemonCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpBalanceShakingGrassPokemonCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="a5c09" class="javax.swing.JCheckBox" binding="wpPercentageLevelModifierCheckBox" default-binding="true">
+ <constraints>
+ <grid row="7" column="3" row-span="1" col-span="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpPercentageLevelModifierCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpPercentageLevelModifierCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="7e56b" class="javax.swing.JSlider" binding="wpPercentageLevelModifierSlider" default-binding="true">
+ <constraints>
+ <grid row="8" column="3" row-span="1" col-span="2" vsize-policy="0" hsize-policy="6" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0" ipadx="30"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <majorTickSpacing value="10"/>
+ <maximum value="50"/>
+ <minimum value="-50"/>
+ <minorTickSpacing value="2"/>
+ <paintLabels value="true"/>
+ <paintTicks value="true"/>
+ <snapToTicks value="true"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpPercentageLevelModifierSlider.toolTipText"/>
+ <value value="0"/>
+ </properties>
+ </component>
+ <component id="f60c2" class="javax.swing.JSlider" binding="wpSetMinimumCatchRateSlider">
+ <constraints>
+ <grid row="3" column="4" row-span="2" col-span="1" vsize-policy="0" hsize-policy="6" anchor="9" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="10" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <majorTickSpacing value="1"/>
+ <maximum value="5"/>
+ <minimum value="1"/>
+ <paintLabels value="true"/>
+ <snapToTicks value="true"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpSetMinimumCatchRateSlider.toolTipText"/>
+ <value value="1"/>
+ </properties>
+ </component>
+ <component id="438d0" class="javax.swing.JCheckBox" binding="wpAllowAltFormesCheckBox">
+ <constraints>
+ <grid row="9" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpAllowAltFormesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.wpAllowAltFormesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <hspacer id="731f9">
+ <constraints>
+ <grid row="1" 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>
+ <vspacer id="f6a73">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="694df">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="3b48">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ </children>
+ </grid>
+ <grid id="c0784" layout-manager="GridBagLayout">
+ <constraints>
+ <tabbedpane title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.tmsHMsTutorsPanel.title"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ </properties>
+ <border type="none"/>
+ <children>
+ <grid id="b2c62" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.tmPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <grid id="a78c8" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.tmMovesPanel.title"/>
+ <children>
+ <component id="77153" class="javax.swing.JRadioButton" binding="tmUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="0" right="70" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <vspacer id="c775">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="43886">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="efb0b">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="1bf95" class="javax.swing.JRadioButton" binding="tmRandomRadioButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="e94bb" class="javax.swing.JCheckBox" binding="tmNoGameBreakingMovesCheckBox">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmNoGameBreakingMovesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmNoGameBreakingMovesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="e66ed" class="javax.swing.JCheckBox" binding="tmKeepFieldMoveTMsCheckBox">
+ <constraints>
+ <grid row="1" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmKeepFieldMoveTMsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmKeepFieldMoveTMsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="39544" class="javax.swing.JCheckBox" binding="tmForceGoodDamagingCheckBox" default-binding="true">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmForceGoodDamagingCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmForceGoodDamagingCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="60c91" class="javax.swing.JSlider" binding="tmForceGoodDamagingSlider" default-binding="true">
+ <constraints>
+ <grid row="3" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <majorTickSpacing value="20"/>
+ <minorTickSpacing value="5"/>
+ <paintLabels value="true"/>
+ <paintTicks value="true"/>
+ <snapToTicks value="true"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmForceGoodDamagingSlider.toolTipText"/>
+ <value value="0"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <hspacer id="fc0a6">
+ <constraints>
+ <grid row="1" column="3" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="f2096">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="5a534">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="47186">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <grid id="51d08" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="2" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="20" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.thcPanel.title"/>
+ <children>
+ <component id="eb901" class="javax.swing.JRadioButton" binding="thcUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.thcUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.thcUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <vspacer id="f28aa">
+ <constraints>
+ <grid row="5" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="b7ad2">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="5acfb">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="6bd5e" class="javax.swing.JRadioButton" binding="thcRandomPreferSameTypeRadioButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.thcRandomPreferSameTypeRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.thcRandomPreferSameTypeRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="bdcf8" class="javax.swing.JRadioButton" binding="thcRandomCompletelyRadioButton">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.thcRandomCompletelyRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.thcRandomCompletelyRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="1bb6c" class="javax.swing.JRadioButton" binding="thcFullCompatibilityRadioButton" default-binding="true">
+ <constraints>
+ <grid row="4" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.thcFullCompatibilityRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.thcFullCompatibilityRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="65e15" class="javax.swing.JCheckBox" binding="tmFollowEvolutionsCheckBox">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmFollowEvolutionsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmFollowEvolutionsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="7ba73" class="javax.swing.JCheckBox" binding="tmLevelupMoveSanityCheckBox" default-binding="true">
+ <constraints>
+ <grid row="1" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmLevelupMoveSanityCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmLevelupMoveSanityCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b7d85" class="javax.swing.JCheckBox" binding="tmFullHMCompatibilityCheckBox">
+ <constraints>
+ <grid row="3" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmFullHMCompatibilityCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.tmFullHMCompatibilityCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ </children>
+ </grid>
+ <hspacer id="674e">
+ <constraints>
+ <grid row="1" 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>
+ <vspacer id="f5d4b">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="216da">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="a4da9">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <grid id="e917c" binding="moveTutorPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.mtPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <grid id="55a17" binding="mtMovesPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.mtMovesPanel.title"/>
+ <children>
+ <component id="c71e0" class="javax.swing.JRadioButton" binding="mtUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="0" right="70" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <vspacer id="e8b9">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="5c652">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="ab20f">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="7a3f2" class="javax.swing.JRadioButton" binding="mtRandomRadioButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="108c3" class="javax.swing.JSlider" binding="mtForceGoodDamagingSlider">
+ <constraints>
+ <grid row="3" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <majorTickSpacing value="20"/>
+ <minorTickSpacing value="5"/>
+ <paintLabels value="true"/>
+ <paintTicks value="true"/>
+ <snapToTicks value="true"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtForceGoodDamagingSlider.toolTipText"/>
+ <value value="0"/>
+ </properties>
+ </component>
+ <component id="3c7ba" class="javax.swing.JCheckBox" binding="mtNoGameBreakingMovesCheckBox">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtNoGameBreakingMovesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtNoGameBreakingMovesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="d8aa" class="javax.swing.JCheckBox" binding="mtKeepFieldMoveTutorsCheckBox">
+ <constraints>
+ <grid row="1" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtKeepFieldMoveTutorsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtKeepFieldMoveTutorsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="5a253" class="javax.swing.JCheckBox" binding="mtForceGoodDamagingCheckBox">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtForceGoodDamagingCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtForceGoodDamagingCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <hspacer id="417fe">
+ <constraints>
+ <grid row="1" column="3" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="6203c">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="fe938">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="22179">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <grid id="b731b" binding="mtCompatPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="2" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="20" bottom="0" right="0" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.mtcPanel.title"/>
+ <children>
+ <component id="909ae" class="javax.swing.JRadioButton" binding="mtcUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtcUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtcUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <vspacer id="993c4">
+ <constraints>
+ <grid row="5" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="4d26c">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="e70a2">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="13e1d" class="javax.swing.JRadioButton" binding="mtcRandomPreferSameTypeRadioButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtcRandomPreferSameTypeRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtcRandomPreferSameTypeRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="e0f5e" class="javax.swing.JRadioButton" binding="mtcRandomCompletelyRadioButton">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtcRandomCompletelyRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtcRandomCompletelyRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="6ffa1" class="javax.swing.JRadioButton" binding="mtcFullCompatibilityRadioButton" default-binding="true">
+ <constraints>
+ <grid row="4" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtcFullCompatibilityRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtcFullCompatibilityRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="e4773" class="javax.swing.JCheckBox" binding="mtFollowEvolutionsCheckBox">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtFollowEvolutionsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtFollowEvolutionsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="801a1" class="javax.swing.JCheckBox" binding="mtLevelupMoveSanityCheckBox">
+ <constraints>
+ <grid row="1" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtLevelupMoveSanityCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtLevelupMoveSanityCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <component id="5bbc3" class="javax.swing.JLabel" binding="mtNoExistLabel">
+ <constraints>
+ <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="true"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.mtNoExistLabel.text"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ </children>
+ </grid>
+ <grid id="42a4d" layout-manager="GridBagLayout">
+ <constraints>
+ <tabbedpane title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.itemsPanel.title"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ </properties>
+ <border type="none"/>
+ <children>
+ <grid id="7b397" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.fiPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="4d6b9" class="javax.swing.JRadioButton" binding="fiUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="0" right="140" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="365a6">
+ <constraints>
+ <grid row="1" column="3" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="58d9c">
+ <constraints>
+ <grid row="5" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="b73ae">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="219a6">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="4bc5e" class="javax.swing.JRadioButton" binding="fiShuffleRadioButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiShuffleRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiShuffleRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="74283" class="javax.swing.JRadioButton" binding="fiRandomRadioButton" default-binding="true">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b0d01" class="javax.swing.JRadioButton" binding="fiRandomEvenDistributionRadioButton" default-binding="true">
+ <constraints>
+ <grid row="4" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiRandomEvenDistributionRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiRandomEvenDistributionRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="d9fbb" class="javax.swing.JCheckBox" binding="fiBanBadItemsCheckBox" default-binding="true">
+ <constraints>
+ <grid row="4" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiBanBadItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.fiBanBadItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <hspacer id="36f9b">
+ <constraints>
+ <grid row="1" 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>
+ <vspacer id="e7c77">
+ <constraints>
+ <grid row="4" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="a18c0">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="c7e4f">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <grid id="ae8f3" binding="shopItemsPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.shPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="85c80" class="javax.swing.JRadioButton" binding="shUnchangedRadioButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="0" right="140" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="ffc84">
+ <constraints>
+ <grid row="1" column="3" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="2f864">
+ <constraints>
+ <grid row="7" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="cf4a3">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="70501">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="30ba3" class="javax.swing.JRadioButton" binding="shShuffleRadioButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shShuffleRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shShuffleRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="4324" class="javax.swing.JRadioButton" binding="shRandomRadioButton" default-binding="true">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="2d537" class="javax.swing.JCheckBox" binding="shBanOverpoweredShopItemsCheckBox">
+ <constraints>
+ <grid row="3" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shBanOverpoweredShopItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shBanOverpoweredShopItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="c8590" class="javax.swing.JCheckBox" binding="shBanBadItemsCheckBox" default-binding="true">
+ <constraints>
+ <grid row="1" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shBanBadItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shBanBadItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="65395" class="javax.swing.JCheckBox" binding="shBanRegularShopItemsCheckBox">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shBanRegularShopItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shBanRegularShopItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="9e484" class="javax.swing.JCheckBox" binding="shBalanceShopItemPricesCheckBox">
+ <constraints>
+ <grid row="4" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shBalanceShopItemPricesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shBalanceShopItemPricesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="5bba5" class="javax.swing.JCheckBox" binding="shGuaranteeEvolutionItemsCheckBox">
+ <constraints>
+ <grid row="5" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shGuaranteeEvolutionItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shGuaranteeEvolutionItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="f7f02" class="javax.swing.JCheckBox" binding="shGuaranteeXItemsCheckBox">
+ <constraints>
+ <grid row="6" column="2" 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>
+ <enabled value="false"/>
+ <selected value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shGuaranteeXItemsCheckbox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.shGuaranteeXItemsCheckbox.tooltipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <grid id="30a3f" binding="pickupItemsPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.puPanel.title">
+ <font style="1"/>
+ </border>
+ <children>
+ <component id="62bb6" class="javax.swing.JRadioButton" binding="puUnchangedRadioButton">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="0" right="140" weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.puUnchangedRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.puUnchangedRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="5bf93">
+ <constraints>
+ <grid row="1" column="3" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="5fa25">
+ <constraints>
+ <grid row="3" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="3b455">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="ff3b7">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="478a" class="javax.swing.JRadioButton" binding="puRandomRadioButton">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.puRandomRadioButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.puRandomRadioButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="45bbb" class="javax.swing.JCheckBox" binding="puBanBadItemsCheckBox">
+ <constraints>
+ <grid row="1" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.puBanBadItemsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.puBanBadItemsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ </children>
+ </grid>
+ <grid id="e8bbb" binding="baseTweaksPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <tabbedpane title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.miscTweaksPanel.title"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ </properties>
+ <border type="none"/>
+ <children>
+ <grid id="cb53c" binding="miscTweaksPanel" layout-manager="GridBagLayout">
+ <constraints>
+ <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.1"/>
+ </constraints>
+ <properties/>
+ <border type="none" title-resource-bundle="com/pkrandom/newgui/Bundle" title-key="GUI.miscPanel.title">
+ <font/>
+ </border>
+ <children>
+ <component id="70ba8" class="javax.swing.JCheckBox" binding="miscBWExpPatchCheckBox">
+ <constraints>
+ <grid row="1" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscBWExpPatchCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscBWExpPatchCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="e97bc">
+ <constraints>
+ <grid row="1" column="5" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <vspacer id="fa9a6">
+ <constraints>
+ <grid row="7" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.1"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="42099">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <component id="7f730" class="javax.swing.JCheckBox" binding="miscNerfXAccuracyCheckBox">
+ <constraints>
+ <grid row="1" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscNerfXAccuracyCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscNerfXAccuracyCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="39078" class="javax.swing.JCheckBox" binding="miscFixCritRateCheckBox">
+ <constraints>
+ <grid row="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscFixCritRateCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscFixCritRateCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="89b5c" class="javax.swing.JCheckBox" binding="miscFastestTextCheckBox">
+ <constraints>
+ <grid row="1" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscFastestTextCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscFastestTextCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="5c1b1" class="javax.swing.JCheckBox" binding="miscRunningShoesIndoorsCheckBox">
+ <constraints>
+ <grid row="2" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscRunningShoesIndoorsCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscRunningShoesIndoorsCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="bd6ce" class="javax.swing.JCheckBox" binding="miscRandomizePCPotionCheckBox">
+ <constraints>
+ <grid row="2" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscRandomizePCPotionCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscRandomizePCPotionCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="a174b" class="javax.swing.JCheckBox" binding="miscAllowPikachuEvolutionCheckBox">
+ <constraints>
+ <grid row="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscAllowPikachuEvolutionCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscAllowPikachuEvolutionCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="6af08" class="javax.swing.JCheckBox" binding="miscGiveNationalDexAtCheckBox">
+ <constraints>
+ <grid row="2" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscGiveNationalDexAtCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscGiveNationalDexAtCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="f8bbd" class="javax.swing.JCheckBox" binding="miscUpdateTypeEffectivenessCheckBox">
+ <constraints>
+ <grid row="3" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscUpdateTypeEffectivenessCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscUpdateTypeEffectivenessCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b7d7c" class="javax.swing.JCheckBox" binding="miscLowerCasePokemonNamesCheckBox">
+ <constraints>
+ <grid row="3" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscLowerCasePokemonNamesCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscLowerCasePokemonNamesCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="7fe16" class="javax.swing.JCheckBox" binding="miscRandomizeCatchingTutorialCheckBox">
+ <constraints>
+ <grid row="3" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscRandomizeCatchingTutorialCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscRandomizeCatchingTutorialCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="d8e23" class="javax.swing.JCheckBox" binding="miscBanLuckyEggCheckBox">
+ <constraints>
+ <grid row="4" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscBanLuckyEggCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscBanLuckyEggCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="9cf5c" class="javax.swing.JCheckBox" binding="miscNoFreeLuckyEggCheckBox">
+ <constraints>
+ <grid row="4" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscNoFreeLuckyEggCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscNoFreeLuckyEggCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="68538" class="javax.swing.JCheckBox" binding="miscBanBigMoneyManiacCheckBox">
+ <constraints>
+ <grid row="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscBanBigMoneyManiacCheckBox.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscBanBigMoneyManiacCheckBox.toolTipText"/>
+ </properties>
+ </component>
+ <component id="3e84b" class="javax.swing.JLabel" binding="mtNoneAvailableLabel">
+ <constraints>
+ <grid row="0" column="1" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.miscNoneAvailableLabel.text"/>
+ </properties>
+ </component>
+ <component id="27c9" class="javax.swing.JCheckBox" binding="miscSOSBattlesCheckBox">
+ <constraints>
+ <grid row="4" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.sosBattles.name"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.sosBattles.toolTipText"/>
+ </properties>
+ </component>
+ <component id="5cd10" class="javax.swing.JCheckBox" binding="miscBalanceStaticLevelsCheckBox">
+ <constraints>
+ <grid row="5" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.balanceStaticLevels.name"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.balanceStaticLevels.toolTipText"/>
+ </properties>
+ </component>
+ <component id="1d98d" class="javax.swing.JCheckBox" binding="miscRetainAltFormesCheckBox">
+ <constraints>
+ <grid row="5" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.retainAltFormes.name"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.retainAltFormes.toolTipText"/>
+ </properties>
+ </component>
+ <component id="baacf" class="javax.swing.JCheckBox" binding="miscRunWithoutRunningShoesCheckBox">
+ <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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.runWithoutRunningShoes.name"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.runWithoutRunningShoes.toolTipText"/>
+ </properties>
+ </component>
+ <component id="52a" class="javax.swing.JCheckBox" binding="miscFasterHPAndEXPBarsCheckBox">
+ <constraints>
+ <grid row="5" column="4" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.fasterHpAndExpBars.name"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.fasterHpAndExpBars.toolTipText"/>
+ </properties>
+ </component>
+ <component id="531ae" class="javax.swing.JCheckBox" binding="miscForceChallengeModeCheckBox">
+ <constraints>
+ <grid row="3" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.forceChallengeMode.name"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.forceChallengeMode.toolTipText"/>
+ </properties>
+ </component>
+ <component id="d472a" class="javax.swing.JCheckBox" binding="miscFastDistortionWorldCheckBox">
+ <constraints>
+ <grid row="6" column="1" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.fastDistortionWorld.name"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.fastDistortionWorld.toolTipText"/>
+ </properties>
+ </component>
+ <component id="720c8" class="javax.swing.JCheckBox" binding="miscUpdateRotomFormeTypingCheckBox">
+ <constraints>
+ <grid row="6" column="2" 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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.updateRotomFormeTyping.name"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.updateRotomFormeTyping.toolTipText"/>
+ </properties>
+ </component>
+ <component id="1f079" class="javax.swing.JCheckBox" binding="miscDisableLowHPMusicCheckBox">
+ <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>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.disableLowHpMusic.name"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="CodeTweaks.disableLowHpMusic.toolTipText"/>
+ </properties>
+ </component>
+ </children>
+ </grid>
+ <hspacer id="c4e06">
+ <constraints>
+ <grid row="1" 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>
+ <vspacer id="b5a7f">
+ <constraints>
+ <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <hspacer id="b60f7">
+ <constraints>
+ <grid row="1" column="0" 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>
+ <vspacer id="b5389">
+ <constraints>
+ <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ </children>
+ </grid>
+ </children>
+ </tabbedpane>
+ <component id="a7e2c" class="javax.swing.JButton" binding="openROMButton" default-binding="true">
+ <constraints>
+ <grid row="1" column="9" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="10" right="0" weightx="0.3" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <requestFocusEnabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.openROMButton.text"/>
+ </properties>
+ </component>
+ <component id="60ca8" class="javax.swing.JButton" binding="randomizeSaveButton" default-binding="true">
+ <constraints>
+ <grid row="2" column="9" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="10" right="0" weightx="0.3" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.randomizeSaveButton.text"/>
+ </properties>
+ </component>
+ <component id="d61b0" class="javax.swing.JButton" binding="premadeSeedButton" default-binding="true">
+ <constraints>
+ <grid row="3" column="9" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag top="0" left="0" bottom="10" right="0" weightx="0.3" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.premadeSeedButton.text"/>
+ </properties>
+ </component>
+ <component id="2f42" class="javax.swing.JButton" binding="settingsButton" default-binding="true">
+ <constraints>
+ <grid row="4" column="9" row-span="1" col-span="3" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.3" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.settingsButton.text"/>
+ </properties>
+ </component>
+ <component id="df6e7" class="javax.swing.JLabel" binding="versionLabel">
+ <constraints>
+ <grid row="5" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <font style="1"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.versionLabel.text"/>
+ </properties>
+ </component>
+ <hspacer id="d2a3b">
+ <constraints>
+ <grid row="3" column="0" 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>
+ <hspacer id="6276e">
+ <constraints>
+ <grid row="3" column="12" 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>
+ <vspacer id="d5978">
+ <constraints>
+ <grid row="0" column="10" row-span="1" col-span="2" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <vspacer id="be7c1">
+ <constraints>
+ <grid row="8" column="7" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.0" weighty="0.0"/>
+ </constraints>
+ </vspacer>
+ <component id="33b75" class="javax.swing.JLabel" binding="gameMascotLabel">
+ <constraints>
+ <grid row="1" column="7" row-span="4" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ <gridbag weightx="0.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <icon value="com/pkrandom/newgui/emptyIcon.png"/>
+ <text value=""/>
+ </properties>
+ </component>
+ <component id="52c7e" class="javax.swing.JButton" binding="saveSettingsButton" default-binding="true">
+ <constraints>
+ <grid row="4" column="5" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.saveSettingsButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.saveSettingsButton.toolTipText"/>
+ </properties>
+ </component>
+ <component id="b0dde" class="javax.swing.JButton" binding="loadSettingsButton" default-binding="true">
+ <constraints>
+ <grid row="4" column="4" 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.1" weighty="0.0"/>
+ </constraints>
+ <properties>
+ <enabled value="false"/>
+ <text resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.loadSettingsButton.text"/>
+ <toolTipText resource-bundle="com/pkrandom/newgui/Bundle" key="GUI.loadSettingsButton.toolTipText"/>
+ </properties>
+ </component>
+ <hspacer id="bd24f">
+ <constraints>
+ <grid row="2" column="3" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <hspacer id="afa25">
+ <constraints>
+ <grid row="2" column="6" 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.2" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ <hspacer id="46">
+ <constraints>
+ <grid row="2" column="8" 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.1" weighty="0.0"/>
+ </constraints>
+ </hspacer>
+ </children>
+ </grid>
+ <buttonGroups>
+ <group name="trainerPokemonButtonGroup">
+ <member id="ddab7"/>
+ <member id="2fe72"/>
+ <member id="cd865"/>
+ <member id="bd6d2"/>
+ <member id="334e5"/>
+ <member id="40ee1"/>
+ </group>
+ <group name="baseStatButtonGroup">
+ <member id="4535b"/>
+ <member id="e8460"/>
+ <member id="576dd"/>
+ </group>
+ <group name="expCurveButtonGroup">
+ <member id="8625b"/>
+ <member id="9be58"/>
+ <member id="213c9"/>
+ </group>
+ <group name="pokemonTypeButtonGroup">
+ <member id="fb38a"/>
+ <member id="f7a27"/>
+ <member id="45dd7"/>
+ </group>
+ <group name="pokemonEvoButtonGroup">
+ <member id="9dc25"/>
+ <member id="577d"/>
+ <member id="7fc31"/>
+ </group>
+ <group name="pokemonAbilityButtonGroup">
+ <member id="fa40d"/>
+ <member id="5bd6c"/>
+ </group>
+ <group name="starterButtonGroup">
+ <member id="124c"/>
+ <member id="94a4e"/>
+ <member id="c1c80"/>
+ <member id="12184"/>
+ </group>
+ <group name="staticPokemonButtonGroup">
+ <member id="a28a1"/>
+ <member id="66089"/>
+ <member id="17456"/>
+ <member id="282a5"/>
+ </group>
+ <group name="tradeButtonGroup">
+ <member id="4e02b"/>
+ <member id="a626c"/>
+ <member id="f6c7b"/>
+ </group>
+ <group name="pokemonMovesetButtonGroup">
+ <member id="b296a"/>
+ <member id="556eb"/>
+ <member id="c1370"/>
+ <member id="bc810"/>
+ </group>
+ <group name="wildPokemonButtonGroup">
+ <member id="34243"/>
+ <member id="17061"/>
+ <member id="4abec"/>
+ <member id="44917"/>
+ </group>
+ <group name="wildPokemonAdditionalButtonGroup">
+ <member id="6fd8b"/>
+ <member id="f5f68"/>
+ <member id="f3f94"/>
+ <member id="bc941"/>
+ </group>
+ <group name="tmsButtonGroup">
+ <member id="77153"/>
+ <member id="1bf95"/>
+ </group>
+ <group name="tmCompatButtonGroup">
+ <member id="eb901"/>
+ <member id="6bd5e"/>
+ <member id="bdcf8"/>
+ <member id="1bb6c"/>
+ </group>
+ <group name="tutorButtonGroup">
+ <member id="c71e0"/>
+ <member id="7a3f2"/>
+ </group>
+ <group name="tutorCompatButtonGroup">
+ <member id="909ae"/>
+ <member id="13e1d"/>
+ <member id="e0f5e"/>
+ <member id="6ffa1"/>
+ </group>
+ <group name="fieldItemButtonGroup">
+ <member id="4d6b9"/>
+ <member id="4bc5e"/>
+ <member id="74283"/>
+ <member id="b0d01"/>
+ </group>
+ <group name="shopItemButtonGroup">
+ <member id="85c80"/>
+ <member id="30ba3"/>
+ <member id="4324"/>
+ </group>
+ <group name="totemPokemonButtonGroup">
+ <member id="9e1ec"/>
+ <member id="ddde3"/>
+ <member id="148f2"/>
+ </group>
+ <group name="allyPokemonButtonGroup">
+ <member id="315a6"/>
+ <member id="68af"/>
+ <member id="3b30"/>
+ </group>
+ <group name="auraButtonGroup">
+ <member id="f6c3b"/>
+ <member id="b512"/>
+ <member id="d3f0a"/>
+ </group>
+ <group name="pickupItemButtonGroup">
+ <member id="62bb6"/>
+ <member id="478a"/>
+ </group>
+ </buttonGroups>
+ <inspectionSuppressions>
+ <suppress inspection="MissingMnemonic"/>
+ <suppress inspection="NoLabelFor" id="3169c"/>
+ <suppress inspection="NoLabelFor" id="36c27"/>
+ <suppress inspection="NoLabelFor" id="83a64"/>
+ </inspectionSuppressions>
+</form>
diff --git a/src/com/pkrandom/newgui/NewRandomizerGUI.java b/src/com/pkrandom/newgui/NewRandomizerGUI.java
new file mode 100644
index 0000000..e3e762e
--- /dev/null
+++ b/src/com/pkrandom/newgui/NewRandomizerGUI.java
@@ -0,0 +1,3700 @@
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- NewRandomizerGUI.java - the main GUI for the randomizer, containing --*/
+/*-- the various options available and such --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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.pkrandom.*;
+import com.pkrandom.cli.CliRandomizer;
+import com.pkrandom.constants.GlobalConstants;
+import com.pkrandom.exceptions.CannotWriteToLocationException;
+import com.pkrandom.exceptions.EncryptedROMException;
+import com.pkrandom.exceptions.InvalidSupplementFilesException;
+import com.pkrandom.exceptions.RandomizationException;
+import com.pkrandom.pokemon.ExpCurve;
+import com.pkrandom.pokemon.GenRestrictions;
+import com.pkrandom.pokemon.Pokemon;
+import com.pkrandom.romhandlers.*;
+
+import javax.swing.*;
+import javax.swing.border.TitledBorder;
+import java.awt.*;
+import java.awt.event.*;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.List;
+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 JCheckBox miscUpdateRotomFormeTypingCheckBox;
+ private JCheckBox miscDisableLowHPMusicCheckBox;
+
+ 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/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/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 < GlobalConstants.HIGHEST_POKEMON_GEN);
+ 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);
+ tpBetterMovesetsCheckBox.setEnabled(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);
+ 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) ||
+ isTrainerSetting(TRAINER_TYPE_THEMED_ELITE4_GYMS))) {
+ tpSwapMegaEvosCheckBox.setEnabled(true);
+ } else {
+ tpSwapMegaEvosCheckBox.setEnabled(false);
+ tpSwapMegaEvosCheckBox.setSelected(false);
+ }
+ tpRandomShinyTrainerPokemonCheckBox.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(4, 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/pkrandom/newgui/OperationDialog.java b/src/com/pkrandom/newgui/OperationDialog.java
new file mode 100644
index 0000000..0028582
--- /dev/null
+++ b/src/com/pkrandom/newgui/OperationDialog.java
@@ -0,0 +1,137 @@
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- OperationDialog.java - a dialog that displays the loading spinner --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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.pkrandom.FileFunctions;
+
+import javax.swing.*;
+import java.awt.*;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ *
+ * @author Stewart
+ */
+public class OperationDialog extends javax.swing.JDialog {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5965463550336235236L;
+
+ /**
+ * Creates new form OperationDialog
+ */
+ public OperationDialog(String text, Frame parent, boolean modal) {
+ super(parent, modal);
+ initComponents();
+ this.loadingLabel.setText(text);
+ setLocationRelativeTo(parent);
+ }
+
+ public OperationDialog(String text, Dialog parent, boolean modal) {
+ super(parent, modal);
+ initComponents();
+ this.loadingLabel.setText(text);
+ setLocationRelativeTo(parent);
+ }
+
+ /* @formatter:off */
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ // <editor-fold defaultstate="collapsed"
+ // desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ jPanel1 = new javax.swing.JPanel();
+ loadingLabel = new javax.swing.JLabel();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
+ setResizable(false);
+ setUndecorated(true);
+
+ jPanel1.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(
+ 0, 0, 0), 2, true));
+
+ loadingLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+ loadingLabel.setIcon(getLoadingIcon());
+ loadingLabel.setText("Loading...");
+
+ javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(
+ jPanel1);
+ jPanel1.setLayout(jPanel1Layout);
+ jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(
+ javax.swing.GroupLayout.Alignment.LEADING).addGroup(
+ jPanel1Layout.createSequentialGroup().addContainerGap()
+ .addComponent(loadingLabel)
+ .addContainerGap(53, Short.MAX_VALUE)));
+ jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(
+ javax.swing.GroupLayout.Alignment.LEADING).addGroup(
+ jPanel1Layout
+ .createSequentialGroup()
+ .addContainerGap()
+ .addComponent(loadingLabel)
+ .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
+ Short.MAX_VALUE)));
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
+ getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(layout.createParallelGroup(
+ javax.swing.GroupLayout.Alignment.LEADING).addComponent(
+ jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
+ layout.setVerticalGroup(layout.createParallelGroup(
+ javax.swing.GroupLayout.Alignment.LEADING).addComponent(
+ jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.PREFERRED_SIZE));
+
+ pack();
+ }// </editor-fold>//GEN-END:initComponents
+
+ private ImageIcon getLoadingIcon() {
+ try {
+ InputStream in = OperationDialog.class
+ .getResourceAsStream("/com/pkrandom/newgui/loading.gif");
+ byte[] buf = FileFunctions.readFullyIntoBuffer(in, in.available());
+ in.close();
+ Image image = Toolkit.getDefaultToolkit().createImage(buf);
+ return new ImageIcon(image);
+ } catch (IOException ex) {
+ return null;
+ }
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel jPanel1;
+ private javax.swing.JLabel loadingLabel;
+
+ // End of variables declaration//GEN-END:variables
+ /* @formatter:on */
+}
diff --git a/src/com/pkrandom/newgui/PresetFileFilter.java b/src/com/pkrandom/newgui/PresetFileFilter.java
new file mode 100644
index 0000000..14ffda0
--- /dev/null
+++ b/src/com/pkrandom/newgui/PresetFileFilter.java
@@ -0,0 +1,56 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- PresetFileFilter.java - a file filter for the "randomization presets" --*/
+/*-- which allow the same random ROM to be produced--*/
+/*-- on demand. --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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 javax.swing.filechooser.FileFilter;
+import java.io.File;
+
+public class PresetFileFilter extends FileFilter {
+
+ @Override
+ public boolean accept(File arg0) {
+ if (arg0.isDirectory()) {
+ return true; // needed to allow directory navigation
+ }
+ String filename = arg0.getName();
+ if (!filename.contains(".")) {
+ return false;
+ }
+ String extension = arg0.getName().substring(
+ arg0.getName().lastIndexOf('.') + 1);
+ return extension.toLowerCase().equals("rndp");
+ }
+
+ @Override
+ public String getDescription() {
+ return "Pokemon Randomizer Preset (*.rndp)";
+ }
+
+}
diff --git a/src/com/pkrandom/newgui/PresetLoadDialog.java b/src/com/pkrandom/newgui/PresetLoadDialog.java
new file mode 100644
index 0000000..4e73793
--- /dev/null
+++ b/src/com/pkrandom/newgui/PresetLoadDialog.java
@@ -0,0 +1,504 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- PresetLoadDialog.java - a dialog to allow use of preset files or --*/
+/*-- random seed/config string pairs to produce --*/
+/*-- premade ROMs. --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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.pkrandom.*;
+import com.pkrandom.exceptions.InvalidSupplementFilesException;
+import com.pkrandom.romhandlers.Abstract3DSRomHandler;
+import com.pkrandom.romhandlers.RomHandler;
+
+import javax.swing.*;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import java.awt.*;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+/**
+ *
+ * @author Stewart
+ */
+public class PresetLoadDialog extends JDialog {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7898067118947765260L;
+ private NewRandomizerGUI parentGUI;
+ private RomHandler currentROM;
+ private boolean completed = false;
+ private String requiredName = null;
+ private volatile boolean changeFieldsWithoutCheck = false;
+ private CustomNamesSet customNames;
+ private java.util.ResourceBundle bundle;
+
+ /**
+ * Creates new form PresetLoadDialog
+ */
+ public PresetLoadDialog(NewRandomizerGUI parent, JFrame frame) {
+ super(frame, true);
+ bundle = java.util.ResourceBundle.getBundle("com/pkrandom/newgui/Bundle"); // NOI18N
+ initComponents();
+ this.parentGUI = parent;
+ this.presetFileChooser.setCurrentDirectory(new File("./"));
+ this.romFileChooser.setCurrentDirectory(new File("./"));
+ initialState();
+ setLocationRelativeTo(frame);
+ setVisible(true);
+ }
+
+ private void initialState() {
+ this.romFileButton.setEnabled(false);
+ this.acceptButton.setEnabled(false);
+ addChangeListener(this.randomSeedField);
+ addChangeListener(this.configStringField);
+ }
+
+ private void addChangeListener(JTextField field) {
+ field.getDocument().addDocumentListener(new DocumentListener() {
+
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ if (!changeFieldsWithoutCheck)
+ PresetLoadDialog.this.checkValues();
+
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent e) {
+ if (!changeFieldsWithoutCheck)
+ PresetLoadDialog.this.checkValues();
+
+ }
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {
+ if (!changeFieldsWithoutCheck)
+ PresetLoadDialog.this.checkValues();
+
+ }
+ });
+
+ }
+
+ private boolean checkValues() {
+ String name;
+ try {
+ Long.parseLong(this.randomSeedField.getText());
+ } catch (NumberFormatException ex) {
+ invalidValues();
+ return false;
+ }
+
+ // 161 onwards: look for version number
+ String configString = this.configStringField.getText();
+ if (configString.length() < 3) {
+ invalidValues();
+ return false;
+ }
+
+ try {
+ int presetVersionNumber = Integer.parseInt(configString.substring(0, 3));
+ if (presetVersionNumber != Version.VERSION) {
+ promptForDifferentRandomizerVersion(presetVersionNumber);
+ safelyClearFields();
+ invalidValues();
+ return false;
+ }
+ } catch (NumberFormatException ex) {
+ invalidValues();
+ return false;
+ }
+
+ try {
+ name = this.parentGUI.getValidRequiredROMName(configString.substring(3), customNames);
+ } catch (InvalidSupplementFilesException ex) {
+ safelyClearFields();
+ invalidValues();
+ return false;
+ } catch (Exception ex) {
+ // other exception, just call it invalid for now
+ invalidValues();
+ return false;
+ }
+ if (name == null) {
+ invalidValues();
+ return false;
+ }
+ requiredName = name;
+ this.romRequiredLabel.setText(String.format(bundle.getString("PresetLoadDialog.romRequiredLabel.textWithROM"),
+ name));
+ this.romFileButton.setEnabled(true);
+
+ if (currentROM != null && !currentROM.getROMName().equals(name)) {
+ this.currentROM = null;
+ this.acceptButton.setEnabled(false);
+ this.romFileField.setText("");
+ }
+ return true;
+ }
+
+ private void promptForDifferentRandomizerVersion(int presetVN) {
+ // so what version number was it?
+ if (presetVN > Version.VERSION) {
+ // it's for a newer version
+ JOptionPane.showMessageDialog(this, bundle.getString("PresetLoadDialog.newerVersionRequired"));
+ } else {
+ // tell them which older version to use to load this preset
+ // this should be the newest version that used that value
+ // for the constant PRESET_FILE_VERSION
+ String versionWanted = Version.oldVersions.getOrDefault(presetVN,"Unknown");
+ JOptionPane.showMessageDialog(this,
+ String.format(bundle.getString("PresetLoadDialog.olderVersionRequired"), versionWanted));
+ }
+ }
+
+ private void safelyClearFields() {
+ SwingUtilities.invokeLater(() -> {
+ changeFieldsWithoutCheck = true;
+ configStringField.setText("");
+ randomSeedField.setText("");
+ changeFieldsWithoutCheck = false;
+ });
+ }
+
+ private void invalidValues() {
+ this.currentROM = null;
+ this.romFileField.setText("");
+ this.romRequiredLabel.setText(bundle.getString("PresetLoadDialog.romRequiredLabel.text"));
+ this.romFileButton.setEnabled(false);
+ this.acceptButton.setEnabled(false);
+ this.requiredName = null;
+
+ }
+
+ public boolean isCompleted() {
+ return completed;
+ }
+
+ public RomHandler getROM() {
+ return currentROM;
+ }
+
+ public long getSeed() {
+ return Long.parseLong(this.randomSeedField.getText());
+ }
+
+ public String getConfigString() {
+ return this.configStringField.getText().substring(3);
+ }
+
+ public CustomNamesSet getCustomNames() {
+ return customNames;
+ }
+
+ private void presetFileButtonActionPerformed() {// GEN-FIRST:event_presetFileButtonActionPerformed
+ presetFileChooser.setSelectedFile(null);
+ int returnVal = presetFileChooser.showOpenDialog(this);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ File fh = presetFileChooser.getSelectedFile();
+ try {
+ DataInputStream dis = new DataInputStream(new FileInputStream(fh));
+ int checkInt = dis.readInt();
+ if (checkInt != Version.VERSION) {
+ dis.close();
+ promptForDifferentRandomizerVersion(checkInt);
+ return;
+ }
+ long seed = dis.readLong();
+ String preset = dis.readUTF();
+ customNames = new CustomNamesSet(dis);
+ changeFieldsWithoutCheck = true;
+ this.randomSeedField.setText(Long.toString(seed));
+ this.configStringField.setText(checkInt + "" + preset);
+ changeFieldsWithoutCheck = false;
+ if (checkValues()) {
+ this.randomSeedField.setEnabled(false);
+ this.configStringField.setEnabled(false);
+ this.presetFileField.setText(fh.getAbsolutePath());
+ } else {
+ this.randomSeedField.setText("");
+ this.configStringField.setText("");
+ this.randomSeedField.setEnabled(true);
+ this.configStringField.setEnabled(true);
+ this.presetFileField.setText("");
+ customNames = null;
+ JOptionPane.showMessageDialog(this, bundle.getString("PresetLoadDialog.invalidSeedFile"));
+ }
+ dis.close();
+ } catch (IOException ex) {
+ JOptionPane.showMessageDialog(this, bundle.getString("PresetLoadDialog.loadingSeedFileFailed"));
+ }
+ }
+ }// GEN-LAST:event_presetFileButtonActionPerformed
+
+ private void romFileButtonActionPerformed() {// GEN-FIRST:event_romFileButtonActionPerformed
+ romFileChooser.setSelectedFile(null);
+ int returnVal = romFileChooser.showOpenDialog(this);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ final File fh = romFileChooser.getSelectedFile();
+ for (RomHandler.Factory rhf : parentGUI.checkHandlers) {
+ if (rhf.isLoadable(fh.getAbsolutePath())) {
+ final RomHandler checkHandler = rhf.create(RandomSource.instance());
+ if (!NewRandomizerGUI.usedLauncher && checkHandler instanceof Abstract3DSRomHandler) {
+ String message = bundle.getString("GUI.pleaseUseTheLauncher");
+ Object[] messages = {message};
+ JOptionPane.showMessageDialog(this, messages);
+ return;
+ }
+ final JDialog opDialog = new OperationDialog(bundle.getString("GUI.loadingText"), this,
+ true);
+ Thread t = new Thread(() -> {
+ SwingUtilities.invokeLater(() -> opDialog.setVisible(true));
+ try {
+ checkHandler.loadRom(fh.getAbsolutePath());
+ } catch (Exception ex) {
+ JOptionPane.showMessageDialog(PresetLoadDialog.this,
+ bundle.getString("GUI.loadFailedNoLog"));
+ }
+ SwingUtilities.invokeLater(() -> {
+ opDialog.setVisible(false);
+ if (checkHandler.getROMName().equals(requiredName)) {
+ // Got it
+ romFileField.setText(fh.getAbsolutePath());
+ currentROM = checkHandler;
+ acceptButton.setEnabled(true);
+ return;
+ } else {
+ JOptionPane.showMessageDialog(PresetLoadDialog.this, String.format(
+ bundle.getString("PresetLoadDialog.notRequiredROM"), requiredName,
+ checkHandler.getROMName()));
+ return;
+ }
+ });
+ });
+ t.start();
+ return;
+ }
+ }
+ JOptionPane.showMessageDialog(this,
+ String.format(bundle.getString("GUI.unsupportedRom"), fh.getName()));
+ }
+ }// GEN-LAST:event_romFileButtonActionPerformed
+
+ private void acceptButtonActionPerformed() {// GEN-FIRST:event_acceptButtonActionPerformed
+ if (customNames == null) {
+ try {
+ customNames = FileFunctions.getCustomNames();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ completed = true;
+ this.setVisible(false);
+ }// GEN-LAST:event_acceptButtonActionPerformed
+
+ private void cancelButtonActionPerformed() {// GEN-FIRST:event_cancelButtonActionPerformed
+ completed = false;
+ this.setVisible(false);
+ }// GEN-LAST:event_cancelButtonActionPerformed
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ // <editor-fold defaultstate="collapsed"
+ // desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ presetFileChooser = new JFileChooser();
+ romFileChooser = new JFileChooser();
+ presetFileLabel = new javax.swing.JLabel();
+ presetFileField = new JTextField();
+ presetFileButton = new javax.swing.JButton();
+ orLabel = new javax.swing.JLabel();
+ seedBoxLabel = new javax.swing.JLabel();
+ randomSeedField = new JTextField();
+ configStringBoxLabel = new javax.swing.JLabel();
+ configStringField = new JTextField();
+ romRequiredLabel = new javax.swing.JLabel();
+ romFileBoxLabel = new javax.swing.JLabel();
+ romFileField = new JTextField();
+ romFileButton = new javax.swing.JButton();
+ acceptButton = new javax.swing.JButton();
+ cancelButton = new javax.swing.JButton();
+
+ presetFileChooser.setFileFilter(new PresetFileFilter());
+
+ romFileChooser.setFileFilter(new ROMFilter());
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+ java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("com/pkrandom/newgui/Bundle"); // NOI18N
+ setTitle(bundle.getString("PresetLoadDialog.title")); // NOI18N
+ setModal(true);
+ setResizable(false);
+
+ presetFileLabel.setText(bundle.getString("PresetLoadDialog.presetFileLabel.text")); // NOI18N
+
+ presetFileField.setEditable(false);
+
+ presetFileButton.setText(bundle.getString("PresetLoadDialog.presetFileButton.text")); // NOI18N
+ presetFileButton.addActionListener(evt -> presetFileButtonActionPerformed());
+
+ orLabel.setFont(new java.awt.Font("Tahoma", Font.BOLD, 11)); // NOI18N
+ orLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+ orLabel.setText(bundle.getString("PresetLoadDialog.orLabel.text")); // NOI18N
+
+ seedBoxLabel.setText(bundle.getString("PresetLoadDialog.seedBoxLabel.text")); // NOI18N
+
+ configStringBoxLabel.setText(bundle.getString("PresetLoadDialog.configStringBoxLabel.text")); // NOI18N
+
+ romRequiredLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+ romRequiredLabel.setText(bundle.getString("PresetLoadDialog.romRequiredLabel.text")); // NOI18N
+
+ romFileBoxLabel.setText(bundle.getString("PresetLoadDialog.romFileBoxLabel.text")); // NOI18N
+
+ romFileField.setEditable(false);
+
+ romFileButton.setText(bundle.getString("PresetLoadDialog.romFileButton.text")); // NOI18N
+ romFileButton.addActionListener(evt -> romFileButtonActionPerformed());
+
+ acceptButton.setText(bundle.getString("PresetLoadDialog.acceptButton.text")); // NOI18N
+ acceptButton.addActionListener(evt -> acceptButtonActionPerformed());
+
+ cancelButton.setText(bundle.getString("PresetLoadDialog.cancelButton.text")); // NOI18N
+ cancelButton.addActionListener(evt -> cancelButtonActionPerformed());
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(layout
+ .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(
+ layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+ .addComponent(romFileBoxLabel,
+ javax.swing.GroupLayout.Alignment.LEADING,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(presetFileLabel,
+ javax.swing.GroupLayout.Alignment.LEADING,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(seedBoxLabel, javax.swing.GroupLayout.Alignment.LEADING,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(configStringBoxLabel,
+ javax.swing.GroupLayout.Alignment.LEADING,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addGap(18, 18, 18)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(
+ layout.createSequentialGroup()
+ .addComponent(acceptButton)
+ .addPreferredGap(
+ javax.swing.LayoutStyle.ComponentPlacement.RELATED,
+ 169, Short.MAX_VALUE)
+ .addComponent(cancelButton))
+ .addComponent(randomSeedField).addComponent(configStringField)
+ .addComponent(presetFileField).addComponent(romFileField))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+ .addComponent(presetFileButton, javax.swing.GroupLayout.PREFERRED_SIZE,
+ 26, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(romFileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 1,
+ Short.MAX_VALUE)).addGap(12, 12, 12))
+ .addComponent(orLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
+ Short.MAX_VALUE)
+ .addComponent(romRequiredLabel, javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
+ layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
+ layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(presetFileLabel)
+ .addComponent(presetFileField, javax.swing.GroupLayout.PREFERRED_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(presetFileButton))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(orLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(seedBoxLabel)
+ .addComponent(randomSeedField, javax.swing.GroupLayout.PREFERRED_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(configStringBoxLabel)
+ .addComponent(configStringField, javax.swing.GroupLayout.PREFERRED_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(romRequiredLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(romFileBoxLabel)
+ .addComponent(romFileField, javax.swing.GroupLayout.PREFERRED_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(romFileButton))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 23, Short.MAX_VALUE)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(acceptButton).addComponent(cancelButton)).addContainerGap()));
+
+ pack();
+ }// </editor-fold>//GEN-END:initComponents
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JButton acceptButton;
+ private javax.swing.JButton cancelButton;
+ private javax.swing.JLabel configStringBoxLabel;
+ private JTextField configStringField;
+ private javax.swing.JLabel orLabel;
+ private javax.swing.JButton presetFileButton;
+ private JFileChooser presetFileChooser;
+ private JTextField presetFileField;
+ private javax.swing.JLabel presetFileLabel;
+ private JTextField randomSeedField;
+ private javax.swing.JLabel romFileBoxLabel;
+ private javax.swing.JButton romFileButton;
+ private JFileChooser romFileChooser;
+ private JTextField romFileField;
+ private javax.swing.JLabel romRequiredLabel;
+ private javax.swing.JLabel seedBoxLabel;
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/src/com/pkrandom/newgui/PresetMakeDialog.java b/src/com/pkrandom/newgui/PresetMakeDialog.java
new file mode 100644
index 0000000..da91e71
--- /dev/null
+++ b/src/com/pkrandom/newgui/PresetMakeDialog.java
@@ -0,0 +1,265 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- PresetMakeDialog.java - a dialog to allow preset pairs to either be --*/
+/*-- copied down or saved to a binary file for --*/
+/*-- later use. --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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.pkrandom.FileFunctions;
+import com.pkrandom.Settings;
+import com.pkrandom.SysConstants;
+import com.pkrandom.Version;
+
+import javax.swing.*;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.io.*;
+
+/**
+ *
+ * @author Stewart
+ */
+public class PresetMakeDialog extends javax.swing.JDialog {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 7663903108783731673L;
+ private long seed;
+ private String configString;
+
+ /**
+ * Creates new form PresetMakeDialog
+ */
+ public PresetMakeDialog(java.awt.Frame parent, long seed, String configString) {
+ super(parent, true);
+ initComponents();
+ randomSeedField.setText(Long.toString(seed));
+ configStringField.setText(Version.VERSION + "" + configString);
+ this.seed = seed;
+ this.configString = configString;
+ presetFileChooser.setCurrentDirectory(new File("./"));
+ this.randomSeedField.addMouseListener(new SelectTextListener(this.randomSeedField));
+ this.configStringField.addMouseListener(new SelectTextListener(this.configStringField));
+ setLocationRelativeTo(parent);
+ setVisible(true);
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ // <editor-fold defaultstate="collapsed"
+ // <editor-fold defaultstate="collapsed"
+ // desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ presetFileChooser = new JFileChooser();
+ gameRandomizedLabel = new javax.swing.JLabel();
+ settingsToGiveLabel = new javax.swing.JLabel();
+ seedFieldLabel = new javax.swing.JLabel();
+ randomSeedField = new JTextField();
+ configStringFieldLabel = new javax.swing.JLabel();
+ configStringField = new JTextField();
+ canProduceFileLabel = new javax.swing.JLabel();
+ produceFileButton = new javax.swing.JButton();
+ doneButton = new javax.swing.JButton();
+
+ presetFileChooser.setFileFilter(new PresetFileFilter());
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+ java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("com/pkrandom/newgui/Bundle"); // NOI18N
+ setTitle(bundle.getString("PresetMakeDialog.title")); // NOI18N
+ setModal(true);
+ setResizable(false);
+
+ gameRandomizedLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+ gameRandomizedLabel.setText(bundle.getString("PresetMakeDialog.gameRandomizedLabel.text")); // NOI18N
+
+ settingsToGiveLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+ settingsToGiveLabel.setText(bundle.getString("PresetMakeDialog.settingsToGiveLabel.text")); // NOI18N
+
+ seedFieldLabel.setText(bundle.getString("PresetMakeDialog.seedFieldLabel.text")); // NOI18N
+
+ randomSeedField.setEditable(false);
+
+ configStringFieldLabel.setText(bundle.getString("PresetMakeDialog.configStringFieldLabel.text")); // NOI18N
+
+ configStringField.setEditable(false);
+
+ canProduceFileLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
+ canProduceFileLabel.setText(bundle.getString("PresetMakeDialog.canProduceFileLabel.text")); // NOI18N
+
+ produceFileButton.setText(bundle.getString("PresetMakeDialog.produceFileButton.text")); // NOI18N
+ produceFileButton.addActionListener(evt -> produceFileButtonActionPerformed());
+
+ doneButton.setText(bundle.getString("PresetMakeDialog.doneButton.text")); // NOI18N
+ doneButton.addActionListener(evt -> doneButtonActionPerformed());
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(layout
+ .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(gameRandomizedLabel, javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(settingsToGiveLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 599, Short.MAX_VALUE)
+ .addGroup(
+ layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(seedFieldLabel).addComponent(configStringFieldLabel))
+ .addGap(18, 18, 18)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(randomSeedField).addComponent(configStringField))
+ .addContainerGap())
+ .addComponent(canProduceFileLabel, javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(
+ layout.createSequentialGroup()
+ .addGap(67, 67, 67)
+ .addComponent(produceFileButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
+ javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(doneButton)
+ .addGap(66, 66, 66)));
+ layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
+ layout.createSequentialGroup()
+ .addComponent(gameRandomizedLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(settingsToGiveLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(seedFieldLabel)
+ .addComponent(randomSeedField, javax.swing.GroupLayout.PREFERRED_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(configStringFieldLabel)
+ .addComponent(configStringField, javax.swing.GroupLayout.PREFERRED_SIZE,
+ javax.swing.GroupLayout.DEFAULT_SIZE,
+ javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(canProduceFileLabel)
+ .addGap(18, 18, 18)
+ .addGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(produceFileButton).addComponent(doneButton))
+ .addGap(0, 11, Short.MAX_VALUE)));
+
+ pack();
+ }// </editor-fold>//GEN-END:initComponents
+
+ private void produceFileButtonActionPerformed() {// GEN-FIRST:event_produceFileButtonActionPerformed
+ presetFileChooser.setSelectedFile(null);
+ int returnVal = presetFileChooser.showSaveDialog(this);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ File fh = presetFileChooser.getSelectedFile();
+ // Fix extension?
+ fh = FileFunctions.fixFilename(fh, "rndp");
+ try {
+ DataOutputStream dos = new DataOutputStream(new FileOutputStream(fh));
+ dos.writeInt(Version.VERSION);
+ dos.writeLong(seed);
+ dos.writeUTF(configString);
+ byte[] customnames = readFile(FileFunctions.openConfig(SysConstants.customNamesFile));
+ dos.write(customnames);
+ dos.close();
+ JOptionPane.showMessageDialog(this, "Preset file saved to\n" + fh.getAbsolutePath());
+ } catch (IOException ex) {
+ JOptionPane.showMessageDialog(this, "Could not save the preset file.");
+ }
+ }
+ }// GEN-LAST:event_produceFileButtonActionPerformed
+
+ private static byte[] readFile(InputStream is) throws IOException {
+ byte[] file = FileFunctions.readFullyIntoBuffer(is, is.available());
+ is.close();
+ return file;
+ }
+
+ private void doneButtonActionPerformed() {// GEN-FIRST:event_doneButtonActionPerformed
+ this.setVisible(false);
+ }// GEN-LAST:event_doneButtonActionPerformed
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JLabel canProduceFileLabel;
+ private JTextField configStringField;
+ private javax.swing.JLabel configStringFieldLabel;
+ private javax.swing.JButton doneButton;
+ private javax.swing.JLabel gameRandomizedLabel;
+ private JFileChooser presetFileChooser;
+ private javax.swing.JButton produceFileButton;
+ private JTextField randomSeedField;
+ private javax.swing.JLabel seedFieldLabel;
+ private javax.swing.JLabel settingsToGiveLabel;
+
+ // End of variables declaration//GEN-END:variables
+
+ public class SelectTextListener implements MouseListener {
+
+ private JTextField fieldFor;
+
+ public SelectTextListener(JTextField fieldFor) {
+ this.fieldFor = fieldFor;
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent arg0) {
+ // select all text
+ SwingUtilities.invokeLater(() -> fieldFor.selectAll());
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent arg0) {
+ // do nothing
+
+ }
+
+ @Override
+ public void mouseExited(MouseEvent arg0) {
+ // do nothing
+
+ }
+
+ @Override
+ public void mousePressed(MouseEvent arg0) {
+ // do nothing
+
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent arg0) {
+ // do nothing
+
+ }
+
+ }
+}
diff --git a/src/com/pkrandom/newgui/QSFileFilter.java b/src/com/pkrandom/newgui/QSFileFilter.java
new file mode 100644
index 0000000..cfdb567
--- /dev/null
+++ b/src/com/pkrandom/newgui/QSFileFilter.java
@@ -0,0 +1,55 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- PresetFileFilter.java - a file filter for the "randomization presets" --*/
+/*-- which allow the same random ROM to be produced--*/
+/*-- on demand. --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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 javax.swing.filechooser.FileFilter;
+import java.io.File;
+
+public class QSFileFilter extends FileFilter {
+
+ @Override
+ public boolean accept(File arg0) {
+ if (arg0.isDirectory()) {
+ return true; // needed to allow directory navigation
+ }
+ String filename = arg0.getName();
+ if (!filename.contains(".")) {
+ return false;
+ }
+ String extension = arg0.getName().substring(arg0.getName().lastIndexOf('.') + 1);
+ return extension.toLowerCase().equals("rnqs");
+ }
+
+ @Override
+ public String getDescription() {
+ return "Randomization Quick Settings (*.rnqs)";
+ }
+
+}
diff --git a/src/com/pkrandom/newgui/ROMFilter.java b/src/com/pkrandom/newgui/ROMFilter.java
new file mode 100644
index 0000000..68f7c55
--- /dev/null
+++ b/src/com/pkrandom/newgui/ROMFilter.java
@@ -0,0 +1,56 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.pkrandom.newgui;
+
+/*----------------------------------------------------------------------------*/
+/*-- ROMFilter.java - a file filter for the various games which can be --*/
+/*-- randomized with this program. --*/
+/*-- --*/
+/*-- Part of "Universal Pokemon Randomizer ZX" by the UPR-ZX team --*/
+/*-- 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 javax.swing.filechooser.FileFilter;
+import java.io.File;
+
+public class ROMFilter extends FileFilter {
+
+ @Override
+ public boolean accept(File arg0) {
+ if (arg0.isDirectory()) {
+ return true; // needed to allow directory navigation
+ }
+ String filename = arg0.getName();
+ if (!filename.contains(".")) {
+ return false;
+ }
+ String extension = arg0.getName().substring(arg0.getName().lastIndexOf('.') + 1).toLowerCase();
+ return extension.equals("gb") || extension.equals("sgb") || extension.equals("gbc")
+ || extension.equals("gba") || extension.equals("nds")
+ || extension.equals("3ds") || extension.equals("cci") || extension.equals("cxi") || extension.equals("cia") || extension.equals("app");
+ }
+
+ @Override
+ public String getDescription() {
+ return "Nintendo GB(C/A)/(3)DS ROM File (*.gb,*.sgb,*.gbc,*.gba,*.nds,*.3ds,*.cci,*.cxi,*.cia,*.app)";
+ }
+
+}
diff --git a/src/com/pkrandom/newgui/emptyIcon.png b/src/com/pkrandom/newgui/emptyIcon.png
new file mode 100644
index 0000000..d21ab66
--- /dev/null
+++ b/src/com/pkrandom/newgui/emptyIcon.png
Binary files differ
diff --git a/src/com/pkrandom/newgui/loading.gif b/src/com/pkrandom/newgui/loading.gif
new file mode 100644
index 0000000..3288d10
--- /dev/null
+++ b/src/com/pkrandom/newgui/loading.gif
Binary files differ