Not a member of GistPad yet?
Sign Up,
it unlocks many cool features!
- 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 # Player'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
RAW Paste Data
Copied
