\universal-pokemon-randomizer-changes\src\com\dabomstew\pkrandom\Randomizer.java @@ -295,10 +295,12 @@ public class Randomizer { } else if (settings.getTrainersMod() == Settings.TrainersMod.TYPE_THEMED) { romHandler.typeThemeTrainerPokes(settings.isTrainersUsePokemonOfSimilarStrength(), settings.isTrainersMatchTypingDistribution(), settings.isTrainersBlockLegendaries(), settings.isTrainersBlockEarlyWonderGuard(), settings.isTrainersLevelModified() ? settings.getTrainersLevelModifier() : 0); + } else if (settings.isTrainersLevelModified()) { + romHandler.modifyTrainerPokeLevels(settings.getTrainersLevelModifier()); } if ((settings.getTrainersMod() != Settings.TrainersMod.UNCHANGED || settings.getStartersMod() != Settings.StartersMod.UNCHANGED) && settings.isRivalCarriesStarterThroughout()) { romHandler.rivalCarriesStarter(); @@ -706,11 +708,12 @@ public class Randomizer { log.println(); } } private void maybeLogTrainerChanges(final PrintStream log, final RomHandler romHandler) { - if (settings.getTrainersMod() == Settings.TrainersMod.UNCHANGED && !settings.isRivalCarriesStarterThroughout()) { + if (settings.getTrainersMod() == Settings.TrainersMod.UNCHANGED && !settings.isRivalCarriesStarterThroughout() + && !settings.isTrainersLevelModified() && !settings.isTrainersForceFullyEvolved()) { log.println("Trainers: Unchanged." + NEWLINE); } else { log.println("--Trainers Pokemon--"); List trainers = romHandler.getTrainers(); int idx = 0; \universal-pokemon-randomizer-changes\src\com\dabomstew\pkrandom\romhandlers\RomHandler.java @@ -162,11 +162,13 @@ public interface RomHandler { public void setTrainers(List trainerData); public void randomizeTrainerPokes(boolean usePowerLevels, boolean noLegendaries, boolean noEarlyWonderGuard, int levelModifier); - + + public void modifyTrainerPokeLevels(int levelModifier); + public void typeThemeTrainerPokes(boolean usePowerLevels, boolean weightByFrequency, boolean noLegendaries, boolean noEarlyWonderGuard, int levelModifier); public void rivalCarriesStarter(); \universal-pokemon-randomizer-changes\src\com\dabomstew\pkrandom\romhandlers\AbstractRomHandler.java @@ -941,10 +941,32 @@ public abstract class AbstractRomHandler implements RomHandler { } // Save it all up this.setTrainers(currentTrainers); } + + @Override + public void modifyTrainerPokeLevels(int levelModifier) { + List currentTrainers = this.getTrainers(); + + // New: randomize the order trainers are randomized in. + // Leads to less predictable results for various modifiers. + // Need to keep the original ordering around for saving though. + List scrambledTrainers = new ArrayList(currentTrainers); + Collections.shuffle(scrambledTrainers, this.random); + + for (Trainer t : scrambledTrainers) { + for (TrainerPokemon tp : t.pokemon) { + if (levelModifier != 0) { + tp.level = Math.min(100, (int) Math.round(tp.level * (1 + levelModifier / 100.0))); + } + } + } + + // Save it all up + this.setTrainers(currentTrainers); + } @Override public void typeThemeTrainerPokes(boolean usePowerLevels, boolean weightByFrequency, boolean noLegendaries, boolean noEarlyWonderGuard, int levelModifier) { checkPokemonRestrictions(); \universal-pokemon-randomizer-changes\src\com\dabomstew\pkrandom\gui\RandomizerGUI.java @@ -1129,11 +1129,13 @@ public class RandomizerGUI extends javax.swing.JFrame { this.tpUnchangedRB.setSelected(true); this.tnRandomizeCB.setEnabled(romHandler.canChangeTrainerText()); this.tcnRandomizeCB.setEnabled(romHandler.canChangeTrainerText()); this.tnRandomizeCB.setVisible(romHandler.canChangeTrainerText()); this.tcnRandomizeCB.setVisible(romHandler.canChangeTrainerText()); - + this.tpForceFullyEvolvedCB.setEnabled(true); + this.tpLevelModifierCB.setEnabled(true); + if (romHandler.generationOfPokemon() < 3) { this.tpNoEarlyShedinjaCB.setVisible(false); } else { this.tpNoEarlyShedinjaCB.setVisible(true); } @@ -1346,14 +1348,12 @@ public class RandomizerGUI extends javax.swing.JFrame { if (this.tpUnchangedRB.isSelected()) { this.tpPowerLevelsCB.setEnabled(false); this.tpNoLegendariesCB.setEnabled(false); this.tpNoEarlyShedinjaCB.setEnabled(false); this.tpNoEarlyShedinjaCB.setSelected(false); - this.tpForceFullyEvolvedCB.setEnabled(false); - this.tpForceFullyEvolvedCB.setSelected(false); - this.tpLevelModifierCB.setEnabled(false); - this.tpLevelModifierCB.setSelected(false); + this.tpForceFullyEvolvedCB.setEnabled(true); + this.tpLevelModifierCB.setEnabled(true); } else { this.tpPowerLevelsCB.setEnabled(true); this.tpNoLegendariesCB.setEnabled(true); this.tpNoEarlyShedinjaCB.setEnabled(true); this.tpForceFullyEvolvedCB.setEnabled(true);