diff --git a/LibPkmGC/include/LibPkmGC/Colosseum/Common/BattleModeData.h b/LibPkmGC/include/LibPkmGC/Colosseum/Common/BattleModeData.h index 7650930..924a21a 100644 --- a/LibPkmGC/include/LibPkmGC/Colosseum/Common/BattleModeData.h +++ b/LibPkmGC/include/LibPkmGC/Colosseum/Common/BattleModeData.h @@ -28,7 +28,7 @@ namespace Colosseum { /* ?? - 0xc16c: Colosseum::GroupBattleRules rules[26] + 0xc9dc: Colosseum::GroupBattleRules rules[6] ?? */ class LIBPKMGC_DECL BattleModeData : diff --git a/LibPkmGC/include/LibPkmGC/Colosseum/Common/Everything.h b/LibPkmGC/include/LibPkmGC/Colosseum/Common/Everything.h index f6ee62c..c36ce9f 100644 --- a/LibPkmGC/include/LibPkmGC/Colosseum/Common/Everything.h +++ b/LibPkmGC/include/LibPkmGC/Colosseum/Common/Everything.h @@ -16,8 +16,8 @@ * along with LibPkmGC. If not, see . */ -#ifndef _LIBPKMGC_XD_COMMON_EVERYTHING_H -#define _LIBPKMGC_XD_COMMON_EVERYTHING_H +#ifndef _LIBPKMGC_COLOSSEUM_COMMON_EVERYTHING_H +#define _LIBPKMGC_COLOSSEUM_COMMON_EVERYTHING_H #include #include @@ -28,4 +28,6 @@ #include #include +#include + #endif \ No newline at end of file diff --git a/LibPkmGC/include/LibPkmGC/Colosseum/Common/RibbonDescriptionsData.h b/LibPkmGC/include/LibPkmGC/Colosseum/Common/RibbonDescriptionsData.h new file mode 100644 index 0000000..191f9de --- /dev/null +++ b/LibPkmGC/include/LibPkmGC/Colosseum/Common/RibbonDescriptionsData.h @@ -0,0 +1,46 @@ +/* +* Copyright (C) TuxSH 2015 +* This file is part of LibPkmGC. +* +* LibPkmGC is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* LibPkmGC is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with LibPkmGC. If not, see . +*/ + +#ifndef _LIBPKMGC_COLOSSEUM_RIBBON_DESCRIPTION_DATA_H +#define _LIBPKMGC_COLOSSEUM_RIBBON_DESCRIPTION_DATA_H + +#include + +namespace LibPkmGC { +namespace Colosseum { + + +class LIBPKMGC_DECL RibbonDescriptionsData : + public GC::RibbonDescriptionsData +{ +public: + static const size_t size = 11; + ~RibbonDescriptionsData(void); + RibbonDescriptionsData(void); + RibbonDescriptionsData(const u8* inData); + + bool isXD(void) const; + RibbonDescriptionsData* clone(void) const; + RibbonDescriptionsData* create(void) const; + +}; + +} +} + +#endif \ No newline at end of file diff --git a/LibPkmGC/include/LibPkmGC/Colosseum/SaveEditing/SaveSlot.h b/LibPkmGC/include/LibPkmGC/Colosseum/SaveEditing/SaveSlot.h index 847743d..e3bd94c 100644 --- a/LibPkmGC/include/LibPkmGC/Colosseum/SaveEditing/SaveSlot.h +++ b/LibPkmGC/include/LibPkmGC/Colosseum/SaveEditing/SaveSlot.h @@ -73,7 +73,7 @@ public: u8 checksum[20]; // digest - void fixBugsAffectingPokemon(void); + void fixBugsAffectingPokemon(void); // LibPkmGC < 1.1.1 protected: void loadData(u32 flags = 0); void deleteFields(void); diff --git a/LibPkmGC/include/LibPkmGC/Core/Detail/RibbonDescriptions.h b/LibPkmGC/include/LibPkmGC/Core/Detail/RibbonDescriptions.h new file mode 100644 index 0000000..1695e6e --- /dev/null +++ b/LibPkmGC/include/LibPkmGC/Core/Detail/RibbonDescriptions.h @@ -0,0 +1,46 @@ +/* +* Copyright (C) TuxSH 2015 +* This file is part of LibPkmGC. +* +* LibPkmGC is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* LibPkmGC is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with LibPkmGC. If not, see . +*/ + +#ifndef _LIBPKMGC_RIBBON_DESCRIPTIONS_H +#define _LIBPKMGC_RIBBON_DESCRIPTIONS_H + +#include + +namespace LibPkmGC { +namespace Localization { +namespace Detail { + +namespace RibbonDescriptions { + +#define NB_NAMES 65 +extern const char LIBPKMGC_DECL *englishNames[NB_NAMES]; +extern const char LIBPKMGC_DECL *frenchNames[NB_NAMES]; +extern const char LIBPKMGC_DECL *germanNames[NB_NAMES]; +extern const char LIBPKMGC_DECL *italianNames[NB_NAMES]; +extern const char LIBPKMGC_DECL *spanishNames[NB_NAMES]; +extern const char LIBPKMGC_DECL *japaneseNames[NB_NAMES]; + +extern const char **names[7]; +#undef NB_NAMES + +} +} +} +} + +#endif \ No newline at end of file diff --git a/LibPkmGC/include/LibPkmGC/Core/Localization.h b/LibPkmGC/include/LibPkmGC/Core/Localization.h index d7c122b..97e6d3b 100644 --- a/LibPkmGC/include/LibPkmGC/Core/Localization.h +++ b/LibPkmGC/include/LibPkmGC/Core/Localization.h @@ -26,6 +26,7 @@ #include #include #include +#include namespace LibPkmGC { namespace Localization { @@ -45,6 +46,8 @@ LIBPKMGC_DECL const char* getPokemonAbilityName(LanguageIndex language, Pokemon LIBPKMGC_DECL const char* getItemName(LanguageIndex language, ItemIndex index, bool isXD = false); +LIBPKMGC_DECL const char* getRibbonDescription(LanguageIndex language, size_t index); +// Ribbons: Marine, Land, Sky, Country, National, Earth, World, Unused 1,2,3,4 } } diff --git a/LibPkmGC/include/LibPkmGC/GC/Common/Everything.h b/LibPkmGC/include/LibPkmGC/GC/Common/Everything.h index a601dc9..1378a39 100644 --- a/LibPkmGC/include/LibPkmGC/GC/Common/Everything.h +++ b/LibPkmGC/include/LibPkmGC/GC/Common/Everything.h @@ -28,4 +28,5 @@ #include #include +#include #endif \ No newline at end of file diff --git a/LibPkmGC/include/LibPkmGC/GC/Common/RibbonDescriptionsData.h b/LibPkmGC/include/LibPkmGC/GC/Common/RibbonDescriptionsData.h new file mode 100644 index 0000000..3ba75a1 --- /dev/null +++ b/LibPkmGC/include/LibPkmGC/GC/Common/RibbonDescriptionsData.h @@ -0,0 +1,62 @@ +/* +* Copyright (C) TuxSH 2015 +* This file is part of LibPkmGC. +* +* LibPkmGC is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* LibPkmGC is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with LibPkmGC. If not, see . +*/ + +#ifndef _LIBPKMGC_GC_RIBBON_DESCRIPTION_DATA_H +#define _LIBPKMGC_GC_RIBBON_DESCRIPTION_DATA_H + +#include + +namespace LibPkmGC { + +LIBPKMGC_FWD_DECL_GC_CLS(RibbonDescriptionsData) + +namespace GC { + +/* + This is just an array of description IDs : + u8 descriptions[11]; + Concerned ribbons: Marine, Land, Sky, Country, National, Earth, World, Unused 1,2,3,4 + + Please refer to Core/Detail/RibbonDescriptions.cpp +*/ + +class LIBPKMGC_DECL RibbonDescriptionsData : + public Base::DataStruct +{ +public: + RibbonDescriptionsData(const u8* inData = NULL); + virtual ~RibbonDescriptionsData(void); + virtual bool isXD(void) const = 0; + virtual void save(void); + + virtual RibbonDescriptionsData* clone(void) const = 0; + virtual RibbonDescriptionsData* create(void) const = 0; + + void swap(RibbonDescriptionsData& other); + + u8 descriptions[11]; + +protected: + virtual void deleteFields(void); + virtual void loadFields(void); +}; + +} +} + +#endif \ No newline at end of file diff --git a/LibPkmGC/include/LibPkmGC/GC/Common/StrategyMemoEntry.h b/LibPkmGC/include/LibPkmGC/GC/Common/StrategyMemoEntry.h index 58c501f..65d0af0 100644 --- a/LibPkmGC/include/LibPkmGC/GC/Common/StrategyMemoEntry.h +++ b/LibPkmGC/include/LibPkmGC/GC/Common/StrategyMemoEntry.h @@ -56,7 +56,6 @@ public: virtual bool isInfoPartial(void) const = 0; virtual void setInfoCompleteness(bool partial) = 0; - //PokemonSpeciesStatus status; // discarded in Pokémon XD, where full information is automatically obtained u16 flags; PokemonSpeciesIndex species; u16 firstSID, firstTID; diff --git a/LibPkmGC/include/LibPkmGC/GC/SaveEditing/SaveSlot.h b/LibPkmGC/include/LibPkmGC/GC/SaveEditing/SaveSlot.h index 5c901ea..0d8a392 100644 --- a/LibPkmGC/include/LibPkmGC/GC/SaveEditing/SaveSlot.h +++ b/LibPkmGC/include/LibPkmGC/GC/SaveEditing/SaveSlot.h @@ -76,6 +76,7 @@ public: DaycareData* daycare; StrategyMemoData* strategyMemo; BattleModeData* battleMode; + RibbonDescriptionsData* ribbonDescriptions; protected: virtual void deleteFields(void); diff --git a/LibPkmGC/include/LibPkmGC/XD/Common/Everything.h b/LibPkmGC/include/LibPkmGC/XD/Common/Everything.h index 1144dad..e9a587e 100644 --- a/LibPkmGC/include/LibPkmGC/XD/Common/Everything.h +++ b/LibPkmGC/include/LibPkmGC/XD/Common/Everything.h @@ -16,8 +16,8 @@ * along with LibPkmGC. If not, see . */ -#ifndef _LIBPKMGC_COLOSSEUM_COMMON_EVERYTHING_H -#define _LIBPKMGC_COLOSSEUM_COMMON_EVERYTHING_H +#ifndef _LIBPKMGC_XD_COMMON_EVERYTHING_H +#define _LIBPKMGC_XD_COMMON_EVERYTHING_H #include #include @@ -28,6 +28,8 @@ #include #include +#include + #include #endif \ No newline at end of file diff --git a/LibPkmGC/include/LibPkmGC/XD/Common/RibbonDescriptionsData.h b/LibPkmGC/include/LibPkmGC/XD/Common/RibbonDescriptionsData.h new file mode 100644 index 0000000..c09b52d --- /dev/null +++ b/LibPkmGC/include/LibPkmGC/XD/Common/RibbonDescriptionsData.h @@ -0,0 +1,46 @@ +/* +* Copyright (C) TuxSH 2015 +* This file is part of LibPkmGC. +* +* LibPkmGC is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* LibPkmGC is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with LibPkmGC. If not, see . +*/ + +#ifndef _LIBPKMGC_XD_RIBBON_DESCRIPTION_DATA_H +#define _LIBPKMGC_XD_RIBBON_DESCRIPTION_DATA_H + +#include + +namespace LibPkmGC { +namespace XD { + + +class LIBPKMGC_DECL RibbonDescriptionsData : + public GC::RibbonDescriptionsData +{ +public: + static const size_t size = 11; + ~RibbonDescriptionsData(void); + RibbonDescriptionsData(void); + RibbonDescriptionsData(const u8* inData); + + bool isXD(void) const; + RibbonDescriptionsData* clone(void) const; + RibbonDescriptionsData* create(void) const; + +}; + +} +} + +#endif \ No newline at end of file diff --git a/LibPkmGC/include/LibPkmGC/XD/SaveEditing/SaveSlot.h b/LibPkmGC/include/LibPkmGC/XD/SaveEditing/SaveSlot.h index 2ad06a3..bb28e21 100644 --- a/LibPkmGC/include/LibPkmGC/XD/SaveEditing/SaveSlot.h +++ b/LibPkmGC/include/LibPkmGC/XD/SaveEditing/SaveSlot.h @@ -52,7 +52,7 @@ namespace SaveEditing { - [6] Battle mode - [7] Shadow Pokémon data (in Colosseum, this is apparently a PID list; the full shadow data SEEMS to be included in the Pokémon's data) - [8] Flags (not handled here) - - [9] Special ribbons description (will be handled soon) + - [9] Ribbon descriptions - [15] map data / script state - [14] Purifier */ diff --git a/LibPkmGC/src/LibPkmGC/Colosseum/Common/BattleModeData.cpp b/LibPkmGC/src/LibPkmGC/Colosseum/Common/BattleModeData.cpp index ef2411f..57c311e 100644 --- a/LibPkmGC/src/LibPkmGC/Colosseum/Common/BattleModeData.cpp +++ b/LibPkmGC/src/LibPkmGC/Colosseum/Common/BattleModeData.cpp @@ -47,13 +47,11 @@ BattleModeData* BattleModeData::create(void) const } void BattleModeData::loadFields(void) { - LD_SUBSTRUCTURE_ARRAY(GroupBattleRule, rules, 6, 0xc16c); - //LD_FIELD_B(u8, groupBattleModeUsed, 0x360); + LD_SUBSTRUCTURE_ARRAY(GroupBattleRule, rules, 6, 0xc9dc); } void BattleModeData::save(void) { - SV_SUBSTRUCTURE_ARRAY(GroupBattleRule, rules, 6, 0xc16c); - //SV_FIELD_B(u8, groupBattleModeUsed, 0x360); + SV_SUBSTRUCTURE_ARRAY(GroupBattleRule, rules, 6, 0xc9dc); } } diff --git a/LibPkmGC/src/LibPkmGC/Colosseum/Common/RibbonDescriptionsData.cpp b/LibPkmGC/src/LibPkmGC/Colosseum/Common/RibbonDescriptionsData.cpp new file mode 100644 index 0000000..cbfe045 --- /dev/null +++ b/LibPkmGC/src/LibPkmGC/Colosseum/Common/RibbonDescriptionsData.cpp @@ -0,0 +1,49 @@ +/* +* Copyright (C) TuxSH 2015 +* This file is part of LibPkmGC. +* +* LibPkmGC is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* LibPkmGC is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with LibPkmGC. If not, see . +*/ + +#include + +namespace LibPkmGC { +namespace Colosseum { + +RibbonDescriptionsData::~RibbonDescriptionsData(void) { +} + +RibbonDescriptionsData::RibbonDescriptionsData(void) : GC::RibbonDescriptionsData() { + initWithEmptyData(); +} + +RibbonDescriptionsData::RibbonDescriptionsData(const u8* inData) : GC::RibbonDescriptionsData(inData) { + load(); +} + +bool RibbonDescriptionsData::isXD(void) const { + return false; +} + +RibbonDescriptionsData* RibbonDescriptionsData::clone(void) const { + return new RibbonDescriptionsData(*this); +} + +RibbonDescriptionsData* RibbonDescriptionsData::create(void) const { + return new RibbonDescriptionsData; +} + + +} +} diff --git a/LibPkmGC/src/LibPkmGC/Colosseum/SaveEditing/SaveSlot.cpp b/LibPkmGC/src/LibPkmGC/Colosseum/SaveEditing/SaveSlot.cpp index 29334fc..9f2185f 100644 --- a/LibPkmGC/src/LibPkmGC/Colosseum/SaveEditing/SaveSlot.cpp +++ b/LibPkmGC/src/LibPkmGC/Colosseum/SaveEditing/SaveSlot.cpp @@ -247,10 +247,10 @@ void SaveSlot::loadFields(void) { randomBytes = new u8[20]; LD_FIELD_E(u32, magic, 0, SaveMagic); LD_FIELD(s32, saveCount, 4); - size_t offset = 8; + size_t offset = 0; -#define LD_IMPLEMENTED_SUBSTRUCTURE(type, field) LD_SUBSTRUCTURE(type, field, offset); offset += type::size; +#define LD_IMPLEMENTED_SUBSTRUCTURE(type, field) LD_SUBSTRUCTURE(type, field, 8 + offset); offset += type::size; LD_IMPLEMENTED_SUBSTRUCTURE(GameConfigData, gameConfig); LD_IMPLEMENTED_SUBSTRUCTURE(PlayerData, player); @@ -258,8 +258,12 @@ void SaveSlot::loadFields(void) { LD_IMPLEMENTED_SUBSTRUCTURE(MailboxData, mailbox); LD_IMPLEMENTED_SUBSTRUCTURE(DaycareData, daycare); LD_IMPLEMENTED_SUBSTRUCTURE(StrategyMemoData, strategyMemo); - offset += 0x523c; + //offset += 0x523c; + offset = 0xe3e8; LD_IMPLEMENTED_SUBSTRUCTURE(BattleModeData, battleMode); + //offset += 0x1448; + offset = 0x1c45c; + LD_IMPLEMENTED_SUBSTRUCTURE(RibbonDescriptionsData, ribbonDescriptions); // unknown substructures following std::copy(data + 0x1dfd8, data + 0x1dfec, randomBytes); @@ -270,10 +274,10 @@ void SaveSlot::save(void) { SV_FIELD_E(u32, ColosseumMagic, 0, SaveMagic); SV_FIELD(u32, saveCount, 4); - size_t offset = 8; + size_t offset = 0; -#define SV_IMPLEMENTED_SUBSTRUCTURE(type, field) SV_SUBSTRUCTURE(type, field, offset); offset += type::size; +#define SV_IMPLEMENTED_SUBSTRUCTURE(type, field) SV_SUBSTRUCTURE(type, field, 8 + offset); offset += type::size; SV_IMPLEMENTED_SUBSTRUCTURE(GameConfigData, gameConfig); SV_IMPLEMENTED_SUBSTRUCTURE(PlayerData, player); @@ -281,8 +285,12 @@ void SaveSlot::save(void) { SV_IMPLEMENTED_SUBSTRUCTURE(MailboxData, mailbox); SV_IMPLEMENTED_SUBSTRUCTURE(DaycareData, daycare); SV_IMPLEMENTED_SUBSTRUCTURE(StrategyMemoData, strategyMemo); - offset += 0x523c; + //offset += 0x523c; + offset = 0xe3e8; SV_IMPLEMENTED_SUBSTRUCTURE(BattleModeData, battleMode); + //offset += 0x1448; + offset = 0x1c45c; + SV_IMPLEMENTED_SUBSTRUCTURE(RibbonDescriptionsData, ribbonDescriptions); // unknown substructures following diff --git a/LibPkmGC/src/LibPkmGC/Core/Detail/RibbonDescriptions.cpp b/LibPkmGC/src/LibPkmGC/Core/Detail/RibbonDescriptions.cpp new file mode 100644 index 0000000..f66c0d2 --- /dev/null +++ b/LibPkmGC/src/LibPkmGC/Core/Detail/RibbonDescriptions.cpp @@ -0,0 +1,440 @@ +/* +* Copyright (C) TuxSH 2015 +* This file is part of LibPkmGC. +* +* LibPkmGC is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* LibPkmGC is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with LibPkmGC. If not, see . +*/ + +#include + +namespace LibPkmGC { +namespace Localization { +namespace Detail { + +namespace RibbonDescriptions { +const char **names[7] = { NULL, japaneseNames, englishNames, germanNames, frenchNames, italianNames, spanishNames }; + +const char *englishNames[65] = { + "(None)", + "2003 REGIONAL TOURNEY\nChampion RIBBON", + "2003 NATIONAL TOURNEY\nChampion RIBBON", + "2003 GLOBAL CUP\nChampion RIBBON", + "2003 REGIONAL TOURNEY\nRunner-up RIBBON", + "2003 NATIONAL TOURNEY\nRunner-up RIBBON", + "2003 GLOBAL CUP\nRunner-up RIBBON", + "2003 REGIONAL TOURNEY\nSemifinalist RIBBON", + "2003 NATIONAL TOURNEY\nSemifinalist RIBBON", + "2003 GLOBAL CUP\nSemifinalist RIBBON", + "2004 REGIONAL TOURNEY\nChampion RIBBON", + "2004 NATIONAL TOURNEY\nChampion RIBBON", + "2004 GLOBAL CUP\nChampion RIBBON", + "2004 REGIONAL TOURNEY\nRunner-up RIBBON", + "2004 NATIONAL TOURNEY\nRunner-up RIBBON", + "2004 GLOBAL CUP\nRunner-up RIBBON", + "2004 REGIONAL TOURNEY\nSemifinalist RIBBON", + "2004 NATIONAL TOURNEY\nSemifinalist RIBBON", + "2004 GLOBAL CUP\nSemifinalist RIBBON", + "2005 REGIONAL TOURNEY\nChampion RIBBON", + "2005 NATIONAL TOURNEY\nChampion RIBBON", + "2005 GLOBAL CUP\nChampion RIBBON", + "2005 REGIONAL TOURNEY\nRunner-up RIBBON", + "2005 NATIONAL TOURNEY\nRunner-up RIBBON", + "2005 GLOBAL CUP\nRunner-up RIBBON", + "2005 REGIONAL TOURNEY\nSemifinalist RIBBON", + "2005 NATIONAL TOURNEY\nSemifinalist RIBBON", + "2005 GLOBAL CUP\nSemifinalist RIBBON", + "POKéMON BATTLE CUP\nChampion RIBBON", + "POKéMON BATTLE CUP\nRunner-up RIBBON", + "POKéMON BATTLE CUP\nSemifinalist RIBBON", + "POKéMON BATTLE CUP\nParticipation RIBBON", + "POKéMON LEAGUE\nChampion RIBBON", + "POKéMON LEAGUE\nRunner-up RIBBON", + "POKéMON LEAGUE\nSemifinalist RIBBON", + "POKéMON LEAGUE\nParticipation RIBBON", + "ADVANCE CUP\nChampion RIBBON", + "ADVANCE CUP\nRunner-up RIBBON", + "ADVANCE CUP\nSemifinalist RIBBON", + "ADVANCE CUP\nParticipation RIBBON", + "POKéMON Tournament\nParticipation RIBBON", + "POKéMON Event\nParticipation RIBBON", + "POKéMON Festival\nParticipation RIBBON", + "Difficulty-Clearing\nCommemorative RIBBON", + "RIBBON awarded for\nclearing all difficulties.", + "100-Straight Win\nCommemorative RIBBON", + "DARKNESS TOWER Clear\nCommemorative RIBBON", + "RED TOWER Clear\nCommemorative RIBBON", + "BLACKIRON TOWER Clear\nCommemorative RIBBON", + "FINAL TOWER Clear\nCommemorative RIBBON", + "Legend-Making\nCommemorative RIBBON", + "POKéMON CENTER TOKYO\nCommemorative RIBBON", + "POKéMON CENTER OSAKA\nCommemorative RIBBON", + "POKéMON CENTER NAGOYA\nCommemorative RIBBON", + "POKéMON CENTER NY\nCommemorative RIBBON", + "Summer Holidays RIBBON", + "Winter Holidays RIBBON", + "Spring Holidays RIBBON", + "Evergreen RIBBON", + "Special Holiday RIBBON", + "Hard Worker RIBBON", + "Lots of Friends RIBBON", + "Full of Energy RIBBON", + "A commemorative RIBBON\nfor a loved POKéMON.", + "RIBBON that shows\nlove for POKéMON." +}; + +const char *frenchNames[65] = { + "(Rien)", + "TOURNOI REGIONAL 2003 RUBAN MAITRE", + "TOURNOI NATIONAL 2003 RUBAN MAITRE", + "COUPE GLOBALE 2003 RUBAN MAITRE", + "TOURNOI REGIONAL 2003 RUBAN 2\xC3\xA8me place", + "TOURNOI NATIONAL 2003 RUBAN 2\xC3\xA8me place", + "COUPE GLOBALE 2003 RUBAN 2\xC3\xA8me place", + "TOURNOI REGIONAL 2003 RUBAN demi-finaliste", + "TOURNOI NATIONAL 2003 RUBAN demi-finaliste", + "COUPE GLOBALE 2003 RUBAN demi-finaliste", + "TOURNOI REGIONAL 2004 RUBAN MAITRE", + "TOURNOI NATIONAL 2004 RUBAN MAITRE", + "COUPE GLOBALE 2004 RUBAN MAITRE", + "TOURNOI REGIONAL 2004 RUBAN 2\xC3\xA8me place", + "TOURNOI NATIONAL 2004 RUBAN 2\xC3\xA8me place", + "COUPE GLOBALE 2004 RUBAN 2\xC3\xA8me place", + "TOURNOI REGIONAL 2004 RUBAN demi-finaliste", + "TOURNOI NATIONAL 2004 RUBAN demi-finaliste", + "COUPE GLOBALE 2004 RUBAN demi-finaliste", + "TOURNOI REGIONAL 2005 RUBAN MAITRE", + "TOURNOI NATIONAL 2005 RUBAN MAITRE", + "COUPE GLOBALE 2005 RUBAN MAITRE", + "TOURNOI REGIONAL 2005 RUBAN 2\xC3\xA8me place", + "TOURNOI NATIONAL 2005 RUBAN 2\xC3\xA8me place", + "COUPE GLOBALE 2005 RUBAN 2\xC3\xA8me place", + "TOURNOI REGIONAL 2005 RUBAN demi-finaliste", + "TOURNOI NATIONAL 2005 RUBAN demi-finaliste", + "COUPE GLOBALE 2005 RUBAN demi-finaliste", + "COUPE COMBAT POK\xC3\xA9MON RUBAN MAITRE", + "COUPE COMBAT POK\xC3\xA9MON RUBAN 2\xC3\xA8me place", + "COUPE COMBAT POK\xC3\xA9MON RUBAN demi-finaliste", + "COUPE COMBAT POK\xC3\xA9MON RUBAN de participation", + "LIGUE POK\xC3\xA9MON RUBAN MAITRE", + "LIGUE POK\xC3\xA9MON RUBAN 2\xC3\xA8me place", + "LIGUE POK\xC3\xA9MON RUBAN demi-finaliste", + "LIGUE POK\xC3\xA9MON RUBAN de participation", + "COUPE ADVANCE RUBAN MAITRE", + "COUPE ADVANCE RUBAN 2\xC3\xA8me place", + "COUPE ADVANCE RUBAN demi-finaliste", + "COUPE ADVANCE RUBAN de participation", + "Tournoi POK\xC3\xA9MON RUBAN de participation", + "Ev\xC3\xA8nement POK\xC3\xA9MON RUBAN de participation", + "Festival POK\xC3\xA9MON RUBAN de participation", + "RUBAN comm\xC3\xA9moratif pour avoir tout r\xC3\xA9ussi.", + "RUBAN pour le triomphe face aux difficult\xC3\xA9s.", + "RUBAN comm\xC3\xA9moratif pour 100 victoires \xC3\xA0 la suite.", + "RUBAN comm\xC3\xA9moratif pour Succ\xC3\xA8s TOUR OBSCURE.", + "RUBAN comm\xC3\xA9moratif pour Succ\xC3\xA8s TOUR ROUGE.", + "RUBAN comm\xC3\xA9moratif pour Succ\xC3\xA8s TOUR FER NOIR.", + "RUBAN comm\xC3\xA9moratif pour Succ\xC3\xA8s TOUR FINALE.", + "RUBAN comm\xC3\xA9moratif pour avoir contribu\xC3\xA9 \xC3\xA0 la l\xC3\xA9gende.", + "RUBAN comm\xC3\xA9moratif pour CENTRE POK\xC3\xA9MON TOKYO.", + "RUBAN comm\xC3\xA9moratif pour CENTRE POK\xC3\xA9MON OSAKA.", + "RUBAN comm\xC3\xA9moratif pour CENTRE POK\xC3\xA9MON NAGOYA.", + "RUBAN comm\xC3\xA9moratif pour CENTRE POK\xC3\xA9MON NY.", + "RUBAN vacances d'\xC3\xA9t\xC3\xA9.", + "RUBAN vacances d'hiver.", + "RUBAN vacances de printemps.", + "RUBAN feuilles persistantes.", + "RUBAN vacances sp\xC3\xA9""ciales.", + "RUBAN travailleur.", + "RUBAN amiti\xC3\xA9.", + "RUBAN \xC3\xA9nergie.", + "RUBAN souvenir pour un POK\xC3\xA9MON bien-aim\xC3\xA9.", + "RUBAN qui montre l'amour port\xC3\xA9 \xC3\xA0 un POK\xC3\xA9MON." +}; + +const char *germanNames[65] = { + "(Nichts)", + "REGIONALTURNIER 2003 BAND des CHAMPs", + "NATIONALTURNIER 2003 BAND des CHAMPs", + "WELTPOKAL 2003 BAND des CHAMPs", + "REGIONALTURNIER 2003 BAND f\xC3\xBCr Platzierungen", + "NATIONALTURNIER 2003 BAND f\xC3\xBCr Platzierungen", + "WELTPOKAL 2003 BAND f\xC3\xBCr Platzierungen", + "REGIONALTURNIER 2003 BAND f\xC3\xBCr Halbfinalisten", + "NATIONALTURNIER 2003 BAND f\xC3\xBCr Halbfinalisten", + "WELTPOKAL 2003 BAND f\xC3\xBCr Halbfinalisten", + "REGIONALTURNIER 2004 BAND des CHAMPs", + "NATIONALTURNIER 2004 BAND des CHAMPs", + "WELTPOKAL 2004 BAND des CHAMPs", + "REGIONALTURNIER 2004 BAND f\xC3\xBCr Platzierungen", + "NATIONALTURNIER 2004 BAND f\xC3\xBCr Platzierungen", + "WELTPOKAL 2004 BAND f\xC3\xBCr Platzierungen", + "REGIONALTURNIER 2004 BAND f\xC3\xBCr Halbfinalisten", + "NATIONALTURNIER 2004 BAND f\xC3\xBCr Halbfinalisten", + "WELTPOKAL 2004 BAND f\xC3\xBCr Halbfinalisten", + "REGIONALTURNIER 2005 BAND des CHAMPs", + "NATIONALTURNIER 2005 BAND des CHAMPs", + "WELTPOKAL 2005 BAND des CHAMPs", + "REGIONALTURNIER 2005 BAND f\xC3\xBCr Platzierungen", + "NATIONALTURNIER 2005 BAND f\xC3\xBCr Platzierungen", + "WELTPOKAL 2005 BAND f\xC3\xBCr Platzierungen", + "REGIONALTURNIER 2005 BAND f\xC3\xBCr Halbfinalisten", + "NATIONALTURNIER 2005 BAND f\xC3\xBCr Halbfinalisten", + "WELTPOKAL 2005 BAND f\xC3\xBCr Halbfinalisten", + "POK\xC3\xA9MON-KAMPF-POKAL BAND des CHAMPs", + "POK\xC3\xA9MON-KAMPF-POKAL BAND f\xC3\xBCr Platzierungen", + "POK\xC3\xA9MON-KAMPF-POKAL BAND f\xC3\xBCr Halbfinalisten", + "POK\xC3\xA9MON-KAMPF-POKAL Teilnehmer-BAND", + "POK\xC3\xA9MON LIGA BAND des CHAMPs", + "POK\xC3\xA9MON LIGA BAND f\xC3\xBCr Platzierungen", + "POK\xC3\xA9MON LIGA BAND f\xC3\xBCr Halbfinalisten", + "POK\xC3\xA9MON LIGA Teilnehmer-BAND", + "TALENTPOKAL BAND des CHAMPs", + "TALENTPOKAL Band f\xC3\xBCr Platzierungen", + "TALENTPOKAL BAND f\xC3\xBCr Halbfinalisten", + "TALENTPOKAL Teilnehmer-BAND", + "POK\xC3\xA9MON-Turnier Teilnehmer-BAND", + "POK\xC3\xA9MON-Wettkampf Teilnehmer-BAND", + "POK\xC3\xA9MON-Festival Teilnehmer-BAND", + "Schwierigkeits-Grad- Abschluss-Gedenk-BAND", + "BAND f\xC3\xBCr erf. Abschluss aller Schwierigk.-Grade.", + "100. Sieg in Folge Gedenk-BAND", + "APOKELIPSE-TURM fertig Gedenk-BAND", + "ROTER TURM fertig Gedenk-BAND", + "EISERNER TURM fertig Gedenk-BAND", + "FINAL-TURM-Abschluss Gedenk-BAND", + "Legend\xC3\xA4res Gedenk-BAND", + "POK\xC3\xA9MON-CENTER TOKIO Gedenk-BAND", + "POK\xC3\xA9MON-CENTER OSAKA Gedenk-BAND", + "POK\xC3\xA9MON-CENTER NAGOYA Gedenk-BAND", + "POK\xC3\xA9MON-CENTER N.Y. Gedenk-BAND", + "Sommerferien-BAND", + "Weihnachtsferien-BAND", + "Osterferien-BAND", + "Evergreen-BAND", + "Sonderurlaubs-BAND", + "Flei\xC3\x9F-BAND", + "Beliebtheits-BAND", + "Energie-BAND", + "Ein Gedenk-BAND f\xC3\xBCr ein beliebtes POK\xC3\xA9MON.", + "Ein Band f\xC3\xBCr POK\xC3\xA9MON-Freunde." +}; + +const char *italianNames[65] = { + "(Nessuno)", + "TORNEO REGIONALE 2003 FIOCCO CAMPIONE", + "TORNEO NAZIONALE 2003 FIOCCO CAMPIONE", + "TORNEO MONDIALE 2003 FIOCCO CAMPIONE", + "TORNEO REGIONALE 2003 FIOCCO finalista", + "TORNEO NAZIONALE 2003 FIOCCO finalista", + "TORNEO MONDIALE 2003 FIOCCO finalista", + "TORNEO REGIONALE 2003 FIOCCO semifinalista", + "TORNEO NAZIONALE 2003 FIOCCO semifinalista", + "TORNEO MONDIALE 2003 FIOCCO semifinalista", + "TORNEO REGIONALE 2004 FIOCCO CAMPIONE", + "TORNEO NAZIONALE 2004 FIOCCO CAMPIONE", + "TORNEO MONDIALE 2004 FIOCCO CAMPIONE", + "TORNEO REGIONALE 2004 FIOCCO finalista", + "TORNEO NAZIONALE 2004 FIOCCO finalista", + "TORNEO MONDIALE 2004 FIOCCO finalista", + "TORNEO REGIONALE 2004 FIOCCO semifinalista", + "TORNEO NAZIONALE 2004 FIOCCO semifinalista", + "TORNEO MONDIALE 2004 FIOCCO semifinalista", + "TORNEO REGIONALE 2005 FIOCCO CAMPIONE", + "TORNEO NAZIONALE 2005 FIOCCO CAMPIONE", + "TORNEO MONDIALE 2005 FIOCCO CAMPIONE", + "TORNEO REGIONALE 2005 FIOCCO finalista", + "TORNEO NAZIONALE 2005 FIOCCO finalista", + "TORNEO MONDIALE 2005 FIOCCO finalista", + "TORNEO REGIONALE 2005 FIOCCO semifinalista", + "TORNEO NAZIONALE 2005 FIOCCO semifinalista", + "TORNEO MONDIALE 2005 FIOCCO semifinalista", + "COPPA LOTTE POK\xC3\xA9MON FIOCCO CAMPIONE", + "COPPA LOTTE POK\xC3\xA9MON FIOCCO finalista", + "COPPA LOTTE POK\xC3\xA9MON FIOCCO semifinalista", + "COPPA LOTTE POK\xC3\xA9MON FIOCCO partecipazione", + "LEGA POK\xC3\xA9MON FIOCCO CAMPIONE", + "LEGA POK\xC3\xA9MON FIOCCO finalista", + "LEGA POK\xC3\xA9MON FIOCCO semifinalista", + "LEGA POK\xC3\xA9MON FIOCCO partecipazione", + "COPPA ADVANCE FIOCCO CAMPIONE", + "COPPA ADVANCE FIOCCO finalista", + "COPPA ADVANCE FIOCCO semifinalista", + "COPPA ADVANCE FIOCCO partecipazione", + "Torneo POK\xC3\xA9MON FIOCCO partecipazione", + "Evento POK\xC3\xA9MON FIOCCO partecipazione", + "Festival POK\xC3\xA9MON FIOCCO partecipazione", + "Tutto facile FIOCCO celebrativo", + "FIOCCO per aver superato tutte le sfide.", + "100 vittorie di seguito FIOCCO celebrativo", + "Completata TORRE SCURA FIOCCO celebrativo", + "Completata TORRE ROSSA FIOCCO celebrativo", + "Completata TORRE FERRO FIOCCO celebrativo", + "Completata TORRE FINALE FIOCCO celebrativo", + "Leggenda FIOCCO celebrativo", + "POK\xC3\xA9MON CENTER TOKYO FIOCCO celebrativo", + "POK\xC3\xA9MON CENTER OSAKA FIOCCO celebrativo", + "POK\xC3\xA9MON CENTER NAGOYA FIOCCO celebrativo", + "POK\xC3\xA9MON CENTER NY FIOCCO celebrativo", + "FIOCCO vacanze estive", + "FIOCCO ferie invernali", + "FIOCCO ferie primaverili", + "FIOCCO sempreverde", + "FIOCCO vacanze speciali", + "FIOCCO lavoro duro", + "FIOCCO amicizia", + "FIOCCO energia", + "FIOCCO celebrativo per un caro POK\xC3\xA9MON.", + "FIOCCO che dimostra amore per i POK\xC3\xA9MON." +}; + +const char *spanishNames[65] = { + "(Ninguno)", + "TORNEO REGIONAL 2003 CINTA CAMPE\xC3\x93N", + "TORNEO NACIONAL 2003 CINTA CAMPE\xC3\x93N", + "COPA DEL MUNDO 2003 CINTA CAMPE\xC3\x93N", + "TORNEO REGIONAL 2003 CINTA subcampe\xC3\xB3n", + "TORNEO NACIONAL 2003 CINTA subcampe\xC3\xB3n", + "COPA DEL MUNDO 2003 CINTA subcampe\xC3\xB3n", + "TORNEO REGIONAL 2003 CINTA semifinalista", + "TORNEO NACIONAL 2003 CINTA semifinalista", + "COPA DEL MUNDO 2003 CINTA semifinalista", + "TORNEO REGIONAL 2004 CINTA CAMPE\xC3\x93N", + "TORNEO NACIONAL 2004 CINTA CAMPE\xC3\x93N", + "COPA DEL MUNDO 2004 CINTA CAMPE\xC3\x93N", + "TORNEO REGIONAL 2004 CINTA subcampe\xC3\xB3n", + "TORNEO NACIONAL 2004 CINTA subcampe\xC3\xB3n", + "COPA DEL MUNDO 2004 CINTA subcampe\xC3\xB3n", + "TORNEO REGIONAL 2004 CINTA semifinalista", + "TORNEO NACIONAL 2004 CINTA semifinalista", + "COPA DEL MUNDO 2004 CINTA semifinalista", + "TORNEO REGIONAL 2005 CINTA CAMPE\xC3\x93N", + "TORNEO NACIONAL 2005 CINTA CAMPE\xC3\x93N", + "COPA DEL MUNDO 2005 CINTA CAMPE\xC3\x93N", + "TORNEO REGIONAL 2005 CINTA subcampe\xC3\xB3n", + "TORNEO NACIONAL 2005 CINTA subcampe\xC3\xB3n", + "COPA DEL MUNDO 2005 CINTA subcampe\xC3\xB3n", + "TORNEO REGIONAL 2005 CINTA semifinalista", + "TORNEO NACIONAL 2005 CINTA semifinalista", + "COPA DEL MUNDO 2005 CINTA semifinalista", + "COPA BATALLA POK\xC3\xA9MON CINTA CAMPE\xC3\x93N", + "COPA BATALLA POK\xC3\xA9MON CINTA subcampe\xC3\xB3n", + "COPA BATALLA POK\xC3\xA9MON CINTA semifinalista", + "COPA BATALLA POK\xC3\xA9MON CINTA de participaci\xC3\xB3n", + "LIGA POK\xC3\xA9MON CINTA CAMPE\xC3\x93N", + "LIGA POK\xC3\xA9MON CINTA subcampe\xC3\xB3n", + "LIGA POK\xC3\xA9MON CINTA semifinalista", + "LIGA POK\xC3\xA9MON CINTA de participaci\xC3\xB3n", + "COPA AVANZADA CINTA CAMPE\xC3\x93N", + "COPA AVANZADA CINTA subcampe\xC3\xB3n", + "COPA AVANZADA CINTA semifinalista", + "COPA AVANZADA CINTA de participaci\xC3\xB3n", + "Certamen POK\xC3\xA9MON CINTA de participaci\xC3\xB3n", + "Encuentro POK\xC3\xA9MON CINTA de participaci\xC3\xB3n", + "Festival POK\xC3\xA9MON CINTA de participaci\xC3\xB3n", + "Superaci\xC3\xB3n obst\xC3\xA1""culos CINTA conmemorativa", + "CINTA ganada por superar los desaf\xC3\xADos.", + "100 victorias seguidas CINTA conmemorativa", + "TORRE OSCURA superada CINTA conmemorativa", + "TORRE ROJA superada CINTA conmemorativa", + "TORRE F\xC3\x89RREA superada CINTA conmemorativa", + "TORRE FINAL superada CINTA conmemorativa", + "Legendario CINTA conmemorativa", + "CENTRO POK\xC3\xA9MON TOKIO CINTA conmemorativa", + "CENTRO POK\xC3\xA9MON OSAKA CINTA conmemorativa", + "CENTRO POK\xC3\xA9MON NAGOYA CINTA conmemorativa", + "CENTRO POK\xC3\xA9MON NY CINTA conmemorativa", + "CINTA vacac. verano", + "CINTA vacac. invierno", + "CINTA vacac. primavera", + "CINTA hoja perenne", + "CINTA vacac. especiales", + "CINTA esfuerzo", + "CINTA amistad", + "CINTA energ\xC3\xAD""a", + "CINTA conmemorativa para un POK\xC3\xA9MON querido.", + "CINTA s\xC3\xADmbolo de amor hacia los POK\xC3\xA9MON." +}; + +const char *japaneseNames[65] = { + "(\xe4\xbd\x95\xe3\x82\x82)", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x93\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\xa1\xe3\x81\xbb\xe3\x81\x86\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x93\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\x9c\xe3\x82\x93\xe3\x81\x93\xe3\x81\x8f\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x93\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x83\xaf\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x89\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x93\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\xa1\xe3\x81\xbb\xe3\x81\x86\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x93\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\x9c\xe3\x82\x93\xe3\x81\x93\xe3\x81\x8f\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x93\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x83\xaf\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x89\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x93\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\xa1\xe3\x81\xbb\xe3\x81\x86\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x93\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\x9c\xe3\x82\x93\xe3\x81\x93\xe3\x81\x8f\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x93\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x83\xaf\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x89\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x94\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\xa1\xe3\x81\xbb\xe3\x81\x86\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x94\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\x9c\xe3\x82\x93\xe3\x81\x93\xe3\x81\x8f\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x94\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x83\xaf\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x89\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x94\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\xa1\xe3\x81\xbb\xe3\x81\x86\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x94\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\x9c\xe3\x82\x93\xe3\x81\x93\xe3\x81\x8f\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x94\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x83\xaf\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x89\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x94\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\xa1\xe3\x81\xbb\xe3\x81\x86\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x94\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\x9c\xe3\x82\x93\xe3\x81\x93\xe3\x81\x8f\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x94\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x83\xaf\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x89\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x95\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\xa1\xe3\x81\xbb\xe3\x81\x86\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x95\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\x9c\xe3\x82\x93\xe3\x81\x93\xe3\x81\x8f\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x95\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x83\xaf\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x89\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x95\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\xa1\xe3\x81\xbb\xe3\x81\x86\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x95\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\x9c\xe3\x82\x93\xe3\x81\x93\xe3\x81\x8f\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x95\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x83\xaf\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x89\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x95\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\xa1\xe3\x81\xbb\xe3\x81\x86\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x95\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x81\x9c\xe3\x82\x93\xe3\x81\x93\xe3\x81\x8f\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x92\xef\xbc\x90\xef\xbc\x90\xef\xbc\x95\xe3\x81\xad\xe3\x82\x93\xe3\x80\x80\xe3\x83\xaf\xe3\x83\xbc\xe3\x83\xab\xe3\x83\x89\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x80\x80\xe3\x83\x90\xe3\x83\x88\xe3\x83\xab\xe3\x80\x80\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x80\x80\xe3\x83\x90\xe3\x83\x88\xe3\x83\xab\xe3\x80\x80\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x80\x80\xe3\x83\x90\xe3\x83\x88\xe3\x83\xab\xe3\x80\x80\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x80\x80\xe3\x83\x90\xe3\x83\x88\xe3\x83\xab\xe3\x80\x80\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x81\x95\xe3\x82\x93\xe3\x81\x8b\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x80\x80\xe3\x83\xaa\xe3\x83\xbc\xe3\x82\xb0 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x80\x80\xe3\x83\xaa\xe3\x83\xbc\xe3\x82\xb0 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x80\x80\xe3\x83\xaa\xe3\x83\xbc\xe3\x82\xb0 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x80\x80\xe3\x83\xaa\xe3\x83\xbc\xe3\x82\xb0 \xe3\x81\x95\xe3\x82\x93\xe3\x81\x8b\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x82\xa2\xe3\x83\x89\xe3\x83\x90\xe3\x83\xb3\xe3\x82\xb9\xe3\x80\x80\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x82\xa2\xe3\x83\x89\xe3\x83\x90\xe3\x83\xb3\xe3\x82\xb9\xe3\x80\x80\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x81\x98\xe3\x82\x85\xe3\x82\x93\xe3\x82\x86\xe3\x81\x86\xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x82\xa2\xe3\x83\x89\xe3\x83\x90\xe3\x83\xb3\xe3\x82\xb9\xe3\x80\x80\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x83\x99\xe3\x82\xb9\xe3\x83\x88\xef\xbc\x94\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x82\xa2\xe3\x83\x89\xe3\x83\x90\xe3\x83\xb3\xe3\x82\xb9\xe3\x80\x80\xe3\x82\xab\xe3\x83\x83\xe3\x83\x97 \xe3\x81\x95\xe3\x82\x93\xe3\x81\x8b\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x81\xae\xe3\x80\x80\xe3\x81\x9f\xe3\x81\x84\xe3\x81\x8b\xe3\x81\x84\xe3\x81\xab \xe3\x81\x95\xe3\x82\x93\xe3\x81\x8b\xe3\x81\x97\xe3\x81\x9f\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x81\xae\xe3\x80\x80\xe3\x82\xa4\xe3\x83\x99\xe3\x83\xb3\xe3\x83\x88\xe3\x81\xab \xe3\x81\x95\xe3\x82\x93\xe3\x81\x8b\xe3\x81\x97\xe3\x81\x9f\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x81\xae\xe3\x80\x80\xe3\x81\x8a\xe3\x81\xbe\xe3\x81\xa4\xe3\x82\x8a\xe3\x81\xab \xe3\x81\x95\xe3\x82\x93\xe3\x81\x8b\xe3\x81\x97\xe3\x81\x9f\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\x93\xe3\x82\x93\xe3\x81\xaa\xe3\x82\x93\xe3\x81\xab\xe3\x80\x80\xe3\x81\x86\xe3\x81\xa1\xe3\x81\x8b\xe3\x81\xa3\xe3\x81\x9f \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\x99\xe3\x81\xb9\xe3\x81\xa6\xe3\x81\xae\xe3\x80\x80\xe3\x81\x93\xe3\x82\x93\xe3\x81\xaa\xe3\x82\x93\xe3\x82\x92 \xe3\x81\xae\xe3\x82\x8a\xe3\x81\x93\xe3\x81\x88\xe3\x81\x9f\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xef\xbc\x91\xef\xbc\x90\xef\xbc\x90\xe3\x81\xab\xe3\x82\x93\xe3\x81\xac\xe3\x81\x8d\xe3\x80\x80\xe3\x81\x9f\xe3\x81\xa3\xe3\x81\x9b\xe3\x81\x84 \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\x8f\xe3\x82\x89\xe3\x82\x84\xe3\x81\xbf\xe3\x81\xae\xe3\x81\xa8\xe3\x81\x86\xe3\x80\x80\xe3\x82\xaf\xe3\x83\xaa\xe3\x82\xa2 \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\x8f\xe3\x82\x8c\xe3\x81\xaa\xe3\x81\x84\xe3\x81\xae\xe3\x81\xa8\xe3\x81\x86\xe3\x80\x80\xe3\x82\xaf\xe3\x83\xaa\xe3\x82\xa2 \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\x8f\xe3\x82\x8d\xe3\x81\x8c\xe3\x81\xad\xe3\x81\xae\xe3\x81\xa8\xe3\x81\x86\xe3\x80\x80\xe3\x82\xaf\xe3\x83\xaa\xe3\x82\xa2 \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\x95\xe3\x81\x84\xe3\x81\x94\xe3\x81\xae\xe3\x81\xa8\xe3\x81\x86\xe3\x80\x80\xe3\x82\xaf\xe3\x83\xaa\xe3\x82\xa2 \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\xa7\xe3\x82\x93\xe3\x81\x9b\xe3\x81\xa4\xe3\x82\x92\xe3\x80\x80\xe3\x81\xa4\xe3\x81\x8f\xe3\x81\xa3\xe3\x81\x9f \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x82\xbb\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x88\xe3\x82\xa6\xe3\x82\xad\xe3\x83\xa7\xe3\x83\xbc \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x82\xbb\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x82\xaa\xe3\x83\xbc\xe3\x82\xb5\xe3\x82\xab \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x82\xbb\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8a\xe3\x82\xb4\xe3\x83\xa4 \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x82\xbb\xe3\x83\xb3\xe3\x82\xbf\xe3\x83\xbc\xe3\x83\x8b\xe3\x83\xa5\xe3\x83\xbc\xe3\x83\xa8\xe3\x83\xbc\xe3\x82\xaf \xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\xaa\xe3\x81\xa4\xe3\x82\x84\xe3\x81\x99\xe3\x81\xbf\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\xb5\xe3\x82\x86\xe3\x82\x84\xe3\x81\x99\xe3\x81\xbf\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\xaf\xe3\x82\x8b\xe3\x82\x84\xe3\x81\x99\xe3\x81\xbf\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x82\xaf\xe3\x83\xaa\xe3\x82\xb9\xe3\x83\x9e\xe3\x82\xb9\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x81\xb3\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\x8c\xe3\x82\x93\xe3\x81\xb0\xe3\x81\xa3\xe3\x81\x9f\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x81\xae\xe3\x80\x80\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\xa8\xe3\x82\x82\xe3\x81\xa0\xe3\x81\xa1\xe3\x80\x80\xe3\x81\x84\xe3\x81\xa3\xe3\x81\xb1\xe3\x81\x84\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\x92\xe3\x82\x93\xe3\x81\x8d\xe3\x80\x80\xe3\x81\x84\xe3\x81\xa3\xe3\x81\xb1\xe3\x81\x84\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x81\xa0\xe3\x81\x84\xe3\x81\x99\xe3\x81\x8d\xe3\x81\xaa\xe3\x80\x80\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x81\xab \xe3\x81\xa4\xe3\x81\x91\xe3\x81\xa6\xe3\x81\x82\xe3\x81\x92\xe3\x82\x8b\xe3\x80\x80\xe3\x81\x8d\xe3\x81\xad\xe3\x82\x93\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3", + "\xe3\x83\x9d\xe3\x82\xb1\xe3\x83\xa2\xe3\x83\xb3\xe3\x81\x8c\xe3\x80\x80\xe3\x81\xa0\xe3\x81\x84\xe3\x81\x99\xe3\x81\x8d\xe3\x81\xaa\xe3\x80\x80\xe3\x81\x93\xe3\x81\xa8\xe3\x82\x92 \xe3\x81\x97\xe3\x82\x87\xe3\x81\x86\xe3\x82\x81\xe3\x81\x84\xe3\x81\x99\xe3\x82\x8b\xe3\x80\x80\xe3\x83\xaa\xe3\x83\x9c\xe3\x83\xb3" +}; + + +} +} +} +} \ No newline at end of file diff --git a/LibPkmGC/src/LibPkmGC/Core/Localization.cpp b/LibPkmGC/src/LibPkmGC/Core/Localization.cpp index d435dd7..2f49427 100644 --- a/LibPkmGC/src/LibPkmGC/Core/Localization.cpp +++ b/LibPkmGC/src/LibPkmGC/Core/Localization.cpp @@ -543,6 +543,11 @@ const char* getItemName(LanguageIndex language, ItemIndex index, bool isXD) { return 0; } +const char* getRibbonDescription(LanguageIndex language, size_t index) { + using namespace Detail::RibbonDescriptions; + LIBPKMGC_GET_LOCALIZED_NAME(language, index, 65); +} + } } diff --git a/LibPkmGC/src/LibPkmGC/GC/Common/RibbonDescriptionsData.cpp b/LibPkmGC/src/LibPkmGC/GC/Common/RibbonDescriptionsData.cpp new file mode 100644 index 0000000..50790b2 --- /dev/null +++ b/LibPkmGC/src/LibPkmGC/GC/Common/RibbonDescriptionsData.cpp @@ -0,0 +1,49 @@ +/* +* Copyright (C) TuxSH 2015 +* This file is part of LibPkmGC. +* +* LibPkmGC is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* LibPkmGC is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with LibPkmGC. If not, see . +*/ + +#include + +namespace LibPkmGC { +namespace GC { + +RibbonDescriptionsData::RibbonDescriptionsData(const u8* inData) : Base::DataStruct(0xb, inData) { +} + +void RibbonDescriptionsData::deleteFields(void) { +} + + +RibbonDescriptionsData::~RibbonDescriptionsData(void) { + RibbonDescriptionsData::deleteFields(); +} + +void RibbonDescriptionsData::swap(RibbonDescriptionsData& other) { + Base::DataStruct::swap(other); + SW_ARRAY(descriptions, 11); +} + +void RibbonDescriptionsData::loadFields(void) { + LD_ARRAY_MAX(u8, descriptions, 11, 0, 65); +} + +void RibbonDescriptionsData::save(void) { + SV_ARRAY_MAX(u8, descriptions, 11, 0, 65); +} + +} +} \ No newline at end of file diff --git a/LibPkmGC/src/LibPkmGC/GC/Common/StrategyMemoEntry.cpp b/LibPkmGC/src/LibPkmGC/GC/Common/StrategyMemoEntry.cpp index 4b02d68..d3cadbe 100644 --- a/LibPkmGC/src/LibPkmGC/GC/Common/StrategyMemoEntry.cpp +++ b/LibPkmGC/src/LibPkmGC/GC/Common/StrategyMemoEntry.cpp @@ -24,7 +24,8 @@ namespace GC { StrategyMemoEntry::StrategyMemoEntry(const u8* inData) : Base::DataStruct(0xc, inData) { } -void StrategyMemoEntry::deleteFields(void) {} +void StrategyMemoEntry::deleteFields(void) { +} StrategyMemoEntry::~StrategyMemoEntry(void) { diff --git a/LibPkmGC/src/LibPkmGC/GC/SaveEditing/SaveSlot.cpp b/LibPkmGC/src/LibPkmGC/GC/SaveEditing/SaveSlot.cpp index 90b6c4f..57e72ed 100644 --- a/LibPkmGC/src/LibPkmGC/GC/SaveEditing/SaveSlot.cpp +++ b/LibPkmGC/src/LibPkmGC/GC/SaveEditing/SaveSlot.cpp @@ -34,6 +34,7 @@ void SaveSlot::deleteFields(void) { delete daycare; delete strategyMemo; delete battleMode; + delete ribbonDescriptions; } SaveSlot::~SaveSlot(void) { @@ -50,9 +51,9 @@ SaveSlot::SaveSlot(const SaveSlot& other) : Base::DataStruct(other), magic(other CL(mailbox); CL(daycare); CL(strategyMemo); - CL(battleMode); + CL(ribbonDescriptions); } @@ -69,6 +70,8 @@ void SaveSlot::swap(SaveSlot& other) { SW(strategyMemo); SW(battleMode); + SW(ribbonDescriptions); + SW(randomBytes); } @@ -90,6 +93,8 @@ SaveSlot& SaveSlot::operator=(SaveSlot const& other) { CL(daycare); CL(strategyMemo); CL(battleMode); + + CL(ribbonDescriptions); } return *this; } diff --git a/LibPkmGC/src/LibPkmGC/XD/Common/RibbonDescriptionsData.cpp b/LibPkmGC/src/LibPkmGC/XD/Common/RibbonDescriptionsData.cpp new file mode 100644 index 0000000..da6e898 --- /dev/null +++ b/LibPkmGC/src/LibPkmGC/XD/Common/RibbonDescriptionsData.cpp @@ -0,0 +1,49 @@ +/* +* Copyright (C) TuxSH 2015 +* This file is part of LibPkmGC. +* +* LibPkmGC is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* LibPkmGC is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with LibPkmGC. If not, see . +*/ + +#include + +namespace LibPkmGC { +namespace XD { + +RibbonDescriptionsData::~RibbonDescriptionsData(void) { +} + +RibbonDescriptionsData::RibbonDescriptionsData(void) : GC::RibbonDescriptionsData() { + initWithEmptyData(); +} + +RibbonDescriptionsData::RibbonDescriptionsData(const u8* inData) : GC::RibbonDescriptionsData(inData) { + load(); +} + +bool RibbonDescriptionsData::isXD(void) const { + return true; +} + +RibbonDescriptionsData* RibbonDescriptionsData::clone(void) const { + return new RibbonDescriptionsData(*this); +} + +RibbonDescriptionsData* RibbonDescriptionsData::create(void) const { + return new RibbonDescriptionsData; +} + + +} +} diff --git a/LibPkmGC/src/LibPkmGC/XD/SaveEditing/SaveSlot.cpp b/LibPkmGC/src/LibPkmGC/XD/SaveEditing/SaveSlot.cpp index d49289b..abd7dfa 100644 --- a/LibPkmGC/src/LibPkmGC/XD/SaveEditing/SaveSlot.cpp +++ b/LibPkmGC/src/LibPkmGC/XD/SaveEditing/SaveSlot.cpp @@ -225,9 +225,7 @@ void SaveSlot::loadFields(void) { _other_corruption_flags = substructureSizes[0] != 0x88; for (size_t i = 0; i < 16; ++i) { - s8 subscript = substructureOrder[i]; // substructure order if unshuffled - - if ((subscript != -1) && ((subscript <= 6) || (subscript == 15))) { + if (i <= 6 || i == 9 || i == 14) { unhandledSubstructures[i] = NULL; continue; } @@ -245,6 +243,7 @@ void SaveSlot::loadFields(void) { LD_IMPLEMENTED_SUBSTRUCTURE(DaycareData, daycare, 4); LD_IMPLEMENTED_SUBSTRUCTURE(StrategyMemoData, strategyMemo, 5); LD_IMPLEMENTED_SUBSTRUCTURE(BattleModeData, battleMode, 6); + LD_IMPLEMENTED_SUBSTRUCTURE(RibbonDescriptionsData, ribbonDescriptions, 9); LD_IMPLEMENTED_SUBSTRUCTURE(PurifierData, purifier, 14); { // flags @@ -350,6 +349,7 @@ void SaveSlot::save(void) { SV_IMPLEMENTED_SUBSTRUCTURE(DaycareData, daycare, 4); SV_IMPLEMENTED_SUBSTRUCTURE(StrategyMemoData, strategyMemo, 5); SV_IMPLEMENTED_SUBSTRUCTURE(BattleModeData, battleMode, 6); + SV_IMPLEMENTED_SUBSTRUCTURE(RibbonDescriptionsData, ribbonDescriptions, 9); SV_IMPLEMENTED_SUBSTRUCTURE(PurifierData, purifier, 14); @@ -415,7 +415,6 @@ void SaveSlot::saveEncrypted(u8* outBuf) { void SaveSlot::_deleteFields_extension(void) { for (size_t i = 0; i < 16; ++i) delete unhandledSubstructures[i]; delete purifier; - //delete groupBattleRules; } }