Files
infinitefusion-e18/Data/Scripts/011_Data/003_PBMove.rb
2020-10-17 00:29:58 +01:00

105 lines
2.9 KiB
Ruby

module MoveData
ID = 0
INTERNAL_NAME = 1
NAME = 2
FUNCTION_CODE = 3
BASE_DAMAGE = 4
TYPE = 5
CATEGORY = 6
ACCURACY = 7
TOTAL_PP = 8
EFFECT_CHANCE = 9
TARGET = 10
PRIORITY = 11
FLAGS = 12
DESCRIPTION = 13
end
class PokemonTemp
attr_accessor :movesData
end
def pbLoadMovesData
$PokemonTemp = PokemonTemp.new if !$PokemonTemp
if !$PokemonTemp.movesData
if pbRgssExists?("Data/moves.dat")
$PokemonTemp.movesData = load_data("Data/moves.dat")
else
$PokemonTemp.movesData = []
end
end
return $PokemonTemp.movesData
end
def pbGetMoveData(move_id, move_data_type = -1)
meta = pbLoadMovesData
if move_data_type < 0
return meta[move_id] || []
end
return meta[move_id][move_data_type] if meta[move_id]
return nil
end
alias __moveData__pbClearData pbClearData
def pbClearData
$PokemonTemp.movesData = nil if $PokemonTemp
__moveData__pbClearData
end
#===============================================================================
# Move objects known by Pokémon.
#===============================================================================
class PBMove
attr_reader(:id) # This move's ID
attr_accessor(:pp) # The amount of PP remaining for this move
attr_accessor(:ppup) # The number of PP Ups used for this move
# Initializes this object to the specified move ID.
def initialize(move_id)
@id = move_id
@pp = pbGetMoveData(move_id, MoveData::TOTAL_PP) || 0
@ppup = 0
end
# Changes this move's ID, and caps the PP amount if it is now greater than the
# new move's total PP.
def id=(value)
old_id = @id
@id = value
@pp = [@pp, totalpp].min if old_id > 0
end
# Gets this move's type.
def type
return pbGetMoveData(@id, MoveData::TYPE) || 0
end
# Gets the maximum PP for this move.
def totalpp
max_pp = pbGetMoveData(@id, MoveData::TOTAL_PP) || 0
return max_pp + max_pp * @ppup / 5
end
end
#===============================================================================
# Object containing move data. Not used for much.
#===============================================================================
class PBMoveData
attr_reader :function, :basedamage, :type, :accuracy, :category
attr_reader :totalpp, :addlEffect, :target, :priority, :flags
def initialize(move_id)
move_data = pbGetMoveData(move_id)
@function = move_data[MoveData::FUNCTION_CODE]
@basedamage = move_data[MoveData::BASE_DAMAGE]
@type = move_data[MoveData::TYPE]
@category = move_data[MoveData::CATEGORY]
@accuracy = move_data[MoveData::ACCURACY]
@totalpp = move_data[MoveData::TOTAL_PP]
@addlEffect = move_data[MoveData::EFFECT_CHANCE]
@target = move_data[MoveData::TARGET]
@priority = move_data[MoveData::PRIORITY]
@flags = move_data[MoveData::FLAGS]
end
end