Guest

species metrics

Aug 13th, 2026
10
0
Never
Not a member of GistPad yet? Sign Up, it unlocks many cool features!
None 8.33 KB | None | 0 0
  1. module GameData
  2. class SpeciesMetrics
  3. attr_reader :id
  4. attr_reader :species
  5. attr_reader :form
  6. attr_accessor :back_sprite
  7. attr_accessor :front_sprite
  8. attr_accessor :front_sprite_altitude
  9. attr_accessor :shadow_x
  10. attr_accessor :shadow_size
  11. attr_reader :pbs_file_suffix
  12.  
  13. DATA = {}
  14. DATA_FILENAME = "species_metrics.dat"
  15. PBS_BASE_FILENAME = "pokemon_metrics"
  16.  
  17. SCHEMA = {
  18. "SectionName" => [:id, "eV", :Species],
  19. "BackSprite" => [:back_sprite, "ii"],
  20. "FrontSprite" => [:front_sprite, "ii"],
  21. "FrontSpriteAltitude" => [:front_sprite_altitude, "i"],
  22. "ShadowX" => [:shadow_x, "i"],
  23. "ShadowSize" => [:shadow_size, "u"]
  24. }
  25.  
  26. extend ClassMethodsSymbols
  27. include InstanceMethods
  28.  
  29. # @param species [Symbol, String]
  30. # @param form [Integer]
  31. # @return [self, nil]
  32. def self.get_species_form(species, form)
  33. return nil if !species || !form
  34. validate species => [Symbol, String]
  35. validate form => Integer
  36. raise _INTL("Undefined species {1}.", species) if !GameData::Species.exists?(species)
  37. species = species.to_sym if species.is_a?(String)
  38. if form > 0
  39. trial = sprintf("%s_%d", species, form).to_sym
  40. if !DATA.has_key?(trial)
  41. self.register({:id => species}) if !DATA[species]
  42. self.register({
  43. :id => trial,
  44. :species => species,
  45. :form => form,
  46. :back_sprite => DATA[species].back_sprite.clone,
  47. :front_sprite => DATA[species].front_sprite.clone,
  48. :front_sprite_altitude => DATA[species].front_sprite_altitude,
  49. :shadow_x => DATA[species].shadow_x,
  50. :shadow_size => DATA[species].shadow_size
  51. })
  52. end
  53. return DATA[trial]
  54. end
  55. self.register({:id => species}) if !DATA[species]
  56. return DATA[species]
  57. end
  58.  
  59. def initialize(hash)
  60. @id = hash[:id]
  61. @species = hash[:species] || @id
  62. @form = hash[:form] || 0
  63. @back_sprite = hash[:back_sprite] || [0, 0]
  64. @front_sprite = hash[:front_sprite] || [0, 0]
  65. @front_sprite_altitude = hash[:front_sprite_altitude] || 0
  66. @shadow_x = hash[:shadow_x] || 0
  67. @shadow_size = hash[:shadow_size] || 2
  68. @pbs_file_suffix = hash[:pbs_file_suffix] || ""
  69. end
  70.  
  71. def apply_metrics_to_sprite(sprite, index, shadow = false)
  72. if shadow
  73. sprite.x += @shadow_x * 2 if (index & 1) == 1 # Foe Pokémon
  74. elsif (index & 1) == 0 # Player's Pokémon
  75. sprite.x += @back_sprite[0] * 2
  76. sprite.y += @back_sprite[1] * 2
  77. else # Foe Pokémon
  78. sprite.x += @front_sprite[0] * 2
  79. sprite.y += @front_sprite[1] * 2
  80. sprite.y -= @front_sprite_altitude * 2
  81. end
  82. end
  83.  
  84. def shows_shadow?
  85. return true
  86. # return @front_sprite_altitude > 0
  87. end
  88.  
  89. alias __orig__get_property_for_PBS get_property_for_PBS unless method_defined?(:__orig__get_property_for_PBS)
  90. def get_property_for_PBS(key)
  91. ret = __orig__get_property_for_PBS(key)
  92. case key
  93. when "SectionName"
  94. ret = [@species, (@form > 0) ? @form : nil]
  95. when "FrontSpriteAltitude"
  96. ret = nil if ret == 0
  97. end
  98. return ret
  99. end
  100. end
  101. end
RAW Paste Data Copied