Files
infinitefusion-e18/Data/Scripts/052_InfiniteFusion/ImprovedShinies/Shinies_Species.rb
2025-06-07 08:16:50 -04:00

54 lines
1.6 KiB
Ruby

module GameData
class Species
def self.calculateCustomShinyHueOffset(dex_number, bodyShiny, headShiny)
result = []
valid_format_rgb = /^\d+ \d+ \d+.\d+ \d+ \d+$/ # Format RGB classique
valid_format_hex = /^#([0-9a-fA-F]{6}).#([0-9a-fA-F]{6})$/ # Format hexadécimal
ids = []
if dex_number <= NB_POKEMON
ids << dex_number
else
ids << getBodyID(dex_number) if bodyShiny
ids << getHeadID(dex_number, ids[0]) if headShiny
end
color_to_stay = []
ids.each do |id|
offsets = SHINY_COLOR_OFFSETS[id]
next unless offsets
offsets.each_value do |value|
if value.is_a?(String)
if value.match?(valid_format_rgb)
from_rgb, to_rgb = value.split(".").map { |rgb| rgb.split.map(&:to_i) }
if from_rgb == to_rgb && bodyShiny && headShiny
color_to_stay << value
next
end
result << value
elsif value.match?(valid_format_hex)
from_hex, to_hex = value.split(".")
from_rgb = hex_to_rgb(from_hex)
to_rgb = hex_to_rgb(to_hex)
if from_rgb == to_rgb && bodyShiny && headShiny
color_to_stay << "#{from_rgb.join(" ")}.#{to_rgb.join(" ")}"
next
end
result << "#{from_rgb.join(" ")}.#{to_rgb.join(" ")}"
end
end
end
end
if result.empty?
"nil"
elsif bodyShiny && headShiny
[result.join("|"), color_to_stay.join("|")].reject(&:empty?).join("&")
else
result.join("|")
end
end
end
end