From ef7eb0eda463676a91cbe083a2bb91f7a6d83f30 Mon Sep 17 00:00:00 2001 From: Joni Savolainen Date: Sat, 26 Sep 2020 20:31:37 +0300 Subject: [PATCH 01/13] Create Pokemon::Owner --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 49 +++++++++++++++++++++---- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 0feb2cefe..cacf9761e 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -121,6 +121,44 @@ class Pokemon # Ownership, obtained information #============================================================================= + # Stores information on a Pokémon's owner. + class Owner + # @return [Integer] the ID of the owner + attr_reader :id + # @return [String] the name of the owner + attr_reader :name + # @return [0, 1, 2] the gender of the owner (0 = male, 1 = female, 2 = unknown) + attr_reader :gender + # @return [Integer] the language of the owner (see {pbGetLanguage} for language IDs) + attr_reader :language + + # @param id [Integer] the ID of the owner + # @param name [String] the name of the owner + # @param gender [0, 1, 2] the gender of the owner (0 = male, 1 = female, 2 = unknown) + # @param language [Integer] the language of the owner (see {pbGetLanguage} for language IDs) + def initialize(id, name, gender, language) + @id = id + @name = name + @gender = gender + @language = language + end + + # Returns a new Owner object populated with values taken from +trainer+. + # @param trainer [PokeBattle_Trainer] trainer object to read data from + # @return [Owner] new owner object + def self.new_from_trainer(trainer) + return new(trainer.id, trainer.name, trainer.gender, trainer.language) + end + + # @return [Integer] the public portion of the owner's ID + def public_id + return @id & 0xFFFF + end + end + + # @return [Owner] this Pokémon's owner + attr_reader :owner + # @return [Integer] the public portion of the original trainer's ID def publicID return @trainerID & 0xFFFF @@ -1090,15 +1128,10 @@ class Pokemon @ribbons = [] @ballused = 0 @eggsteps = 0 - if owner - @trainerID = owner.id - @ot = owner.name - @otgender = owner.gender - @language = owner.language + if owner.is_a?(PokeBattle_Trainer) + @owner = Owner.new_from_trainer(owner) else - @trainerID = 0 - @ot = "" - @otgender = 2 + @owner = Owner.new(0, '', 2, 2) end @obtainMap = ($game_map) ? $game_map.map_id : 0 @obtainText = nil From c397aeba4ed0a1d01bed09e59e831ababf72a47c Mon Sep 17 00:00:00 2001 From: Joni Savolainen Date: Tue, 13 Oct 2020 20:49:50 +0300 Subject: [PATCH 02/13] Setters for Pokemon::Owner --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 43 +++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index cacf9761e..f198df348 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -134,7 +134,7 @@ class Pokemon # @param id [Integer] the ID of the owner # @param name [String] the name of the owner - # @param gender [0, 1, 2] the gender of the owner (0 = male, 1 = female, 2 = unknown) + # @param gender [Integer] the gender of the owner (0 = male, 1 = female, 2 = unknown) # @param language [Integer] the language of the owner (see {pbGetLanguage} for language IDs) def initialize(id, name, gender, language) @id = id @@ -150,6 +150,34 @@ class Pokemon return new(trainer.id, trainer.name, trainer.gender, trainer.language) end + def id=(new_id) + unless new_id.is_a?(Integer) + raise ArgumentError, _INTL('A {1} was given as Pokémon owner id', new_id.class.name) + end + @id = new_id + end + + def name=(new_name) + unless new_name.is_a?(String) + raise ArgumentError, _INTL('A {1} was given as Pokémon owner id', new_name.class.name) + end + @name = new_name + end + + def gender=(new_gender) + unless new_gender.is_a?(Integer) + raise ArgumentError, _INTL('A {1} was given as Pokémon owner id', new_gender.class.name) + end + @gender = new_gender + end + + def language=(new_language) + unless new_language.is_a?(Integer) + raise ArgumentError, _INTL('A {1} was given as Pokémon owner id', new_language.class.name) + end + @language = new_language + end + # @return [Integer] the public portion of the owner's ID def public_id return @id & 0xFFFF @@ -157,7 +185,18 @@ class Pokemon end # @return [Owner] this Pokémon's owner - attr_reader :owner + def owner + return @owner + end + + # Changes this Pokémon's owner. + # @param new_owner [Owner] the owner to change to + def owner=(new_owner) + unless new_owner.is_a?(Owner) + raise ArgumentError, _INTL("A {1} was given as a Pokémon owner", new_owner.class.name) + end + @owner = new_owner + end # @return [Integer] the public portion of the original trainer's ID def publicID From ae0e13c22867e2cbf7a666af9bc8d3f2720cb494 Mon Sep 17 00:00:00 2001 From: Joni Savolainen Date: Tue, 13 Oct 2020 20:55:15 +0300 Subject: [PATCH 03/13] Deprecate Pokemon#trainerID and Pokemon#publicID --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 9 --------- .../016_Pokemon/009_Pokemon_Deprecated.rb | 18 ++++++++++++++++++ Data/Scripts/017_UI/006_PScreen_Summary.rb | 2 +- Data/Scripts/017_UI/022_PScreen_Trading.rb | 9 +++------ Data/Scripts/017_UI/027_PScreen_HallOfFame.rb | 2 +- .../018_Minigames/005_PMinigame_Lottery.rb | 4 ++-- Data/Scripts/021_Debug/003_Debug_Pokemon.rb | 10 ++++------ 7 files changed, 29 insertions(+), 25 deletions(-) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index f198df348..17bf39192 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -77,10 +77,6 @@ class Pokemon attr_accessor :pokerus # @return [Integer] this Pokémon's personal ID attr_accessor :personalID - # The 32-bit ID of this Pokémon's trainer. The secret ID is in the - # upper 16 bits. - # @return [Integer] the ID of this Pokémon's trainer - attr_accessor :trainerID # @return [Integer] the manner this Pokémon was obtained: # 0 (met), 1 (as egg), 2 (traded), 4 (fateful encounter) attr_accessor :obtainMode @@ -198,11 +194,6 @@ class Pokemon @owner = new_owner end - # @return [Integer] the public portion of the original trainer's ID - def publicID - return @trainerID & 0xFFFF - end - # @param trainer [PokeBattle_Trainer] the trainer to compare to the OT # @return [Boolean] whether the given trainer and this Pokémon's original trainer don't match def foreign?(trainer) diff --git a/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb b/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb index 8f89c4b55..e48105942 100644 --- a/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb +++ b/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb @@ -12,6 +12,24 @@ PokeBattle_Pokemon = Pokemon class Pokemon # @deprecated Use {MAX_NAME_SIZE} instead. This alias is slated to be removed in vXX. MAX_POKEMON_NAME_SIZE = MAX_NAME_SIZE + + # @deprecated Use {Owner#public_id} instead. This alias is slated to be removed in vXX. + def publicID + Deprecation.warn_method('Pokemon#publicID', 'vXX', 'Pokemon::Owner#public_id') + return @owner.public_id + end + + # @deprecated Use {Owner#id} instead. This alias is slated to be removed in vXX. + def trainerID + Deprecation.warn_method('Pokemon#trainerID', 'vXX', 'Pokemon::Owner#id') + return @owner.id + end + + # @deprecated Use {Owner#id=} instead. This alias is slated to be removed in vXX. + def trainerID=(value) + Deprecation.warn_method('Pokemon#trainerID=', 'vXX', 'Pokemon::Owner#id=') + @owner.id = value + end end # (see Pokemon#initialize) diff --git a/Data/Scripts/017_UI/006_PScreen_Summary.rb b/Data/Scripts/017_UI/006_PScreen_Summary.rb index 463e1f085..1fb59bb87 100644 --- a/Data/Scripts/017_UI/006_PScreen_Summary.rb +++ b/Data/Scripts/017_UI/006_PScreen_Summary.rb @@ -412,7 +412,7 @@ class PokemonSummary_Scene when 1; ownerbase = Color.new(248,56,32); ownershadow = Color.new(224,152,144) end textpos.push([@pokemon.ot,435,176,2,ownerbase,ownershadow]) - textpos.push([sprintf("%05d",@pokemon.publicID),435,208,2,Color.new(64,64,64),Color.new(176,176,176)]) + textpos.push([sprintf("%05d",@pokemon.owner.public_id),435,208,2,Color.new(64,64,64),Color.new(176,176,176)]) end # Write Exp text OR heart gauge message (if a Shadow Pokémon) if @pokemon.shadowPokemon? diff --git a/Data/Scripts/017_UI/022_PScreen_Trading.rb b/Data/Scripts/017_UI/022_PScreen_Trading.rb index 0c9a1aec4..d95fa3950 100644 --- a/Data/Scripts/017_UI/022_PScreen_Trading.rb +++ b/Data/Scripts/017_UI/022_PScreen_Trading.rb @@ -170,7 +170,7 @@ class PokemonTrade_Scene speciesname2=PBSpecies.getName(@pokemon2.species) pbMessageDisplay(@sprites["msgwindow"], _ISPRINTF("{1:s}\r\nID: {2:05d} OT: {3:s}\\wtnp[0]", - @pokemon.name,@pokemon.publicID,@pokemon.ot)) { pbUpdate } + @pokemon.name,@pokemon.owner.public_id,@pokemon.ot)) { pbUpdate } pbMessageWaitForInput(@sprites["msgwindow"],50,true) { pbUpdate } pbPlayDecisionSE pbScene1 @@ -181,7 +181,7 @@ class PokemonTrade_Scene pbScene2 pbMessageDisplay(@sprites["msgwindow"], _ISPRINTF("{1:s}\r\nID: {2:05d} OT: {3:s}\1", - @pokemon2.name,@pokemon2.publicID,@pokemon2.ot)) { pbUpdate } + @pokemon2.name,@pokemon2.owner.public_id,@pokemon2.ot)) { pbUpdate } pbMessageDisplay(@sprites["msgwindow"], _INTL("Take good care of {1}.",speciesname2)) { pbUpdate } end @@ -195,10 +195,7 @@ def pbStartTrade(pokemonIndex,newpoke,nickname,trainerName,trainerGender=0) opponent.setForeignID($Trainer) yourPokemon = nil; resetmoves = true if newpoke.is_a?(Pokemon) - newpoke.trainerID = opponent.id - newpoke.ot = opponent.name - newpoke.otgender = opponent.gender - newpoke.language = opponent.language + newpoke.owner = Pokemon::Owner.new_from_trainer(opponent) yourPokemon = newpoke resetmoves = false else diff --git a/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb b/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb index de153a00f..e66d59684 100644 --- a/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb +++ b/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb @@ -302,7 +302,7 @@ class HallOfFame_Scene end pokename+="/"+speciesname pokename=_INTL("Egg")+"/"+_INTL("Egg") if pokemon.egg? - idno=(pokemon.ot=="" || pokemon.egg?) ? "?????" : sprintf("%05d",pokemon.publicID) + idno=(pokemon.ot=="" || pokemon.egg?) ? "?????" : sprintf("%05d",pokemon.owner.public_id) dexnumber=pokemon.egg? ? _INTL("No. ???") : _ISPRINTF("No. {1:03d}",pokemon.species) textPositions=[ [dexnumber,32,Graphics.height-80,0,BASECOLOR,SHADOWCOLOR], diff --git a/Data/Scripts/018_Minigames/005_PMinigame_Lottery.rb b/Data/Scripts/018_Minigames/005_PMinigame_Lottery.rb index 485940fbd..7c397cc62 100644 --- a/Data/Scripts/018_Minigames/005_PMinigame_Lottery.rb +++ b/Data/Scripts/018_Minigames/005_PMinigame_Lottery.rb @@ -18,7 +18,7 @@ def pbLottery(winnum,nameVar=2,positionVar=3,matchedVar=4) winmatched=0 for i in $Trainer.party thismatched=0 - id=i.publicID + id=i.owner.public_id for j in 0...5 if (id/(10**j))%10 == (winnum/(10**j))%10 thismatched+=1 @@ -34,7 +34,7 @@ def pbLottery(winnum,nameVar=2,positionVar=3,matchedVar=4) end pbEachPokemon { |poke,_box| thismatched=0 - id=poke.publicID + id=poke.owner.public_id for j in 0...5 if (id/(10**j))%10 == (winnum/(10**j))%10 thismatched+=1 diff --git a/Data/Scripts/021_Debug/003_Debug_Pokemon.rb b/Data/Scripts/021_Debug/003_Debug_Pokemon.rb index 2ec78f7e0..31deae790 100644 --- a/Data/Scripts/021_Debug/003_Debug_Pokemon.rb +++ b/Data/Scripts/021_Debug/003_Debug_Pokemon.rb @@ -668,8 +668,8 @@ module PokemonDebugMixin cmd = 0 loop do gender = [_INTL("Male"),_INTL("Female"),_INTL("Unknown")][pkmn.otgender] - msg = [_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID), - _INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.publicID,pkmn.trainerID) + msg = [_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.owner.public_id,pkmn.trainerID), + _INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.owner.public_id,pkmn.trainerID) ][pkmn.foreign?($Trainer) ? 1 : 0] cmd = pbShowCommands(msg,[ _INTL("Make player's"), @@ -680,9 +680,7 @@ module PokemonDebugMixin break if cmd<0 case cmd when 0 # Make player's - pkmn.trainerID = $Trainer.id - pkmn.ot = $Trainer.name - pkmn.otgender = $Trainer.gender + pkmn.owner = Pokemon::Owner.new_from_trainer($Trainer) when 1 # Set OT's name pkmn.ot = pbEnterPlayerName(_INTL("{1}'s OT's name?",pkmn.name),1,MAX_PLAYER_NAME_SIZE) when 2 # Set OT's gender @@ -694,7 +692,7 @@ module PokemonDebugMixin when 4 # Set foreign ID params = ChooseNumberParams.new params.setRange(0,65535) - params.setDefaultValue(pkmn.publicID) + params.setDefaultValue(pkmn.owner.public_id) val = pbMessageChooseNumber( _INTL("Set the new ID (max. 65535)."),params) { pbUpdate } pkmn.trainerID = val From 89b490736dab09eb9614909ebc590f15679de93b Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 11:15:26 +0300 Subject: [PATCH 04/13] Use Kernel.validate --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 30 +++++++++++-------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 17bf39192..50023b997 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -117,13 +117,13 @@ class Pokemon # Ownership, obtained information #============================================================================= - # Stores information on a Pokémon's owner. + # Stores information about a Pokémon's owner. class Owner # @return [Integer] the ID of the owner attr_reader :id # @return [String] the name of the owner attr_reader :name - # @return [0, 1, 2] the gender of the owner (0 = male, 1 = female, 2 = unknown) + # @return [Integer] the gender of the owner (0 = male, 1 = female, 2 = unknown) attr_reader :gender # @return [Integer] the language of the owner (see {pbGetLanguage} for language IDs) attr_reader :language @@ -133,6 +133,7 @@ class Pokemon # @param gender [Integer] the gender of the owner (0 = male, 1 = female, 2 = unknown) # @param language [Integer] the language of the owner (see {pbGetLanguage} for language IDs) def initialize(id, name, gender, language) + validate id => Integer, name => String, gender => Integer, language => Integer @id = id @name = name @gender = gender @@ -143,34 +144,31 @@ class Pokemon # @param trainer [PokeBattle_Trainer] trainer object to read data from # @return [Owner] new owner object def self.new_from_trainer(trainer) + validate trainer => PokeBattle_Trainer return new(trainer.id, trainer.name, trainer.gender, trainer.language) end + # @param new_id [Integer] new owner ID def id=(new_id) - unless new_id.is_a?(Integer) - raise ArgumentError, _INTL('A {1} was given as Pokémon owner id', new_id.class.name) - end + validate new_id => Integer @id = new_id end + # @param new_name [String] new owner name def name=(new_name) - unless new_name.is_a?(String) - raise ArgumentError, _INTL('A {1} was given as Pokémon owner id', new_name.class.name) - end + validate new_name => String @name = new_name end + # @param new_gender [Integer] new owner gender def gender=(new_gender) - unless new_gender.is_a?(Integer) - raise ArgumentError, _INTL('A {1} was given as Pokémon owner id', new_gender.class.name) - end + validate new_gender => Integer @gender = new_gender end + # @param new_language [Integer] new owner language def language=(new_language) - unless new_language.is_a?(Integer) - raise ArgumentError, _INTL('A {1} was given as Pokémon owner id', new_language.class.name) - end + validate new_language => Integer @language = new_language end @@ -188,9 +186,7 @@ class Pokemon # Changes this Pokémon's owner. # @param new_owner [Owner] the owner to change to def owner=(new_owner) - unless new_owner.is_a?(Owner) - raise ArgumentError, _INTL("A {1} was given as a Pokémon owner", new_owner.class.name) - end + validate new_owner => Owner @owner = new_owner end From 66c255546dd89dc4d853e4e6eb47c06d3038cf98 Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 12:18:41 +0300 Subject: [PATCH 05/13] Deprecate Pokemon#ot and Pokemon#ot= --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 4 +--- Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 50023b997..7fbad9abf 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -94,8 +94,6 @@ class Pokemon attr_accessor :hatchedMap # @param value [Integer] new language attr_writer :language - # @return [String] the name of the original trainer - attr_accessor :ot # Changes the gender of the original trainer. This is for information only, # and is not used to verify ownership of the Pokémon. # @param value [Integer] new value for the original trainer's gender: @@ -193,7 +191,7 @@ class Pokemon # @param trainer [PokeBattle_Trainer] the trainer to compare to the OT # @return [Boolean] whether the given trainer and this Pokémon's original trainer don't match def foreign?(trainer) - return @trainerID != trainer.id || @ot != trainer.name + return @owner.id != trainer.id || @owner.name != trainer.name end alias isForeign? foreign? diff --git a/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb b/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb index e48105942..e82dbd756 100644 --- a/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb +++ b/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb @@ -30,6 +30,18 @@ class Pokemon Deprecation.warn_method('Pokemon#trainerID=', 'vXX', 'Pokemon::Owner#id=') @owner.id = value end + + # @deprecated Use {Owner#name} instead. This alias is slated to be removed in vXX. + def ot + Deprecation.warn_method('Pokemon#ot', 'vXX', 'Pokemon::Owner#name') + return @owner.name + end + + # @deprecated Use {Owner#name=} instead. This alias is slated to be removed in vXX. + def ot=(value) + Deprecation.warn_method('Pokemon#ot=', 'vXX', 'Pokemon::Owner#name=') + @owner.name = value + end end # (see Pokemon#initialize) From 2b2df4ae8f953282b935e494469f78ce5f6371c2 Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 12:19:15 +0300 Subject: [PATCH 06/13] Use new Pokemon::Owner methods --- .../012_Battle/003_Battle/001_PokeBattle_BattleCommon.rb | 3 +-- Data/Scripts/013_Overworld/002_PField_Field.rb | 3 +-- Data/Scripts/017_UI/006_PScreen_Summary.rb | 4 ++-- Data/Scripts/017_UI/020_PScreen_EggHatching.rb | 3 +-- Data/Scripts/017_UI/022_PScreen_Trading.rb | 4 ++-- Data/Scripts/017_UI/027_PScreen_HallOfFame.rb | 2 +- Data/Scripts/021_Debug/003_Debug_Pokemon.rb | 6 +++--- 7 files changed, 11 insertions(+), 14 deletions(-) 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 7abda421a..0db7ea9b4 100644 --- a/Data/Scripts/012_Battle/003_Battle/001_PokeBattle_BattleCommon.rb +++ b/Data/Scripts/012_Battle/003_Battle/001_PokeBattle_BattleCommon.rb @@ -141,8 +141,7 @@ module PokeBattle_BattleCommon end # Modify the Pokémon's properties because of the capture if pbIsSnagBall?(ball) - pkmn.ot = pbPlayer.name - pkmn.trainerID = pbPlayer.id + pkmn.owner = Pokemon::Owner.new_from_trainer(pbPlayer) end BallHandlers.onCatch(ball,self,pkmn) pkmn.ballused = pbGetBallType(ball) diff --git a/Data/Scripts/013_Overworld/002_PField_Field.rb b/Data/Scripts/013_Overworld/002_PField_Field.rb index 344f38f16..7e23bf01c 100644 --- a/Data/Scripts/013_Overworld/002_PField_Field.rb +++ b/Data/Scripts/013_Overworld/002_PField_Field.rb @@ -882,8 +882,7 @@ def pbRegisterPartner(trainerid,trainername,partyid=0) trainerobject = PokeBattle_Trainer.new(_INTL(trainer[0].name),trainerid) trainerobject.setForeignID($Trainer) for i in trainer[2] - i.trainerID = trainerobject.id - i.ot = trainerobject.name + i.owner = Pokemon::Owner.new_from_trainer(trainerobject) i.calcStats end $PokemonGlobal.partner = [trainerid,trainerobject.name,trainerobject.id,trainer[2]] diff --git a/Data/Scripts/017_UI/006_PScreen_Summary.rb b/Data/Scripts/017_UI/006_PScreen_Summary.rb index 1fb59bb87..63e3c2cfc 100644 --- a/Data/Scripts/017_UI/006_PScreen_Summary.rb +++ b/Data/Scripts/017_UI/006_PScreen_Summary.rb @@ -401,7 +401,7 @@ class PokemonSummary_Scene textpos.push([sprintf("%03d",dexnum),435,80,2,dexNumBase,dexNumShadow]) end # Write Original Trainer's name and ID number - if @pokemon.ot=="" + if @pokemon.owner.name.empty? textpos.push([_INTL("RENTAL"),435,176,2,Color.new(64,64,64),Color.new(176,176,176)]) textpos.push(["?????",435,208,2,Color.new(64,64,64),Color.new(176,176,176)]) else @@ -411,7 +411,7 @@ class PokemonSummary_Scene when 0; ownerbase = Color.new(24,112,216); ownershadow = Color.new(136,168,208) when 1; ownerbase = Color.new(248,56,32); ownershadow = Color.new(224,152,144) end - textpos.push([@pokemon.ot,435,176,2,ownerbase,ownershadow]) + textpos.push([@pokemon.owner.name,435,176,2,ownerbase,ownershadow]) textpos.push([sprintf("%05d",@pokemon.owner.public_id),435,208,2,Color.new(64,64,64),Color.new(176,176,176)]) end # Write Exp text OR heart gauge message (if a Shadow Pokémon) diff --git a/Data/Scripts/017_UI/020_PScreen_EggHatching.rb b/Data/Scripts/017_UI/020_PScreen_EggHatching.rb index 9cc898fbb..6da810e3b 100644 --- a/Data/Scripts/017_UI/020_PScreen_EggHatching.rb +++ b/Data/Scripts/017_UI/020_PScreen_EggHatching.rb @@ -192,8 +192,7 @@ end def pbHatch(pokemon) speciesname = pokemon.speciesName pokemon.name = speciesname - pokemon.trainerID = $Trainer.id - pokemon.ot = $Trainer.name + pokemon.owner = Pokemon::Owner.new_from_trainer($Trainer) pokemon.happiness = 120 pokemon.timeEggHatched = pbGetTimeNow pokemon.obtainMode = 1 # hatched from egg diff --git a/Data/Scripts/017_UI/022_PScreen_Trading.rb b/Data/Scripts/017_UI/022_PScreen_Trading.rb index d95fa3950..a3ee6ada9 100644 --- a/Data/Scripts/017_UI/022_PScreen_Trading.rb +++ b/Data/Scripts/017_UI/022_PScreen_Trading.rb @@ -170,7 +170,7 @@ class PokemonTrade_Scene speciesname2=PBSpecies.getName(@pokemon2.species) pbMessageDisplay(@sprites["msgwindow"], _ISPRINTF("{1:s}\r\nID: {2:05d} OT: {3:s}\\wtnp[0]", - @pokemon.name,@pokemon.owner.public_id,@pokemon.ot)) { pbUpdate } + @pokemon.name,@pokemon.owner.public_id,@pokemon.owner.name)) { pbUpdate } pbMessageWaitForInput(@sprites["msgwindow"],50,true) { pbUpdate } pbPlayDecisionSE pbScene1 @@ -181,7 +181,7 @@ class PokemonTrade_Scene pbScene2 pbMessageDisplay(@sprites["msgwindow"], _ISPRINTF("{1:s}\r\nID: {2:05d} OT: {3:s}\1", - @pokemon2.name,@pokemon2.owner.public_id,@pokemon2.ot)) { pbUpdate } + @pokemon2.name,@pokemon2.owner.public_id,@pokemon2.owner.name)) { pbUpdate } pbMessageDisplay(@sprites["msgwindow"], _INTL("Take good care of {1}.",speciesname2)) { pbUpdate } end diff --git a/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb b/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb index e66d59684..8859ef734 100644 --- a/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb +++ b/Data/Scripts/017_UI/027_PScreen_HallOfFame.rb @@ -302,7 +302,7 @@ class HallOfFame_Scene end pokename+="/"+speciesname pokename=_INTL("Egg")+"/"+_INTL("Egg") if pokemon.egg? - idno=(pokemon.ot=="" || pokemon.egg?) ? "?????" : sprintf("%05d",pokemon.owner.public_id) + idno=(pokemon.owner.name.empty? || pokemon.egg?) ? "?????" : sprintf("%05d",pokemon.owner.public_id) dexnumber=pokemon.egg? ? _INTL("No. ???") : _ISPRINTF("No. {1:03d}",pokemon.species) textPositions=[ [dexnumber,32,Graphics.height-80,0,BASECOLOR,SHADOWCOLOR], diff --git a/Data/Scripts/021_Debug/003_Debug_Pokemon.rb b/Data/Scripts/021_Debug/003_Debug_Pokemon.rb index 31deae790..0ac50d75d 100644 --- a/Data/Scripts/021_Debug/003_Debug_Pokemon.rb +++ b/Data/Scripts/021_Debug/003_Debug_Pokemon.rb @@ -668,8 +668,8 @@ module PokemonDebugMixin cmd = 0 loop do gender = [_INTL("Male"),_INTL("Female"),_INTL("Unknown")][pkmn.otgender] - msg = [_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.owner.public_id,pkmn.trainerID), - _INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.ot,gender,pkmn.owner.public_id,pkmn.trainerID) + msg = [_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.owner.name,gender,pkmn.owner.public_id,pkmn.owner.id), + _INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.owner.name,gender,pkmn.owner.public_id,pkmn.owner.id) ][pkmn.foreign?($Trainer) ? 1 : 0] cmd = pbShowCommands(msg,[ _INTL("Make player's"), @@ -682,7 +682,7 @@ module PokemonDebugMixin when 0 # Make player's pkmn.owner = Pokemon::Owner.new_from_trainer($Trainer) when 1 # Set OT's name - pkmn.ot = pbEnterPlayerName(_INTL("{1}'s OT's name?",pkmn.name),1,MAX_PLAYER_NAME_SIZE) + pkmn.owner.name = pbEnterPlayerName(_INTL("{1}'s OT's name?",pkmn.name),1,MAX_PLAYER_NAME_SIZE) when 2 # Set OT's gender cmd2 = pbShowCommands(_INTL("Set OT's gender."), [_INTL("Male"),_INTL("Female"),_INTL("Unknown")],pkmn.otgender) From 71c7f9ce7687832649aadae703fd5613afa58763 Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 12:32:56 +0300 Subject: [PATCH 07/13] Add Pokemon::Owner::new_foreign --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 7fbad9abf..3b39a6e7e 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -140,12 +140,21 @@ class Pokemon # Returns a new Owner object populated with values taken from +trainer+. # @param trainer [PokeBattle_Trainer] trainer object to read data from - # @return [Owner] new owner object + # @return [Owner] new Owner object def self.new_from_trainer(trainer) validate trainer => PokeBattle_Trainer return new(trainer.id, trainer.name, trainer.gender, trainer.language) end + # Returns an Owner object with a foreign ID. + # @param name [String] owner name + # @param gender [Integer] owner gender + # @param language [Integer] owner language + # @return [Owner] foreign Owner object + def self.new_foreign(name = '', gender = 2, language = 2) + return new($Trainer.getForeignID, name, gender, language) + end + # @param new_id [Integer] new owner ID def id=(new_id) validate new_id => Integer From 0122ccadcf514ac4d28a9ba92805d06ff92808a6 Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 14:07:09 +0300 Subject: [PATCH 08/13] Deprecate Pokemon#otgender and Pokemon#otgender= --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 10 ---------- Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb | 12 ++++++++++++ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 3b39a6e7e..91e08fcc5 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -94,11 +94,6 @@ class Pokemon attr_accessor :hatchedMap # @param value [Integer] new language attr_writer :language - # Changes the gender of the original trainer. This is for information only, - # and is not used to verify ownership of the Pokémon. - # @param value [Integer] new value for the original trainer's gender: - # 0 - male, 1 - female, 2 - mixed, 3 - unknown - attr_writer :otgender # @param value [Integer] new contest stat attr_writer :cool,:beauty,:cute,:smart,:tough,:sheen @@ -204,11 +199,6 @@ class Pokemon end alias isForeign? foreign? - # @return [0, 1, 2] the gender of this Pokémon original trainer (0 = male, 1 = female, 2 = unknown) - def otgender - return @otgender || 2 - end - # @return [Integer] this Pokémon's level when it was obtained def obtainLevel return @obtainLevel || 0 diff --git a/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb b/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb index e82dbd756..ef558347e 100644 --- a/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb +++ b/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb @@ -42,6 +42,18 @@ class Pokemon Deprecation.warn_method('Pokemon#ot=', 'vXX', 'Pokemon::Owner#name=') @owner.name = value end + + # @deprecated Use {Owner#gender} instead. This alias is slated to be removed in vXX. + def otgender + Deprecation.warn_method('Pokemon#otgender', 'vXX', 'Pokemon::Owner#gender') + return @owner.gender + end + + # @deprecated Use {Owner#gender=} instead. This alias is slated to be removed in vXX. + def otgender=(value) + Deprecation.warn_method('Pokemon#otgender=', 'vXX', 'Pokemon::Owner#gender=') + @owner.gender = value + end end # (see Pokemon#initialize) From b9801ef171c98d26c182929f8f443814286c097c Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 14:11:09 +0300 Subject: [PATCH 09/13] Deprecate Pokemon#language and Pokemon#language= --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 7 ------- Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb | 12 ++++++++++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 91e08fcc5..931e58956 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -92,8 +92,6 @@ class Pokemon # Otherwise returns 0. # @return [Integer] the map ID where egg was hatched (0 by default) attr_accessor :hatchedMap - # @param value [Integer] new language - attr_writer :language # @param value [Integer] new contest stat attr_writer :cool,:beauty,:cute,:smart,:tough,:sheen @@ -934,11 +932,6 @@ class Pokemon return @name != self.speciesName end - # @return [Integer] this Pokémon's language - def language - return @language || 0 - end - # @return [Integer] the markings this Pokémon has def markings return @markings || 0 diff --git a/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb b/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb index ef558347e..77e551ecd 100644 --- a/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb +++ b/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb @@ -54,6 +54,18 @@ class Pokemon Deprecation.warn_method('Pokemon#otgender=', 'vXX', 'Pokemon::Owner#gender=') @owner.gender = value end + + # @deprecated Use {Owner#language} instead. This alias is slated to be removed in vXX. + def language + Deprecation.warn_method('Pokemon#language', 'vXX', 'Pokemon::Owner#language') + return @owner.language + end + + # @deprecated Use {Owner#language=} instead. This alias is slated to be removed in vXX. + def language=(value) + Deprecation.warn_method('Pokemon#language=', 'vXX', 'Pokemon::Owner#language=') + @owner.language = value + end end # (see Pokemon#initialize) From ad1487be1d647b89fc351596c8af8bc0193781dc Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 14:32:20 +0300 Subject: [PATCH 10/13] Remove all usage of the newly deprecated methods --- .../003_Battle/004_Battle_ExpAndMoveLearning.rb | 6 +++--- Data/Scripts/013_Overworld/013_PField_DayCare.rb | 6 +++--- Data/Scripts/017_UI/006_PScreen_Summary.rb | 2 +- .../004_PSystem_PokemonUtilities.rb | 8 ++------ Data/Scripts/021_Debug/003_Debug_Pokemon.rb | 12 ++++++------ 5 files changed, 15 insertions(+), 19 deletions(-) diff --git a/Data/Scripts/012_Battle/003_Battle/004_Battle_ExpAndMoveLearning.rb b/Data/Scripts/012_Battle/003_Battle/004_Battle_ExpAndMoveLearning.rb index 7dc1b83d4..52167c617 100644 --- a/Data/Scripts/012_Battle/003_Battle/004_Battle_ExpAndMoveLearning.rb +++ b/Data/Scripts/012_Battle/003_Battle/004_Battle_ExpAndMoveLearning.rb @@ -134,10 +134,10 @@ class PokeBattle_Battle exp /= 7 end # Foreign Pokémon gain more Exp - isOutsider = (pkmn.trainerID!=pbPlayer.id || - (pkmn.language!=0 && pkmn.language!=pbPlayer.language)) + isOutsider = (pkmn.owner.id != pbPlayer.id || + (pkmn.owner.language != 0 && pkmn.owner.language != pbPlayer.language)) if isOutsider - if pkmn.language!=0 && pkmn.language!=pbPlayer.language + if pkmn.owner.language != 0 && pkmn.owner.language != pbPlayer.language exp = (exp*1.7).floor else exp = (exp*1.5).floor diff --git a/Data/Scripts/013_Overworld/013_PField_DayCare.rb b/Data/Scripts/013_Overworld/013_PField_DayCare.rb index 25bd5b0e1..83b6943d9 100644 --- a/Data/Scripts/013_Overworld/013_PField_DayCare.rb +++ b/Data/Scripts/013_Overworld/013_PField_DayCare.rb @@ -155,8 +155,8 @@ def pbDayCareGetCompat isConst?(compat21,PBEggGroups,:Ditto) if pbDayCareCompatibleGender(pkmn1,pkmn2) ret = 1 - ret += 1 if pkmn1.species==pkmn2.species - ret += 1 if pkmn1.trainerID!=pkmn2.trainerID + ret += 1 if pkmn1.species == pkmn2.species + ret += 1 if pkmn1.owner.id != pkmn2.owner.id return ret end end @@ -350,7 +350,7 @@ def pbDayCareGenerateEgg end # Masuda method and Shiny Charm shinyretries = 0 - shinyretries += 5 if father.language!=mother.language + shinyretries += 5 if father.owner.language != mother.owner.language shinyretries += 2 if hasConst?(PBItems,:SHINYCHARM) && $PokemonBag.pbHasItem?(:SHINYCHARM) if shinyretries>0 shinyretries.times do diff --git a/Data/Scripts/017_UI/006_PScreen_Summary.rb b/Data/Scripts/017_UI/006_PScreen_Summary.rb index 63e3c2cfc..f0b9d5200 100644 --- a/Data/Scripts/017_UI/006_PScreen_Summary.rb +++ b/Data/Scripts/017_UI/006_PScreen_Summary.rb @@ -407,7 +407,7 @@ class PokemonSummary_Scene else ownerbase = Color.new(64,64,64) ownershadow = Color.new(176,176,176) - case @pokemon.otgender + case @pokemon.owner.gender when 0; ownerbase = Color.new(24,112,216); ownershadow = Color.new(136,168,208) when 1; ownerbase = Color.new(248,56,32); ownershadow = Color.new(224,152,144) 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 d78110ce5..4024554f0 100644 --- a/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb +++ b/Data/Scripts/020_System and utilities/004_PSystem_PokemonUtilities.rb @@ -139,12 +139,8 @@ def pbAddForeignPokemon(pokemon,level=nil,ownerName=nil,nickname=nil,ownerGender if pokemon.is_a?(Integer) && level.is_a?(Integer) pokemon = Pokemon.new(pokemon,level) end - # Set original trainer to a foreign one (if ID isn't already foreign) - if pokemon.trainerID==$Trainer.id - pokemon.trainerID = $Trainer.getForeignID - pokemon.ot = ownerName if ownerName && ownerName!="" - pokemon.otgender = ownerGender - end + # Set original trainer to a foreign one + pokemon.owner = Pokemon::Owner.new_foreign(ownerName || "", ownerGender) # Set nickname pokemon.name = nickname[0, Pokemon::MAX_NAME_SIZE] if nickname && nickname!="" # Recalculate stats diff --git a/Data/Scripts/021_Debug/003_Debug_Pokemon.rb b/Data/Scripts/021_Debug/003_Debug_Pokemon.rb index 0ac50d75d..bffd0acf1 100644 --- a/Data/Scripts/021_Debug/003_Debug_Pokemon.rb +++ b/Data/Scripts/021_Debug/003_Debug_Pokemon.rb @@ -667,7 +667,7 @@ module PokemonDebugMixin when "ownership" cmd = 0 loop do - gender = [_INTL("Male"),_INTL("Female"),_INTL("Unknown")][pkmn.otgender] + gender = [_INTL("Male"),_INTL("Female"),_INTL("Unknown")][pkmn.owner.gender] msg = [_INTL("Player's Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.owner.name,gender,pkmn.owner.public_id,pkmn.owner.id), _INTL("Foreign Pokémon\n{1}\n{2}\n{3} ({4})",pkmn.owner.name,gender,pkmn.owner.public_id,pkmn.owner.id) ][pkmn.foreign?($Trainer) ? 1 : 0] @@ -685,18 +685,18 @@ module PokemonDebugMixin pkmn.owner.name = pbEnterPlayerName(_INTL("{1}'s OT's name?",pkmn.name),1,MAX_PLAYER_NAME_SIZE) when 2 # Set OT's gender cmd2 = pbShowCommands(_INTL("Set OT's gender."), - [_INTL("Male"),_INTL("Female"),_INTL("Unknown")],pkmn.otgender) - pkmn.otgender = cmd2 if cmd2>=0 + [_INTL("Male"),_INTL("Female"),_INTL("Unknown")],pkmn.owner.gender) + pkmn.owner.gender = cmd2 if cmd2>=0 when 3 # Random foreign ID - pkmn.trainerID = $Trainer.getForeignID + pkmn.owner.id = $Trainer.getForeignID when 4 # Set foreign ID params = ChooseNumberParams.new params.setRange(0,65535) params.setDefaultValue(pkmn.owner.public_id) val = pbMessageChooseNumber( _INTL("Set the new ID (max. 65535)."),params) { pbUpdate } - pkmn.trainerID = val - pkmn.trainerID |= val << 16 + pkmn.owner.id = val + pkmn.owner.id |= val << 16 end end #=========================================================================== From bc9b1dc9193d9594f62ad1d66a17e76d3ed637be Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 15:00:01 +0300 Subject: [PATCH 11/13] Make Pokemon.new accept Owner objects Also, default the owner argument to $Trainer --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 931e58956..4b5b59040 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -1113,9 +1113,9 @@ class Pokemon # Creates a new Pokémon object. # @param species [Integer, Symbol, String] Pokémon species # @param level [Integer] Pokémon level - # @param owner [PokeBattle_Trainer] object for the original trainer + # @param owner [Owner, PokeBattle_Trainer] Pokémon owner (the player by default) # @param withMoves [Boolean] whether the Pokémon should have moves - def initialize(species, level, owner = nil, withMoves = true) + def initialize(species, level, owner = $Trainer, withMoves = true) ospecies = species.to_s species = getID(PBSpecies, species) cname = getConstantName(PBSpecies, species) rescue nil @@ -1144,7 +1144,9 @@ class Pokemon @ribbons = [] @ballused = 0 @eggsteps = 0 - if owner.is_a?(PokeBattle_Trainer) + if owner.is_a?(Owner) + @owner = owner + elsif owner.is_a?(PokeBattle_Trainer) @owner = Owner.new_from_trainer(owner) else @owner = Owner.new(0, '', 2, 2) From fc7e5fbfb4afe45e940141e889f192cf44983cc8 Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 16:22:24 +0300 Subject: [PATCH 12/13] New file for Pokemon::Owner, 006_Pokemon_Owner.rb --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 70 ------------------ Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb | 71 +++++++++++++++++++ ...emon_Chatter.rb => 007_Pokemon_Chatter.rb} | 0 ...emon_Sprites.rb => 008_Pokemon_Sprites.rb} | 0 ...emon_Storage.rb => 009_Pokemon_Storage.rb} | 0 ...eprecated.rb => 010_Pokemon_Deprecated.rb} | 0 6 files changed, 71 insertions(+), 70 deletions(-) create mode 100644 Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb rename Data/Scripts/016_Pokemon/{006_Pokemon_Chatter.rb => 007_Pokemon_Chatter.rb} (100%) rename Data/Scripts/016_Pokemon/{007_Pokemon_Sprites.rb => 008_Pokemon_Sprites.rb} (100%) rename Data/Scripts/016_Pokemon/{008_Pokemon_Storage.rb => 009_Pokemon_Storage.rb} (100%) rename Data/Scripts/016_Pokemon/{009_Pokemon_Deprecated.rb => 010_Pokemon_Deprecated.rb} (100%) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 4b5b59040..75d7c55a8 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -108,76 +108,6 @@ class Pokemon # Ownership, obtained information #============================================================================= - # Stores information about a Pokémon's owner. - class Owner - # @return [Integer] the ID of the owner - attr_reader :id - # @return [String] the name of the owner - attr_reader :name - # @return [Integer] the gender of the owner (0 = male, 1 = female, 2 = unknown) - attr_reader :gender - # @return [Integer] the language of the owner (see {pbGetLanguage} for language IDs) - attr_reader :language - - # @param id [Integer] the ID of the owner - # @param name [String] the name of the owner - # @param gender [Integer] the gender of the owner (0 = male, 1 = female, 2 = unknown) - # @param language [Integer] the language of the owner (see {pbGetLanguage} for language IDs) - def initialize(id, name, gender, language) - validate id => Integer, name => String, gender => Integer, language => Integer - @id = id - @name = name - @gender = gender - @language = language - end - - # Returns a new Owner object populated with values taken from +trainer+. - # @param trainer [PokeBattle_Trainer] trainer object to read data from - # @return [Owner] new Owner object - def self.new_from_trainer(trainer) - validate trainer => PokeBattle_Trainer - return new(trainer.id, trainer.name, trainer.gender, trainer.language) - end - - # Returns an Owner object with a foreign ID. - # @param name [String] owner name - # @param gender [Integer] owner gender - # @param language [Integer] owner language - # @return [Owner] foreign Owner object - def self.new_foreign(name = '', gender = 2, language = 2) - return new($Trainer.getForeignID, name, gender, language) - end - - # @param new_id [Integer] new owner ID - def id=(new_id) - validate new_id => Integer - @id = new_id - end - - # @param new_name [String] new owner name - def name=(new_name) - validate new_name => String - @name = new_name - end - - # @param new_gender [Integer] new owner gender - def gender=(new_gender) - validate new_gender => Integer - @gender = new_gender - end - - # @param new_language [Integer] new owner language - def language=(new_language) - validate new_language => Integer - @language = new_language - end - - # @return [Integer] the public portion of the owner's ID - def public_id - return @id & 0xFFFF - end - end - # @return [Owner] this Pokémon's owner def owner return @owner diff --git a/Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb b/Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb new file mode 100644 index 000000000..c326a917f --- /dev/null +++ b/Data/Scripts/016_Pokemon/006_Pokemon_Owner.rb @@ -0,0 +1,71 @@ +class Pokemon + # Stores information about a Pokémon's owner. + class Owner + # @return [Integer] the ID of the owner + attr_reader :id + # @return [String] the name of the owner + attr_reader :name + # @return [Integer] the gender of the owner (0 = male, 1 = female, 2 = unknown) + attr_reader :gender + # @return [Integer] the language of the owner (see {pbGetLanguage} for language IDs) + attr_reader :language + + # @param id [Integer] the ID of the owner + # @param name [String] the name of the owner + # @param gender [Integer] the gender of the owner (0 = male, 1 = female, 2 = unknown) + # @param language [Integer] the language of the owner (see {pbGetLanguage} for language IDs) + def initialize(id, name, gender, language) + validate id => Integer, name => String, gender => Integer, language => Integer + @id = id + @name = name + @gender = gender + @language = language + end + + # Returns a new Owner object populated with values taken from +trainer+. + # @param trainer [PokeBattle_Trainer] trainer object to read data from + # @return [Owner] new Owner object + def self.new_from_trainer(trainer) + validate trainer => PokeBattle_Trainer + return new(trainer.id, trainer.name, trainer.gender, trainer.language) + end + + # Returns an Owner object with a foreign ID. + # @param name [String] owner name + # @param gender [Integer] owner gender + # @param language [Integer] owner language + # @return [Owner] foreign Owner object + def self.new_foreign(name = '', gender = 2, language = 2) + return new($Trainer.getForeignID, name, gender, language) + end + + # @param new_id [Integer] new owner ID + def id=(new_id) + validate new_id => Integer + @id = new_id + end + + # @param new_name [String] new owner name + def name=(new_name) + validate new_name => String + @name = new_name + end + + # @param new_gender [Integer] new owner gender + def gender=(new_gender) + validate new_gender => Integer + @gender = new_gender + end + + # @param new_language [Integer] new owner language + def language=(new_language) + validate new_language => Integer + @language = new_language + end + + # @return [Integer] the public portion of the owner's ID + def public_id + return @id & 0xFFFF + end + end +end diff --git a/Data/Scripts/016_Pokemon/006_Pokemon_Chatter.rb b/Data/Scripts/016_Pokemon/007_Pokemon_Chatter.rb similarity index 100% rename from Data/Scripts/016_Pokemon/006_Pokemon_Chatter.rb rename to Data/Scripts/016_Pokemon/007_Pokemon_Chatter.rb diff --git a/Data/Scripts/016_Pokemon/007_Pokemon_Sprites.rb b/Data/Scripts/016_Pokemon/008_Pokemon_Sprites.rb similarity index 100% rename from Data/Scripts/016_Pokemon/007_Pokemon_Sprites.rb rename to Data/Scripts/016_Pokemon/008_Pokemon_Sprites.rb diff --git a/Data/Scripts/016_Pokemon/008_Pokemon_Storage.rb b/Data/Scripts/016_Pokemon/009_Pokemon_Storage.rb similarity index 100% rename from Data/Scripts/016_Pokemon/008_Pokemon_Storage.rb rename to Data/Scripts/016_Pokemon/009_Pokemon_Storage.rb diff --git a/Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb b/Data/Scripts/016_Pokemon/010_Pokemon_Deprecated.rb similarity index 100% rename from Data/Scripts/016_Pokemon/009_Pokemon_Deprecated.rb rename to Data/Scripts/016_Pokemon/010_Pokemon_Deprecated.rb From 47a1cb54628d0f7c037155f3e283a28e1b75da92 Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 16 Oct 2020 19:49:47 +0300 Subject: [PATCH 13/13] Clone the Owner object in Pokemon#clone --- Data/Scripts/016_Pokemon/001_Pokemon.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/Data/Scripts/016_Pokemon/001_Pokemon.rb b/Data/Scripts/016_Pokemon/001_Pokemon.rb index 75d7c55a8..695f3fbfc 100644 --- a/Data/Scripts/016_Pokemon/001_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_Pokemon.rb @@ -1035,6 +1035,7 @@ class Pokemon ret.ivMaxed = @ivMaxed.clone ret.ev = @ev.clone ret.moves = [] + ret.owner = @owner.clone @moves.each_with_index { |m, i| ret.moves[i] = m.clone } ret.ribbons = @ribbons.clone if @ribbons return ret