mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2026-02-04 04:11:03 +00:00
Randomizer BST fix
This commit is contained in:
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.
@@ -52,7 +52,7 @@ class RandomizerOptionsScene < PokemonOption_Scene
|
|||||||
openGymOptionsMenu()
|
openGymOptionsMenu()
|
||||||
end
|
end
|
||||||
$game_switches[SWITCH_RANDOMIZE_GYMS_SEPARATELY] = value == 0
|
$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")],
|
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
|
$game_switches[REGULAR_TO_FUSIONS] = value == 0
|
||||||
},"Include fused Pokémon in the randomize pool for wild Pokémon"
|
},"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 { $game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] ? 0 : 1 },
|
||||||
proc { |value|
|
proc { |value|
|
||||||
$game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] = value == 0
|
$game_switches[SWITCH_RANDOM_WILD_ONLY_CUSTOMS] = value == 0
|
||||||
|
|||||||
@@ -318,6 +318,8 @@ end
|
|||||||
|
|
||||||
|
|
||||||
def Kernel.pbShuffleTrainers(bst_range = 50,customsOnly=false,customsList=nil)
|
def Kernel.pbShuffleTrainers(bst_range = 50,customsOnly=false,customsList=nil)
|
||||||
|
bst_range = pbGet(VAR_RANDOMIZER_TRAINER_BST)
|
||||||
|
|
||||||
if customsOnly && customsList == nil
|
if customsOnly && customsList == nil
|
||||||
customsOnly = false
|
customsOnly = false
|
||||||
end
|
end
|
||||||
@@ -329,7 +331,7 @@ def Kernel.pbShuffleTrainers(bst_range = 50,customsOnly=false,customsList=nil)
|
|||||||
new_party = []
|
new_party = []
|
||||||
for poke in trainer.pokemon
|
for poke in trainer.pokemon
|
||||||
old_poke = GameData::Species.get(poke[:species]).id_number
|
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
|
new_party << new_poke
|
||||||
end
|
end
|
||||||
randomTrainersHash[trainer.id] = new_party
|
randomTrainersHash[trainer.id] = new_party
|
||||||
@@ -366,6 +368,7 @@ end
|
|||||||
|
|
||||||
def Kernel.pbShuffleTrainersCustom(bst_range = 50)
|
def Kernel.pbShuffleTrainersCustom(bst_range = 50)
|
||||||
randomTrainersHash = Hash.new
|
randomTrainersHash = Hash.new
|
||||||
|
bst_range = pbGet(VAR_RANDOMIZER_TRAINER_BST)
|
||||||
|
|
||||||
Kernel.pbMessage(_INTL("Parsing custom sprites folder"))
|
Kernel.pbMessage(_INTL("Parsing custom sprites folder"))
|
||||||
customsList = getCustomSpeciesList()
|
customsList = getCustomSpeciesList()
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ class PokemonGlobalMetadata
|
|||||||
attr_accessor :randomTrainersHash
|
attr_accessor :randomTrainersHash
|
||||||
attr_accessor :randomGymTrainersHash
|
attr_accessor :randomGymTrainersHash
|
||||||
|
|
||||||
|
|
||||||
alias random_init initialize
|
alias random_init initialize
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
random_init
|
random_init
|
||||||
@randomGymTrainersHash = nil
|
@randomGymTrainersHash = nil
|
||||||
@@ -14,6 +14,57 @@ class PokemonGlobalMetadata
|
|||||||
end
|
end
|
||||||
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
|
# randomizer shuffle
|
||||||
# ##############
|
# ##############
|
||||||
@@ -23,75 +74,77 @@ def Kernel.pbShuffleDex(range=50,type=0)
|
|||||||
#type 0: BST
|
#type 0: BST
|
||||||
#type 1: full random
|
#type 1: full random
|
||||||
range = 1 if range == 0
|
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
|
# create hash
|
||||||
psuedoHash = Hash.new
|
pokemon_list = only_customs ? getCustomSpeciesList() : get_pokemon_list(should_include_fusions)
|
||||||
psuedoBSTHash = Hash.new
|
$PokemonGlobal.psuedoBSTHash = get_randomized_bst_hash(pokemon_list,range,should_include_fusions)
|
||||||
|
|
||||||
#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]
|
|
||||||
end
|
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
|
for k in 0...baseStats.length
|
||||||
baseStat_target+=baseStats[k]
|
bst += baseStats[k]
|
||||||
end
|
end
|
||||||
baseStat_target = (baseStat_target/range).floor
|
return bst
|
||||||
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
|
end
|
||||||
|
|
||||||
def isPartArceus(poke, type = 0)
|
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.
75370
PBS/encounters.txt
75370
PBS/encounters.txt
File diff suppressed because it is too large
Load Diff
5382
PBS/trainers.txt
5382
PBS/trainers.txt
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user