mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
105 lines
2.9 KiB
Ruby
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
|