From 53d27d3cf59c2d007c17a23ac600c4ebc1a30cd1 Mon Sep 17 00:00:00 2001 From: Maruno17 Date: Sun, 20 Jun 2021 17:57:35 +0100 Subject: [PATCH] Added new section-based format for ribbons.txt --- .../001_Hardcoded data/004_BodyShape.rb | 2 +- .../010_Data/001_Hardcoded data/010_Status.rb | 2 +- .../010_Data/002_PBS data/010_Ribbon.rb | 10 +- .../021_Compiler/002_Compiler_CompilePBS.rb | 69 ++- .../021_Compiler/003_Compiler_WritePBS.rb | 15 +- PBS/ribbons.txt | 479 +++++++++++++++--- 6 files changed, 470 insertions(+), 107 deletions(-) diff --git a/Data/Scripts/010_Data/001_Hardcoded data/004_BodyShape.rb b/Data/Scripts/010_Data/001_Hardcoded data/004_BodyShape.rb index 2d18e7b50..8d5a7b5b0 100644 --- a/Data/Scripts/010_Data/001_Hardcoded data/004_BodyShape.rb +++ b/Data/Scripts/010_Data/001_Hardcoded data/004_BodyShape.rb @@ -19,7 +19,7 @@ module GameData def initialize(hash) @id = hash[:id] @real_name = hash[:name] || "Unnamed" - @icon_position = hash[:icon_position] || -1 # -1 means "no icon" + @icon_position = hash[:icon_position] || 0 end # @return [String] the translated name of this body shape diff --git a/Data/Scripts/010_Data/001_Hardcoded data/010_Status.rb b/Data/Scripts/010_Data/001_Hardcoded data/010_Status.rb index 01da220a7..43ec0e1ff 100644 --- a/Data/Scripts/010_Data/001_Hardcoded data/010_Status.rb +++ b/Data/Scripts/010_Data/001_Hardcoded data/010_Status.rb @@ -23,7 +23,7 @@ module GameData @id = hash[:id] @real_name = hash[:name] || "Unnamed" @animation = hash[:animation] - @icon_position = hash[:icon_position] || -1 # -1 means "no icon" + @icon_position = hash[:icon_position] || 0 end # @return [String] the translated name of this status condition diff --git a/Data/Scripts/010_Data/002_PBS data/010_Ribbon.rb b/Data/Scripts/010_Data/002_PBS data/010_Ribbon.rb index 330f6ce29..e3e829bac 100644 --- a/Data/Scripts/010_Data/002_PBS data/010_Ribbon.rb +++ b/Data/Scripts/010_Data/002_PBS data/010_Ribbon.rb @@ -2,20 +2,26 @@ module GameData class Ribbon attr_reader :id attr_reader :real_name - attr_reader :real_description attr_reader :icon_position # Where this ribbon's graphic is within ribbons.png + attr_reader :real_description DATA = {} DATA_FILENAME = "ribbons.dat" + SCHEMA = { + "Name" => [:name, "s"], + "IconPosition" => [:icon_position, "u"], + "Description" => [:description, "q"] + } + extend ClassMethodsSymbols include InstanceMethods def initialize(hash) @id = hash[:id] @real_name = hash[:name] || "Unnamed" + @icon_position = hash[:icon_position] || 0 @real_description = hash[:description] || "???" - @icon_position = hash[:icon_position] || -1 end # @return [String] the translated name of this ribbon diff --git a/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb b/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb index d4cc0f0b4..d29399dad 100644 --- a/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb +++ b/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb @@ -921,26 +921,65 @@ module Compiler #============================================================================= def compile_ribbons(path = "PBS/ribbons.txt") GameData::Ribbon::DATA.clear + schema = GameData::Ribbon::SCHEMA ribbon_names = [] ribbon_descriptions = [] + ribbon_hash = nil pbCompilerEachPreppedLine(path) { |line, line_no| - line = pbGetCsvRecord(line, line_no, [0, "unss"]) - ribbon_symbol = line[1].to_sym - if GameData::Ribbon::DATA[ribbon_symbol] - raise _INTL("Ribbon ID '{1}' is used twice.\r\n{2}", ribbon_symbol, FileLineData.linereport) + if line[/^\s*\[\s*(.+)\s*\]\s*$/] # New section [ribbon_id] + # Add previous ribbon's data to records + GameData::Ribbon.register(ribbon_hash) if ribbon_hash + # Parse ribbon ID + ribbon_id = $~[1].to_sym + if GameData::Ribbon.exists?(ribbon_id) + raise _INTL("Ribbon ID '{1}' is used twice.\r\n{2}", ribbon_id, FileLineData.linereport) + end + # Construct ribbon hash + ribbon_hash = { + :id => ribbon_id + } + elsif line[/^\s*(\w+)\s*=\s*(.*)\s*$/] # XXX=YYY lines + if !ribbon_hash + raise _INTL("Expected a section at the beginning of the file.\r\n{1}", FileLineData.linereport) + end + # Parse property and value + property_name = $~[1] + line_schema = schema[property_name] + next if !line_schema + property_value = pbGetCsvRecord($~[2], line_no, line_schema) + # Record XXX=YYY setting + ribbon_hash[line_schema[0]] = property_value + case property_name + when "Name" + ribbon_names.push(ribbon_hash[:name]) + when "Description" + ribbon_descriptions.push(ribbon_hash[:description]) + end + else # Old format + # Add previous ribbon's data to records + GameData::Ribbon.register(ribbon_hash) if ribbon_hash + # Parse ribbon + line = pbGetCsvRecord(line, line_no, [0, "unss"]) + ribbon_id = line[1].to_sym + if GameData::Ribbon::DATA[ribbon_id] + raise _INTL("Ribbon ID '{1}' is used twice.\r\n{2}", ribbon_id, FileLineData.linereport) + end + # Construct ribbon hash + ribbon_hash = { + :id => ribbon_id, + :name => line[2], + :description => line[3], + :icon_position => line[0] - 1 + } + # Add ribbon's data to records + GameData::Ribbon.register(ribbon_hash) + ribbon_names.push(ribbon_hash[:name]) + ribbon_descriptions.push(ribbon_hash[:description]) + ribbon_hash = nil end - # Construct ribbon hash - ribbon_hash = { - :id => ribbon_symbol, - :name => line[2], - :description => line[3], - :icon_position => line[0] - 1 - } - # Add ribbon's data to records - GameData::Ribbon.register(ribbon_hash) - ribbon_names.push(ribbon_hash[:name]) - ribbon_descriptions.push(ribbon_hash[:description]) } + # Add last ribbon's data to records + GameData::Ribbon.register(ribbon_hash) if ribbon_hash # Save all data GameData::Ribbon.save MessageTypes.setMessagesAsHash(MessageTypes::RibbonNames, ribbon_names) diff --git a/Data/Scripts/021_Compiler/003_Compiler_WritePBS.rb b/Data/Scripts/021_Compiler/003_Compiler_WritePBS.rb index 0ab9fb980..8a68bfa74 100644 --- a/Data/Scripts/021_Compiler/003_Compiler_WritePBS.rb +++ b/Data/Scripts/021_Compiler/003_Compiler_WritePBS.rb @@ -497,14 +497,13 @@ module Compiler def write_ribbons File.open("PBS/ribbons.txt", "wb") { |f| add_PBS_header_to_file(f) - f.write("\#-------------------------------\r\n") - GameData::Ribbon.each do |r| - f.write(sprintf("%d,%s,%s,%s\r\n", - r.icon_position + 1, - csvQuote(r.id.to_s), - csvQuote(r.real_name), - csvQuoteAlways(r.real_description) - )) + # Write each ability in turn + GameData::Ribbon.each do |ribbon| + f.write("\#-------------------------------\r\n") + f.write("[#{ribbon.id}]\r\n") + f.write("Name = #{ribbon.real_name}\r\n") + f.write("IconPosition = #{ribbon.icon_position}\r\n") + f.write("Description = #{ribbon.real_description}\r\n") end } Graphics.update diff --git a/PBS/ribbons.txt b/PBS/ribbons.txt index 639403320..260dbb09a 100644 --- a/PBS/ribbons.txt +++ b/PBS/ribbons.txt @@ -1,82 +1,401 @@ # See the documentation on the wiki to learn how to edit this file. #------------------------------- -1,HOENNCOOL,Cool Ribbon,"Hoenn Cool Contest Normal Rank winner!" -2,HOENNCOOLSUPER,Cool Ribbon Super,"Hoenn Cool Contest Super Rank winner!" -3,HOENNCOOLHYPER,Cool Ribbon Hyper,"Hoenn Cool Contest Hyper Rank winner!" -4,HOENNCOOLMASTER,Cool Ribbon Master,"Hoenn Cool Contest Master Rank winner!" -5,HOENNBEAUTY,Beauty Ribbon,"Hoenn Beauty Contest Normal Rank winner!" -6,HOENNBEAUTYSUPER,Beauty Ribbon Super,"Hoenn Beauty Contest Super Rank winner!" -7,HOENNBEAUTYHYPER,Beauty Ribbon Hyper,"Hoenn Beauty Contest Hyper Rank winner!" -8,HOENNBEAUTYMASTER,Beauty Ribbon Master,"Hoenn Beauty Contest Master Rank winner!" -9,HOENNCUTE,Cute Ribbon,"Hoenn Cute Contest Normal Rank winner!" -10,HOENNCUTESUPER,Cute Ribbon Super,"Hoenn Cute Contest Super Rank winner!" -11,HOENNCUTEHYPER,Cute Ribbon Hyper,"Hoenn Cute Contest Hyper Rank winner!" -12,HOENNCUTEMASTER,Cute Ribbon Master,"Hoenn Cute Contest Master Rank winner!" -13,HOENNSMART,Smart Ribbon,"Hoenn Smart Contest Normal Rank winner!" -14,HOENNSMARTSUPER,Smart Ribbon Super,"Hoenn Smart Contest Super Rank winner!" -15,HOENNSMARTHYPER,Smart Ribbon Hyper,"Hoenn Smart Contest Hyper Rank winner!" -16,HOENNSMARTMASTER,Smart Ribbon Master,"Hoenn Smart Contest Master Rank winner!" -17,HOENNTOUGH,Tough Ribbon,"Hoenn Tough Contest Normal Rank winner!" -18,HOENNTOUGHSUPER,Tough Ribbon Super,"Hoenn Tough Contest Super Rank winner!" -19,HOENNTOUGHHYPER,Tough Ribbon Hyper,"Hoenn Tough Contest Hyper Rank winner!" -20,HOENNTOUGHMASTER,Tough Ribbon Master,"Hoenn Tough Contest Master Rank winner!" -21,SINNOHCOOL,Cool Ribbon,"Super Contest Cool Category Normal Rank winner!" -22,SINNOHCOOLSUPER,Cool Ribbon Great,"Super Contest Cool Category Great Rank winner!" -23,SINNOHCOOLHYPER,Cool Ribbon Ultra,"Super Contest Cool Category Ultra Rank winner!" -24,SINNOHCOOLMASTER,Cool Ribbon Master,"Super Contest Cool Category Master Rank winner!" -25,SINNOHBEAUTY,Beauty Ribbon,"Super Contest Beauty Category Normal Rank winner!" -26,SINNOHBEAUTYSUPER,Beauty Ribbon Great,"Super Contest Beauty Category Great Rank winner!" -27,SINNOHBEAUTYHYPER,Beauty Ribbon Ultra,"Super Contest Beauty Category Ultra Rank winner!" -28,SINNOHBEAUTYMASTER,Beauty Ribbon Master,"Super Contest Beauty Category Master Rank winner!" -29,SINNOHCUTE,Cute Ribbon,"Super Contest Cute Category Normal Rank winner!" -30,SINNOHCUTESUPER,Cute Ribbon Great,"Super Contest Cute Category Great Rank winner!" -31,SINNOHCUTEHYPER,Cute Ribbon Ultra,"Super Contest Cute Category Ultra Rank winner!" -32,SINNOHCUTEMASTER,Cute Ribbon Master,"Super Contest Cute Category Master Rank winner!" -33,SINNOHSMART,Smart Ribbon,"Super Contest Smart Category Normal Rank winner!" -34,SINNOHSMARTSUPER,Smart Ribbon Great,"Super Contest Smart Category Great Rank winner!" -35,SINNOHSMARTHYPER,Smart Ribbon Ultra,"Super Contest Smart Category Ultra Rank winner!" -36,SINNOHSMARTMASTER,Smart Ribbon Master,"Super Contest Smart Category Master Rank winner!" -37,SINNOHTOUGH,Tough Ribbon,"Super Contest Tough Category Normal Rank winner!" -38,SINNOHTOUGHSUPER,Tough Ribbon Great,"Super Contest Tough Category Great Rank winner!" -39,SINNOHTOUGHHYPER,Tough Ribbon Ultra,"Super Contest Tough Category Ultra Rank winner!" -40,SINNOHTOUGHMASTER,Tough Ribbon Master,"Super Contest Tough Category Master Rank winner!" -41,WINNING,Winning Ribbon,"Ribbon awarded for clearing Hoenn's Battle Tower's Lv. 50 challenge." -42,VICTORY,Victory Ribbon,"Ribbon awarded for clearing Hoenn's Battle Tower's Lv. 100 challenge." -43,ABILITY,Ability Ribbon,"A Ribbon awarded for defeating the Tower Tycoon at the Battle Tower." -44,GREATABILITY,Great Ability Ribbon,"A Ribbon awarded for defeating the Tower Tycoon at the Battle Tower." -45,DOUBLEABILITY,Double Ability Ribbon,"A Ribbon awarded for completing the Battle Tower Double challenge." -46,MULTIABILITY,Multi Ability Ribbon,"A Ribbon awarded for completing the Battle Tower Multi challenge." -47,PAIRABILITY,Pair Ability Ribbon,"A Ribbon awarded for completing the Battle Tower Link Multi challenge." -48,WORLDABILITY,World Ability Ribbon,"A Ribbon awarded for completing the Wi-Fi Battle Tower challenge." -49,CHAMPION,Champion Ribbon,"Ribbon for clearing the Pokémon League and entering the Hall of Fame in another region. " -50,SINNOHCHAMP,Sinnoh Champ Ribbon,"Ribbon awarded for beating the Sinnoh Champion and entering the Hall of Fame." -51,RECORD,Record Ribbon,"A Ribbon awarded for setting an incredible record." -52,EVENT,Event Ribbon,"Pokémon Event Participation Ribbon." -53,LEGEND,Legend Ribbon,"A Ribbon awarded for setting a legendary record." -54,GORGEOUS,Gorgeous Ribbon,"An extraordinarily gorgeous and extravagant Ribbon." -55,ROYAL,Royal Ribbon,"An incredibly regal Ribbon with an air of nobility." -56,GORGEOUSROYAL,Gorgeous Royal Ribbon,"A gorgeous and regal Ribbon that is the peak of fabulous." -57,ALERT,Alert Ribbon,"A Ribbon for recalling an invigorating event that created life energy." -58,SHOCK,Shock Ribbon,"A Ribbon for recalling a thrilling event that made life more exciting." -59,DOWNCAST,Downcast Ribbon,"A Ribbon for recalling feelings of sadness that added spice to life." -60,CARELESS,Careless Ribbon,"A Ribbon for recalling a careless error that helped steer life decisions." -61,RELAX,Relax Ribbon,"A Ribbon for recalling a refreshing event that added sparkle to life." -62,SNOOZE,Snooze Ribbon,"A Ribbon for recalling a deep slumber that made life soothing." -63,SMILE,Smile Ribbon,"A Ribbon for recalling that smiles enrich the quality of life." -64,FOOTPRINT,Footprint Ribbon,"A Ribbon awarded to a Pokémon deemed to have a top-quality footprint." -65,ARTIST,Artist Ribbon,"Ribbon awarded for being chosen as a super sketch model in Hoenn." -66,EFFORT,Effort Ribbon,"Ribbon awarded for being an exceptionally hard worker." -67,BIRTHDAY,Birthday Ribbon,"A Ribbon to celebrate a birthday." -68,SPECIAL,Special Ribbon,"A special Ribbon for a special day." -69,CLASSIC,Classic Ribbon,"A Ribbon that proclaims love for Pokémon." -70,PREMIER,Premier Ribbon,"Special Holiday Ribbon." -71,SOUVENIR,Souvenir Ribbon,"A Ribbon to cherish a special memory." -72,WISHING,Wishing Ribbon,"A Ribbon said to make your wish come true." -73,NATIONAL,National Ribbon,"A Ribbon awarded for overcoming all difficult challenges." -74,COUNTRY,Country Ribbon,"Pokémon League Champion Ribbon." -75,BATTLECHAMPION,Battle Champion Ribbon,"Battle Competition Champion Ribbon." -76,REGIONALCHAMPION,Regional Champion Ribbon,"Pokémon World Championships Regional Champion Ribbon." -77,EARTH,Earth Ribbon,"A Ribbon awarded for winning 100 matches in a row." -78,WORLD,World Ribbon,"Pokémon League Champion Ribbon." -79,NATIONALCHAMPION,National Champion Ribbon,"Pokémon World Championships National Champion Ribbon." -80,WORLDCHAMPION,World Champion Ribbon,"Pokémon World Championships World Champion Ribbon." +[HOENNCOOL] +Name = Cool Ribbon +IconPosition = 0 +Description = Hoenn Cool Contest Normal Rank winner! +#------------------------------- +[HOENNCOOLSUPER] +Name = Cool Ribbon Super +IconPosition = 1 +Description = Hoenn Cool Contest Super Rank winner! +#------------------------------- +[HOENNCOOLHYPER] +Name = Cool Ribbon Hyper +IconPosition = 2 +Description = Hoenn Cool Contest Hyper Rank winner! +#------------------------------- +[HOENNCOOLMASTER] +Name = Cool Ribbon Master +IconPosition = 3 +Description = Hoenn Cool Contest Master Rank winner! +#------------------------------- +[HOENNBEAUTY] +Name = Beauty Ribbon +IconPosition = 4 +Description = Hoenn Beauty Contest Normal Rank winner! +#------------------------------- +[HOENNBEAUTYSUPER] +Name = Beauty Ribbon Super +IconPosition = 5 +Description = Hoenn Beauty Contest Super Rank winner! +#------------------------------- +[HOENNBEAUTYHYPER] +Name = Beauty Ribbon Hyper +IconPosition = 6 +Description = Hoenn Beauty Contest Hyper Rank winner! +#------------------------------- +[HOENNBEAUTYMASTER] +Name = Beauty Ribbon Master +IconPosition = 7 +Description = Hoenn Beauty Contest Master Rank winner! +#------------------------------- +[HOENNCUTE] +Name = Cute Ribbon +IconPosition = 8 +Description = Hoenn Cute Contest Normal Rank winner! +#------------------------------- +[HOENNCUTESUPER] +Name = Cute Ribbon Super +IconPosition = 9 +Description = Hoenn Cute Contest Super Rank winner! +#------------------------------- +[HOENNCUTEHYPER] +Name = Cute Ribbon Hyper +IconPosition = 10 +Description = Hoenn Cute Contest Hyper Rank winner! +#------------------------------- +[HOENNCUTEMASTER] +Name = Cute Ribbon Master +IconPosition = 11 +Description = Hoenn Cute Contest Master Rank winner! +#------------------------------- +[HOENNSMART] +Name = Smart Ribbon +IconPosition = 12 +Description = Hoenn Smart Contest Normal Rank winner! +#------------------------------- +[HOENNSMARTSUPER] +Name = Smart Ribbon Super +IconPosition = 13 +Description = Hoenn Smart Contest Super Rank winner! +#------------------------------- +[HOENNSMARTHYPER] +Name = Smart Ribbon Hyper +IconPosition = 14 +Description = Hoenn Smart Contest Hyper Rank winner! +#------------------------------- +[HOENNSMARTMASTER] +Name = Smart Ribbon Master +IconPosition = 15 +Description = Hoenn Smart Contest Master Rank winner! +#------------------------------- +[HOENNTOUGH] +Name = Tough Ribbon +IconPosition = 16 +Description = Hoenn Tough Contest Normal Rank winner! +#------------------------------- +[HOENNTOUGHSUPER] +Name = Tough Ribbon Super +IconPosition = 17 +Description = Hoenn Tough Contest Super Rank winner! +#------------------------------- +[HOENNTOUGHHYPER] +Name = Tough Ribbon Hyper +IconPosition = 18 +Description = Hoenn Tough Contest Hyper Rank winner! +#------------------------------- +[HOENNTOUGHMASTER] +Name = Tough Ribbon Master +IconPosition = 19 +Description = Hoenn Tough Contest Master Rank winner! +#------------------------------- +[SINNOHCOOL] +Name = Cool Ribbon +IconPosition = 20 +Description = Super Contest Cool Category Normal Rank winner! +#------------------------------- +[SINNOHCOOLSUPER] +Name = Cool Ribbon Great +IconPosition = 21 +Description = Super Contest Cool Category Great Rank winner! +#------------------------------- +[SINNOHCOOLHYPER] +Name = Cool Ribbon Ultra +IconPosition = 22 +Description = Super Contest Cool Category Ultra Rank winner! +#------------------------------- +[SINNOHCOOLMASTER] +Name = Cool Ribbon Master +IconPosition = 23 +Description = Super Contest Cool Category Master Rank winner! +#------------------------------- +[SINNOHBEAUTY] +Name = Beauty Ribbon +IconPosition = 24 +Description = Super Contest Beauty Category Normal Rank winner! +#------------------------------- +[SINNOHBEAUTYSUPER] +Name = Beauty Ribbon Great +IconPosition = 25 +Description = Super Contest Beauty Category Great Rank winner! +#------------------------------- +[SINNOHBEAUTYHYPER] +Name = Beauty Ribbon Ultra +IconPosition = 26 +Description = Super Contest Beauty Category Ultra Rank winner! +#------------------------------- +[SINNOHBEAUTYMASTER] +Name = Beauty Ribbon Master +IconPosition = 27 +Description = Super Contest Beauty Category Master Rank winner! +#------------------------------- +[SINNOHCUTE] +Name = Cute Ribbon +IconPosition = 28 +Description = Super Contest Cute Category Normal Rank winner! +#------------------------------- +[SINNOHCUTESUPER] +Name = Cute Ribbon Great +IconPosition = 29 +Description = Super Contest Cute Category Great Rank winner! +#------------------------------- +[SINNOHCUTEHYPER] +Name = Cute Ribbon Ultra +IconPosition = 30 +Description = Super Contest Cute Category Ultra Rank winner! +#------------------------------- +[SINNOHCUTEMASTER] +Name = Cute Ribbon Master +IconPosition = 31 +Description = Super Contest Cute Category Master Rank winner! +#------------------------------- +[SINNOHSMART] +Name = Smart Ribbon +IconPosition = 32 +Description = Super Contest Smart Category Normal Rank winner! +#------------------------------- +[SINNOHSMARTSUPER] +Name = Smart Ribbon Great +IconPosition = 33 +Description = Super Contest Smart Category Great Rank winner! +#------------------------------- +[SINNOHSMARTHYPER] +Name = Smart Ribbon Ultra +IconPosition = 34 +Description = Super Contest Smart Category Ultra Rank winner! +#------------------------------- +[SINNOHSMARTMASTER] +Name = Smart Ribbon Master +IconPosition = 35 +Description = Super Contest Smart Category Master Rank winner! +#------------------------------- +[SINNOHTOUGH] +Name = Tough Ribbon +IconPosition = 36 +Description = Super Contest Tough Category Normal Rank winner! +#------------------------------- +[SINNOHTOUGHSUPER] +Name = Tough Ribbon Great +IconPosition = 37 +Description = Super Contest Tough Category Great Rank winner! +#------------------------------- +[SINNOHTOUGHHYPER] +Name = Tough Ribbon Ultra +IconPosition = 38 +Description = Super Contest Tough Category Ultra Rank winner! +#------------------------------- +[SINNOHTOUGHMASTER] +Name = Tough Ribbon Master +IconPosition = 39 +Description = Super Contest Tough Category Master Rank winner! +#------------------------------- +[WINNING] +Name = Winning Ribbon +IconPosition = 40 +Description = Ribbon awarded for clearing Hoenn's Battle Tower's Lv. 50 challenge. +#------------------------------- +[VICTORY] +Name = Victory Ribbon +IconPosition = 41 +Description = Ribbon awarded for clearing Hoenn's Battle Tower's Lv. 100 challenge. +#------------------------------- +[ABILITY] +Name = Ability Ribbon +IconPosition = 42 +Description = A Ribbon awarded for defeating the Tower Tycoon at the Battle Tower. +#------------------------------- +[GREATABILITY] +Name = Great Ability Ribbon +IconPosition = 43 +Description = A Ribbon awarded for defeating the Tower Tycoon at the Battle Tower. +#------------------------------- +[DOUBLEABILITY] +Name = Double Ability Ribbon +IconPosition = 44 +Description = A Ribbon awarded for completing the Battle Tower Double challenge. +#------------------------------- +[MULTIABILITY] +Name = Multi Ability Ribbon +IconPosition = 45 +Description = A Ribbon awarded for completing the Battle Tower Multi challenge. +#------------------------------- +[PAIRABILITY] +Name = Pair Ability Ribbon +IconPosition = 46 +Description = A Ribbon awarded for completing the Battle Tower Link Multi challenge. +#------------------------------- +[WORLDABILITY] +Name = World Ability Ribbon +IconPosition = 47 +Description = A Ribbon awarded for completing the Wi-Fi Battle Tower challenge. +#------------------------------- +[CHAMPION] +Name = Champion Ribbon +IconPosition = 48 +Description = Ribbon for clearing the Pokémon League and entering the Hall of Fame in another region. +#------------------------------- +[SINNOHCHAMP] +Name = Sinnoh Champ Ribbon +IconPosition = 49 +Description = Ribbon awarded for beating the Sinnoh Champion and entering the Hall of Fame. +#------------------------------- +[RECORD] +Name = Record Ribbon +IconPosition = 50 +Description = A Ribbon awarded for setting an incredible record. +#------------------------------- +[EVENT] +Name = Event Ribbon +IconPosition = 51 +Description = Pokémon Event Participation Ribbon. +#------------------------------- +[LEGEND] +Name = Legend Ribbon +IconPosition = 52 +Description = A Ribbon awarded for setting a legendary record. +#------------------------------- +[GORGEOUS] +Name = Gorgeous Ribbon +IconPosition = 53 +Description = An extraordinarily gorgeous and extravagant Ribbon. +#------------------------------- +[ROYAL] +Name = Royal Ribbon +IconPosition = 54 +Description = An incredibly regal Ribbon with an air of nobility. +#------------------------------- +[GORGEOUSROYAL] +Name = Gorgeous Royal Ribbon +IconPosition = 55 +Description = A gorgeous and regal Ribbon that is the peak of fabulous. +#------------------------------- +[ALERT] +Name = Alert Ribbon +IconPosition = 56 +Description = A Ribbon for recalling an invigorating event that created life energy. +#------------------------------- +[SHOCK] +Name = Shock Ribbon +IconPosition = 57 +Description = A Ribbon for recalling a thrilling event that made life more exciting. +#------------------------------- +[DOWNCAST] +Name = Downcast Ribbon +IconPosition = 58 +Description = A Ribbon for recalling feelings of sadness that added spice to life. +#------------------------------- +[CARELESS] +Name = Careless Ribbon +IconPosition = 59 +Description = A Ribbon for recalling a careless error that helped steer life decisions. +#------------------------------- +[RELAX] +Name = Relax Ribbon +IconPosition = 60 +Description = A Ribbon for recalling a refreshing event that added sparkle to life. +#------------------------------- +[SNOOZE] +Name = Snooze Ribbon +IconPosition = 61 +Description = A Ribbon for recalling a deep slumber that made life soothing. +#------------------------------- +[SMILE] +Name = Smile Ribbon +IconPosition = 62 +Description = A Ribbon for recalling that smiles enrich the quality of life. +#------------------------------- +[FOOTPRINT] +Name = Footprint Ribbon +IconPosition = 63 +Description = A Ribbon awarded to a Pokémon deemed to have a top-quality footprint. +#------------------------------- +[ARTIST] +Name = Artist Ribbon +IconPosition = 64 +Description = Ribbon awarded for being chosen as a super sketch model in Hoenn. +#------------------------------- +[EFFORT] +Name = Effort Ribbon +IconPosition = 65 +Description = Ribbon awarded for being an exceptionally hard worker. +#------------------------------- +[BIRTHDAY] +Name = Birthday Ribbon +IconPosition = 66 +Description = A Ribbon to celebrate a birthday. +#------------------------------- +[SPECIAL] +Name = Special Ribbon +IconPosition = 67 +Description = A special Ribbon for a special day. +#------------------------------- +[CLASSIC] +Name = Classic Ribbon +IconPosition = 68 +Description = A Ribbon that proclaims love for Pokémon. +#------------------------------- +[PREMIER] +Name = Premier Ribbon +IconPosition = 69 +Description = Special Holiday Ribbon. +#------------------------------- +[SOUVENIR] +Name = Souvenir Ribbon +IconPosition = 70 +Description = A Ribbon to cherish a special memory. +#------------------------------- +[WISHING] +Name = Wishing Ribbon +IconPosition = 71 +Description = A Ribbon said to make your wish come true. +#------------------------------- +[NATIONAL] +Name = National Ribbon +IconPosition = 72 +Description = A Ribbon awarded for overcoming all difficult challenges. +#------------------------------- +[COUNTRY] +Name = Country Ribbon +IconPosition = 73 +Description = Pokémon League Champion Ribbon. +#------------------------------- +[BATTLECHAMPION] +Name = Battle Champion Ribbon +IconPosition = 74 +Description = Battle Competition Champion Ribbon. +#------------------------------- +[REGIONALCHAMPION] +Name = Regional Champion Ribbon +IconPosition = 75 +Description = Pokémon World Championships Regional Champion Ribbon. +#------------------------------- +[EARTH] +Name = Earth Ribbon +IconPosition = 76 +Description = A Ribbon awarded for winning 100 matches in a row. +#------------------------------- +[WORLD] +Name = World Ribbon +IconPosition = 77 +Description = Pokémon League Champion Ribbon. +#------------------------------- +[NATIONALCHAMPION] +Name = National Champion Ribbon +IconPosition = 78 +Description = Pokémon World Championships National Champion Ribbon. +#------------------------------- +[WORLDCHAMPION] +Name = World Champion Ribbon +IconPosition = 79 +Description = Pokémon World Championships World Champion Ribbon.