diff --git a/Data/Scripts/001b_Save data/005_BuiltinConversions.rb b/Data/Scripts/001b_Save data/005_BuiltinConversions.rb index 6753d689b..89943cbcb 100644 --- a/Data/Scripts/001b_Save data/005_BuiltinConversions.rb +++ b/Data/Scripts/001b_Save data/005_BuiltinConversions.rb @@ -13,6 +13,27 @@ SaveData.register_conversion(:v19_define_versions) do end end +SaveData.register_conversion(:v19_convert_PokemonSystem) do + essentials_version 19 + display_title 'Updating PokemonSystem class' + to_all do |save_data| + new_system = PokemonSystem.new + new_system.textspeed = save_data[:pokemon_system].textspeed || new_system.textspeed + new_system.battlescene = save_data[:pokemon_system].battlescene || new_system.battlescene + new_system.battlestyle = save_data[:pokemon_system].battlestyle || new_system.battlestyle + new_system.frame = save_data[:pokemon_system].frame || new_system.frame + new_system.textskin = save_data[:pokemon_system].textskin || new_system.textskin + new_system.font = save_data[:pokemon_system].font || new_system.font + new_system.screensize = save_data[:pokemon_system].screensize || new_system.screensize + new_system.language = save_data[:pokemon_system].language || new_system.language + new_system.runstyle = save_data[:pokemon_system].runstyle || new_system.runstyle + new_system.bgmvolume = save_data[:pokemon_system].bgmvolume || new_system.bgmvolume + new_system.sevolume = save_data[:pokemon_system].sevolume || new_system.sevolume + new_system.textinput = save_data[:pokemon_system].textinput || new_system.textinput + save_data[:pokemon_system] = new_system + end +end + SaveData.register_conversion(:v19_convert_player) do essentials_version 19 display_title 'Converting player trainer class' @@ -23,20 +44,58 @@ SaveData.register_conversion(:v19_convert_player) do end end -SaveData.register_conversion(:v19_convert_storage) do +SaveData.register_conversion(:v19_convert_global_metadata) do essentials_version 19 - display_title 'Converting classes of Pokémon in storage' - to_value :storage_system do |storage| - storage.instance_eval do - for box in 0...self.maxBoxes - for i in 0...self.maxPokemon(box) - next unless self[box, i] - next if self[box, i].is_a?(Pokemon) - self[box, i] = PokeBattle_Pokemon.copy(self[box, i]) + display_title 'Adding encounter version variable to global metadata' + to_value :global_metadata do |global| + global.bridge ||= 0 + global.encounter_version ||= 0 + if global.pcItemStorage + global.pcItemStorage.items.each_with_index do |slot, i| + item_data = GameData::Item.try_get(slot[0]) + if item_data + slot[0] = item_data.id + else + global.pcItemStorage.items[i] = nil end end - end # storage.instance_eval - end # to_value + global.pcItemStorage.items.compact! + end + if global.mailbox + global.mailbox.each_with_index do |mail, i| + global.mailbox[i] = PokemonMail.convert(mail) if mail + end + end + if global.partner + global.partner[0] = GameData::TrainerType.get(global.partner[0]).id + global.partner[3].each_with_index do |pkmn, i| + global.partner[3][i] = PokeBattle_Pokemon.convert(pkmn) if pkmn + end + end + if global.daycare + global.daycare.each do |slot| + slot[0] = PokeBattle_Pokemon.convert(slot[0]) if slot && slot[0] + end + end + if global.roamPokemon + global.roamPokemon.each_with_index do |p, i| + global.roamPokemon[i] = PokeBattle_Pokemon.convert(p) if p + end + end + if global.hallOfFame + global.hallOfFame.each do |team| + next if !team + team.each_with_index do |p, i| + team[i] = PokeBattle_Pokemon.convert(p) if p + end + end + end + if global.triads + global.triads.items.each do |card| + card[0] = GameData::Species.get(card[0]).id if card && card[0] && card[0] != 0 + end + end + end end SaveData.register_conversion(:v19_convert_bag) do @@ -45,20 +104,47 @@ SaveData.register_conversion(:v19_convert_bag) do to_value :bag do |bag| bag.instance_eval do for pocket in self.pockets - for item in pocket + pocket.each_with_index do |item, i| next if !item || !item[0] || item[0] == 0 item_data = GameData::Item.try_get(item[0]) - item[0] = item_data.id if item_data + if item_data + item[0] = item_data.id + else + pocket[i] = nil + end + end + pocket.compact! + end + self.registeredIndex + self.registeredItems.each_with_index do |item, i| + next if !item + if item == 0 + self.registeredItems[i] = nil + else + item_data = GameData::Item.try_get(item) + if item_data + self.registeredItems = item_data.id + else + self.registeredItems[i] = nil + end end end + self.registeredItems.compact! end # bag.instance_eval end # to_value end -SaveData.register_conversion(:v19_convert_global_metadata) do +SaveData.register_conversion(:v19_convert_storage) do essentials_version 19 - display_title 'Adding encounter version variable to global metadata' - to_value :global_metadata do |global| - global.encounter_version ||= 0 - end + display_title 'Converting classes of Pokémon in storage' + to_value :storage_system do |storage| + storage.instance_eval do + for box in 0...self.maxBoxes + for i in 0...self.maxPokemon(box) + next unless self[box, i] + self[box, i] = PokeBattle_Pokemon.convert(self[box, i]) + end + end + end # storage.instance_eval + end # to_value end diff --git a/Data/Scripts/013_Overworld/005_PField_Metadata.rb b/Data/Scripts/013_Overworld/005_PField_Metadata.rb index 599861f5c..3e16e5b84 100644 --- a/Data/Scripts/013_Overworld/005_PField_Metadata.rb +++ b/Data/Scripts/013_Overworld/005_PField_Metadata.rb @@ -43,7 +43,7 @@ class PokemonGlobalMetadata # Events attr_accessor :eventvars # Affecting the map - attr_writer :bridge + attr_accessor :bridge attr_accessor :repel attr_accessor :flashUsed attr_accessor :encounter_version @@ -129,10 +129,6 @@ class PokemonGlobalMetadata # Save file @safesave = false end - - def bridge - return @bridge || 0 - end end diff --git a/Data/Scripts/014_Trainers/001b_Trainer_deprecated.rb b/Data/Scripts/014_Trainers/001b_Trainer_deprecated.rb index 55864c9a4..3c9b2e979 100644 --- a/Data/Scripts/014_Trainers/001b_Trainer_deprecated.rb +++ b/Data/Scripts/014_Trainers/001b_Trainer_deprecated.rb @@ -51,7 +51,7 @@ class PokeBattle_Trainer 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.copy(p)) } + 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 } diff --git a/Data/Scripts/015_Items/006_PItem_Mail.rb b/Data/Scripts/015_Items/006_PItem_Mail.rb index a474ff708..7076fdab5 100644 --- a/Data/Scripts/015_Items/006_PItem_Mail.rb +++ b/Data/Scripts/015_Items/006_PItem_Mail.rb @@ -18,7 +18,8 @@ end class PokemonMail attr_reader :item, :message, :sender, :poke1, :poke2, :poke3 - def self.copy(mail) + def self.convert(mail) + return mail if mail.is_a?(Mail) item.poke1[0] = GameData::Species.get(item.poke1[0]).id if item.poke1 item.poke2[0] = GameData::Species.get(item.poke2[0]).id if item.poke2 item.poke3[0] = GameData::Species.get(item.poke3[0]).id if item.poke3 diff --git a/Data/Scripts/015_Items/008_PItem_Bag.rb b/Data/Scripts/015_Items/008_PItem_Bag.rb index 79ee8b619..ed7e9a6f9 100644 --- a/Data/Scripts/015_Items/008_PItem_Bag.rb +++ b/Data/Scripts/015_Items/008_PItem_Bag.rb @@ -190,6 +190,8 @@ end # The PC item storage object, which actually contains all the items #=============================================================================== class PCItemStorage + attr_reader :items + MAX_SIZE = 999 # Number of different slots in storage MAX_PER_SLOT = 999 # Max. number of items per slot diff --git a/Data/Scripts/016_Pokemon/010_Pokemon_Deprecated.rb b/Data/Scripts/016_Pokemon/010_Pokemon_Deprecated.rb index 0eb8e3627..5b54802ad 100644 --- a/Data/Scripts/016_Pokemon/010_Pokemon_Deprecated.rb +++ b/Data/Scripts/016_Pokemon/010_Pokemon_Deprecated.rb @@ -24,7 +24,7 @@ class PokeBattle_Pokemon raise "PokeBattle_Pokemon.new is deprecated. Use Pokemon.new instead." end - def self.copy(pkmn) + def self.convert(pkmn) return pkmn if pkmn.is_a?(Pokemon) owner = Pokemon::Owner.new(pkmn.trainerID, pkmn.ot, pkmn.otgender, pkmn.language) # Set level to 1 initially, as it will be recalculated later @@ -41,7 +41,7 @@ class PokeBattle_Pokemon ret.nature = pkmn.natureflag ret.nature_for_stats = pkmn.natureOverride ret.item = pkmn.item - ret.mail = PokemonMail.copy(pkmn.mail) if pkmn.mail + ret.mail = PokemonMail.convert(pkmn.mail) if pkmn.mail pkmn.moves.each { |m| ret.moves.push(PBMove.copy(m)) if m && m.id > 0 } if pkmn.firstmoves pkmn.firstmoves.each { |m| ret.add_first_move(m) } @@ -71,7 +71,7 @@ class PokeBattle_Pokemon ret.timeReceived = pkmn.timeReceived ret.timeEggHatched = pkmn.timeEggHatched if pkmn.fused - ret.fused = PokeBattle_Pokemon.copy(pkmn.fused) if pkmn.fused.is_a?(PokeBattle_Pokemon) + ret.fused = PokeBattle_Pokemon.convert(pkmn.fused) if pkmn.fused.is_a?(PokeBattle_Pokemon) ret.fused = pkmn.fused if pkmn.fused.is_a?(Pokemon) end ret.personalID = pkmn.personalID diff --git a/Data/Scripts/017_UI/015_PScreen_Options.rb b/Data/Scripts/017_UI/015_PScreen_Options.rb index 7e4928bd8..1676345c9 100644 --- a/Data/Scripts/017_UI/015_PScreen_Options.rb +++ b/Data/Scripts/017_UI/015_PScreen_Options.rb @@ -6,14 +6,14 @@ class PokemonSystem attr_accessor :battlescene attr_accessor :battlestyle attr_accessor :frame - attr_writer :textskin + attr_accessor :textskin attr_accessor :font attr_accessor :screensize - attr_writer :language - attr_writer :runstyle - attr_writer :bgmvolume - attr_writer :sevolume - attr_writer :textinput + attr_accessor :language + attr_accessor :runstyle + attr_accessor :bgmvolume + attr_accessor :sevolume + attr_accessor :textinput def initialize @textspeed = 1 # Text speed (0=slow, 1=normal, 2=fast) @@ -30,13 +30,7 @@ class PokemonSystem @textinput = 0 # Text input mode (0=cursor, 1=keyboard) end - def textskin; return @textskin || 0; end - def language; return @language || 0; end - def runstyle; return @runstyle || 0; end - def bgmvolume; return @bgmvolume || 100; end - def sevolume; return @sevolume || 100; end - def textinput; return @textinput || 0; end - def tilemap; return Settings::MAP_VIEW_MODE; end + def tilemap; return Settings::MAP_VIEW_MODE; end end #=============================================================================== diff --git a/Data/Scripts/017_UI/024_PScreen_PurifyChamber.rb b/Data/Scripts/017_UI/024_PScreen_PurifyChamber.rb index f6d7e4be2..1ced75cb9 100644 --- a/Data/Scripts/017_UI/024_PScreen_PurifyChamber.rb +++ b/Data/Scripts/017_UI/024_PScreen_PurifyChamber.rb @@ -262,9 +262,9 @@ class PurifyChamber def debugAdd(set,shadow,type1,type2=nil) pkmn=PseudoPokemon.new(shadow,type1,type2||type1) if pkmn.shadowPokemon? - self.setShadow(set,pkmn) + self.setShadow(set,pkmn) else - self.insertAfter(set,setCount(set),pkmn) + self.insertAfter(set,setCount(set),pkmn) end end end diff --git a/Data/Scripts/018_Minigames/002_PMinigame_TripleTriad.rb b/Data/Scripts/018_Minigames/002_PMinigame_TripleTriad.rb index 597c07691..56231f95b 100644 --- a/Data/Scripts/018_Minigames/002_PMinigame_TripleTriad.rb +++ b/Data/Scripts/018_Minigames/002_PMinigame_TripleTriad.rb @@ -988,6 +988,8 @@ end class TriadStorage + attr_reader :items + def initialize @items = [] end