Randomizer BST fix

This commit is contained in:
infinitefusion
2022-08-19 17:19:15 -04:00
parent 5571b7a2b3
commit 33074417d2
18 changed files with 40995 additions and 40015 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -52,7 +52,7 @@ class RandomizerOptionsScene < PokemonOption_Scene
openGymOptionsMenu()
end
$game_switches[SWITCH_RANDOMIZE_GYMS_SEPARATELY] = value == 0
}, "Randomize gym trainers/leaders separately from regular trainers (All Pokémon of a single type)"
}, "Limit gym trainers to a single type"
),
EnumOption.new(_INTL("Wild Pokémon"), [_INTL("On"), _INTL("Off")],
@@ -239,7 +239,7 @@ class RandomizerWildPokemonOptionsScene < PokemonOption_Scene
$game_switches[REGULAR_TO_FUSIONS] = value == 0
},"Include fused Pokémon in the randomize pool for wild Pokémon"
),
EnumOption.new(_INTL("Custom sprites only (Slow)"), [_INTL("On"), _INTL("Off")],
EnumOption.new(_INTL("Custom sprites only"), [_INTL("On"), _INTL("Off")],
proc { $game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] ? 0 : 1 },
proc { |value|
$game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] = value == 0

View File

@@ -318,6 +318,8 @@ end
def Kernel.pbShuffleTrainers(bst_range = 50,customsOnly=false,customsList=nil)
bst_range = pbGet(VAR_RANDOMIZER_TRAINER_BST)
if customsOnly && customsList == nil
customsOnly = false
end
@@ -329,7 +331,7 @@ def Kernel.pbShuffleTrainers(bst_range = 50,customsOnly=false,customsList=nil)
new_party = []
for poke in trainer.pokemon
old_poke = GameData::Species.get(poke[:species]).id_number
new_poke = customsOnly ? getNewCustomSpecies(old_poke,customsList) : getNewSpecies(old_poke)
new_poke = customsOnly ? getNewCustomSpecies(old_poke,customsList,bst_range) : getNewSpecies(old_poke,bst_range)
new_party << new_poke
end
randomTrainersHash[trainer.id] = new_party
@@ -366,6 +368,7 @@ end
def Kernel.pbShuffleTrainersCustom(bst_range = 50)
randomTrainersHash = Hash.new
bst_range = pbGet(VAR_RANDOMIZER_TRAINER_BST)
Kernel.pbMessage(_INTL("Parsing custom sprites folder"))
customsList = getCustomSpeciesList()

View File

@@ -4,8 +4,8 @@ class PokemonGlobalMetadata
attr_accessor :randomTrainersHash
attr_accessor :randomGymTrainersHash
alias random_init initialize
def initialize
random_init
@randomGymTrainersHash = nil
@@ -14,6 +14,57 @@ class PokemonGlobalMetadata
end
end
#pense pas que c'est utilisé mais bon...
def get_pokemon_list(include_fusions=false)
#Create array of all pokemon dex numbers
pokeArray = []
monLimit = include_fusions ? PBSpecies.maxValue : NB_POKEMON - 1
for i in 1..monLimit
pokeArray.push(i)
end
#randomize hash
return pokeArray
end
def get_randomized_bst_hash(poke_list, bst_range,show_progress=true)
bst_hash = Hash.new
for i in 1..NB_POKEMON - 1
show_shuffle_progress(i) if show_progress
baseStats = getBaseStatsFormattedForRandomizer(i)
statsTotal = getStatsTotal(baseStats)
targetStats_max = statsTotal + bst_range
targetStats_min = statsTotal - bst_range
max_bst_allowed=targetStats_max
min_bst_allowed=targetStats_min
#if a match, add to hash, remove from array, and cycle to next poke in dex
playShuffleSE(i)
random_poke = poke_list.sample
random_poke_bst=getStatsTotal(getBaseStatsFormattedForRandomizer(random_poke))
j=0
while(random_poke_bst <= min_bst_allowed || random_poke_bst >= max_bst_allowed)
random_poke = poke_list.sample
random_poke_bst=getStatsTotal(getBaseStatsFormattedForRandomizer(random_poke))
j+=1
if j % 5 ==0 #to avoid infinite loops if can't find anything
min_bst_allowed-=1
max_bst_allowed+=1
end
end
bst_hash[i] = random_poke
end
return bst_hash
end
def show_shuffle_progress(i)
if i % 2 == 0
n = (i.to_f/NB_POKEMON)*100
Kernel.pbMessageNoSound(_INTL("\\ts[]Shuffling wild Pokémon...\\n {1}%\\^",sprintf('%.2f', n),NB_POKEMON))
end
end
##############
# randomizer shuffle
# ##############
@@ -23,75 +74,77 @@ def Kernel.pbShuffleDex(range=50,type=0)
#type 0: BST
#type 1: full random
range = 1 if range == 0
only_customs = $game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS]
should_include_fusions = $game_switches[SWITCH_RANDOM_WILD_TO_FUSION]
# create hash
psuedoHash = Hash.new
psuedoBSTHash = Hash.new
#Create array of all pokemon dex numbers
pokeArray = []
monLimit = type == 1 ? PBSpecies.maxValue : NB_POKEMON-1
for i in 1..monLimit
pokeArray.push(i)
end
#randomize hash
pokeArrayRand = pokeArray.dup
pokeArrayRand.shuffle!
pokeArray.insert(0,nil)
######
#on remet arceus a la fin
pokeArray.push(NB_POKEMON)
# fill random hash
#random hash will have to be accessed by number, not internal name
for i in 1...pokeArrayRand.length
psuedoHash[i]=pokeArrayRand[i]
pokemon_list = only_customs ? getCustomSpeciesList() : get_pokemon_list(should_include_fusions)
$PokemonGlobal.psuedoBSTHash = get_randomized_bst_hash(pokemon_list,range,should_include_fusions)
end
#use pokeArrayRand to fill in the BST hash also
#loop through the actual dex, and use the first mon in pokeArrayRand with
#BST in the same 100 range
for i in 1..NB_POKEMON-1
baseStats=getBaseStatsFormattedForRandomizer(i)
baseStat_target = 0
#
# # ######
# # #on remet arceus a la fin
# # pokeArray.push(NB_POKEMON)
#
# # fill random hash
# #random hash will have to be accessed by number, not internal name
#
# #use pokeArrayRand to fill in the BST hash also
# #loop through the actual dex, and use the first mon in pokeArrayRand with
# #BST in the same 100 range
#
#
#
#
# for i in 1..NB_POKEMON-1
# baseStats=getBaseStatsFormattedForRandomizer(i)
# baseStat_target = 0
# for k in 0...baseStats.length
# baseStat_target+=baseStats[k]
# end
# baseStat_target = (baseStat_target+range).floor
# for j in 1...pokeArrayRand.length
# if $game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] && $game_switches[SWITCH_RANDOM_WILD_TO_FUSION] && !customSpriteExists(pokeArrayRand[j])
# next
# end
# baseStats=getBaseStatsFormattedForRandomizer(pokeArrayRand[j])
# baseStat_temp = 0
# for l in 0...baseStats.length
# baseStat_temp+=baseStats[l]
# end
# baseStat_temp = (baseStat_temp+range).floor
#
#
# playShuffleSE(i)
#
# #if a match, add to hash, remove from array, and cycle to next poke in dex
# if (baseStat_temp == baseStat_target)
# psuedoBSTHash[i]=pokeArrayRand[j]
# pokeArrayRand.delete(pokeArrayRand[j])
# if i % 2 == 0 && type == 1
# n = (i.to_f/NB_POKEMON)*100
# Kernel.pbMessageNoSound(_INTL("\\ts[]Shuffling wild Pokémon...\\n {1}%\\^",sprintf('%.2f', n),NB_POKEMON))
# end
# break
# end
# end
# end
# psuedoBSTHash[NB_POKEMON] = NB_POKEMON
# #add hashes to global data
# $PokemonGlobal.psuedoHash = psuedoHash
# $PokemonGlobal.psuedoBSTHash = psuedoBSTHash
# end
def getStatsTotal(baseStats)
bst = 0
for k in 0...baseStats.length
baseStat_target+=baseStats[k]
bst += baseStats[k]
end
baseStat_target = (baseStat_target/range).floor
for j in 1...pokeArrayRand.length
if $game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] && $game_switches[SWITCH_RANDOM_WILD_TO_FUSION] && !customSpriteExists(pokeArrayRand[j])
next
end
baseStats=getBaseStatsFormattedForRandomizer(pokeArrayRand[j])
baseStat_temp = 0
for l in 0...baseStats.length
baseStat_temp+=baseStats[l]
end
baseStat_temp = (baseStat_temp/range).floor
playShuffleSE(i)
#if a match, add to hash, remove from array, and cycle to next poke in dex
if (baseStat_temp == baseStat_target)
psuedoBSTHash[i]=pokeArrayRand[j]
pokeArrayRand.delete(pokeArrayRand[j])
if i % 2 == 0 && type == 1
n = (i.to_f/NB_POKEMON)*100
Kernel.pbMessageNoSound(_INTL("\\ts[]Shuffling wild Pokémon...\\n {1}%\\^",sprintf('%.2f', n),NB_POKEMON))
end
break
end
end
end
psuedoBSTHash[NB_POKEMON] = NB_POKEMON
#add hashes to global data
$PokemonGlobal.psuedoHash = psuedoHash
$PokemonGlobal.psuedoBSTHash = psuedoBSTHash
return bst
end
def isPartArceus(poke, type = 0)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff