From 1d698a6a44af170320af891cb2a4c1c27ed73b2e Mon Sep 17 00:00:00 2001 From: jonisavo Date: Fri, 18 Sep 2020 20:12:35 +0300 Subject: [PATCH] Documented the rest of PokeBattle_Pokemon --- .../016_Pokemon/001_PokeBattle_Pokemon.rb | 193 ++++++++++-------- 1 file changed, 111 insertions(+), 82 deletions(-) diff --git a/Data/Scripts/016_Pokemon/001_PokeBattle_Pokemon.rb b/Data/Scripts/016_Pokemon/001_PokeBattle_Pokemon.rb index 70a8a2f35..77e84551b 100644 --- a/Data/Scripts/016_Pokemon/001_PokeBattle_Pokemon.rb +++ b/Data/Scripts/016_Pokemon/001_PokeBattle_Pokemon.rb @@ -1,25 +1,25 @@ # This class stores data on each Pokémon. Refer to $Trainer.party for an array # of each Pokémon in the Trainer's current party. class PokeBattle_Pokemon - # @return [String] nickname + # @return [String] the nickname attr_accessor :name - # @return [Integer] national Pokédex number + # @return [Integer] the national Pokédex number attr_reader :species - # @return [Integer] current experience points + # @return [Integer] the current experience points attr_reader :exp - # @return [Integer] current HP + # @return [Integer] the current HP attr_reader :hp - # @return [Integer] current Total HP + # @return [Integer] the current Total HP attr_reader :totalhp - # @return [Integer] current Attack stat + # @return [Integer] the current Attack stat attr_reader :attack - # @return [Integer] current Defense stat + # @return [Integer] the current Defense stat attr_reader :defense - # @return [Integer] current Speed stat + # @return [Integer] the current Speed stat attr_reader :speed - # @return [Integer] current Special Attack stat + # @return [Integer] the current Special Attack stat attr_reader :spatk - # @return [Integer] current Special Defense stat + # @return [Integer] the current Special Defense stat attr_reader :spdef # If defined, forces the Pokémon's ability to be the first natural (0), # second natural (1) or hidden (2) ability available to its species. @@ -28,79 +28,105 @@ class PokeBattle_Pokemon # (or "pokemonforms.txt" for its species and form). # @return [0, 1, 2, nil] forced ability index (nil if none is set) attr_accessor :abilityflag - # @return [0, 1, nil] if defined, forces male (0) or female (1) + # If defined, forces this Pokémon to be male (0) or female (1). + # @return [0, 1, nil] gender to force: male (0) or female (1) (nil if undefined) attr_accessor :genderflag - # @return [Integer] forces a particular nature (nature ID) + # If defined, forces this Pokémon to have a particular nature. + # @return [Integer, nil] ID of the nature to force (nil if undefined) attr_accessor :natureflag - # @return [Integer] overrides nature's stat-changing effects + # If defined, overrides this Pokémon's nature's stat-changing effects. + # @return [Integer, nil] overridden nature stat-changing effects (nil if undefined) attr_accessor :natureOverride # If defined, forces the Pokémon to be shiny (true) or not (false). # @return [Boolean, nil] whether shininess should be forced (nil if undefined) attr_accessor :shinyflag - # @return [Array] moves known by this Pokémon + # @return [Array] the moves known by this Pokémon attr_accessor :moves - # @return [Array] IDs of moves known by this Pokémon when it was obtained + # @return [Array] the IDs of moves known by this Pokémon when it was obtained attr_accessor :firstmoves - # @return [Integer] id of the item held by this Pokémon (0 = no held item) + # @return [Integer] the ID of the item held by this Pokémon (0 = no held item) attr_accessor :item # Another Pokémon which has been fused with this Pokémon (or nil if there is none). # Currently only used by Kyurem, to record a fused Reshiram or Zekrom. # @return [PokeBattle_Pokemon, nil] the Pokémon fused into this one (nil if there is none) attr_accessor :fused - # @return [Array] array of IV values for HP, Atk, Def, Speed, Sp. Atk and Sp. Def + # @return [Array] an array of IV values for HP, Atk, Def, Speed, Sp. Atk and Sp. Def attr_accessor :iv - # @param value [Array] array of booleans that max each IV value + # @param value [Array] an array of booleans that max each IV value attr_writer :ivMaxed # @return [Array] this Pokémon's effort values attr_accessor :ev # @return [Integer] this Pokémon's current happiness (an integer between 0 and 255) - attr_accessor :happiness # Current happiness + attr_accessor :happiness # @return [Integer] the type of ball used (refer to {$BallTypes} for valid types) attr_accessor :ballused - attr_accessor :eggsteps # Steps to hatch egg, 0 if Pokémon is not an egg - attr_writer :markings # Markings - attr_accessor :ribbons # Array of ribbons - attr_accessor :pokerus # Pokérus strain and infection time - attr_accessor :personalID # Personal ID - attr_accessor :trainerID # 32-bit Trainer ID (the secret ID is in the upper - # 16 bits) - attr_accessor :obtainMode # Manner obtained: - # 0 - met, 1 - as egg, 2 - traded, - # 4 - fateful encounter - attr_accessor :obtainMap # Map where obtained - attr_accessor :obtainText # Replaces the obtain map's name if not nil - attr_writer :obtainLevel # Level obtained - attr_accessor :hatchedMap # Map where an egg was hatched - attr_writer :language # Language - attr_accessor :ot # Original Trainer's name - attr_writer :otgender # Original Trainer's gender: - # 0 - male, 1 - female, 2 - mixed, 3 - unknown - # For information only, not used to verify - # ownership of the Pokémon - attr_writer :cool,:beauty,:cute,:smart,:tough,:sheen # Contest stats + # @return [Integer] the number of steps until the egg hatches, 0 if Pokémon is not an egg + attr_accessor :eggsteps + # @param value [Integer] new markings for this Pokémon + attr_writer :markings + # @return [Array] an array of ribbons owned by this Pokémon + attr_accessor :ribbons + # @return [Integer] the Pokérus strain and infection time + 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 + # @return [Integer] the ID of the map this Pokémon was obtained in + attr_accessor :obtainMap + # Describes the manner this Pokémon was obtained. If left undefined, + # the obtain map's name is used. + # @return [String] the obtain text + attr_accessor :obtainText + # @param value [Integer] new obtain level + attr_writer :obtainLevel + # If this Pokémon hatched from an egg, returns the map ID where the hatching happened. + # 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 + # @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: + # 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 - IV_STAT_LIMIT = 31 # Max total IVs - EV_LIMIT = 510 # Max total EVs - EV_STAT_LIMIT = 252 # Max EVs that a single stat can have - MAX_POKEMON_NAME_SIZE = 10 # Maximum length a Pokémon's nickname can be + # Max total IVs + IV_STAT_LIMIT = 31 + # Max total EVs + EV_LIMIT = 510 + # Max EVs that a single stat can have + EV_STAT_LIMIT = 252 + # Maximum length a Pokémon's nickname can be + MAX_POKEMON_NAME_SIZE = 10 #============================================================================= # Ownership, obtained information #============================================================================= - # @return [Integer] public portion of the original trainer's ID + # @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 trainer and OT don't match + # @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 end alias isForeign? foreign? - # @return [0, 1, 2] gender of this Pokémon original trainer (0 = male, 1 = female, 2 = unknown) + # @return [0, 1, 2] the gender of this Pokémon original trainer (0 = male, 1 = female, 2 = unknown) def otgender return @otgender || 2 end @@ -110,7 +136,7 @@ class PokeBattle_Pokemon return @obtainLevel || 0 end - # @return [Time] time when this Pokémon was obtained + # @return [Time] the time when this Pokémon was obtained def timeReceived return @timeReceived ? Time.at(@timeReceived) : Time.gm(2000) end @@ -121,7 +147,7 @@ class PokeBattle_Pokemon @timeReceived = value.to_i end - # @return [Time] time when this Pokémon hatched + # @return [Time] the time when this Pokémon hatched def timeEggHatched if obtainMode==1 return @timeEggHatched ? Time.at(@timeEggHatched) : Time.gm(2000) @@ -146,7 +172,8 @@ class PokeBattle_Pokemon return @level end - # Sets this Pokémon's level. + # Sets this Pokémon's level. The given level must be between 1 and the + # maximum level (defined in {PBExperience}). # @param value [Integer] new level (between 1 and the maximum level) def level=(value) if value < 1 || value > PBExperience.maxLevel @@ -179,7 +206,7 @@ class PokeBattle_Pokemon return pbGetSpeciesData(@species,formSimple,SpeciesBaseExp) end - # @return [Float] number between 0 and 1 indicating how much of the current level's + # @return [Float] a number between 0 and 1 indicating how much of the current level's # Exp this Pokémon has def expFraction l = self.level @@ -303,18 +330,19 @@ class PokeBattle_Pokemon return abil!=nil && abil>=2 end - # @return [Array>] the list of abilities this Pokémon can have + # @return [Array>] the list of abilities this Pokémon can have, + # where every element is [ability ID,ability index] def getAbilityList ret = [] abilities = pbGetSpeciesData(@species,formSimple,SpeciesAbilities) if abilities.is_a?(Array) - abilities.each_with_index { |a,i| ret.push([a,i]) if a && a>0 } + abilities.each_with_index { |a,i| ret.push([a,i]) if a && a > 0 } else ret.push([abilities,0]) if abilities>0 end hiddenAbil = pbGetSpeciesData(@species,formSimple,SpeciesHiddenAbility) if hiddenAbil.is_a?(Array) - hiddenAbil.each_with_index { |a,i| ret.push([a,i+2]) if a && a>0 } + hiddenAbil.each_with_index { |a,i| ret.push([a,i+2]) if a && a > 0 } else ret.push([hiddenAbil,2]) if hiddenAbil>0 end @@ -327,12 +355,12 @@ class PokeBattle_Pokemon # @return [Integer] the ID of this Pokémon's nature def nature - return @natureflag || (@personalID%25) + return @natureflag || (@personalID % 25) end # Returns the calculated nature, taking into account things that change its # stat-altering effect (i.e. Gen 8 mints). Only used for calculating stats. - # @return [Integer] calculated nature + # @return [Integer] this Pokémon's calculated nature def calcNature return @natureOverride if @natureOverride return self.nature @@ -350,7 +378,7 @@ class PokeBattle_Pokemon end # Sets this Pokémon's nature to a particular nature. - # @param value [Integer] nature to change to + # @param value [Integer, String, Symbol] nature to change to def setNature(value) @natureflag = getID(PBNatures,value) calcStats @@ -387,14 +415,14 @@ class PokeBattle_Pokemon # @return [Integer] the Pokérus infection stage for this Pokémon def pokerusStrain - return @pokerus/16 + return @pokerus / 16 end - # Returns the Pokérus infection stage for this Pokémon. - # @return [0, 1, 2] Pokérus infection stage - # (0 = not infected, 1 = infected, 2 = cured) + # Returns the Pokérus infection stage for this Pokémon. The possible stages are + # 0 (not infected), 1 (infected) and 2 (cured) + # @return [0, 1, 2] current Pokérus infection stage def pokerusStage - return 0 if !@pokerus || @pokerus==0 + return 0 if !@pokerus || @pokerus == 0 return 2 if @pokerus > 0 && (@pokerus % 16) == 0 return 1 end @@ -470,7 +498,7 @@ class PokeBattle_Pokemon return ret end - # @param move [Integer, Symbol, String] id of the move to check + # @param move [Integer, Symbol, String] ID of the move to check # @return [Boolean] whether the Pokémon knows the given move def hasMove?(move) move = getID(PBMoves,move) @@ -481,7 +509,7 @@ class PokeBattle_Pokemon alias knowsMove? hasMove? # Returns the list of moves this Pokémon can learn by levelling up. - # @return [Array>] move list, where every element is [level, move id] + # @return [Array>] this Pokémon's move list, where every element is [level, move ID] def getMoveList return pbGetSpeciesMoveset(@species,formSimple) end @@ -506,7 +534,7 @@ class PokeBattle_Pokemon end # Silently learns the given move. Will erase the first known move if it has to. - # @param move [Integer, Symbol, String] id of the move to learn + # @param move [Integer, Symbol, String] ID of the move to learn def pbLearnMove(move) move = getID(PBMoves,move) return if move <= 0 @@ -535,7 +563,7 @@ class PokeBattle_Pokemon end # Deletes the given move from the Pokémon. - # @param move [Integer, Symbol, String] id of the move to delete + # @param move [Integer, Symbol, String] ID of the move to delete def pbDeleteMove(move) move = getID(PBMoves,move) return if !move || move<=0 @@ -571,14 +599,15 @@ class PokeBattle_Pokemon @moves.each { |m| @firstmoves.push(m.id) if m && m.id > 0 } end - # TODO Figure out better documentation for these first move methods - # @param move [Integer, Symbol, String] id of the move to add + # Adds a move to this Pokémon's first moves. + # @param move [Integer, Symbol, String] ID of the move to add def pbAddFirstMove(move) move = getID(PBMoves,move) @firstmoves.push(move) if move > 0 && !@firstmoves.include?(move) end - # @param move [Integer, Symbol, String] id of the move to remove + # Removes a move from this Pokémon's first moves. + # @param move [Integer, Symbol, String] ID of the move to remove def pbRemoveFirstMove(move) move = getID(PBMoves,move) @firstmoves.delete(move) if move > 0 @@ -589,8 +618,8 @@ class PokeBattle_Pokemon @firstmoves = [] end - # @param move [Integer, Symbol, String] id of the move to check - # @return [Boolean] whether the Pokémon is compatible with the move + # @param move [Integer, Symbol, String] ID of the move to check + # @return [Boolean] whether the Pokémon is compatible with the given move def compatibleWithMove?(move) return pbSpeciesCompatible?(self.fSpecies,move) end @@ -622,7 +651,7 @@ class PokeBattle_Pokemon return (@ribbons) ? @ribbons.length : 0 end - # @param ribbon [Integer, Symbol, String] ribbon id to check + # @param ribbon [Integer, Symbol, String] ribbon ID to check # @return [Boolean] whether this Pokémon has the specified ribbon def hasRibbon?(ribbon) return false if !@ribbons @@ -631,7 +660,8 @@ class PokeBattle_Pokemon return @ribbons.include?(ribbon) end - # @param ribbon [Integer, Symbol, String] id of the ribbon to give + # Gives a ribbon to this Pokémon. + # @param ribbon [Integer, Symbol, String] ID of the ribbon to give def giveRibbon(ribbon) @ribbons = [] if !@ribbons ribbon = getID(PBRibbons,ribbon) @@ -639,7 +669,6 @@ class PokeBattle_Pokemon @ribbons.push(ribbon) if !@ribbons.include?(ribbon) end - # TODO Figure out a good way to document this # Replaces one ribbon with the next one along, if possible. def upgradeRibbon(*arg) @ribbons = [] if !@ribbons @@ -661,6 +690,7 @@ class PokeBattle_Pokemon return 0 end + # Removes the specified ribbon from this Pokémon. # @param ribbon [Integer, Symbol, String] id of the ribbon to remove def takeRibbon(ribbon) return if !@ribbons @@ -750,13 +780,13 @@ class PokeBattle_Pokemon # Is 0, except if the Pokémon is: # # - Asleep: Is the number of rounds the Pokémon will remain asleep. - # This number is set when the Pokémon is made to fall asleep. + # This number is set when the Pokémon is made to fall asleep. # # - Badly poisoned: If the Pokémon is Poisoned and this is "1", the - # Pokémon is badly poisoned instead (which affects how much poison - # damage it takes in battle). When the Pokémon leaves battle while - # badly poisoned, this value is set to 0 and it becomes regular Poisoned - # (even in later battles). + # Pokémon is badly poisoned instead (which affects how much poison + # damage it takes in battle). When the Pokémon leaves battle while + # badly poisoned, this value is set to 0 and it becomes regular Poisoned + # (even in later battles). # @return [Integer] sleep count / toxic flag def statusCount return @statusCount @@ -857,13 +887,12 @@ class PokeBattle_Pokemon return "ABCDEFGHIJKLMNOPQRSTUVWXYZ?!"[@form,1] end - # TODO Check whether #height and #weight always return an integer - # Returns the height of this Pokémon. + # @return [Integer] the height of this Pokémon in decimetres (0.1 metres) def height return pbGetSpeciesData(@species,formSimple,SpeciesHeight) end - # Returns the weight of this Pokémon. + # @return [Integer] the weight of this Pokémon in hectograms (0.1 grams) def weight return pbGetSpeciesData(@species,formSimple,SpeciesWeight) end