mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-06 06:01:46 +00:00
106 lines
3.8 KiB
Ruby
106 lines
3.8 KiB
Ruby
#===============================================================================
|
|
#
|
|
#===============================================================================
|
|
module GameData
|
|
class SpeciesMetrics
|
|
attr_reader :id
|
|
attr_reader :species
|
|
attr_reader :form
|
|
attr_accessor :back_sprite
|
|
attr_accessor :front_sprite
|
|
attr_accessor :front_sprite_altitude
|
|
attr_accessor :shadow_x
|
|
attr_accessor :shadow_size
|
|
attr_reader :pbs_file_suffix
|
|
|
|
DATA = {}
|
|
DATA_FILENAME = "species_metrics.dat"
|
|
PBS_BASE_FILENAME = "pokemon_metrics"
|
|
SCHEMA = {
|
|
"SectionName" => [:id, "eV", :Species],
|
|
"BackSprite" => [:back_sprite, "ii"],
|
|
"FrontSprite" => [:front_sprite, "ii"],
|
|
"FrontSpriteAltitude" => [:front_sprite_altitude, "i"],
|
|
"ShadowX" => [:shadow_x, "i"],
|
|
"ShadowSize" => [:shadow_size, "u"]
|
|
}
|
|
|
|
extend ClassMethodsSymbols
|
|
include InstanceMethods
|
|
|
|
# @param species [Symbol, String]
|
|
# @param form [Integer]
|
|
# @return [self, nil]
|
|
def self.get_species_form(species, form)
|
|
return nil if !species || !form
|
|
validate species => [Symbol, String]
|
|
validate form => Integer
|
|
#raise _INTL("Undefined species {1}.", species) if !GameData::Species.exists?(species)
|
|
species = species.to_sym if species.is_a?(String)
|
|
if form > 0
|
|
trial = sprintf("%s_%d", species, form).to_sym
|
|
if !DATA.has_key?(trial)
|
|
self.register({:id => species}) if !DATA[species]
|
|
self.register({
|
|
:id => trial,
|
|
:species => species,
|
|
:form => form,
|
|
:back_sprite => DATA[species].back_sprite.clone,
|
|
:front_sprite => DATA[species].front_sprite.clone,
|
|
:front_sprite_altitude => DATA[species].front_sprite_altitude,
|
|
:shadow_x => DATA[species].shadow_x,
|
|
:shadow_size => DATA[species].shadow_size
|
|
})
|
|
end
|
|
return DATA[trial]
|
|
end
|
|
self.register({:id => species}) if !DATA[species]
|
|
return DATA[species]
|
|
end
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
def initialize(hash)
|
|
@id = hash[:id]
|
|
@species = hash[:species] || @id
|
|
@form = hash[:form] || 0
|
|
@back_sprite = hash[:back_sprite] || [0, 0]
|
|
@front_sprite = hash[:front_sprite] || [0, 0]
|
|
@front_sprite_altitude = hash[:front_sprite_altitude] || 0
|
|
@shadow_x = hash[:shadow_x] || 0
|
|
@shadow_size = hash[:shadow_size] || 2
|
|
@pbs_file_suffix = hash[:pbs_file_suffix] || ""
|
|
end
|
|
|
|
def apply_metrics_to_sprite(sprite, index, shadow = false)
|
|
if shadow
|
|
sprite.x += @shadow_x * 2 if (index & 1) == 1 # Foe Pokémon
|
|
elsif (index & 1) == 0 # Overrides's Pokémon
|
|
sprite.x += @back_sprite[0] * 2
|
|
sprite.y += @back_sprite[1] * 2
|
|
else # Foe Pokémon
|
|
sprite.x += @front_sprite[0] * 2
|
|
sprite.y += @front_sprite[1] * 2
|
|
sprite.y -= @front_sprite_altitude * 2
|
|
end
|
|
end
|
|
|
|
def shows_shadow?
|
|
return true
|
|
# return @front_sprite_altitude > 0
|
|
end
|
|
|
|
alias __orig__get_property_for_PBS get_property_for_PBS unless method_defined?(:__orig__get_property_for_PBS)
|
|
def get_property_for_PBS(key)
|
|
ret = __orig__get_property_for_PBS(key)
|
|
case key
|
|
when "SectionName"
|
|
ret = [@species, (@form > 0) ? @form : nil]
|
|
when "FrontSpriteAltitude"
|
|
ret = nil if ret == 0
|
|
end
|
|
return ret
|
|
end
|
|
end
|
|
end
|