Rearranged some code relating to data and its caching

This commit is contained in:
Maruno17
2020-09-07 22:48:11 +01:00
parent 7221e88be4
commit e987c10472
13 changed files with 414 additions and 380 deletions

View File

@@ -0,0 +1,281 @@
#===============================================================================
# Data caches.
#===============================================================================
class PokemonTemp
attr_accessor :metadata
attr_accessor :townMapData
attr_accessor :encountersData
attr_accessor :phoneData
attr_accessor :regionalDexes
attr_accessor :speciesData
attr_accessor :speciesEggMoves
attr_accessor :speciesMetrics
attr_accessor :speciesMovesets
attr_accessor :speciesTMData
attr_accessor :speciesShadowMovesets
attr_accessor :pokemonFormToSpecies
attr_accessor :trainerTypesData
attr_accessor :trainersData
attr_accessor :moveToAnim
attr_accessor :battleAnims
end
def pbClearData
if $PokemonTemp
$PokemonTemp.metadata = nil
$PokemonTemp.townMapData = nil
$PokemonTemp.encountersData = nil
$PokemonTemp.phoneData = nil
$PokemonTemp.regionalDexes = nil
$PokemonTemp.speciesData = nil
$PokemonTemp.speciesEggMoves = nil
$PokemonTemp.speciesMetrics = nil
$PokemonTemp.speciesMovesets = nil
$PokemonTemp.speciesTMData = nil
$PokemonTemp.speciesShadowMovesets = nil
$PokemonTemp.pokemonFormToSpecies = nil
$PokemonTemp.trainerTypesData = nil
$PokemonTemp.trainersData = nil
$PokemonTemp.moveToAnim = nil
$PokemonTemp.battleAnims = nil
end
MapFactoryHelper.clear
$PokemonEncounters.setup($game_map.map_id) if $game_map && $PokemonEncounters
if pbRgssExists?("Data/Tilesets.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
end
if pbRgssExists?("Data/Tilesets.rvdata")
$data_tilesets = load_data("Data/Tilesets.rvdata")
end
end
#===============================================================================
# Methods to get metadata.
#===============================================================================
def pbLoadMetadata
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.metadata
$PokemonTemp.metadata = load_data("Data/metadata.dat") || []
end
return $PokemonTemp.metadata
end
def pbGetMetadata(map_id, metadata_type)
meta = pbLoadMetadata
return meta[map_id][metadata_type] if meta[map_id]
return nil
end
#===============================================================================
# Method to get Town Map data.
#===============================================================================
def pbLoadTownMapData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.townMapData
$PokemonTemp.townMapData = load_data("Data/town_map.dat")
end
return $PokemonTemp.townMapData
end
#===============================================================================
# Method to get wild encounter data.
#===============================================================================
def pbLoadEncountersData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.encountersData
if pbRgssExists?("Data/encounters.dat")
$PokemonTemp.encountersData = load_data("Data/encounters.dat")
end
end
return $PokemonTemp.encountersData
end
#===============================================================================
# Method to get phone call data.
#===============================================================================
def pbLoadPhoneData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.phoneData
if pbRgssExists?("Data/phone.dat")
$PokemonTemp.phoneData = load_data("Data/phone.dat")
end
end
return $PokemonTemp.phoneData
end
#===============================================================================
# Method to get Regional Dexes data.
#===============================================================================
def pbLoadRegionalDexes
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.regionalDexes
$PokemonTemp.regionalDexes = load_data("Data/regional_dexes.dat")
end
return $PokemonTemp.regionalDexes
end
#===============================================================================
# Methods to get Pokémon species data.
#===============================================================================
def pbLoadSpeciesData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesData
$PokemonTemp.speciesData = load_data("Data/species.dat") || []
end
return $PokemonTemp.speciesData
end
def pbGetSpeciesData(species, form = 0, species_data_type = -1)
species = getID(PBSpecies, species)
s = pbGetFSpeciesFromForm(species, form)
species_data = pbLoadSpeciesData
if species_data_type < 0
return species_data[s] || []
end
return species_data[s][species_data_type] if species_data[s] && species_data[s][species_data_type]
case species_data_type
when SpeciesType2; return nil
when SpeciesBaseStats; return [1, 1, 1, 1, 1, 1]
when SpeciesEffortPoints; return [0, 0, 0, 0, 0, 0]
when SpeciesStepsToHatch, SpeciesHeight, SpeciesWeight; return 1
end
return 0
end
#===============================================================================
# Methods to get egg moves data.
#===============================================================================
def pbLoadEggMovesData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesEggMoves
$PokemonTemp.speciesEggMoves = load_data("Data/species_eggmoves.dat") || []
end
return $PokemonTemp.speciesEggMoves
end
def pbGetSpeciesEggMoves(species, form = 0)
species = getID(PBSpecies, species)
s = pbGetFSpeciesFromForm(species, form)
egg_moves_data = pbLoadEggMovesData
return egg_moves_data[s] || []
end
#===============================================================================
# Method to get Pokémon species metrics (sprite positioning) data.
#===============================================================================
def pbLoadSpeciesMetrics
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesMetrics
$PokemonTemp.speciesMetrics = load_data("Data/species_metrics.dat") || []
end
return $PokemonTemp.speciesMetrics
end
#===============================================================================
# Methods to get Pokémon moveset data.
#===============================================================================
def pbLoadMovesetsData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesMovesets
$PokemonTemp.speciesMovesets = load_data("Data/species_movesets.dat") || []
end
return $PokemonTemp.speciesMovesets
end
def pbGetSpeciesMoveset(species, form = 0)
species = getID(PBSpecies, species)
s = pbGetFSpeciesFromForm(species, form)
movesets_data = pbLoadMovesetsData
return movesets_data[s] || []
end
#===============================================================================
# Method to get TM/Move Tutor compatibility data.
#===============================================================================
def pbLoadSpeciesTMData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesTMData
$PokemonTemp.speciesTMData = load_data("Data/tm.dat") || []
end
return $PokemonTemp.speciesTMData
end
#===============================================================================
# Method to get Shadow Pokémon moveset data.
#===============================================================================
def pbLoadShadowMovesets
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesShadowMovesets
$PokemonTemp.speciesShadowMovesets = load_data("Data/shadow_movesets.dat") || []
end
return $PokemonTemp.speciesShadowMovesets
end
#===============================================================================
# Method to get array that converts species + form to and from fSpecies values.
#===============================================================================
def pbLoadFormToSpecies
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.pokemonFormToSpecies
$PokemonTemp.pokemonFormToSpecies = load_data("Data/form2species.dat")
end
return $PokemonTemp.pokemonFormToSpecies
end
#===============================================================================
# Methods to get trainer type data.
#===============================================================================
def pbLoadTrainerTypesData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.trainerTypesData
$PokemonTemp.trainerTypesData = load_data("Data/trainer_types.dat") || []
end
return $PokemonTemp.trainerTypesData
end
def pbGetTrainerTypeData(trainer_type)
trainer_type_data = pbLoadTrainerTypesData
return trainer_type_data[trainer_type] if trainer_type_data
return nil
end
#===============================================================================
# Methods to get data about individual trainers.
#===============================================================================
def pbLoadTrainersData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.trainersData
$PokemonTemp.trainersData = load_data("Data/trainers.dat") || []
end
return $PokemonTemp.trainersData
end
def pbGetTrainerData(trainer_id, trainer_name, party_id = 0)
trainers_data = pbLoadTrainersData
for t in trainers_data
next if t[0] != trainer_id || t[1] != trainer_name || t[4] != party_id
return t
end
return nil
end
#===============================================================================
# Methods relating to battle animations data.
#===============================================================================
def pbLoadMoveToAnim
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.moveToAnim
$PokemonTemp.moveToAnim = load_data("Data/move2anim.dat") || []
end
return $PokemonTemp.moveToAnim
end
def pbLoadBattleAnimations
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.battleAnims
if pbRgssExists?("Data/PkmnAnimations.rxdata")
$PokemonTemp.battleAnims = load_data("Data/PkmnAnimations.rxdata")
end
end
return $PokemonTemp.battleAnims
end

View File

@@ -23,8 +23,6 @@ class PhoneDatabase
end
end
module PhoneMsgType
Generic = 0
Greeting = 1
@@ -32,8 +30,6 @@ module PhoneMsgType
BattleRequest = 3
end
#===============================================================================
# Global and map metadata
#===============================================================================
@@ -75,8 +71,6 @@ MetadataMapWildCaptureME = 18
MetadataMapSize = 19
MetadataEnvironment = 20
module PokemonMetadata
GlobalTypes = {
"Home" => [MetadataHome, "uuuu"],
@@ -120,8 +114,6 @@ module PokemonMetadata
}
end
#===============================================================================
# Pokémon data
#===============================================================================
@@ -161,8 +153,6 @@ MetricBattlerAltitude = 4
MetricBattlerShadowX = 5
MetricBattlerShadowSize = 6
module PokemonSpeciesData
def self.requiredValues(compilingForms=false)
ret = {
@@ -225,248 +215,3 @@ module PokemonSpeciesData
return ret
end
end
#===============================================================================
# Manipulation methods for metadata, phone data and Pokémon species data
#===============================================================================
class PokemonTemp
attr_accessor :metadata
attr_accessor :townMapData
attr_accessor :encountersData
attr_accessor :phoneData
attr_accessor :regionalDexes
attr_accessor :speciesData
attr_accessor :speciesEggMoves
attr_accessor :speciesMetrics
attr_accessor :speciesMovesets
attr_accessor :speciesTMData
attr_accessor :speciesShadowMovesets
attr_accessor :pokemonFormToSpecies
attr_accessor :trainerTypesData
attr_accessor :trainersData
attr_accessor :moveToAnim
attr_accessor :battleAnims
end
def pbLoadMetadata
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.metadata
$PokemonTemp.metadata = load_data("Data/metadata.dat") || []
end
return $PokemonTemp.metadata
end
def pbGetMetadata(mapid,metadataType)
meta = pbLoadMetadata
return meta[mapid][metadataType] if meta[mapid]
return nil
end
def pbLoadTownMapData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.townMapData
$PokemonTemp.townMapData = load_data("Data/town_map.dat")
end
return $PokemonTemp.townMapData
end
def pbLoadEncountersData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.encountersData
if pbRgssExists?("Data/encounters.dat")
$PokemonTemp.encountersData = load_data("Data/encounters.dat")
end
end
return $PokemonTemp.encountersData
end
def pbLoadPhoneData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.phoneData
if pbRgssExists?("Data/phone.dat")
$PokemonTemp.phoneData = load_data("Data/phone.dat")
end
end
return $PokemonTemp.phoneData
end
def pbLoadRegionalDexes
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.regionalDexes
$PokemonTemp.regionalDexes = load_data("Data/regional_dexes.dat")
end
return $PokemonTemp.regionalDexes
end
def pbLoadSpeciesData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesData
$PokemonTemp.speciesData = load_data("Data/species.dat") || []
end
return $PokemonTemp.speciesData
end
def pbGetSpeciesData(species,form=0,speciesDataType=-1)
species = getID(PBSpecies,species)
s = pbGetFSpeciesFromForm(species,form)
speciesData = pbLoadSpeciesData
if speciesDataType<0
return speciesData[s] || []
end
return speciesData[s][speciesDataType] if speciesData[s] && speciesData[s][speciesDataType]
case speciesDataType
when SpeciesType2; return nil
when SpeciesBaseStats; return [1,1,1,1,1,1]
when SpeciesEffortPoints; return [0,0,0,0,0,0]
when SpeciesStepsToHatch, SpeciesHeight, SpeciesWeight; return 1
end
return 0
end
def pbLoadEggMovesData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesEggMoves
$PokemonTemp.speciesEggMoves = load_data("Data/species_eggmoves.dat") || []
end
return $PokemonTemp.speciesEggMoves
end
def pbGetSpeciesEggMoves(species,form=0)
species = getID(PBSpecies,species)
s = pbGetFSpeciesFromForm(species,form)
eggMovesData = pbLoadEggMovesData
return eggMovesData[s] if eggMovesData[s]
return []
end
def pbLoadSpeciesMetrics
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesMetrics
$PokemonTemp.speciesMetrics = load_data("Data/species_metrics.dat") || []
end
return $PokemonTemp.speciesMetrics
end
def pbLoadMovesetsData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesMovesets
$PokemonTemp.speciesMovesets = load_data("Data/species_movesets.dat") || []
end
return $PokemonTemp.speciesMovesets
end
def pbGetSpeciesMoveset(species,form=0)
species = getID(PBSpecies,species)
s = pbGetFSpeciesFromForm(species,form)
movesetsData = pbLoadMovesetsData
return movesetsData[s] if movesetsData[s]
return []
end
def pbLoadSpeciesTMData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesTMData
$PokemonTemp.speciesTMData = load_data("Data/tm.dat") || []
end
return $PokemonTemp.speciesTMData
end
def pbLoadShadowMovesets
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.speciesShadowMovesets
$PokemonTemp.speciesShadowMovesets = load_data("Data/shadow_movesets.dat") || []
end
return $PokemonTemp.speciesShadowMovesets
end
def pbLoadFormToSpecies
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.pokemonFormToSpecies
$PokemonTemp.pokemonFormToSpecies = load_data("Data/form2species.dat")
end
return $PokemonTemp.pokemonFormToSpecies
end
def pbLoadTrainerTypesData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.trainerTypesData
$PokemonTemp.trainerTypesData = load_data("Data/trainer_types.dat") || []
end
return $PokemonTemp.trainerTypesData
end
def pbGetTrainerTypeData(type)
data = pbLoadTrainerTypesData
return data[type] if data
return nil
end
def pbLoadTrainersData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.trainersData
$PokemonTemp.trainersData = load_data("Data/trainers.dat") || []
end
return $PokemonTemp.trainersData
end
def pbGetTrainerData(trainerID,trainerName,partyID=0)
trainersData = pbLoadTrainersData
ret = nil
for t in trainersData
next if t[0]!=trainerID || t[1]!=trainerName || t[4]!=partyID
ret = t
break
end
return ret
end
def pbLoadMoveToAnim
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.moveToAnim
$PokemonTemp.moveToAnim = load_data("Data/move2anim.dat") || []
end
return $PokemonTemp.moveToAnim
end
def pbLoadBattleAnimations
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.battleAnims
if pbRgssExists?("Data/PkmnAnimations.rxdata")
$PokemonTemp.battleAnims = load_data("Data/PkmnAnimations.rxdata")
end
end
return $PokemonTemp.battleAnims
end
def pbClearData
if $PokemonTemp
$PokemonTemp.metadata = nil
$PokemonTemp.townMapData = nil
$PokemonTemp.encountersData = nil
$PokemonTemp.phoneData = nil
$PokemonTemp.regionalDexes = nil
$PokemonTemp.speciesData = nil
$PokemonTemp.speciesEggMoves = nil
$PokemonTemp.speciesMetrics = nil
$PokemonTemp.speciesMovesets = nil
$PokemonTemp.speciesTMData = nil
$PokemonTemp.speciesShadowMovesets = nil
$PokemonTemp.pokemonFormToSpecies = nil
$PokemonTemp.trainerTypesData = nil
$PokemonTemp.trainersData = nil
$PokemonTemp.moveToAnim = nil
$PokemonTemp.battleAnims = nil
end
MapFactoryHelper.clear
$PokemonEncounters.setup($game_map.map_id) if $game_map && $PokemonEncounters
if pbRgssExists?("Data/Tilesets.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
end
if pbRgssExists?("Data/Tilesets.rvdata")
$data_tilesets = load_data("Data/Tilesets.rvdata")
end
end

View File

@@ -1,104 +0,0 @@
MOVE_ID = 0
MOVE_INTERNAL_NAME = 1
MOVE_NAME = 2
MOVE_FUNCTION_CODE = 3
MOVE_BASE_DAMAGE = 4
MOVE_TYPE = 5
MOVE_CATEGORY = 6
MOVE_ACCURACY = 7
MOVE_TOTAL_PP = 8
MOVE_EFFECT_CHANCE = 9
MOVE_TARGET = 10
MOVE_PRIORITY = 11
MOVE_FLAGS = 12
MOVE_DESCRIPTION = 13
class PokemonTemp
attr_accessor :movesData
end
def pbLoadMovesData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.movesData
if pbRgssExists?("Data/moves.dat")
$PokemonTemp.movesData = load_data("Data/moves.dat")
else
$PokemonTemp.movesData = []
end
end
return $PokemonTemp.movesData
end
def pbGetMoveData(moveID,moveDataType=-1)
meta = pbLoadMovesData
if moveDataType<0
return meta[moveID] || []
end
return meta[moveID][moveDataType] if meta[moveID]
return nil
end
alias __moveData__pbClearData pbClearData
def pbClearData
$PokemonTemp.movesData = nil if $PokemonTemp
__moveData__pbClearData
end
class PBMoveData
attr_reader :function,:basedamage,:type,:accuracy,:category
attr_reader :totalpp,:addlEffect,:target,:priority,:flags
def initialize(move_id)
moveData = pbGetMoveData(move_id)
@function = moveData[MOVE_FUNCTION_CODE]
@basedamage = moveData[MOVE_BASE_DAMAGE]
@type = moveData[MOVE_TYPE]
@category = moveData[MOVE_CATEGORY]
@accuracy = moveData[MOVE_ACCURACY]
@totalpp = moveData[MOVE_TOTAL_PP]
@addlEffect = moveData[MOVE_EFFECT_CHANCE]
@target = moveData[MOVE_TARGET]
@priority = moveData[MOVE_PRIORITY]
@flags = moveData[MOVE_FLAGS]
end
end
class PBMove
attr_reader(:id) # This move's ID
attr_accessor(:pp) # The amount of PP remaining for this move
attr_accessor(:ppup) # The number of PP Ups used for this move
# Initializes this object to the specified move ID.
def initialize(moveID)
@id = moveID
@pp = pbGetMoveData(moveID,MOVE_TOTAL_PP) || 0
@ppup = 0
end
# Changes this move's ID, and caps the PP amount if it is now greater than the
# new move's total PP.
def id=(value)
oldID = @id
@id = value
@pp = [@pp,self.totalpp].min if oldID>0
end
# Gets this move's type.
def type
return pbGetMoveData(@id,MOVE_TYPE) || 0
end
# Gets the maximum PP for this move.
def totalpp
maxPP = pbGetMoveData(@id,MOVE_TOTAL_PP) || 0
return maxPP+maxPP*@ppup/5
end
end

View File

@@ -0,0 +1,102 @@
MOVE_ID = 0
MOVE_INTERNAL_NAME = 1
MOVE_NAME = 2
MOVE_FUNCTION_CODE = 3
MOVE_BASE_DAMAGE = 4
MOVE_TYPE = 5
MOVE_CATEGORY = 6
MOVE_ACCURACY = 7
MOVE_TOTAL_PP = 8
MOVE_EFFECT_CHANCE = 9
MOVE_TARGET = 10
MOVE_PRIORITY = 11
MOVE_FLAGS = 12
MOVE_DESCRIPTION = 13
class PokemonTemp
attr_accessor :movesData
end
def pbLoadMovesData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.movesData
if pbRgssExists?("Data/moves.dat")
$PokemonTemp.movesData = load_data("Data/moves.dat")
else
$PokemonTemp.movesData = []
end
end
return $PokemonTemp.movesData
end
def pbGetMoveData(move_id, move_data_type = -1)
meta = pbLoadMovesData
if move_data_type < 0
return meta[move_id] || []
end
return meta[move_id][move_data_type] if meta[move_id]
return nil
end
alias __moveData__pbClearData pbClearData
def pbClearData
$PokemonTemp.movesData = nil if $PokemonTemp
__moveData__pbClearData
end
#===============================================================================
# Move objects known by PokeBattle_Pokemon.
#===============================================================================
class PBMove
attr_reader(:id) # This move's ID
attr_accessor(:pp) # The amount of PP remaining for this move
attr_accessor(:ppup) # The number of PP Ups used for this move
# Initializes this object to the specified move ID.
def initialize(move_id)
@id = move_id
@pp = pbGetMoveData(move_id, MOVE_TOTAL_PP) || 0
@ppup = 0
end
# Changes this move's ID, and caps the PP amount if it is now greater than the
# new move's total PP.
def id=(value)
old_id = @id
@id = value
@pp = [@pp, totalpp].min if old_id > 0
end
# Gets this move's type.
def type
return pbGetMoveData(@id, MOVE_TYPE) || 0
end
# Gets the maximum PP for this move.
def totalpp
max_pp = pbGetMoveData(@id, MOVE_TOTAL_PP) || 0
return max_pp + max_pp * @ppup / 5
end
end
#===============================================================================
# Object containing move data. Not used for much.
#===============================================================================
class PBMoveData
attr_reader :function, :basedamage, :type, :accuracy, :category
attr_reader :totalpp, :addlEffect, :target, :priority, :flags
def initialize(move_id)
move_data = pbGetMoveData(move_id)
@function = move_data[MOVE_FUNCTION_CODE]
@basedamage = move_data[MOVE_BASE_DAMAGE]
@type = move_data[MOVE_TYPE]
@category = move_data[MOVE_CATEGORY]
@accuracy = move_data[MOVE_ACCURACY]
@totalpp = move_data[MOVE_TOTAL_PP]
@addlEffect = move_data[MOVE_EFFECT_CHANCE]
@target = move_data[MOVE_TARGET]
@priority = move_data[MOVE_PRIORITY]
@flags = move_data[MOVE_FLAGS]
end
end