From b817d4f366169e723c573c0da59d5494546430ef Mon Sep 17 00:00:00 2001 From: Rafael Marçalo Date: Thu, 31 Aug 2023 21:40:28 +0100 Subject: Fix issue where Combine Duplicate Abilities can rarely result in duplicate abilities --- .../pkrandom/romhandlers/AbstractRomHandler.java | 48 ++++++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/src/com/sneed/pkrandom/romhandlers/AbstractRomHandler.java b/src/com/sneed/pkrandom/romhandlers/AbstractRomHandler.java index d139998..edf7b50 100755 --- a/src/com/sneed/pkrandom/romhandlers/AbstractRomHandler.java +++ b/src/com/sneed/pkrandom/romhandlers/AbstractRomHandler.java @@ -637,6 +637,37 @@ public abstract class AbstractRomHandler implements RomHandler { } } + private int pickRandomAbilityVariation(int selectedAbility, int... alreadySetAbilities) { + int newAbility = selectedAbility; + + while (true) { + Map> abilityVariations = getAbilityVariations(); + for (int baseAbility: abilityVariations.keySet()) { + if (selectedAbility == baseAbility) { + List variationsForThisAbility = abilityVariations.get(selectedAbility); + newAbility = variationsForThisAbility.get(this.random.nextInt(variationsForThisAbility.size())); + break; + } + } + + boolean repeat = false; + for (int alreadySetAbility : alreadySetAbilities) { + if (alreadySetAbility == newAbility) { + repeat = true; + break; + } + } + + if (!repeat) { + break; + } + + + } + + return newAbility; + } + private int pickRandomAbility(int maxAbility, List bannedAbilities, boolean useVariations, int... alreadySetAbilities) { int newAbility; @@ -658,14 +689,7 @@ public abstract class AbstractRomHandler implements RomHandler { if (!repeat) { if (useVariations) { - Map> abilityVariations = getAbilityVariations(); - for (int baseAbility: abilityVariations.keySet()) { - if (newAbility == baseAbility) { - List variationsForThisAbility = abilityVariations.get(newAbility); - newAbility = variationsForThisAbility.get(this.random.nextInt(variationsForThisAbility.size())); - break; - } - } + newAbility = pickRandomAbilityVariation(newAbility, alreadySetAbilities); } break; } @@ -5268,6 +5292,14 @@ public abstract class AbstractRomHandler implements RomHandler { Collections.shuffle(newItems, this.random); Collections.shuffle(newTMs, this.random); + List oldItems = this.getRegularFieldItems(); + String[] itemNames = this.getItemNames(); + for (int i = 0; i < oldItems.size(); i++) { + String oldName = itemNames[oldItems.get(i)]; + String newName = itemNames[newItems.get(i)]; + System.out.println(oldName + " => " + newName); + } + this.setRegularFieldItems(newItems); this.setFieldTMs(newTMs); } -- cgit v1.2.3