From e49ddde1986e52389e073cfcb85193d0e5d19f32 Mon Sep 17 00:00:00 2001 From: Maruno17 Date: Sun, 11 Apr 2021 20:45:44 +0100 Subject: [PATCH] Renamed class PlayerTrainer to class Player, implemented class Player#Pokedex --- Data/Scripts/001_Settings.rb | 2 +- .../002_Save data/003_BuiltinValues.rb | 2 +- .../002_Save data/005_BuiltinConversions.rb | 20 +- .../003_Battle/001_PokeBattle_BattleCommon.rb | 13 +- .../003_Battle/002_PokeBattle_Battle.rb | 5 +- .../002_PokeBattle_SafariZone.rb | 3 +- .../006_PokeBattle_BattleRecord.rb | 6 +- .../013_Overworld/002_Overworld_Metadata.rb | 6 +- Data/Scripts/014_Trainers/001_Trainer.rb | 123 -------- Data/Scripts/014_Trainers/004_Player.rb | 63 ++++ .../014_Trainers/004_Trainer_Deprecated.rb | 124 -------- .../014_Trainers/005_Player_Pokedex.rb | 272 ++++++++++++++++++ .../014_Trainers/006_Player_Deprecated.rb | 182 ++++++++++++ Data/Scripts/016_Pokemon/001_Pokemon.rb | 8 +- Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb | 4 +- .../001_Animations/020_UI_EggHatching.rb | 5 +- .../017_UI/001_Animations/021_UI_Evolution.rb | 10 +- .../017_UI/001_Animations/022_UI_Trading.rb | 5 +- .../001_Animations/027_UI_HallOfFame.rb | 2 +- Data/Scripts/017_UI/001_UI_PauseMenu.rb | 8 +- Data/Scripts/017_UI/002_UI_PokedexMenu.rb | 27 +- Data/Scripts/017_UI/003_UI_PokedexMain.rb | 19 +- Data/Scripts/017_UI/004_UI_PokedexEntry.rb | 27 +- Data/Scripts/017_UI/006_UI_Summary.rb | 10 +- Data/Scripts/017_UI/012_UI_TrainerCard.rb | 2 +- Data/Scripts/017_UI/013_UI_Load.rb | 2 +- Data/Scripts/017_UI/014_UI_Save.rb | 4 +- .../003_PSystem_BattleAudioUtilities.rb | 4 +- .../004_PSystem_PokemonUtilities.rb | 58 +--- .../005_PSystem_Utilities.rb | 49 +--- .../001_Debug menus/002_Debug_MenuCommands.rb | 41 ++- .../004_Debug_PokemonCommands.rb | 6 +- 32 files changed, 637 insertions(+), 475 deletions(-) create mode 100644 Data/Scripts/014_Trainers/004_Player.rb delete mode 100644 Data/Scripts/014_Trainers/004_Trainer_Deprecated.rb create mode 100644 Data/Scripts/014_Trainers/005_Player_Pokedex.rb create mode 100644 Data/Scripts/014_Trainers/006_Player_Deprecated.rb diff --git a/Data/Scripts/001_Settings.rb b/Data/Scripts/001_Settings.rb index f67c26d22..41c4c2751 100644 --- a/Data/Scripts/001_Settings.rb +++ b/Data/Scripts/001_Settings.rb @@ -189,7 +189,7 @@ module Settings # The names of the Pokédex lists, in the order they are defined in the PBS # file "regionaldexes.txt". The last name is for the National Dex and is added # onto the end of this array (remember that you don't need to use it). This - # array's order is also the order of $PokemonGlobal.pokedexUnlocked, which + # array's order is also the order of $Trainer.pokedex.unlocked_dexes, which # records which Dexes have been unlocked (the first is unlocked by default). # If an entry is just a name, then the region map shown in the Area page while # viewing that Dex list will be the region map of the region the player is diff --git a/Data/Scripts/002_Save data/003_BuiltinValues.rb b/Data/Scripts/002_Save data/003_BuiltinValues.rb index cf58818ea..62105ebe8 100644 --- a/Data/Scripts/002_Save data/003_BuiltinValues.rb +++ b/Data/Scripts/002_Save data/003_BuiltinValues.rb @@ -1,7 +1,7 @@ # Contains the save values defined in Essentials by default. SaveData.register(:player) do - ensure_class :PlayerTrainer + ensure_class :Player save_value { $Trainer } load_value { |value| $Trainer = value } from_old_format { |old_format| old_format[0] } diff --git a/Data/Scripts/002_Save data/005_BuiltinConversions.rb b/Data/Scripts/002_Save data/005_BuiltinConversions.rb index 74437dc9a..34b2e3f63 100644 --- a/Data/Scripts/002_Save data/005_BuiltinConversions.rb +++ b/Data/Scripts/002_Save data/005_BuiltinConversions.rb @@ -38,12 +38,28 @@ SaveData.register_conversion(:v19_convert_player) do essentials_version 19 display_title 'Converting player trainer class' to_all do |save_data| - next if save_data[:player].is_a?(PlayerTrainer) + next if save_data[:player].is_a?(Player) # Conversion of the party is handled in PokeBattle_Trainer.convert save_data[:player] = PokeBattle_Trainer.convert(save_data[:player]) end end +SaveData.register_conversion(:v19_move_global_data_to_player) do + essentials_version 19 + display_title 'Moving some Global Metadata data to Player class' + to_all do |save_data| + global = save_data[:global_metadata] + player = save_data[:player] + global.pokedexUnlocked.each_with_index do |value, i| + if value + player.pokedex.unlock(i) + else + player.pokedex.lock(i) + end + end + end +end + SaveData.register_conversion(:v19_convert_global_metadata) do essentials_version 19 display_title 'Adding encounter version variable to global metadata' @@ -175,6 +191,6 @@ SaveData.register_conversion(:v19_convert_game_screen) do essentials_version 19 display_title 'Converting game screen' to_value :game_screen do |game_screen| - game_screen.weather(game_screen.weather_type, game_screen.weather_max) + game_screen.weather(game_screen.weather_type, game_screen.weather_max, 0) end end diff --git a/Data/Scripts/012_Battle/003_Battle/001_PokeBattle_BattleCommon.rb b/Data/Scripts/012_Battle/003_Battle/001_PokeBattle_BattleCommon.rb index de89c907c..1138d5634 100644 --- a/Data/Scripts/012_Battle/003_Battle/001_PokeBattle_BattleCommon.rb +++ b/Data/Scripts/012_Battle/003_Battle/001_PokeBattle_BattleCommon.rb @@ -42,20 +42,17 @@ module PokeBattle_BattleCommon # Register all caught Pokémon in the Pokédex, and store them. def pbRecordAndStoreCaughtPokemon @caughtPokemon.each do |pkmn| - pbSeenForm(pkmn) # In case the form changed upon leaving battle + pbPlayer.pokedex.register(pkmn) # In case the form changed upon leaving battle # Record the Pokémon's species as owned in the Pokédex if !pbPlayer.hasOwned?(pkmn.species) - pbPlayer.set_owned(pkmn.species) - if $Trainer.pokedex + pbPlayer.pokedex.set_owned(pkmn.species) + if $Trainer.has_pokedex pbDisplayPaused(_INTL("{1}'s data was added to the Pokédex.",pkmn.name)) @scene.pbShowPokedex(pkmn.species) end end # Record a Shadow Pokémon's species as having been caught - if pkmn.shadowPokemon? - pbPlayer.owned_shadow = {} if !pbPlayer.owned_shadow - pbPlayer.owned_shadow[pkmn.species] = true - end + pbPlayer.pokedex.set_shadow_pokemon_owned(pkmn.species) if pkmn.shadowPokemon? # Store caught Pokémon pbStorePokemon(pkmn) end @@ -194,7 +191,7 @@ module PokeBattle_BattleCommon # Critical capture check if Settings::ENABLE_CRITICAL_CAPTURES c = 0 - numOwned = $Trainer.owned_count + numOwned = $Trainer.pokedex.owned_count if numOwned>600; c = x*5/12 elsif numOwned>450; c = x*4/12 elsif numOwned>300; c = x*3/12 diff --git a/Data/Scripts/012_Battle/003_Battle/002_PokeBattle_Battle.rb b/Data/Scripts/012_Battle/003_Battle/002_PokeBattle_Battle.rb index 12605e95b..3b31a72b3 100644 --- a/Data/Scripts/012_Battle/003_Battle/002_PokeBattle_Battle.rb +++ b/Data/Scripts/012_Battle/003_Battle/002_PokeBattle_Battle.rb @@ -115,7 +115,7 @@ class PokeBattle_Battle @caughtPokemon = [] player = [player] if !player.nil? && !player.is_a?(Array) opponent = [opponent] if !opponent.nil? && !opponent.is_a?(Array) - @player = player # Array of PlayerTrainer/NPCTrainer objects, or nil + @player = player # Array of Player/NPCTrainer objects, or nil @opponent = opponent # Array of NPCTrainer objects, or nil @items = nil @endSpeeches = [] @@ -622,8 +622,7 @@ class PokeBattle_Battle def pbSetSeen(battler) return if !battler || !@internalBattle - pbPlayer.set_seen(battler.displaySpecies) - pbSeenForm(battler.displaySpecies,battler.displayGender,battler.displayForm) + pbPlayer.pokedex.register(battler.displaySpecies,battler.displayGender,battler.displayForm) end def nextPickupUse diff --git a/Data/Scripts/012_Battle/006_Other battle types/002_PokeBattle_SafariZone.rb b/Data/Scripts/012_Battle/006_Other battle types/002_PokeBattle_SafariZone.rb index 5cd23935c..c2732a0bb 100644 --- a/Data/Scripts/012_Battle/006_Other battle types/002_PokeBattle_SafariZone.rb +++ b/Data/Scripts/012_Battle/006_Other battle types/002_PokeBattle_SafariZone.rb @@ -421,8 +421,7 @@ class PokeBattle_SafariZone def pbStartBattle begin pkmn = @party2[0] - self.pbPlayer.set_seen(pkmn.species) - pbSeenForm(pkmn) + self.pbPlayer.pokedex.register(pkmn) @scene.pbStartBattle(self) pbDisplayPaused(_INTL("Wild {1} appeared!",pkmn.name)) @scene.pbSafariStart diff --git a/Data/Scripts/012_Battle/006_Other battle types/006_PokeBattle_BattleRecord.rb b/Data/Scripts/012_Battle/006_Other battle types/006_PokeBattle_BattleRecord.rb index 7711750f2..3ea0029e6 100644 --- a/Data/Scripts/012_Battle/006_Other battle types/006_PokeBattle_BattleRecord.rb +++ b/Data/Scripts/012_Battle/006_Other battle types/006_PokeBattle_BattleRecord.rb @@ -146,15 +146,15 @@ module BattlePlayerHelper return nil if !trainer if trainer.length>1 ret = [] - ret[0]=PlayerTrainer.new(trainer[0][1],trainer[0][0]) + ret[0]=Player.new(trainer[0][1],trainer[0][0]) ret[0].id = trainer[0][2] ret[0].badges = trainer[0][3] - ret[1] = PlayerTrainer.new(trainer[1][1],trainer[1][0]) + ret[1] = Player.new(trainer[1][1],trainer[1][0]) ret[1].id = trainer[1][2] ret[1].badges = trainer[1][3] return ret else - ret = PlayerTrainer.new(trainer[0][1],trainer[0][0]) + ret = Player.new(trainer[0][1],trainer[0][0]) ret.id = trainer[0][2] ret.badges = trainer[0][3] return ret diff --git a/Data/Scripts/013_Overworld/002_Overworld_Metadata.rb b/Data/Scripts/013_Overworld/002_Overworld_Metadata.rb index e77d0c4bd..0eef01e33 100644 --- a/Data/Scripts/013_Overworld/002_Overworld_Metadata.rb +++ b/Data/Scripts/013_Overworld/002_Overworld_Metadata.rb @@ -25,8 +25,7 @@ class PokemonGlobalMetadata attr_accessor :snagMachine attr_accessor :creditsPlayed # Pokédex - attr_accessor :pokedexUnlocked # Array storing which Dexes are unlocked - attr_accessor :pokedexViable # All Dexes of non-zero length and unlocked + attr_accessor :pokedexUnlocked # Deprecated, replaced with Player::Pokedex#unlocked_dexes attr_accessor :pokedexDex # Dex currently looking at (-1 is National Dex) attr_accessor :pokedexIndex # Last species viewed per Dex attr_accessor :pokedexMode # Search mode @@ -86,14 +85,11 @@ class PokemonGlobalMetadata @creditsPlayed = false # Pokédex numRegions = pbLoadRegionalDexes.length - @pokedexUnlocked = [] - @pokedexViable = [] @pokedexDex = (numRegions==0) ? -1 : 0 @pokedexIndex = [] @pokedexMode = 0 for i in 0...numRegions+1 # National Dex isn't a region, but is included @pokedexIndex[i] = 0 - @pokedexUnlocked[i] = (i==0) end # Day Care @daycare = [[nil,0],[nil,0]] diff --git a/Data/Scripts/014_Trainers/001_Trainer.rb b/Data/Scripts/014_Trainers/001_Trainer.rb index 7e7dab3d4..d3ac81c0c 100644 --- a/Data/Scripts/014_Trainers/001_Trainer.rb +++ b/Data/Scripts/014_Trainers/001_Trainer.rb @@ -186,126 +186,3 @@ class NPCTrainer < Trainer @lose_text = nil end end - -#=============================================================================== -# Trainer class for the player -#=============================================================================== -class PlayerTrainer < Trainer - attr_writer :character_ID - attr_accessor :outfit - attr_accessor :badges - attr_reader :money - attr_accessor :seen - attr_accessor :owned - attr_accessor :seen_forms - attr_accessor :last_seen_forms - attr_accessor :owned_shadow - attr_accessor :pokedex # Whether the Pokédex was obtained - attr_accessor :pokegear # Whether the Pokégear was obtained - attr_accessor :mystery_gift_unlocked # Whether MG can be used from load screen - attr_accessor :mystery_gifts # Variable that stores downloaded MG data - - def character_ID - @character_ID = $PokemonGlobal.playerID || 0 if !@character_ID - return @character_ID - end - - def money=(value) - @money = value.clamp(0, Settings::MAX_MONEY) - end - - def badge_count - ret = 0 - @badges.each { |b| ret += 1 if b } - return ret - end - - #============================================================================= - - def seen?(species) - species_data = GameData::Species.try_get(species) - return (species_data) ? @seen[species_data.species] : false - end - alias hasSeen? seen? - - def owned?(species) - species_data = GameData::Species.try_get(species) - return (species_data) ? @owned[species_data.species] : false - end - alias hasOwned? owned? - - def set_seen(species) - species_data = GameData::Species.try_get(species) - @seen[species_data.species] = true if species_data - end - - def set_owned(species) - species_data = GameData::Species.try_get(species) - @owned[species_data.species] = true if species_data - end - - def seen_count(region = -1) - ret = 0 - if region == -1 - GameData::Species.each { |s| ret += 1 if s.form == 0 && @seen[s.species] } - else - pbAllRegionalSpecies(region).each { |s| ret += 1 if s && @seen[s] } - end - return ret - end - - def seen_any?(region = -1) - if region == -1 - GameData::Species.each { |s| return true if s.form == 0 && @seen[s.species] } - else - pbAllRegionalSpecies(region).each { |s| return true if s && @seen[s] } - end - return false - end - - def owned_count(region = -1) - ret = 0 - if region == -1 - GameData::Species.each { |s| ret += 1 if s.form == 0 && @owned[s.species] } - else - pbAllRegionalSpecies(region).each { |s| ret += 1 if s && @owned[s] } - end - return ret - end - - def seen_forms_count(species) - species_data = GameData::Species.try_get(species) - return 0 if !species_data - species = species_data.species - ret = 0 - @seen_forms[species] = [[], []] if !@seen_forms[species] - array = @seen_forms[species] - for i in 0...[array[0].length, array[1].length].max - ret += 1 if array[0][i] || array[1][i] - end - return ret - end - - def clear_pokedex - @seen = {} - @owned = {} - @seen_forms = {} - @last_seen_forms = {} - @owned_shadow = {} - end - - #============================================================================= - - def initialize(name, trainer_type) - super - @character_ID = nil - @outfit = 0 - @badges = [false] * 8 - @money = Settings::INITIAL_MONEY - clear_pokedex - @pokegear = false - @pokedex = false - @mystery_gift_unlocked = false - @mystery_gifts = [] - end -end diff --git a/Data/Scripts/014_Trainers/004_Player.rb b/Data/Scripts/014_Trainers/004_Player.rb new file mode 100644 index 000000000..30b222a3f --- /dev/null +++ b/Data/Scripts/014_Trainers/004_Player.rb @@ -0,0 +1,63 @@ +#=============================================================================== +# Trainer class for the player +#=============================================================================== +class Player < Trainer + attr_writer :character_ID + attr_accessor :outfit + attr_accessor :badges + attr_reader :money + attr_reader :pokedex + attr_accessor :has_pokedex + attr_accessor :pokegear # Whether the Pokégear was obtained + attr_accessor :mystery_gift_unlocked # Whether MG can be used from load screen + attr_accessor :mystery_gifts # Variable that stores downloaded MG data + + def inspect + str = self.to_s.chop + party_str = @party.map { |p| p.species_data.species }.inspect + str << format(' %s @party=%s>', self.full_name, party_str) + return str + end + + def character_ID + @character_ID = $PokemonGlobal.playerID || 0 if !@character_ID + return @character_ID + end + + def money=(value) + @money = value.clamp(0, Settings::MAX_MONEY) + end + + def badge_count + ret = 0 + @badges.each { |b| ret += 1 if b } + return ret + end + + #============================================================================= + + def seen?(species) + return @pokedex.seen?(species) + end + alias hasSeen? seen? + + def owned?(species) + return @pokedex.owned?(species) + end + alias hasOwned? owned? + + #============================================================================= + + def initialize(name, trainer_type) + super + @character_ID = nil + @outfit = 0 + @badges = [false] * 8 + @money = Settings::INITIAL_MONEY + @pokedex = Pokedex.new + @pokegear = false + @has_pokedex = false + @mystery_gift_unlocked = false + @mystery_gifts = [] + end +end diff --git a/Data/Scripts/014_Trainers/004_Trainer_Deprecated.rb b/Data/Scripts/014_Trainers/004_Trainer_Deprecated.rb deleted file mode 100644 index 99b063fc9..000000000 --- a/Data/Scripts/014_Trainers/004_Trainer_Deprecated.rb +++ /dev/null @@ -1,124 +0,0 @@ -#=============================================================================== -# Deprecated -#=============================================================================== -class PlayerTrainer - deprecated_method_alias :fullname, :full_name, removal_in: 'v20' - deprecated_method_alias :publicID, :public_ID, removal_in: 'v20' - deprecated_method_alias :secretID, :secret_ID, removal_in: 'v20' - deprecated_method_alias :getForeignID, :make_foreign_ID, removal_in: 'v20' - deprecated_method_alias :trainerTypeName, :trainer_type_name, removal_in: 'v20' - deprecated_method_alias :moneyEarned, :base_money, removal_in: 'v20' - deprecated_method_alias :skill, :skill_level, removal_in: 'v20' - deprecated_method_alias :skillCode, :skill_code, removal_in: 'v20' - deprecated_method_alias :hasSkillCode, :has_skill_code?, removal_in: 'v20' - deprecated_method_alias :pokemonParty, :pokemon_party, removal_in: 'v20' - deprecated_method_alias :ablePokemonParty, :able_party, removal_in: 'v20' - deprecated_method_alias :partyCount, :party_count, removal_in: 'v20' - deprecated_method_alias :pokemonCount, :pokemon_count, removal_in: 'v20' - deprecated_method_alias :ablePokemonCount, :able_pokemon_count, removal_in: 'v20' - deprecated_method_alias :firstParty, :first_party, removal_in: 'v20' - deprecated_method_alias :firstPokemon, :first_pokemon, removal_in: 'v20' - deprecated_method_alias :firstAblePokemon, :first_able_pokemon, removal_in: 'v20' - deprecated_method_alias :lastParty, :last_party, removal_in: 'v20' - deprecated_method_alias :lastPokemon, :last_pokemon, removal_in: 'v20' - deprecated_method_alias :lastAblePokemon, :last_able_pokemon, removal_in: 'v20' - deprecated_method_alias :formseen, :seen_forms, removal_in: 'v20' - deprecated_method_alias :formlastseen, :last_seen_forms, removal_in: 'v20' - deprecated_method_alias :shadowcaught, :owned_shadow, removal_in: 'v20' - deprecated_method_alias :numbadges, :badge_count, removal_in: 'v20' - deprecated_method_alias :pokedexSeen, :seen_count, removal_in: 'v20' - deprecated_method_alias :pokedexOwned, :owned_count, removal_in: 'v20' - deprecated_method_alias :numFormsSeen, :seen_forms_count, removal_in: 'v20' - deprecated_method_alias :clearPokedex, :clear_pokedex, removal_in: 'v20' - deprecated_method_alias :metaID, :character_ID, removal_in: 'v20' - deprecated_method_alias :mysterygiftaccess, :mystery_gift_unlocked, removal_in: 'v20' - deprecated_method_alias :mysterygift, :mystery_gifts, removal_in: 'v20' - deprecated_method_alias :setSeen, :set_seen, removal_in: 'v20' - deprecated_method_alias :setOwned, :set_owned, removal_in: 'v20' -end - -class PokeBattle_Trainer - attr_reader :trainertype, :name, :id, :metaID, :outfit, :language - attr_reader :party, :badges, :money - attr_reader :seen, :owned, :formseen, :formlastseen, :shadowcaught - attr_reader :pokedex, :pokegear - attr_reader :mysterygiftaccess, :mysterygift - - def self.convert(trainer) - validate trainer => self - ret = PlayerTrainer.new(trainer.name, trainer.trainertype) - ret.id = trainer.id - ret.character_ID = trainer.metaID if trainer.metaID - ret.outfit = trainer.outfit if trainer.outfit - ret.language = trainer.language if trainer.language - trainer.party.each { |p| ret.party.push(PokeBattle_Pokemon.convert(p)) } - ret.badges = trainer.badges.clone - ret.money = trainer.money - trainer.seen.each_with_index { |value, i| ret.set_seen(i) if value } - trainer.owned.each_with_index { |value, i| ret.set_owned(i) if value } - trainer.formseen.each_with_index do |value, i| - ret.seen_forms[GameData::Species.get(i).species] = [value[0].clone, value[1].clone] if value - end - trainer.formlastseen.each_with_index do |value, i| - ret.last_seen_forms[GameData::Species.get(i).species] = value.clone if value - end - if trainer.shadowcaught - trainer.shadowcaught.each_with_index do |value, i| - ret.owned_shadow[GameData::Species.get(i).species] = true if value - end - end - ret.pokedex = trainer.pokedex - ret.pokegear = trainer.pokegear - ret.mystery_gift_unlocked = trainer.mysterygiftaccess if trainer.mysterygiftaccess - ret.mystery_gifts = trainer.mysterygift.clone if trainer.mysterygift - return ret - end -end - -# @deprecated Use {Trainer#remove_pokemon_at_index} instead. This alias is slated to be removed in v20. -def pbRemovePokemonAt(index) - Deprecation.warn_method('pbRemovePokemonAt', 'v20', 'PlayerTrainer#remove_pokemon_at_index') - return $Trainer.remove_pokemon_at_index(index) -end - -# @deprecated Use {Trainer#has_other_able_pokemon?} instead. This alias is slated to be removed in v20. -def pbCheckAble(index) - Deprecation.warn_method('pbCheckAble', 'v20', 'PlayerTrainer#has_other_able_pokemon?') - return $Trainer.has_other_able_pokemon?(index) -end - -# @deprecated Use {Trainer#all_fainted?} instead. This alias is slated to be removed in v20. -def pbAllFainted - Deprecation.warn_method('pbAllFainted', 'v20', 'PlayerTrainer#all_fainted?') - return $Trainer.all_fainted? -end - -# @deprecated Use {Trainer#has_species?} instead. This alias is slated to be removed in v20. -def pbHasSpecies?(species, form = -1) - Deprecation.warn_method('pbHasSpecies?', 'v20', 'PlayerTrainer#has_species?') - return $Trainer.has_species?(species, form) -end - -# @deprecated Use {Trainer#has_fateful_species?} instead. This alias is slated to be removed in v20. -def pbHasFatefulSpecies?(species) - Deprecation.warn_method('pbHasSpecies?', 'v20', 'PlayerTrainer#has_fateful_species?') - return $Trainer.has_fateful_species?(species) -end - -# @deprecated Use {Trainer#has_pokemon_of_type?} instead. This alias is slated to be removed in v20. -def pbHasType?(type) - Deprecation.warn_method('pbHasType?', 'v20', 'PlayerTrainer#has_pokemon_of_type?') - return $Trainer.has_pokemon_of_type?(type) -end - -# @deprecated Use {Trainer#get_pokemon_with_move} instead. This alias is slated to be removed in v20. -def pbCheckMove(move) - Deprecation.warn_method('pbCheckMove', 'v20', 'PlayerTrainer#get_pokemon_with_move') - return $Trainer.get_pokemon_with_move(move) -end - -# @deprecated Use {Trainer#heal_party} instead. This alias is slated to be removed in v20. -def pbHealAll - Deprecation.warn_method('pbHealAll', 'v20', 'PlayerTrainer#heal_party') - $Trainer.heal_party -end diff --git a/Data/Scripts/014_Trainers/005_Player_Pokedex.rb b/Data/Scripts/014_Trainers/005_Player_Pokedex.rb new file mode 100644 index 000000000..63b3293a2 --- /dev/null +++ b/Data/Scripts/014_Trainers/005_Player_Pokedex.rb @@ -0,0 +1,272 @@ +class Player + # Represents the player's Pokédex. + class Pokedex + # @return [Array] an array of accessible Dexes + # @see #refresh_accessible_dexes + attr_reader :accessible_dexes + + def inspect + str = self.to_s.chop + str << format(' seen: %d, owned: %d>', self.seen_count, self.owned_count) + return str + end + + # Creates an empty Pokédex. + def initialize + @unlocked_dexes = [] + 0.upto(pbLoadRegionalDexes.length) do |i| + @unlocked_dexes[i] = (i == 0) + end + self.clear + end + + # Clears the Pokédex. + def clear + @seen = {} + @owned = {} + @seen_forms = {} + @last_seen_forms = {} + @owned_shadow = {} + self.refresh_accessible_dexes + end + + #=========================================================================== + + # Sets the given species as seen in the Pokédex. + # @param species [Symbol, GameData::Species] species to set as seen + def set_seen(species) + species_id = GameData::Species.try_get(species)&.species + return if species_id.nil? + @seen[species_id] = true + self.refresh_accessible_dexes + end + + # @param species [Symbol, GameData::Species] species to check + # @return [Boolean] whether the species is seen + def seen?(species) + species_id = GameData::Species.try_get(species)&.species + return false if species_id.nil? + return @seen[species_id] == true + end + + # @param species [Symbol, GameData::Species] species to check + # @param gender [Integer] gender to check + # @param form [Integer] form to check + # @return [Boolean] whether the species of the given gender and form is seen + def seen_form?(species, gender, form) + species_id = GameData::Species.try_get(species)&.species + return false if species_id.nil? + @seen_forms[species_id] ||= [[], []] + return @seen_forms[species_id][gender][form] == true + end + + # Returns the amount of seen Pokémon. + # If a region ID is given, returns the amount of seen Pokémon + # in that region. + # @param dex [Integer] region ID + def seen_count(dex = -1) + validate dex => Integer + return self.count_species(@seen, dex) + end + + # Returns whether there are any seen Pokémon. + # If a region is given, returns whether there are seen Pokémon + # in that region. + # @param region [Integer] region ID + # @return [Boolean] whether there are any seen Pokémon + def seen_any?(dex = -1) + validate dex => Integer + if dex == -1 + GameData::Species.each { |s| return true if s.form == 0 && @seen[s.species] } + else + pbAllRegionalSpecies(dex).each { |s| return true if s && @seen[s] } + end + return false + end + + # Returns the amount of seen forms for the given species. + # @param species [Symbol, GameData::Species] Pokémon species + # @return [Integer] amount of seen forms + def seen_forms_count(species) + species_id = GameData::Species.try_get(species)&.species + return 0 if species_id.nil? + ret = 0 + @seen_forms[species_id] ||= [[], []] + array = @seen_forms[species_id] + for i in 0...[array[0].length, array[1].length].max + ret += 1 if array[0][i] || array[1][i] + end + return ret + end + + # @param species [Symbol, GameData::Species] Pokémon species + def last_form_seen(species) + @last_seen_forms[species] ||= [] + return @last_seen_forms[species][0] || 0, @last_seen_forms[species][1] || 0 + end + + def set_last_form_seen(species, gender = 0, form = 0) + @last_seen_forms[species] = [gender, form] + end + + #=========================================================================== + + # Sets the given species as owned in the Pokédex. + # @param species [Symbol, GameData::Species] species to set as owned + def set_owned(species) + species_id = GameData::Species.try_get(species)&.species + return if species_id.nil? + @owned[species_id] = true + self.refresh_accessible_dexes + end + + # Sets the given species as owned in the Pokédex. + # @param species [Symbol, GameData::Species] species to set as owned + def set_shadow_pokemon_owned(species) + species_id = GameData::Species.try_get(species)&.species + return if species_id.nil? + @owned[species_id] = true + self.refresh_accessible_dexes + end + + # @param species [Symbol, GameData::Species] species to check + # @return [Boolean] whether the species is owned + def owned?(species) + species_id = GameData::Species.try_get(species)&.species + return false if species_id.nil? + return @owned[species_id] == true + end + + # Returns the amount of owned Pokémon. + # If a region ID is given, returns the amount of owned Pokémon + # in that region. + # @param region [Integer] region ID + def owned_count(dex = -1) + validate dex => Integer + return self.count_species(@owned, dex) + end + + #=========================================================================== + + # @param pkmn [Pokemon, Symbol, GameData::Species] Pokemon to register as seen + # @param gender [Integer] gender to register (0=male, 1=female, 2=genderless) + # @param form [Integer] form to register + def register(species, gender = 0, form = 0) + if species.is_a?(Pokemon) + species_data = species.species_data + gender = species.gender + else + species_data = GameData::Species.get_species_form(species, form) + end + species = species_data.species + gender = 0 if gender >= 2 + form = species_data.form + if form != species_data.pokedex_form + species_data = GameData::Species.get_species_form(species, species_data.pokedex_form) + form = species_data.form + end + form = 0 if species_data.form_name.nil? || species_data.form_name.empty? + # Register as seen + @seen[species] = true + @seen_forms[species] ||= [[], []] + @seen_forms[species][gender][form] = true + @last_seen_forms[species] ||= [] + @last_seen_forms[species] = [gender, form] if @last_seen_forms[species] == [] + self.refresh_accessible_dexes + end + + # @param pkmn [Pokemon] Pokemon to register as most recently seen + def register_last_seen(pkmn) + validate pkmn => Pokemon + species_data = pkmn.species_data + form = species_data.pokedex_form + form = 0 if species_data.form_name.nil? || species_data.form_name.empty? + @last_seen_forms[pkmn.species] = [pkmn.gender, form] + end + + #=========================================================================== + + # Unlocks the given Dex, -1 being the National Dex. + # @param dex [Integer] Dex ID (-1 is the National Dex) + def unlock(dex) + validate dex => Integer + dex = @unlocked_dexes.length - 1 if dex < 0 || dex > @unlocked_dexes.length - 1 + @unlocked_dexes[dex] = true + self.refresh_accessible_dexes + end + + # Locks the given Dex, -1 being the National Dex. + # @param dex [Integer] Dex ID (-1 is the National Dex) + def lock(dex) + validate dex => Integer + dex = @unlocked_dexes.length - 1 if dex < 0 || dex > @unlocked_dexes.length - 1 + @unlocked_dexes[dex] = false + self.refresh_accessible_dexes + end + + # @param dex [Integer] Dex ID (-1 is the National Dex) + # @return [Boolean] whether the given Dex is unlocked + def unlocked?(dex) + validate dex => Integer + dex = @unlocked_dexes.length - 1 if dex == -1 + return @unlocked_dexes[dex] == true + end + + # @return [Integer] the number of defined Dexes (including the National Dex) + def dexes_count + return @unlocked_dexes.length + end + + # Shorthand for +self.accessible_dexes.length+. + # @return [Integer] amount of accessible Dexes + def accessible_dexes_count + return @accessible_dexes.length + end + + # Decides which Dex lists are able to be viewed (i.e. they are unlocked and + # have at least 1 seen species in them), and saves all accessible Dex region + # numbers into {#accessible_dexes}. National Dex comes after all regional + # Dexes. + # If the Dex list shown depends on the player's location, this just decides + # if a species in the current region has been seen - doesn't look at other + # regions. + def refresh_accessible_dexes + @accessible_dexes = [] + if Settings::USE_CURRENT_REGION_DEX + region = pbGetCurrentRegion + region = -1 if region >= dexes_count - 1 + @accessible_dexes[0] = region if self.seen_any?(region) + return + end + if dexes_count == 1 # Only National Dex is defined + if self.unlocked?(0) && self.seen_any? + @accessible_dexes.push(-1) + end + else # Regional Dexes + National Dex + for i in 0...dexes_count + dex_list_to_check = (i == dexes_count - 1) ? -1 : i + if self.unlocked?(i) && self.seen_any?(dex_list_to_check) + @accessible_dexes.push(dex_list_to_check) + end + end + end + end + + #=========================================================================== + + private + + # @param hash [Hash] + # @param region [Integer] + # @return [Integer] + def count_species(hash, region = -1) + ret = 0 + if region == -1 + GameData::Species.each { |s| ret += 1 if s.form == 0 && hash[s.species] } + else + pbAllRegionalSpecies(region).each { |s| ret += 1 if s && hash[s] } + end + return ret + end + end +end diff --git a/Data/Scripts/014_Trainers/006_Player_Deprecated.rb b/Data/Scripts/014_Trainers/006_Player_Deprecated.rb new file mode 100644 index 000000000..7457ed1eb --- /dev/null +++ b/Data/Scripts/014_Trainers/006_Player_Deprecated.rb @@ -0,0 +1,182 @@ +#=============================================================================== +# Deprecated +#=============================================================================== +class Trainer + deprecated_method_alias :fullname, :full_name, removal_in: 'v20' + deprecated_method_alias :publicID, :public_ID, removal_in: 'v20' + deprecated_method_alias :secretID, :secret_ID, removal_in: 'v20' + deprecated_method_alias :getForeignID, :make_foreign_ID, removal_in: 'v20' + deprecated_method_alias :trainerTypeName, :trainer_type_name, removal_in: 'v20' + deprecated_method_alias :moneyEarned, :base_money, removal_in: 'v20' + deprecated_method_alias :skill, :skill_level, removal_in: 'v20' + deprecated_method_alias :skillCode, :skill_code, removal_in: 'v20' + deprecated_method_alias :hasSkillCode, :has_skill_code?, removal_in: 'v20' + deprecated_method_alias :pokemonParty, :pokemon_party, removal_in: 'v20' + deprecated_method_alias :ablePokemonParty, :able_party, removal_in: 'v20' + deprecated_method_alias :partyCount, :party_count, removal_in: 'v20' + deprecated_method_alias :pokemonCount, :pokemon_count, removal_in: 'v20' + deprecated_method_alias :ablePokemonCount, :able_pokemon_count, removal_in: 'v20' + deprecated_method_alias :firstParty, :first_party, removal_in: 'v20' + deprecated_method_alias :firstPokemon, :first_pokemon, removal_in: 'v20' + deprecated_method_alias :firstAblePokemon, :first_able_pokemon, removal_in: 'v20' + deprecated_method_alias :lastParty, :last_party, removal_in: 'v20' + deprecated_method_alias :lastPokemon, :last_pokemon, removal_in: 'v20' + deprecated_method_alias :lastAblePokemon, :last_able_pokemon, removal_in: 'v20' +end + +class Player < Trainer + class Pokedex + attr_reader :seen_forms + end + + deprecated_method_alias :numbadges, :badge_count, removal_in: 'v20' + deprecated_method_alias :metaID, :character_ID, removal_in: 'v20' + deprecated_method_alias :mysterygiftaccess, :mystery_gift_unlocked, removal_in: 'v20' + deprecated_method_alias :mysterygift, :mystery_gifts, removal_in: 'v20' + + # @deprecated Use {Player::Pokedex#set_seen} instead. This alias is slated to be removed in v20. + def setSeen(species) + Deprecation.warn_method('Player#setSeen', 'v20', 'Player::Pokedex#set_seen(species)') + return @pokedex.set_seen(species) + end + + # @deprecated Use {Player::Pokedex#set_owned} instead. This alias is slated to be removed in v20. + def setOwned(species) + Deprecation.warn_method('Player#setOwned', 'v20', 'Player::Pokedex#set_owned(species)') + return @pokedex.set_owned(species) + end + + # @deprecated Use {Player::Pokedex#seen_count} instead. This alias is slated to be removed in v20. + def pokedexSeen(dex = -1) + Deprecation.warn_method('Player#pokedexSeen', 'v20', 'Player::Pokedex#seen_count') + return @pokedex.seen_count(dex) + end + + # @deprecated Use {Player::Pokedex#owned_count} instead. This alias is slated to be removed in v20. + def pokedexOwned(dex = -1) + Deprecation.warn_method('Player#pokedexOwned', 'v20', 'Player::Pokedex#owned_count') + return @pokedex.owned_count(dex) + end + + # @deprecated Use {Player::Pokedex#seen_forms_count} instead. This alias is slated to be removed in v20. + def numFormsSeen(species) + Deprecation.warn_method('Player#numFormsSeen', 'v20', 'Player::Pokedex#seen_forms_count') + return @pokedex.seen_forms_count(species) + end + + # @deprecated Use {Player::Pokedex#clear} instead. This alias is slated to be removed in v20. + def clearPokedex + Deprecation.warn_method('Player#clearPokedex', 'v20', 'Player::Pokedex#clear') + return @pokedex.clear + end +end + +class PokeBattle_Trainer + attr_reader :trainertype, :name, :id, :metaID, :outfit, :language + attr_reader :party, :badges, :money + attr_reader :seen, :owned, :formseen, :formlastseen, :shadowcaught + attr_reader :pokedex, :pokegear + attr_reader :mysterygiftaccess, :mysterygift + + def self.convert(trainer) + validate trainer => self + ret = Player.new(trainer.name, trainer.trainertype) + ret.id = trainer.id + ret.character_ID = trainer.metaID if trainer.metaID + ret.outfit = trainer.outfit if trainer.outfit + ret.language = trainer.language if trainer.language + trainer.party.each { |p| ret.party.push(PokeBattle_Pokemon.convert(p)) } + ret.badges = trainer.badges.clone + ret.money = trainer.money + trainer.seen.each_with_index { |value, i| ret.pokedex.set_seen(i) if value } + trainer.owned.each_with_index { |value, i| ret.pokedex.set_owned(i) if value } + trainer.formseen.each_with_index do |value, i| + ret.pokedex.seen_forms[GameData::Species.get(i).species] = [value[0].clone, value[1].clone] if value + end + trainer.formlastseen.each_with_index do |value, i| + ret.pokedex.set_last_form_seen(GameData::Species.get(i).species, value[0], value[1]) if value + end + if trainer.shadowcaught + trainer.shadowcaught.each_with_index do |value, i| + ret.pokedex.set_shadow_pokemon_owned(i) if value + end + end + ret.has_pokedex = trainer.pokedex + ret.pokegear = trainer.pokegear + ret.mystery_gift_unlocked = trainer.mysterygiftaccess if trainer.mysterygiftaccess + ret.mystery_gifts = trainer.mysterygift.clone if trainer.mysterygift + return ret + end +end + +# @deprecated Use {Player#remove_pokemon_at_index} instead. This alias is slated to be removed in v20. +def pbRemovePokemonAt(index) + Deprecation.warn_method('pbRemovePokemonAt', 'v20', 'Player#remove_pokemon_at_index') + return $Trainer.remove_pokemon_at_index(index) +end + +# @deprecated Use {Player#has_other_able_pokemon?} instead. This alias is slated to be removed in v20. +def pbCheckAble(index) + Deprecation.warn_method('pbCheckAble', 'v20', 'Player#has_other_able_pokemon?') + return $Trainer.has_other_able_pokemon?(index) +end + +# @deprecated Use {Player#all_fainted?} instead. This alias is slated to be removed in v20. +def pbAllFainted + Deprecation.warn_method('pbAllFainted', 'v20', 'Player#all_fainted?') + return $Trainer.all_fainted? +end + +# @deprecated Use {Player#has_species?} instead. This alias is slated to be removed in v20. +def pbHasSpecies?(species, form = -1) + Deprecation.warn_method('pbHasSpecies?', 'v20', 'Player#has_species?') + return $Trainer.has_species?(species, form) +end + +# @deprecated Use {Player#has_fateful_species?} instead. This alias is slated to be removed in v20. +def pbHasFatefulSpecies?(species) + Deprecation.warn_method('pbHasSpecies?', 'v20', 'Player#has_fateful_species?') + return $Trainer.has_fateful_species?(species) +end + +# @deprecated Use {Player#has_pokemon_of_type?} instead. This alias is slated to be removed in v20. +def pbHasType?(type) + Deprecation.warn_method('pbHasType?', 'v20', 'Player#has_pokemon_of_type?') + return $Trainer.has_pokemon_of_type?(type) +end + +# @deprecated Use {Player#get_pokemon_with_move} instead. This alias is slated to be removed in v20. +def pbCheckMove(move) + Deprecation.warn_method('pbCheckMove', 'v20', 'Player#get_pokemon_with_move') + return $Trainer.get_pokemon_with_move(move) +end + +# @deprecated Use {Player#heal_party} instead. This alias is slated to be removed in v20. +def pbHealAll + Deprecation.warn_method('pbHealAll', 'v20', 'Player#heal_party') + $Trainer.heal_party +end + +# @deprecated Use {Player::Pokedex#unlock} instead. This alias is slated to be removed in v20. +def pbUnlockDex(dex=-1) + Deprecation.warn_method('pbUnlockDex', 'v20', '$Trainer.pokedex.unlock(dex)') + $Trainer.pokedex.unlock(dex) +end + +# @deprecated Use {Player::Pokedex#lock} instead. This alias is slated to be removed in v20. +def pbLockDex(dex=-1) + Deprecation.warn_method('pbLockDex', 'v20', '$Trainer.pokedex.lock(dex)') + $Trainer.pokedex.lock(dex) +end + +# @deprecated Use {Player::Pokedex#register} instead. This alias is slated to be removed in v20. +def pbSeenForm(species, gender = 0, form = 0) + Deprecation.warn_method('pbSeenForm', 'v20', '$Trainer.pokedex.register(species, gender, form)') + $Trainer.pokedex.register(species, gender, form) +end + +# @deprecated Use {Player::Pokedex#register_last_seen} instead. This alias is slated to be removed in v20. +def pbUpdateLastSeenForm(pkmn) + Deprecation.warn_method('Player#pokedexSeen', 'v20', '$Trainer.pokedex.register_last_seen(pkmn)') + $Trainer.pokedex.register_last_seen(pkmn) +end diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 82af08e0a..11afbbd36 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -139,7 +139,7 @@ class Pokemon yield if block_given? MultipleForms.call("onSetForm", self, value, oldForm) calc_stats - pbSeenForm(self) + $Trainer.pokedex.register(self) end def setForm(value) @@ -781,7 +781,7 @@ class Pokemon @owner = new_owner end - # @param trainer [PlayerTrainer, NPCTrainer] the trainer to compare to the original trainer + # @param trainer [Player, NPCTrainer] the trainer to compare to the original trainer # @return [Boolean] whether the given trainer is not this Pokémon's original trainer def foreign?(trainer) return @owner.id != trainer.id || @owner.name != trainer.name @@ -1045,7 +1045,7 @@ class Pokemon # Creates a new Pokémon object. # @param species [Symbol, String, Integer] Pokémon species # @param level [Integer] Pokémon level - # @param owner [Owner, PlayerTrainer, NPCTrainer] Pokémon owner (the player by default) + # @param owner [Owner, Player, NPCTrainer] Pokémon owner (the player by default) # @param withMoves [TrueClass, FalseClass] whether the Pokémon should have moves # @param rechech_form [TrueClass, FalseClass] whether to auto-check the form def initialize(species, level, owner = $Trainer, withMoves = true, recheck_form = true) @@ -1089,7 +1089,7 @@ class Pokemon end if owner.is_a?(Owner) @owner = owner - elsif owner.is_a?(PlayerTrainer) || owner.is_a?(NPCTrainer) + elsif owner.is_a?(Player) || owner.is_a?(NPCTrainer) @owner = Owner.new_from_trainer(owner) else @owner = Owner.new(0, '', 2, 2) diff --git a/Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb b/Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb index b2679532f..e72b58f2d 100644 --- a/Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb +++ b/Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb @@ -25,10 +25,10 @@ class Pokemon end # Returns a new Owner object populated with values taken from +trainer+. - # @param trainer [PlayerTrainer, NPCTrainer] trainer object to read data from + # @param trainer [Player, NPCTrainer] trainer object to read data from # @return [Owner] new Owner object def self.new_from_trainer(trainer) - validate trainer => [PlayerTrainer, NPCTrainer] + validate trainer => [Player, NPCTrainer] return new(trainer.id, trainer.name, trainer.gender, trainer.language) end diff --git a/Data/Scripts/017_UI/001_Animations/020_UI_EggHatching.rb b/Data/Scripts/017_UI/001_Animations/020_UI_EggHatching.rb index 47482e07b..88e82aad0 100644 --- a/Data/Scripts/017_UI/001_Animations/020_UI_EggHatching.rb +++ b/Data/Scripts/017_UI/001_Animations/020_UI_EggHatching.rb @@ -196,9 +196,8 @@ def pbHatch(pokemon) pokemon.timeEggHatched = pbGetTimeNow pokemon.obtain_method = 1 # hatched from egg pokemon.hatched_map = $game_map.map_id - $Trainer.set_seen(pokemon.species) - $Trainer.set_owned(pokemon.species) - pbSeenForm(pokemon) + $Trainer.pokedex.register(pokemon) + $Trainer.pokedex.set_owned(pokemon.species) pokemon.record_first_moves if !pbHatchAnimation(pokemon) pbMessage(_INTL("Huh?\1")) diff --git a/Data/Scripts/017_UI/001_Animations/021_UI_Evolution.rb b/Data/Scripts/017_UI/001_Animations/021_UI_Evolution.rb index 56d36431c..89bba3804 100644 --- a/Data/Scripts/017_UI/001_Animations/021_UI_Evolution.rb +++ b/Data/Scripts/017_UI/001_Animations/021_UI_Evolution.rb @@ -588,9 +588,8 @@ class PokemonEvolutionScene @pokemon.form = 0 if @pokemon.isSpecies?(:MOTHIM) @pokemon.calc_stats # See and own evolved species - $Trainer.set_seen(@newspecies) - $Trainer.set_owned(@newspecies) - pbSeenForm(@pokemon) + $Trainer.pokedex.register(@pokemon) + $Trainer.pokedex.set_owned(@newspecies) # Learn moves upon evolution for evolved species movelist = @pokemon.getMoveList for i in movelist @@ -616,8 +615,7 @@ class PokemonEvolutionScene # Add duplicate Pokémon to party $Trainer.party.push(new_pkmn) # See and own duplicate Pokémon - $Trainer.set_seen(new_species) - $Trainer.set_owned(new_species) - pbSeenForm(new_pkmn) + $Trainer.pokedex.register(new_pkmn) + $Trainer.pokedex.set_owned(new_species) end end diff --git a/Data/Scripts/017_UI/001_Animations/022_UI_Trading.rb b/Data/Scripts/017_UI/001_Animations/022_UI_Trading.rb index b06f8ee07..71c359455 100644 --- a/Data/Scripts/017_UI/001_Animations/022_UI_Trading.rb +++ b/Data/Scripts/017_UI/001_Animations/022_UI_Trading.rb @@ -228,9 +228,8 @@ def pbStartTrade(pokemonIndex,newpoke,nickname,trainerName,trainerGender=0) yourPokemon.obtain_method = 2 # traded yourPokemon.reset_moves if resetmoves yourPokemon.record_first_moves - $Trainer.set_seen(yourPokemon.species) - $Trainer.set_owned(yourPokemon.species) - pbSeenForm(yourPokemon) + $Trainer.pokedex.register(yourPokemon) + $Trainer.pokedex.set_owned(yourPokemon.species) pbFadeOutInWithMusic { evo = PokemonTrade_Scene.new evo.pbStartScreen(myPokemon,yourPokemon,$Trainer.name,opponent.name) diff --git a/Data/Scripts/017_UI/001_Animations/027_UI_HallOfFame.rb b/Data/Scripts/017_UI/001_Animations/027_UI_HallOfFame.rb index 2b0e225b2..ea8f7cf48 100644 --- a/Data/Scripts/017_UI/001_Animations/027_UI_HallOfFame.rb +++ b/Data/Scripts/017_UI/001_Animations/027_UI_HallOfFame.rb @@ -281,7 +281,7 @@ class HallOfFame_Scene lefttext+=_INTL("IDNo.{1}
",pubid) lefttext+=_ISPRINTF("Time{1:02d}:{2:02d}
",hour,min) lefttext+=_INTL("Pokédex{1}/{2}
", - $Trainer.owned_count,$Trainer.seen_count) + $Trainer.pokedex.owned_count,$Trainer.pokedex.seen_count) @sprites["messagebox"]=Window_AdvancedTextPokemon.new(lefttext) @sprites["messagebox"].viewport=@viewport @sprites["messagebox"].width=192 if @sprites["messagebox"].width<192 diff --git a/Data/Scripts/017_UI/001_UI_PauseMenu.rb b/Data/Scripts/017_UI/001_UI_PauseMenu.rb index 33d73e9a8..271c52e6e 100644 --- a/Data/Scripts/017_UI/001_UI_PauseMenu.rb +++ b/Data/Scripts/017_UI/001_UI_PauseMenu.rb @@ -100,7 +100,6 @@ class PokemonPauseMenu end return end - pbSetViableDexes @scene.pbStartScene endscene = true commands = [] @@ -114,7 +113,7 @@ class PokemonPauseMenu cmdDebug = -1 cmdQuit = -1 cmdEndGame = -1 - commands[cmdPokedex = commands.length] = _INTL("Pokédex") if $Trainer.pokedex && $PokemonGlobal.pokedexViable.length>0 + commands[cmdPokedex = commands.length] = _INTL("Pokédex") if $Trainer.has_pokedex && $Trainer.pokedex.accessible_dexes_count > 0 commands[cmdPokemon = commands.length] = _INTL("Pokémon") if $Trainer.party.length>0 commands[cmdBag = commands.length] = _INTL("Bag") if !pbInBugContest? commands[cmdPokegear = commands.length] = _INTL("Pokégear") if $Trainer.pokegear @@ -155,9 +154,8 @@ class PokemonPauseMenu @scene.pbRefresh } else - if $PokemonGlobal.pokedexViable.length==1 - $PokemonGlobal.pokedexDex = $PokemonGlobal.pokedexViable[0] - $PokemonGlobal.pokedexDex = -1 if $PokemonGlobal.pokedexDex==$PokemonGlobal.pokedexUnlocked.length-1 + if $Trainer.pokedex.accessible_dexes_count == 1 + $PokemonGlobal.pokedexDex = $Trainer.pokedex.accessible_dexes[0] pbFadeOutIn { scene = PokemonPokedex_Scene.new screen = PokemonPokedexScreen.new(scene) diff --git a/Data/Scripts/017_UI/002_UI_PokedexMenu.rb b/Data/Scripts/017_UI/002_UI_PokedexMenu.rb index 13eaece82..91e135c0a 100644 --- a/Data/Scripts/017_UI/002_UI_PokedexMenu.rb +++ b/Data/Scripts/017_UI/002_UI_PokedexMenu.rb @@ -1,7 +1,7 @@ #=============================================================================== # Pokédex Regional Dexes list menu screen # * For choosing which region list to view. Only appears when there is more -# than one viable region list to choose from, and if +# than one accessible region list to choose from, and if # Settings::USE_CURRENT_REGION_DEX is false. #=============================================================================== class Window_DexesList < Window_CommandPokemon @@ -94,29 +94,24 @@ class PokemonPokedexMenuScreen commands = [] commands2 = [] dexnames = Settings.pokedex_names - for i in 0...$PokemonGlobal.pokedexViable.length - index = $PokemonGlobal.pokedexViable[i] - if dexnames[index]==nil - commands[i] = _INTL("Pokédex") + $Trainer.pokedex.accessible_dexes.each do |dex| + if dexnames[dex].nil? + commands.push(_INTL("Pokédex")) + elsif dexnames[dex].is_a?(Array) + commands.push(dexnames[dex][0]) else - if dexnames[index].is_a?(Array) - commands[i] = dexnames[index][0] - else - commands[i] = dexnames[index] - end + commands.push(dexnames[dex]) end - index = -1 if index >= $PokemonGlobal.pokedexUnlocked.length - 1 - commands2[i] = [$Trainer.seen_count(index), - $Trainer.owned_count(index), - pbGetRegionalDexLength(index)] + commands2.push([$Trainer.pokedex.seen_count(dex), + $Trainer.pokedex.owned_count(dex), + pbGetRegionalDexLength(dex)]) end commands.push(_INTL("Exit")) @scene.pbStartScene(commands,commands2) loop do cmd = @scene.pbScene break if cmd<0 || cmd>=commands2.length # Cancel/Exit - $PokemonGlobal.pokedexDex = $PokemonGlobal.pokedexViable[cmd] - $PokemonGlobal.pokedexDex = -1 if $PokemonGlobal.pokedexDex==$PokemonGlobal.pokedexUnlocked.length-1 + $PokemonGlobal.pokedexDex = $Trainer.pokedex.accessible_dexes[cmd] pbFadeOutIn { scene = PokemonPokedex_Scene.new screen = PokemonPokedexScreen.new(scene) diff --git a/Data/Scripts/017_UI/003_UI_PokedexMain.rb b/Data/Scripts/017_UI/003_UI_PokedexMain.rb index e5aad68c9..0d6195768 100644 --- a/Data/Scripts/017_UI/003_UI_PokedexMain.rb +++ b/Data/Scripts/017_UI/003_UI_PokedexMain.rb @@ -284,10 +284,10 @@ class PokemonPokedex_Scene def pbGetPokedexRegion if Settings::USE_CURRENT_REGION_DEX region = pbGetCurrentRegion - region = -1 if region>=$PokemonGlobal.pokedexUnlocked.length-1 + region = -1 if region >= $Trainer.pokedex.dexes_count - 1 return region else - return $PokemonGlobal.pokedexDex # National Dex -1, regional dexes 0 etc. + return $PokemonGlobal.pokedexDex # National Dex -1, regional Dexes 0, 1, etc. end end @@ -297,8 +297,8 @@ class PokemonPokedex_Scene def pbGetSavePositionIndex index = pbGetPokedexRegion if index==-1 # National Dex - index = $PokemonGlobal.pokedexUnlocked.length-1 # National Dex index comes - end # after regional Dex indices + index = $Trainer.pokedex.dexes_count - 1 # National Dex index comes + end # after regional Dex indices return index end @@ -385,7 +385,7 @@ class PokemonPokedex_Scene iconspecies = nil if !$Trainer.seen?(iconspecies) # Write various bits of text dexname = _INTL("Pokédex") - if $PokemonGlobal.pokedexUnlocked.length>1 + if $Trainer.pokedex.dexes_count > 1 thisdex = Settings.pokedex_names[pbGetSavePositionIndex] if thisdex!=nil dexname = (thisdex.is_a?(Array)) ? thisdex[0] : thisdex @@ -400,9 +400,9 @@ class PokemonPokedex_Scene textpos.push([@dexlist.length.to_s,112,334,2,base,shadow]) else textpos.push([_INTL("Seen:"),42,302,0,base,shadow]) - textpos.push([$Trainer.seen_count(pbGetPokedexRegion).to_s,182,302,1,base,shadow]) + textpos.push([$Trainer.pokedex.seen_count(pbGetPokedexRegion).to_s,182,302,1,base,shadow]) textpos.push([_INTL("Owned:"),42,334,0,base,shadow]) - textpos.push([$Trainer.owned_count(pbGetPokedexRegion).to_s,182,334,1,base,shadow]) + textpos.push([$Trainer.pokedex.owned_count(pbGetPokedexRegion).to_s,182,334,1,base,shadow]) end # Draw all text pbDrawTextPositions(overlay,textpos) @@ -690,10 +690,7 @@ class PokemonPokedex_Scene end def setIconBitmap(species) - $Trainer.last_seen_forms = {} if !$Trainer.last_seen_forms - $Trainer.last_seen_forms[species] = [] if !$Trainer.last_seen_forms[species] - gender = $Trainer.last_seen_forms[species][0] || 0 - form = $Trainer.last_seen_forms[species][1] || 0 + gender, form = $Trainer.pokedex.last_form_seen(species) @sprites["icon"].setSpeciesBitmap(species, gender, form) end diff --git a/Data/Scripts/017_UI/004_UI_PokedexEntry.rb b/Data/Scripts/017_UI/004_UI_PokedexEntry.rb index 436911905..8ac504449 100644 --- a/Data/Scripts/017_UI/004_UI_PokedexEntry.rb +++ b/Data/Scripts/017_UI/004_UI_PokedexEntry.rb @@ -72,12 +72,12 @@ class PokemonPokedexInfo_Scene @viewport.z = 99999 dexnum = species dexnumshift = false - if $PokemonGlobal.pokedexUnlocked[$PokemonGlobal.pokedexUnlocked.length - 1] - dexnumshift = true if Settings::DEXES_WITH_OFFSETS.include?(-1) # National Dex + if $Trainer.pokedex.unlocked?(-1) # National Dex is unlocked + dexnumshift = true if Settings::DEXES_WITH_OFFSETS.include?(-1) else dexnum = 0 - for i in 0...$PokemonGlobal.pokedexUnlocked.length - 1 # Regional Dexes - next if !$PokemonGlobal.pokedexUnlocked[i] + for i in 0...$Trainer.pokedex.dexes_count - 1 # Regional Dexes + next if !$Trainer.pokedex.unlocked?(i) num = pbGetRegionalNumber(i,species) next if num <= 0 dexnum = num @@ -121,10 +121,7 @@ class PokemonPokedexInfo_Scene def pbUpdateDummyPokemon @species = @dexlist[@index][0] - $Trainer.last_seen_forms = {} if !$Trainer.last_seen_forms - $Trainer.last_seen_forms[@species] = [] if !$Trainer.last_seen_forms[@species] - @gender = $Trainer.last_seen_forms[@species][0] || 0 - @form = $Trainer.last_seen_forms[@species][1] || 0 + @gender, @form = $Trainer.pokedex.last_form_seen(@species) species_data = GameData::Species.get_species_form(@species, @form) @sprites["infosprite"].setSpeciesBitmap(@species,@gender,@form) if @sprites["formfront"] @@ -149,16 +146,15 @@ class PokemonPokedexInfo_Scene next if sp.form != 0 && (!sp.real_form_name || sp.real_form_name.empty?) next if sp.pokedex_form != sp.form multiple_forms = true if sp.form > 0 - $Trainer.seen_forms[@species] = [[], []] if !$Trainer.seen_forms[@species] case sp.gender_ratio when :AlwaysMale, :AlwaysFemale, :Genderless real_gender = (sp.gender_ratio == :AlwaysFemale) ? 1 : 0 - next if !$Trainer.seen_forms[@species][real_gender][sp.form] && !Settings::DEX_SHOWS_ALL_FORMS + next if !$Trainer.pokedex.seen_form?(@species, real_gender, sp.form) && !Settings::DEX_SHOWS_ALL_FORMS real_gender = 2 if sp.gender_ratio == :Genderless ret.push([sp.form_name, real_gender, sp.form]) else # Both male and female for real_gender in 0...2 - next if !$Trainer.seen_forms[@species][real_gender][sp.form] && !Settings::DEX_SHOWS_ALL_FORMS + next if !$Trainer.pokedex.seen_form?(@species, real_gender, sp.form) && !Settings::DEX_SHOWS_ALL_FORMS ret.push([sp.form_name, real_gender, sp.form]) break if sp.form_name && !sp.form_name.empty? # Only show 1 entry for each non-0 form end @@ -415,10 +411,7 @@ class PokemonPokedexInfo_Scene oldindex = -1 loop do if oldindex!=index - $Trainer.last_seen_forms = {} if !$Trainer.last_seen_forms - $Trainer.last_seen_forms[@species] = [] if !$Trainer.last_seen_forms - $Trainer.last_seen_forms[@species][0] = @available[index][1] - $Trainer.last_seen_forms[@species][1] = @available[index][2] + $Trainer.pokedex.set_last_form_seen(@species, @available[index][1], @available[index][2]) pbUpdateDummyPokemon drawPage(@page) @sprites["uparrow"].visible = (index>0) @@ -554,9 +547,9 @@ class PokemonPokedexInfoScreen region = -1 if Settings::USE_CURRENT_REGION_DEX region = pbGetCurrentRegion - region = -1 if region>=$PokemonGlobal.pokedexUnlocked.length-1 + region = -1 if region >= $Trainer.pokedex.dexes_count - 1 else - region = $PokemonGlobal.pokedexDex # National Dex -1, regional dexes 0 etc. + region = $PokemonGlobal.pokedexDex # National Dex -1, regional Dexes 0, 1, etc. end dexnum = pbGetRegionalNumber(region,species) dexnumshift = Settings::DEXES_WITH_OFFSETS.include?(region) diff --git a/Data/Scripts/017_UI/006_UI_Summary.rb b/Data/Scripts/017_UI/006_UI_Summary.rb index 0fc491b69..375057a85 100644 --- a/Data/Scripts/017_UI/006_UI_Summary.rb +++ b/Data/Scripts/017_UI/006_UI_Summary.rb @@ -396,12 +396,12 @@ class PokemonSummary_Scene # Write the Regional/National Dex number dexnum = GameData::Species.get(@pokemon.species).id_number dexnumshift = false - if $PokemonGlobal.pokedexUnlocked[$PokemonGlobal.pokedexUnlocked.length-1] + if $Trainer.pokedex.unlocked?(-1) # National Dex is unlocked dexnumshift = true if Settings::DEXES_WITH_OFFSETS.include?(-1) else dexnum = 0 - for i in 0...$PokemonGlobal.pokedexUnlocked.length-1 - next if !$PokemonGlobal.pokedexUnlocked[i] + for i in 0...$Trainer.pokedex.dexes_count - 1 + next if !$Trainer.pokedex.unlocked?(i) num = pbGetRegionalNumber(i,@pokemon.species) next if num<=0 dexnum = num @@ -1180,7 +1180,7 @@ class PokemonSummary_Scene if !@pokemon.egg? commands[cmdGiveItem = commands.length] = _INTL("Give item") commands[cmdTakeItem = commands.length] = _INTL("Take item") if @pokemon.hasItem? - commands[cmdPokedex = commands.length] = _INTL("View Pokédex") if $Trainer.pokedex + commands[cmdPokedex = commands.length] = _INTL("View Pokédex") if $Trainer.has_pokedex end commands[cmdMark = commands.length] = _INTL("Mark") commands[commands.length] = _INTL("Cancel") @@ -1198,7 +1198,7 @@ class PokemonSummary_Scene elsif cmdTakeItem>=0 && command==cmdTakeItem dorefresh = pbTakeItemFromPokemon(@pokemon,self) elsif cmdPokedex>=0 && command==cmdPokedex - pbUpdateLastSeenForm(@pokemon) + $Trainer.pokedex.register_last_seen(@pokemon) pbFadeOutIn { scene = PokemonPokedexInfo_Scene.new screen = PokemonPokedexInfoScreen.new(scene) diff --git a/Data/Scripts/017_UI/012_UI_TrainerCard.rb b/Data/Scripts/017_UI/012_UI_TrainerCard.rb index a208432bc..60a3f488c 100644 --- a/Data/Scripts/017_UI/012_UI_TrainerCard.rb +++ b/Data/Scripts/017_UI/012_UI_TrainerCard.rb @@ -56,7 +56,7 @@ class PokemonTrainerCard_Scene [_INTL("Money"),34,106,0,baseColor,shadowColor], [_INTL("${1}",$Trainer.money.to_s_formatted),302,106,1,baseColor,shadowColor], [_INTL("Pokédex"),34,154,0,baseColor,shadowColor], - [sprintf("%d/%d",$Trainer.owned_count,$Trainer.seen_count),302,154,1,baseColor,shadowColor], + [sprintf("%d/%d",$Trainer.pokedex.owned_count,$Trainer.pokedex.seen_count),302,154,1,baseColor,shadowColor], [_INTL("Time"),34,202,0,baseColor,shadowColor], [time,302,202,1,baseColor,shadowColor], [_INTL("Started"),34,250,0,baseColor,shadowColor], diff --git a/Data/Scripts/017_UI/013_UI_Load.rb b/Data/Scripts/017_UI/013_UI_Load.rb index 085cdbac5..e0a6657c6 100644 --- a/Data/Scripts/017_UI/013_UI_Load.rb +++ b/Data/Scripts/017_UI/013_UI_Load.rb @@ -66,7 +66,7 @@ class PokemonLoadPanel < SpriteWrapper textpos.push([_INTL("Badges:"),16*2,53*2,0,TEXTCOLOR,TEXTSHADOWCOLOR]) textpos.push([@trainer.badge_count.to_s,103*2,53*2,1,TEXTCOLOR,TEXTSHADOWCOLOR]) textpos.push([_INTL("Pokédex:"),16*2,69*2,0,TEXTCOLOR,TEXTSHADOWCOLOR]) - textpos.push([@trainer.seen_count.to_s,103*2,69*2,1,TEXTCOLOR,TEXTSHADOWCOLOR]) + textpos.push([@trainer.pokedex.seen_count.to_s,103*2,69*2,1,TEXTCOLOR,TEXTSHADOWCOLOR]) textpos.push([_INTL("Time:"),16*2,85*2,0,TEXTCOLOR,TEXTSHADOWCOLOR]) hour = @totalsec / 60 / 60 min = @totalsec / 60 % 60 diff --git a/Data/Scripts/017_UI/014_UI_Save.rb b/Data/Scripts/017_UI/014_UI_Save.rb index 1642efd1d..ea799a9d6 100644 --- a/Data/Scripts/017_UI/014_UI_Save.rb +++ b/Data/Scripts/017_UI/014_UI_Save.rb @@ -48,8 +48,8 @@ class PokemonSave_Scene loctext+=_INTL("Time{2}m
",textColor,min) end loctext+=_INTL("Badges{2}
",textColor,$Trainer.badge_count) - if $Trainer.pokedex - loctext+=_INTL("Pokédex{2}/{3}",textColor,$Trainer.owned_count,$Trainer.seen_count) + if $Trainer.has_pokedex + loctext+=_INTL("Pokédex{2}/{3}",textColor,$Trainer.pokedex.owned_count,$Trainer.pokedex.seen_count) end @sprites["locwindow"]=Window_AdvancedTextPokemon.new(loctext) @sprites["locwindow"].viewport=@viewport diff --git a/Data/Scripts/020_System and utilities/003_PSystem_BattleAudioUtilities.rb b/Data/Scripts/020_System and utilities/003_PSystem_BattleAudioUtilities.rb index fcd02ebb5..3b06e586d 100644 --- a/Data/Scripts/020_System and utilities/003_PSystem_BattleAudioUtilities.rb +++ b/Data/Scripts/020_System and utilities/003_PSystem_BattleAudioUtilities.rb @@ -73,7 +73,7 @@ def pbPlayTrainerIntroME(trainer_type) pbMEPlay(bgm) end -def pbGetTrainerBattleBGM(trainer) # can be a PlayerTrainer, NPCTrainer or an array of them +def pbGetTrainerBattleBGM(trainer) # can be a Player, NPCTrainer or an array of them if $PokemonGlobal.nextBattleBGM return $PokemonGlobal.nextBattleBGM.clone end @@ -123,7 +123,7 @@ def pbGetTrainerBattleBGMFromType(trainertype) return ret end -def pbGetTrainerVictoryME(trainer) # can be a PlayerTrainer, NPCTrainer or an array of them +def pbGetTrainerVictoryME(trainer) # can be a Player, NPCTrainer or an array of them if $PokemonGlobal.nextBattleME return $PokemonGlobal.nextBattleME.clone end diff --git a/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb b/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb index 826287ab6..d5722cba5 100644 --- a/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb +++ b/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb @@ -53,8 +53,8 @@ def pbNicknameAndStore(pkmn) pbMessage(_INTL("The Pokémon Boxes are full and can't accept any more!")) return end - $Trainer.set_seen(pkmn.species) - $Trainer.set_owned(pkmn.species) + $Trainer.pokedex.set_seen(pkmn.species) + $Trainer.pokedex.set_owned(pkmn.species) pbNickname(pkmn) pbStorePokemon(pkmn) end @@ -73,16 +73,15 @@ def pbAddPokemon(pkmn, level = 1, see_form = true) species_name = pkmn.speciesName pbMessage(_INTL("{1} obtained {2}!\\me[Pkmn get]\\wtnp[80]\1", $Trainer.name, species_name)) pbNicknameAndStore(pkmn) - pbSeenForm(pkmn) if see_form + $Trainer.pokedex.register(pkmn) if see_form return true end def pbAddPokemonSilent(pkmn, level = 1, see_form = true) return false if !pkmn || pbBoxesFull? pkmn = Pokemon.new(pkmn, level) if !pkmn.is_a?(Pokemon) - $Trainer.set_seen(pkmn.species) - $Trainer.set_owned(pkmn.species) - pbSeenForm(pkmn) if see_form + $Trainer.pokedex.register(pkmn) if see_form + $Trainer.pokedex.set_owned(pkmn.species) pkmn.record_first_moves if $Trainer.party_full? $PokemonStorage.pbStoreCaught(pkmn) @@ -101,16 +100,15 @@ def pbAddToParty(pkmn, level = 1, see_form = true) species_name = pkmn.speciesName pbMessage(_INTL("{1} obtained {2}!\\me[Pkmn get]\\wtnp[80]\1", $Trainer.name, species_name)) pbNicknameAndStore(pkmn) - pbSeenForm(pkmn) if see_form + $Trainer.pokedex.register(pkmn) if see_form return true end def pbAddToPartySilent(pkmn, level = nil, see_form = true) return false if !pkmn || $Trainer.party_full? pkmn = Pokemon.new(pkmn, level) if !pkmn.is_a?(Pokemon) - $Trainer.set_seen(pkmn.species) - $Trainer.set_owned(pkmn.species) - pbSeenForm(pkmn) if see_form + $Trainer.pokedex.register(pkmn) if see_form + $Trainer.pokedex.set_owned(pkmn.species) pkmn.record_first_moves $Trainer.party[$Trainer.party.length] = pkmn return true @@ -131,9 +129,8 @@ def pbAddForeignPokemon(pkmn, level = 1, owner_name = nil, nickname = nil, owner pbMessage(_INTL("\\me[Pkmn get]{1} received a Pokémon.\1", $Trainer.name)) end pbStorePokemon(pkmn) - $Trainer.set_seen(pkmn.species) - $Trainer.set_owned(pkmn.species) - pbSeenForm(pkmn) if see_form + $Trainer.pokedex.register(pkmn) if see_form + $Trainer.pokedex.set_owned(pkmn.species) return true end @@ -152,41 +149,6 @@ end alias pbAddEgg pbGenerateEgg alias pbGenEgg pbGenerateEgg -#=============================================================================== -# Recording Pokémon forms as seen -#=============================================================================== -def pbSeenForm(species, gender = 0, form = 0) - $Trainer.seen_forms = {} if !$Trainer.seen_forms - $Trainer.last_seen_forms = {} if !$Trainer.last_seen_forms - if species.is_a?(Pokemon) - species_data = species.species_data - gender = species.gender - else - species_data = GameData::Species.get_species_form(species, form) - end - return if !species_data - species = species_data.species - gender = 0 if gender >= 2 - form = species_data.form - if form != species_data.pokedex_form - species_data = GameData::Species.get_species_form(species, species_data.pokedex_form) - form = species_data.form - end - form = 0 if species_data.form_name.nil? || species_data.form_name.empty? - $Trainer.seen_forms[species] = [[], []] if !$Trainer.seen_forms[species] - $Trainer.seen_forms[species][gender][form] = true - $Trainer.last_seen_forms[species] = [] if !$Trainer.last_seen_forms[species] - $Trainer.last_seen_forms[species] = [gender, form] if $Trainer.last_seen_forms[species] == [] -end - -def pbUpdateLastSeenForm(pkmn) - $Trainer.last_seen_forms = {} if !$Trainer.last_seen_forms - species_data = pkmn.species_data - form = species_data.pokedex_form - form = 0 if species_data.form_name.nil? || species_data.form_name.empty? - $Trainer.last_seen_forms[pkmn.species] = [pkmn.gender, form] -end - #=============================================================================== # Analyse Pokémon in the party #=============================================================================== diff --git a/Data/Scripts/020_System and utilities/005_PSystem_Utilities.rb b/Data/Scripts/020_System and utilities/005_PSystem_Utilities.rb index 801ff4963..24cd3a006 100644 --- a/Data/Scripts/020_System and utilities/005_PSystem_Utilities.rb +++ b/Data/Scripts/020_System and utilities/005_PSystem_Utilities.rb @@ -230,7 +230,7 @@ def pbTrainerName(name = nil, outfit = 0) pbChangePlayer(0) if $PokemonGlobal.playerID < 0 player_metadata = GameData::Metadata.get_player($PokemonGlobal.playerID) trainer_type = (player_metadata) ? player_metadata[0] : nil - $Trainer = PlayerTrainer.new(name, trainer_type) + $Trainer = Player.new(name, trainer_type) $Trainer.outfit = outfit $Trainer.character_ID = $PokemonGlobal.playerID if name.nil? @@ -394,53 +394,6 @@ def pbGetRegionalDexLength(region_dex) return (dex_list) ? dex_list.length : 0 end -# Decides which Dex lists are able to be viewed (i.e. they are unlocked and have -# at least 1 seen species in them), and saves all viable dex region numbers -# (National Dex comes after regional dexes). -# If the Dex list shown depends on the player's location, this just decides if -# a species in the current region has been seen - doesn't look at other regions. -# Here, just used to decide whether to show the Pokédex in the Pause menu. -def pbSetViableDexes - $PokemonGlobal.pokedexViable = [] - if Settings::USE_CURRENT_REGION_DEX - region = pbGetCurrentRegion - region = -1 if region>=$PokemonGlobal.pokedexUnlocked.length-1 - $PokemonGlobal.pokedexViable[0] = region if $Trainer.seen_any?(region) - else - numDexes = $PokemonGlobal.pokedexUnlocked.length - if numDexes==1 # National Dex only - if $PokemonGlobal.pokedexUnlocked[0] - $PokemonGlobal.pokedexViable.push(0) if $Trainer.seen_any? - end - else # Regional dexes + National Dex - for i in 0...numDexes - regionToCheck = (i==numDexes-1) ? -1 : i - if $PokemonGlobal.pokedexUnlocked[i] - $PokemonGlobal.pokedexViable.push(i) if $Trainer.seen_any?(regionToCheck) - end - end - end - end -end - -# Unlocks a Dex list. The National Dex is -1 here (or nil argument). -def pbUnlockDex(dex=-1) - index = dex - if index<0 || index>$PokemonGlobal.pokedexUnlocked.length-1 - index = $PokemonGlobal.pokedexUnlocked.length-1 - end - $PokemonGlobal.pokedexUnlocked[index] = true -end - -# Locks a Dex list. The National Dex is -1 here (or nil argument). -def pbLockDex(dex=-1) - index = dex - if index<0 || index>$PokemonGlobal.pokedexUnlocked.length-1 - index = $PokemonGlobal.pokedexUnlocked.length-1 - end - $PokemonGlobal.pokedexUnlocked[index] = false -end - #=============================================================================== diff --git a/Data/Scripts/021_Debug/001_Debug menus/002_Debug_MenuCommands.rb b/Data/Scripts/021_Debug/001_Debug menus/002_Debug_MenuCommands.rb index d1b1f0014..9c7d49e21 100644 --- a/Data/Scripts/021_Debug/001_Debug menus/002_Debug_MenuCommands.rb +++ b/Data/Scripts/021_Debug/001_Debug menus/002_Debug_MenuCommands.rb @@ -547,9 +547,8 @@ DebugMenuCommands.register("demoparty", { party.each do |species| pkmn = Pokemon.new(species, 20) $Trainer.party.push(pkmn) - $Trainer.set_seen(species) - $Trainer.set_owned(species) - pbSeenForm(pkmn) + $Trainer.pokedex.register(pkmn) + $Trainer.pokedex.set_owned(species) case species when :PIDGEOTTO pkmn.learn_move(:FLY) @@ -601,8 +600,6 @@ DebugMenuCommands.register("fillboxes", { "name" => _INTL("Fill Storage Boxes"), "description" => _INTL("Add one Pokémon of each species (at Level 50) to storage."), "effect" => proc { - $Trainer.seen_forms = {} if !$Trainer.seen_forms - $Trainer.last_seen_forms = {} if !$Trainer.last_seen_forms added = 0 box_qty = $PokemonStorage.maxPokemon(0) completed = true @@ -610,22 +607,18 @@ DebugMenuCommands.register("fillboxes", { sp = species_data.species f = species_data.form # Record each form of each species as seen and owned - $Trainer.seen_forms[sp] = [[], []] if !$Trainer.seen_forms[sp] if f == 0 - $Trainer.set_seen(sp) - $Trainer.set_owned(sp) if [:AlwaysMale, :AlwaysFemale, :Genderless].include?(species_data.gender_ratio) g = (species_data.gender_ratio == :AlwaysFemale) ? 1 : 0 - $Trainer.seen_forms[sp][g][f] = true - $Trainer.last_seen_forms[sp] = [g, f] if f == 0 + $Trainer.pokedex.register(sp, g, f) else # Both male and female - $Trainer.seen_forms[sp][0][f] = true - $Trainer.seen_forms[sp][1][f] = true - $Trainer.last_seen_forms[sp] = [0, f] if f == 0 + $Trainer.pokedex.register(sp, 0, f) + $Trainer.pokedex.register(sp, 1, f) end + $Trainer.pokedex.set_owned(sp) elsif species_data.real_form_name && !species_data.real_form_name.empty? g = (species_data.gender_ratio == :AlwaysFemale) ? 1 : 0 - $Trainer.seen_forms[sp][g][f] = true + $Trainer.pokedex.register(sp, g, f) end # Add Pokémon (if form 0) next if f != 0 @@ -762,25 +755,23 @@ DebugMenuCommands.register("dexlists", { dexescmd = 0 loop do dexescmds = [] - dexescmds.push(_INTL("Have Pokédex: {1}", $Trainer.pokedex ? "[YES]" : "[NO]")) - d = Settings.pokedex_names - for i in 0...d.length - name = d[i] - name = name[0] if name.is_a?(Array) - dexindex = i - unlocked = $PokemonGlobal.pokedexUnlocked[dexindex] + dexescmds.push(_INTL("Have Pokédex: {1}", $Trainer.has_pokedex ? "[YES]" : "[NO]")) + dex_names = Settings.pokedex_names + for i in 0...dex_names.length + name = (dex_names[i].is_a?(Array)) ? dex_names[i][0] : dex_names[i] + unlocked = $Trainer.pokedex.unlocked?(i) dexescmds.push(_INTL("{1} {2}", unlocked ? "[Y]" : "[ ]", name)) end dexescmd = pbShowCommands(nil, dexescmds, -1, dexescmd) break if dexescmd < 0 dexindex = dexescmd - 1 if dexindex < 0 # Toggle Pokédex ownership - $Trainer.pokedex = !$Trainer.pokedex + $Trainer.has_pokedex = !$Trainer.has_pokedex else # Toggle Regional Dex accessibility - if $PokemonGlobal.pokedexUnlocked[dexindex] - pbLockDex(dexindex) + if $Trainer.pokedex.unlocked?(dexindex) + $Trainer.pokedex.lock(dexindex) else - pbUnlockDex(dexindex) + $Trainer.pokedex.unlock(dexindex) end end end diff --git a/Data/Scripts/021_Debug/001_Debug menus/004_Debug_PokemonCommands.rb b/Data/Scripts/021_Debug/001_Debug menus/004_Debug_PokemonCommands.rb index 1598d6e1d..e8e889cba 100644 --- a/Data/Scripts/021_Debug/001_Debug menus/004_Debug_PokemonCommands.rb +++ b/Data/Scripts/021_Debug/001_Debug menus/004_Debug_PokemonCommands.rb @@ -754,7 +754,7 @@ PokemonDebugMenuCommands.register("setgender", { when 2 # Reset pkmn.gender = nil end - pbSeenForm(pkmn) if !settingUpBattle + $Trainer.pokedex.register(pkmn) if !settingUpBattle screen.pbRefreshSingle(pkmnid) end end @@ -782,7 +782,7 @@ PokemonDebugMenuCommands.register("speciesform", { if species && species != pkmn.species pkmn.species = species pkmn.calc_stats - pbSeenForm(pkmn) if !settingUpBattle + $Trainer.pokedex.register(pkmn) if !settingUpBattle screen.pbRefreshSingle(pkmnid) end when 1 # Set form @@ -809,7 +809,7 @@ PokemonDebugMenuCommands.register("speciesform", { pkmn.forced_form = f end pkmn.form = f - pbSeenForm(pkmn) if !settingUpBattle + $Trainer.pokedex.register(pkmn) if !settingUpBattle screen.pbRefreshSingle(pkmnid) end end