diff --git a/include/constants/heap.h b/include/constants/heap.h index ff534f688f..31f51fc894 100644 --- a/include/constants/heap.h +++ b/include/constants/heap.h @@ -6,8 +6,8 @@ enum HeapId { HEAP_ID_SAVE, HEAP_ID_DEBUG, HEAP_ID_APPLICATION, - - HEAP_ID_BATTLE = 5, + HEAP_ID_FIELD, + HEAP_ID_BATTLE, HEAP_ID_POKETCH_MAIN = 7, HEAP_ID_POKETCH_APP, diff --git a/include/constants/message_banks.h b/include/constants/message_banks.h index a6d46be44a..259d2be910 100644 --- a/include/constants/message_banks.h +++ b/include/constants/message_banks.h @@ -2,7 +2,91 @@ #define POKEPLATINUM_CONSTANTS_MESSAGE_BANKS_H enum ArchiveMessageBank { + MESSAGE_BANK_BALL_SEAL_NAMES = 12, + MESSAGE_BANK_BALL_SEAL_NAMES_PLURAL, + + MESSAGE_BANK_FRONTIER_TRAINER_NAMES = 21, + + MESSAGE_BANK_NATURE_NAMES = 202, + + MESSAGE_BANK_CONTEST_TEXT = 204, + + MESSAGE_BANK_CONTEST_JUDGE_NAMES = 207, + + MESSAGE_BANK_COMMON_STRINGS = 213, + + MESSAGE_BANK_STATUS_CONDITION_NAMES = 219, + + MESSAGE_BANK_COMMON_STRINGS_2 = 361, + + MESSAGE_BANK_FURNITURE_NAMES = 371, + + MESSAGE_BANK_GYM_NAMES = 378, + + MESSAGE_BANK_CONTEST_ACCESSORY_NAMES = 386, + MESSAGE_BANK_CONTEST_ACCESSORY_NAMES_WITH_ARTICLES, + MESSAGE_BANK_CONTEST_BACKDROP_NAMES, + + MESSAGE_BANK_ITEM_NAMES = 392, + MESSAGE_BANK_ITEM_NAMES_WITH_ARTICLES, + MESSAGE_BANK_ITEM_NAMES_PLURAL, + + MESSAGE_BANK_BAG_POCKET_NAMES_WITH_ICONS = 396, + MESSAGE_BANK_SPECIES_NAMES = 412, + MESSAGE_BANK_SPECIES_NAMES_WITH_ARTICLES, + MESSAGE_BANK_MONTH_NAMES, + + MESSAGE_BANK_LOCATION_NAMES = 433, + MESSAGE_BANK_MYSTERY_GIFT_EVENT_NAMES, + MESSAGE_BANK_SPECIAL_MET_LOCATION_NAMES, + + MESSAGE_BANK_POKETCH_APP_NAMES = 457, + + MESSAGE_BANK_POFFIN_NAMES = 465, + + MESSAGE_BANK_RIBBON_NAMES = 535, + + MESSAGE_BANK_POKEMON_STAT_NAMES = 551, + + MESSAGE_BANK_COUNTERPART_NAMES = 553, + + MESSAGE_BANK_FLAVOR_NAMES = 606, + + MESSAGE_BANK_TIMES_OF_DAY = 608, + + MESSAGE_BANK_ABILITY_NAMES = 610, + + MESSAGE_BANK_NPC_TRAINER_NAMES = 618, + MESSAGE_BANK_TRAINER_CLASS_NAMES, + MESSAGE_BANK_TRAINER_CLASS_NAMES_WITH_ARTICLES, + + MESSAGE_BANK_POKEMON_TYPE_NAMES = 624, + + MESSAGE_BANK_UNDERGROUND_GOODS = 626, + MESSAGE_BANK_UNDERGROUND_GOODS_WITH_ARTICLES, + MESSAGE_BANK_UNDERGROUND_ITEM_NAMES, + MESSAGE_BANK_UNDERGROUND_ITEM_NAMES_WITH_ARTICLES, + MESSAGE_BANK_UNDERGROUND_TRAP_NAMES, + MESSAGE_BANK_UNDERGROUND_TRAP_NAMES_WITH_ARTICLES, + MESSAGE_BANK_UNDERGROUND_ANSWERS, + MESSAGE_BANK_UNDERGROUND_QUESTIONS, + + MESSAGE_BANK_MOVE_NAMES = 647, + + MESSAGE_BANK_PLAZA_EVENT_NAMES = 649, + + MESSAGE_BANK_PLAZA_MINIGAME_NAMES = 651, + MESSAGE_BANK_PLAZA_ITEM_NAMES, + + MESSAGE_BANK_GREETINGS_EN = 663, + MESSAGE_BANK_GREETINGS_FR, + MESSAGE_BANK_GREETINGS_DE, + MESSAGE_BANK_GREETINGS_IT, + MESSAGE_BANK_GREETINGS_JP, + MESSAGE_BANK_GREETINGS_ES, + + MESSAGE_BANK_COUNTRY_NAMES = 694, }; -#endif // POKEPLATINUM_CONSTANTS_MESSAGE_BANKS_H \ No newline at end of file +#endif // POKEPLATINUM_CONSTANTS_MESSAGE_BANKS_H diff --git a/include/string_template.h b/include/string_template.h index 645c37f272..1a186fff4d 100644 --- a/include/string_template.h +++ b/include/string_template.h @@ -1,91 +1,116 @@ #ifndef POKEPLATINUM_STRING_TEMPLATE_H #define POKEPLATINUM_STRING_TEMPLATE_H +#include "consts/generated/c/abilities.h" +#include "consts/generated/c/gender.h" +#include "consts/generated/c/moves.h" + +#include "pokemon.h" +#include "savedata.h" #include "strbuf.h" #include "trainer_info.h" -#include "pokemon.h" + #include "struct_decls/struct_020797DC_decl.h" #include "struct_defs/trainer_data.h" -#include "savedata.h" #include "enums.h" -typedef struct StringTemplate StringTemplate; +#define STRING_TEMPLATE_DEFAULT_MAX_ARGS 8 +#define STRING_TEMPLATE_DEFAULT_MAX_LENGTH 32 -StringTemplate * StringTemplate_Default(u32 param0); -StringTemplate * StringTemplate_New(u32 param0, u32 param1, u32 param2); -void StringTemplate_Free(StringTemplate * param0); -void StringTemplate_SetStrbuf(StringTemplate * param0, u32 param1, const Strbuf *param2, u32 param3, BOOL param4, u32 param5); -void StringTemplate_SetPlayerName(StringTemplate * param0, u32 param1, const TrainerInfo * param2); -void StringTemplate_SetRivalName(StringTemplate * param0, u32 param1, const SaveData * param2); -void StringTemplate_SetCounterpartName(StringTemplate * param0, u32 param1, const SaveData * param2); -void StringTemplate_SetSpeciesName(StringTemplate * param0, u32 param1, BoxPokemon * param2); -void StringTemplate_SetSpeciesNameWithArticle(StringTemplate * param0, u32 param1, BoxPokemon * param2); -void StringTemplate_SetSpeciesNameWithArticleByID(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetNickname(StringTemplate * param0, u32 param1, BoxPokemon * param2); -void StringTemplate_SetOTName(StringTemplate * param0, u32 param1, BoxPokemon * param2); -void StringTemplate_SetNumber(StringTemplate * param0, u32 param1, s32 param2, u32 param3, int param4, int param5); -void StringTemplate_SetMoveName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetRibbonName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetAbilityName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetNatureName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetItemName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetItemNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetItemNamePlural(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetBagPocketName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetPokemonTypeName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetPokemonStatName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetStatusConditionName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetFlavorName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetLocationName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetPoketchAppName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetTrainerClassName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetTrainerClassNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetTrainerClassNameBattle(StringTemplate * param0, u32 param1, TrainerData * param2); -void StringTemplate_SetTrainerName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetFrontierTrainerName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetTrainerNameBattle(StringTemplate * param0, u32 param1, TrainerData * param2); -void StringTemplate_SetUndergroundItemName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundItemNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundTrapName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundTrapNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetContestJudgeName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetContestRankName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetContestTypeName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundQuestion(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundAnswer(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundGoodsName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundGoodsNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetGenderMarker(StringTemplate * param0, u32 param1, u8 param2); -void StringTemplate_SetPCBoxName(StringTemplate * param0, u32 param1, const PCBoxes * param2, u32 param3); -void StringTemplate_SetGymName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetTimeOfDay(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetCountryName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetCityName(StringTemplate * param0, u32 param1, u32 param2, u32 param3); -void StringTemplate_SetCustomMessageWord(StringTemplate * param0, u32 param1, u16 param2); -void StringTemplate_SetBallSealName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetBallSealNamePlural(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetMetLocationName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetPoffinName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetContestAccessoryName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetContestAccessoryNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetContestBackdropName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUnionGroupName(StringTemplate * param0, SaveData * param1, int param2, int param3, int param4); -void StringTemplate_SetPlazaMinigameName(StringTemplate * param0, u32 param1, enum PlazaMinigame param2); -void StringTemplate_SetPlazaEventName(StringTemplate * param0, u32 param1, int param2); -void StringTemplate_SetPlazaItemName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetJPGreeting(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetENGreeting(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetFRGreeting(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetITGreeting(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetDEGreeting(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetESGreeting(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetFurniture(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetMonthName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_CapitalizeArgAtIndex(StringTemplate * param0, u32 param1); -void StringTemplate_SetDepartmentStoreFloor(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_Format(const StringTemplate * param0, Strbuf *param1, const Strbuf *param2); -void StringTemplate_ClearArgs(StringTemplate * param0); +typedef struct StringTemplateArgHeader { + u8 unused_00; + u8 unused_01; + u8 unused_02; + u8 unused_03; +} StringTemplateArgHeader; + +typedef struct StringTemplateArg { + StringTemplateArgHeader header; + Strbuf *strbuf; +} StringTemplateArg; + +typedef struct StringTemplate { + u32 maxArgs; + u32 heapID; + StringTemplateArg *args; + Strbuf *templateBuf; +} StringTemplate; + +StringTemplate *StringTemplate_Default(u32 heapID); +StringTemplate *StringTemplate_New(u32 maxArgs, u32 maxLen, u32 heapID); +void StringTemplate_Free(StringTemplate *template); +void StringTemplate_SetStrbuf(StringTemplate *template, u32 idx, const Strbuf *argVal, u32 unused3, BOOL unused4, u32 unused5); +void StringTemplate_SetPlayerName(StringTemplate *template, u32 idx, const TrainerInfo *playerInfo); +void StringTemplate_SetRivalName(StringTemplate *template, u32 idx, const SaveData *save); +void StringTemplate_SetCounterpartName(StringTemplate *template, u32 idx, const SaveData *save); +void StringTemplate_SetSpeciesName(StringTemplate *template, u32 idx, BoxPokemon *boxMon); +void StringTemplate_SetSpeciesNameWithArticle(StringTemplate *template, u32 idx, BoxPokemon *boxMon); +void StringTemplate_SetSpeciesNameWithArticleByID(StringTemplate *template, u32 idx, u32 species); +void StringTemplate_SetNickname(StringTemplate *template, u32 idx, BoxPokemon *boxMon); +void StringTemplate_SetOTName(StringTemplate *template, u32 idx, BoxPokemon *boxMon); +void StringTemplate_SetNumber(StringTemplate *template, u32 idx, int num, u32 maxDigits, enum PaddingMode paddingMode, enum CharsetMode charsetMode); +void StringTemplate_SetMoveName(StringTemplate *template, u32 idx, enum Move move); +void StringTemplate_SetRibbonName(StringTemplate *template, u32 idx, u32 ribbon); +void StringTemplate_SetAbilityName(StringTemplate *template, u32 idx, enum Ability ability); +void StringTemplate_SetNatureName(StringTemplate *template, u32 idx, u32 nature); +void StringTemplate_SetItemName(StringTemplate *template, u32 idx, u32 item); +void StringTemplate_SetItemNameWithArticle(StringTemplate *template, u32 idx, u32 item); +void StringTemplate_SetItemNamePlural(StringTemplate *template, u32 idx, u32 item); +void StringTemplate_SetBagPocketName(StringTemplate *template, u32 idx, u32 pocket); +void StringTemplate_SetPokemonTypeName(StringTemplate *template, u32 idx, u32 type); +void StringTemplate_SetPokemonStatName(StringTemplate *template, u32 idx, u32 stat); +void StringTemplate_SetStatusConditionName(StringTemplate *template, u32 idx, u32 status); +void StringTemplate_SetFlavorName(StringTemplate *template, u32 idx, u32 flavor); +void StringTemplate_SetLocationName(StringTemplate *template, u32 idx, u32 location); +void StringTemplate_SetPoketchAppName(StringTemplate *template, u32 idx, u32 app); +void StringTemplate_SetTrainerClassName(StringTemplate *template, u32 idx, u32 trainerClass); +void StringTemplate_SetTrainerClassNameWithArticle(StringTemplate *template, u32 idx, u32 trainerClass); +void StringTemplate_SetTrainerClassNameBattle(StringTemplate *template, u32 idx, TrainerData *trainerData); +void StringTemplate_SetTrainerName(StringTemplate *template, u32 idx, u32 trainerID); +void StringTemplate_SetFrontierTrainerName(StringTemplate *template, u32 idx, u32 trainerID); +void StringTemplate_SetTrainerNameBattle(StringTemplate *template, u32 idx, TrainerData *trainerData); +void StringTemplate_SetUndergroundItemName(StringTemplate *template, u32 idx, u32 item); +void StringTemplate_SetUndergroundItemNameWithArticle(StringTemplate *template, u32 idx, u32 item); +void StringTemplate_SetUndergroundTrapName(StringTemplate *template, u32 idx, u32 trap); +void StringTemplate_SetUndergroundTrapNameWithArticle(StringTemplate *template, u32 idx, u32 trap); +void StringTemplate_SetContestJudgeName(StringTemplate *template, u32 idx, u32 judge); +void StringTemplate_SetContestRankName(StringTemplate *template, u32 idx, u32 rank); +void StringTemplate_SetContestTypeName(StringTemplate *template, u32 idx, u32 type); +void StringTemplate_SetUndergroundQuestion(StringTemplate *template, u32 idx, u32 question); +void StringTemplate_SetUndergroundAnswer(StringTemplate *template, u32 idx, u32 answer); +void StringTemplate_SetUndergroundGoodsName(StringTemplate *template, u32 idx, u32 goods); +void StringTemplate_SetUndergroundGoodsNameWithArticle(StringTemplate *template, u32 idx, u32 goods); +void StringTemplate_SetGenderMarker(StringTemplate *template, u32 idx, enum Gender gender); +void StringTemplate_SetPCBoxName(StringTemplate *template, u32 idx, const PCBoxes *boxes, u32 boxIdx); +void StringTemplate_SetGymName(StringTemplate *template, u32 idx, u32 gym); +void StringTemplate_SetTimeOfDay(StringTemplate *template, u32 idx, u32 timeOfDay); +void StringTemplate_SetCountryName(StringTemplate *template, u32 idx, u32 country); +void StringTemplate_SetCityName(StringTemplate *template, u32 idx, u32 country, u32 city); +void StringTemplate_SetCustomMessageWord(StringTemplate *template, u32 idx, u16 customMessageWord); +void StringTemplate_SetBallSealName(StringTemplate *template, u32 idx, u32 ballSeal); +void StringTemplate_SetBallSealNamePlural(StringTemplate *template, u32 idx, u32 ballSeal); +void StringTemplate_SetMetLocationName(StringTemplate *template, u32 idx, u32 location); +void StringTemplate_SetPoffinName(StringTemplate *template, u32 idx, u32 poffin); +void StringTemplate_SetContestAccessoryName(StringTemplate *template, u32 idx, u32 accessory); +void StringTemplate_SetContestAccessoryNameWithArticle(StringTemplate *template, u32 idx, u32 accessory); +void StringTemplate_SetContestBackdropName(StringTemplate *template, u32 idx, u32 backdrop); +void StringTemplate_SetUnionGroupName(StringTemplate *template, SaveData *save, int groupID, int idx, int nameType); +void StringTemplate_SetPlazaMinigameName(StringTemplate *template, u32 idx, enum PlazaMinigame minigame); +void StringTemplate_SetPlazaEventName(StringTemplate *template, u32 idx, int event); +void StringTemplate_SetPlazaItemName(StringTemplate *template, u32 idx, u32 item); +void StringTemplate_SetJPGreeting(StringTemplate *template, u32 idx, u32 greeting); +void StringTemplate_SetENGreeting(StringTemplate *template, u32 idx, u32 greeting); +void StringTemplate_SetFRGreeting(StringTemplate *template, u32 idx, u32 greeting); +void StringTemplate_SetITGreeting(StringTemplate *template, u32 idx, u32 greeting); +void StringTemplate_SetDEGreeting(StringTemplate *template, u32 idx, u32 greeting); +void StringTemplate_SetESGreeting(StringTemplate *template, u32 idx, u32 greeting); +void StringTemplate_SetFurniture(StringTemplate *template, u32 idx, u32 furniture); +void StringTemplate_SetMonthName(StringTemplate *template, u32 idx, u32 month); +void StringTemplate_SetDepartmentStoreFloor(StringTemplate *template, u32 idx, u32 floor); +void StringTemplate_CapitalizeArgAtIndex(StringTemplate *template, u32 idx); +void StringTemplate_Format(const StringTemplate *template, Strbuf *dst, const Strbuf *fmtString); +void StringTemplate_ClearArgs(StringTemplate *template); #endif // POKEPLATINUM_STRING_TEMPLATE_H diff --git a/src/string_template.c b/src/string_template.c index e26d21e47f..e764731f7b 100644 --- a/src/string_template.c +++ b/src/string_template.c @@ -1,996 +1,669 @@ +#include "constants/charcode.h" +#include "constants/heap.h" #include "enums.h" #include #include +#include "consts/generated/c/abilities.h" +#include "consts/generated/c/gender.h" +#include "consts/generated/c/moves.h" + +#include "gmm/pl_msg_0213.h" +#include "gmm/pl_msg_0361.h" +#include "gmm/pl_msg_0434.h" +#include "gmm/pl_msg_0435.h" + +#include "constants/message_banks.h" +#include "constants/narc.h" #include "constants/pokemon.h" -#include "trainer_info.h" #include "struct_decls/struct_0202B4A0_decl.h" -#include "pokemon.h" #include "struct_decls/struct_020797DC_decl.h" -#include "savedata.h" #include "struct_defs/trainer_data.h" +#include "charcode.h" +#include "heap.h" #include "message.h" +#include "pokemon.h" +#include "savedata.h" +#include "savedata_misc.h" +#include "strbuf.h" #include "string_template.h" +#include "trainer_info.h" + #include "unk_02014D38.h" #include "unk_02017038.h" -#include "heap.h" -#include "charcode.h" -#include "strbuf.h" #include "unk_02025E08.h" -#include "trainer_info.h" -#include "savedata_misc.h" #include "unk_0202B37C.h" -#include "pokemon.h" #include "unk_020797C8.h" #include "unk_020996D0.h" -typedef struct { - u8 unk_00; - u8 unk_01; - u8 unk_02; - u8 unk_03_0 : 7; - u8 unk_03_7 : 1; -} UnkStruct_0200B444; +static void InitStringTemplateArgHeader(StringTemplateArgHeader *header); +static void SetStringTemplateArg(StringTemplate *template, u32 idx, const Strbuf *argVal, const StringTemplateArgHeader *newHeader); -typedef struct { - UnkStruct_0200B444 unk_00; - Strbuf* unk_04; -} UnkStruct_0200B358_sub1; - -struct StringTemplate { - u32 unk_00; - u32 unk_04; - UnkStruct_0200B358_sub1 * unk_08; - Strbuf* unk_0C; -}; - -static void sub_0200B448(StringTemplate * param0, u32 param1, const Strbuf *param2, const UnkStruct_0200B444 * param3); -static void sub_0200B444(UnkStruct_0200B444 * param0); -void StringTemplate_SetSpeciesNameWithArticle(StringTemplate * param0, u32 param1, BoxPokemon * param2); -void StringTemplate_SetSpeciesNameWithArticleByID(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetItemNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetItemNamePlural(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetTrainerClassNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundItemNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundTrapNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetUndergroundGoodsNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetBallSealNamePlural(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetContestAccessoryNameWithArticle(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_SetMonthName(StringTemplate * param0, u32 param1, u32 param2); -void StringTemplate_CapitalizeArgAtIndex(StringTemplate * param0, u32 param1); -void StringTemplate_SetDepartmentStoreFloor(StringTemplate * param0, u32 param1, u32 param2); - -StringTemplate * StringTemplate_Default (u32 param0) +StringTemplate *StringTemplate_Default(u32 heapID) { - return StringTemplate_New(8, 32, param0); + return StringTemplate_New(STRING_TEMPLATE_DEFAULT_MAX_ARGS, STRING_TEMPLATE_DEFAULT_MAX_LENGTH, heapID); } -StringTemplate * StringTemplate_New (u32 param0, u32 param1, u32 param2) +StringTemplate *StringTemplate_New(u32 maxArgs, u32 maxLen, u32 heapID) { - StringTemplate * v0 = NULL; - u32 v1; + StringTemplate *template = NULL; - GF_ASSERT(param0); - GF_ASSERT(param1); + GF_ASSERT(maxArgs); + GF_ASSERT(maxLen); - do { - StringTemplate * v2 = Heap_AllocFromHeapAtEnd(param2, sizeof(StringTemplate)); + StringTemplate *tmp = Heap_AllocFromHeapAtEnd(heapID, sizeof(StringTemplate)); + if (tmp == NULL) { + goto cleanup; + } - if (v2 == NULL) { + tmp->maxArgs= maxArgs; + tmp->heapID = heapID; + tmp->templateBuf = Strbuf_Init(maxLen, heapID); + if (tmp->templateBuf == NULL) { + goto cleanup; + } + + tmp->args = Heap_AllocFromHeapAtEnd(heapID, sizeof(StringTemplateArg) * maxArgs); + if (tmp->args == NULL) { + goto cleanup; + } + + u32 arg; + for (arg = 0; arg < maxArgs; arg++) { + InitStringTemplateArgHeader(&tmp->args[arg].header); + tmp->args[arg].strbuf = Strbuf_Init(maxLen, heapID); + + if (tmp->args[arg].strbuf == NULL) { break; } + } - v2->unk_00 = param0; - v2->unk_04 = param2; - v2->unk_0C = Strbuf_Init(param1, param2); + if (arg == maxArgs) { + return tmp; + } - if (v2->unk_0C == NULL) { - break; - } - - v2->unk_08 = Heap_AllocFromHeapAtEnd(param2, sizeof(UnkStruct_0200B358_sub1) * param0); - - if (v2->unk_08 == NULL) { - break; - } - - for (v1 = 0; v1 < param0; v1++) { - sub_0200B444(&(v2->unk_08[v1].unk_00)); - v2->unk_08[v1].unk_04 = Strbuf_Init(param1, param2); - - if (v2->unk_08[v1].unk_04 == NULL) { - break; - } - } - - if (v1 == param0) { - return v2; - } - } while (0); - - if (v0) { - StringTemplate_Free(v0); +cleanup: + if (template) { + StringTemplate_Free(template); } return NULL; } -void StringTemplate_Free (StringTemplate * param0) +void StringTemplate_Free(StringTemplate *template) { - u32 v0; + GF_ASSERT(template->maxArgs); - GF_ASSERT(param0->unk_00); - - if (param0->unk_08) { - for (v0 = 0; v0 < param0->unk_00; v0++) { - if (param0->unk_08[v0].unk_04) { - Strbuf_Free(param0->unk_08[v0].unk_04); + if (template->args) { + for (u32 i = 0; i < template->maxArgs; i++) { + if (template->args[i].strbuf) { + Strbuf_Free(template->args[i].strbuf); } else { break; } } - Heap_FreeToHeap(param0->unk_08); + Heap_FreeToHeap(template->args); } - if (param0->unk_0C) { - Strbuf_Free(param0->unk_0C); + if (template->templateBuf) { + Strbuf_Free(template->templateBuf); } - param0->unk_00 = 0; - Heap_FreeToHeap(param0); + template->maxArgs = 0; + Heap_FreeToHeap(template); } -static void sub_0200B444 (UnkStruct_0200B444 * param0) +static void InitStringTemplateArgHeader(StringTemplateArgHeader *header) { return; } -static void sub_0200B448 (StringTemplate * param0, u32 param1, const Strbuf *param2, const UnkStruct_0200B444 * param3) +static void SetStringTemplateArg(StringTemplate *template, u32 idx, const Strbuf *argVal, const StringTemplateArgHeader *newHeader) { - GF_ASSERT(param1 < param0->unk_00); + GF_ASSERT(idx < template->maxArgs); - if (param1 < param0->unk_00) { - if (param3 != NULL) { - param0->unk_08[param1].unk_00 = *param3; + if (idx < template->maxArgs) { + if (newHeader != NULL) { + template->args[idx].header = *newHeader; } - Strbuf_Copy(param0->unk_08[param1].unk_04, param2); + Strbuf_Copy(template->args[idx].strbuf, argVal); } } -void StringTemplate_SetStrbuf (StringTemplate * param0, u32 param1, const Strbuf *param2, u32 param3, BOOL param4, u32 param5) +static inline MessageLoader *InitMessageLoader(u32 bankID, u32 heapID) { - sub_0200B448(param0, param1, param2, NULL); + return MessageLoader_Init(MESSAGE_LOADER_NARC_HANDLE, NARC_INDEX_MSGDATA__PL_MSG, bankID, heapID); } -void StringTemplate_SetPlayerName (StringTemplate * param0, u32 param1, const TrainerInfo * param2) +void StringTemplate_SetStrbuf(StringTemplate *template, u32 idx, const Strbuf *argVal, u32 unused3, BOOL unused4, u32 unused5) { - const u16 * v0; - - v0 = TrainerInfo_Name(param2); - - Strbuf_CopyChars(param0->unk_0C, v0); - sub_0200B448(param0, param1, param0->unk_0C, NULL); + SetStringTemplateArg(template, idx, argVal, NULL); } -void StringTemplate_SetRivalName (StringTemplate * param0, u32 param1, const SaveData * param2) +void StringTemplate_SetPlayerName(StringTemplate *template, u32 idx, const TrainerInfo *playerInfo) { - const u16 * v0 = MiscSaveBlock_RivalName(SaveData_MiscSaveBlockConst(param2)); - - Strbuf_CopyChars(param0->unk_0C, v0); - sub_0200B448(param0, param1, param0->unk_0C, NULL); + Strbuf_CopyChars(template->templateBuf, TrainerInfo_Name(playerInfo)); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); } -void StringTemplate_SetCounterpartName (StringTemplate * param0, u32 param1, const SaveData * param2) +void StringTemplate_SetRivalName(StringTemplate *template, u32 idx, const SaveData *save) { - const TrainerInfo * v0 = SaveData_GetTrainerInfo((SaveData *)param2); - MessageLoader * v1; + Strbuf_CopyChars(template->templateBuf, MiscSaveBlock_RivalName(SaveData_MiscSaveBlockConst(save))); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); +} - v1 = MessageLoader_Init(1, 26, 553, param0->unk_04); +void StringTemplate_SetCounterpartName(StringTemplate *template, u32 idx, const SaveData *save) +{ + const TrainerInfo *playerInfo = SaveData_GetTrainerInfo(save); + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_COUNTERPART_NAMES, template->heapID); - if (TrainerInfo_Gender(v0) == 0) { - MessageLoader_GetStrbuf(v1, 1, param0->unk_0C); + if (TrainerInfo_Gender(playerInfo) == GENDER_MALE) { + MessageLoader_GetStrbuf(loader, GENDER_FEMALE, template->templateBuf); } else { - MessageLoader_GetStrbuf(v1, 0, param0->unk_0C); + MessageLoader_GetStrbuf(loader, GENDER_MALE, template->templateBuf); } - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v1); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } -void StringTemplate_SetSpeciesName (StringTemplate * param0, u32 param1, BoxPokemon * param2) +void StringTemplate_SetSpeciesName(StringTemplate *template, u32 idx, BoxPokemon *boxMon) { - MessageLoader * v0; - u32 v1; + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_SPECIES_NAMES, template->heapID); + u32 species = BoxPokemon_GetValue(boxMon, MON_DATA_SPECIES, NULL); - v0 = MessageLoader_Init(1, 26, 412, param0->unk_04); - v1 = BoxPokemon_GetValue(param2, MON_DATA_SPECIES, NULL); - - MessageLoader_GetStrbuf(v0, v1, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); + MessageLoader_GetStrbuf(loader, species, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } -void StringTemplate_SetSpeciesNameWithArticle (StringTemplate * param0, u32 param1, BoxPokemon * param2) +void StringTemplate_SetSpeciesNameWithArticle(StringTemplate *template, u32 idx, BoxPokemon *boxMon) { - u32 v0; - - v0 = BoxPokemon_GetValue(param2, MON_DATA_SPECIES, NULL); - StringTemplate_SetSpeciesNameWithArticleByID(param0, param1, v0); + StringTemplate_SetSpeciesNameWithArticleByID(template, idx, BoxPokemon_GetValue(boxMon, MON_DATA_SPECIES, NULL)); } -void StringTemplate_SetSpeciesNameWithArticleByID (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetSpeciesNameWithArticleByID(StringTemplate *template, u32 idx, u32 species) { - MessageLoader * v0; + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_SPECIES_NAMES_WITH_ARTICLES, template->heapID); - v0 = MessageLoader_Init(1, 26, 413, param0->unk_04); - - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); + MessageLoader_GetStrbuf(loader, species, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } -void StringTemplate_SetNickname (StringTemplate * param0, u32 param1, BoxPokemon * param2) +void StringTemplate_SetNickname(StringTemplate *template, u32 idx, BoxPokemon *boxMon) { - BoxPokemon_GetValue(param2, MON_DATA_NICKNAME_STRBUF, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); + BoxPokemon_GetValue(boxMon, MON_DATA_NICKNAME_STRBUF, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); } -void StringTemplate_SetOTName (StringTemplate * param0, u32 param1, BoxPokemon * param2) +void StringTemplate_SetOTName(StringTemplate *template, u32 idx, BoxPokemon *boxMon) { - BoxPokemon_GetValue(param2, MON_DATA_OTNAME_STRBUF, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); + BoxPokemon_GetValue(boxMon, MON_DATA_OTNAME_STRBUF, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); } -void StringTemplate_SetNumber (StringTemplate * param0, u32 param1, s32 param2, u32 param3, int param4, int param5) +void StringTemplate_SetNumber(StringTemplate *template, u32 idx, int num, u32 maxDigits, enum PaddingMode paddingMode, enum CharsetMode charsetMode) { - Strbuf_FormatInt(param0->unk_0C, param2, param3, param4, param5); - sub_0200B448(param0, param1, param0->unk_0C, NULL); + Strbuf_FormatInt(template->templateBuf, num, maxDigits, paddingMode, charsetMode); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); } -void StringTemplate_SetMoveName (StringTemplate * param0, u32 param1, u32 param2) +static inline void SetArgFromArchive(StringTemplate *template, u32 idx, u32 argVal, u32 bankID) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 647, param0->unk_04); + MessageLoader *loader = InitMessageLoader(bankID, template->heapID); - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); + if (loader) { + MessageLoader_GetStrbuf(loader, argVal, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } } -void StringTemplate_SetRibbonName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetMoveName(StringTemplate *template, u32 idx, enum Move move) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 535, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, move, MESSAGE_BANK_MOVE_NAMES); } -void StringTemplate_SetAbilityName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetRibbonName(StringTemplate *template, u32 idx, u32 ribbon) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 610, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, ribbon, MESSAGE_BANK_RIBBON_NAMES); } -void StringTemplate_SetNatureName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetAbilityName(StringTemplate *template, u32 idx, enum Ability ability) { - MessageLoader * v0; - - v0 = MessageLoader_Init(1, 26, 202, param0->unk_04); - - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); + SetArgFromArchive(template, idx, ability, MESSAGE_BANK_ABILITY_NAMES); } -void StringTemplate_SetItemName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetNatureName(StringTemplate *template, u32 idx, u32 nature) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 392, param0->unk_04); + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_NATURE_NAMES, template->heapID); - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + MessageLoader_GetStrbuf(loader, nature, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } -void StringTemplate_SetItemNameWithArticle (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetItemName(StringTemplate *template, u32 idx, u32 item) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 393, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, item, MESSAGE_BANK_ITEM_NAMES); } -void StringTemplate_SetItemNamePlural (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetItemNameWithArticle(StringTemplate *template, u32 idx, u32 item) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 394, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, item, MESSAGE_BANK_ITEM_NAMES_WITH_ARTICLES); } -void StringTemplate_SetBagPocketName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetItemNamePlural(StringTemplate *template, u32 idx, u32 item) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 396, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, item, MESSAGE_BANK_ITEM_NAMES_PLURAL); } -void StringTemplate_SetPokemonTypeName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetBagPocketName(StringTemplate *template, u32 idx, u32 pocket) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 624, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, pocket, MESSAGE_BANK_BAG_POCKET_NAMES_WITH_ICONS); } -void StringTemplate_SetPokemonStatName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetPokemonTypeName(StringTemplate *template, u32 idx, u32 type) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 551, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, type, MESSAGE_BANK_POKEMON_TYPE_NAMES); } -void StringTemplate_SetStatusConditionName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetPokemonStatName(StringTemplate *template, u32 idx, u32 stat) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 219, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, stat, MESSAGE_BANK_POKEMON_STAT_NAMES); } -void StringTemplate_SetFlavorName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetStatusConditionName(StringTemplate *template, u32 idx, u32 status) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 606, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, status, MESSAGE_BANK_STATUS_CONDITION_NAMES); } -void StringTemplate_SetLocationName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetFlavorName(StringTemplate *template, u32 idx, u32 flavor) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 433, param0->unk_04); + SetArgFromArchive(template, idx, flavor, MESSAGE_BANK_FLAVOR_NAMES); +} - if (v0) { - if ((param2 == 0) || (param2 >= MessageLoader_MessageCount(v0))) { - MessageLoader_Free(v0); - v0 = MessageLoader_Init(1, 26, 434, param0->unk_04); - param2 = 2; +void StringTemplate_SetLocationName(StringTemplate *template, u32 idx, u32 location) +{ + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_LOCATION_NAMES, template->heapID); + + if (loader) { + if (location == 0 || location >= MessageLoader_MessageCount(loader)) { + MessageLoader_Free(loader); + loader = InitMessageLoader(MESSAGE_BANK_MYSTERY_GIFT_EVENT_NAMES, template->heapID); + location = pl_msg_00000434_00002; } - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); + MessageLoader_GetStrbuf(loader, location, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } } -void StringTemplate_SetPoketchAppName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetPoketchAppName(StringTemplate *template, u32 idx, u32 app) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 457, param0->unk_04); + SetArgFromArchive(template, idx, app, MESSAGE_BANK_POKETCH_APP_NAMES); +} - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); +void StringTemplate_SetTrainerClassName(StringTemplate *template, u32 idx, u32 trainerClass) +{ + SetArgFromArchive(template, idx, trainerClass, MESSAGE_BANK_TRAINER_CLASS_NAMES); +} + +void StringTemplate_SetTrainerClassNameWithArticle(StringTemplate *template, u32 idx, u32 trainerClass) +{ + SetArgFromArchive(template, idx, trainerClass, MESSAGE_BANK_TRAINER_CLASS_NAMES_WITH_ARTICLES); +} + +void StringTemplate_SetTrainerClassNameBattle(StringTemplate *template, u32 idx, TrainerData *trainerData) +{ + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_TRAINER_CLASS_NAMES, template->heapID); + + if (loader) { + MessageLoader_GetStrbuf(loader, trainerData->class, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } } -void StringTemplate_SetTrainerClassName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetTrainerName(StringTemplate *template, u32 idx, u32 trainerID) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 619, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, trainerID, MESSAGE_BANK_NPC_TRAINER_NAMES); } -void StringTemplate_SetTrainerClassNameWithArticle (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetFrontierTrainerName(StringTemplate *template, u32 idx, u32 trainerID) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 620, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, trainerID, MESSAGE_BANK_FRONTIER_TRAINER_NAMES); } -void StringTemplate_SetTrainerClassNameBattle (StringTemplate * param0, u32 param1, TrainerData * param2) +void StringTemplate_SetTrainerNameBattle(StringTemplate *template, u32 idx, TrainerData *trainerData) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 619, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2->class, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + Strbuf_CopyChars(template->templateBuf, trainerData->name); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); } -void StringTemplate_SetTrainerName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetUndergroundItemName(StringTemplate *template, u32 idx, u32 item) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 618, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, item, MESSAGE_BANK_UNDERGROUND_ITEM_NAMES); } -void StringTemplate_SetFrontierTrainerName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetUndergroundItemNameWithArticle(StringTemplate *template, u32 idx, u32 item) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 21, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, item, MESSAGE_BANK_UNDERGROUND_ITEM_NAMES_WITH_ARTICLES); } -void StringTemplate_SetTrainerNameBattle (StringTemplate * param0, u32 param1, TrainerData * param2) +void StringTemplate_SetUndergroundTrapName(StringTemplate *template, u32 idx, u32 trap) { - Strbuf_CopyChars(param0->unk_0C, ¶m2->name[0]); - sub_0200B448(param0, param1, param0->unk_0C, NULL); + SetArgFromArchive(template, idx, trap, MESSAGE_BANK_UNDERGROUND_TRAP_NAMES); } -void StringTemplate_SetUndergroundItemName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetUndergroundTrapNameWithArticle(StringTemplate *template, u32 idx, u32 trap) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 628, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, trap, MESSAGE_BANK_UNDERGROUND_TRAP_NAMES_WITH_ARTICLES); } -void StringTemplate_SetUndergroundItemNameWithArticle (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetContestJudgeName(StringTemplate *template, u32 idx, u32 judge) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 629, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, judge, MESSAGE_BANK_CONTEST_JUDGE_NAMES); } -void StringTemplate_SetUndergroundTrapName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetContestRankName(StringTemplate *template, u32 idx, u32 rank) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 630, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, rank, MESSAGE_BANK_CONTEST_TEXT); } -void StringTemplate_SetUndergroundTrapNameWithArticle (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetContestTypeName(StringTemplate *template, u32 idx, u32 type) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 631, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, type, MESSAGE_BANK_CONTEST_TEXT); } -void StringTemplate_SetContestJudgeName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetUndergroundQuestion(StringTemplate *template, u32 idx, u32 question) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 207, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, question, MESSAGE_BANK_UNDERGROUND_QUESTIONS); } -void StringTemplate_SetContestRankName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetUndergroundAnswer(StringTemplate *template, u32 idx, u32 answer) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 204, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, answer, MESSAGE_BANK_UNDERGROUND_ANSWERS); } -void StringTemplate_SetContestTypeName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetUndergroundGoodsName(StringTemplate *template, u32 idx, u32 goods) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 204, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, goods, MESSAGE_BANK_UNDERGROUND_GOODS); } -void StringTemplate_SetUndergroundQuestion (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetUndergroundGoodsNameWithArticle(StringTemplate *template, u32 idx, u32 goods) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 633, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, goods, MESSAGE_BANK_UNDERGROUND_GOODS_WITH_ARTICLES); } -void StringTemplate_SetUndergroundAnswer (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetGenderMarker(StringTemplate *template, u32 idx, enum Gender gender) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 632, param0->unk_04); + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_COMMON_STRINGS, template->heapID); - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } -} - -void StringTemplate_SetUndergroundGoodsName (StringTemplate * param0, u32 param1, u32 param2) -{ - MessageLoader * v0 = MessageLoader_Init(1, 26, 626, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } -} - -void StringTemplate_SetUndergroundGoodsNameWithArticle (StringTemplate * param0, u32 param1, u32 param2) -{ - MessageLoader * v0 = MessageLoader_Init(1, 26, 627, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } -} - -void StringTemplate_SetGenderMarker (StringTemplate * param0, u32 param1, u8 param2) -{ - MessageLoader * v0; - - v0 = MessageLoader_Init(1, 26, 213, param0->unk_04); - - switch (param2) { - case 0: - MessageLoader_GetStrbuf(v0, 68, param0->unk_0C); + switch (gender) { + case GENDER_MALE: + MessageLoader_GetStrbuf(loader, pl_msg_00000213_00068, template->templateBuf); break; - case 1: - MessageLoader_GetStrbuf(v0, 69, param0->unk_0C); + + case GENDER_FEMALE: + MessageLoader_GetStrbuf(loader, pl_msg_00000213_00069, template->templateBuf); break; + default: - Strbuf_Clear(param0->unk_0C); + Strbuf_Clear(template->templateBuf); } - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } -void StringTemplate_SetPCBoxName (StringTemplate * param0, u32 param1, const PCBoxes * param2, u32 param3) +void StringTemplate_SetPCBoxName(StringTemplate *template, u32 idx, const PCBoxes *boxes, u32 boxIdx) { - sub_02079AF4(param2, param3, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); + sub_02079AF4(boxes, boxIdx, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); } -void StringTemplate_SetGymName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetGymName(StringTemplate *template, u32 idx, u32 gym) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 378, param0->unk_04); + SetArgFromArchive(template, idx, gym, MESSAGE_BANK_GYM_NAMES); +} - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); +void StringTemplate_SetTimeOfDay(StringTemplate *template, u32 idx, u32 timeOfDay) +{ + SetArgFromArchive(template, idx, timeOfDay, MESSAGE_BANK_TIMES_OF_DAY); +} + +void StringTemplate_SetCountryName(StringTemplate *template, u32 idx, u32 country) +{ + SetArgFromArchive(template, idx, country, MESSAGE_BANK_COUNTRY_NAMES); +} + +void StringTemplate_SetCityName(StringTemplate *template, u32 idx, u32 country, u32 city) +{ + u32 bankID = sub_02099720(country); + if (bankID && city) { + SetArgFromArchive(template, idx, city, bankID); } } -void StringTemplate_SetTimeOfDay (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetCustomMessageWord(StringTemplate *template, u32 idx, u16 customMessageWord) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 608, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + sub_02014DB8(customMessageWord, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); } -void StringTemplate_SetCountryName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetBallSealName(StringTemplate *template, u32 idx, u32 ballSeal) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 694, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, ballSeal, MESSAGE_BANK_BALL_SEAL_NAMES); } -void StringTemplate_SetCityName (StringTemplate * param0, u32 param1, u32 param2, u32 param3) +void StringTemplate_SetBallSealNamePlural(StringTemplate *template, u32 idx, u32 ballSeal) { - u32 v0; - - v0 = sub_02099720(param2); - - if (v0) { - if (param3) { - MessageLoader * v1 = MessageLoader_Init(1, 26, v0, param0->unk_04); - - if (v1) { - MessageLoader_GetStrbuf(v1, param3, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v1); - } - } - } + SetArgFromArchive(template, idx, ballSeal, MESSAGE_BANK_BALL_SEAL_NAMES_PLURAL); } -void StringTemplate_SetCustomMessageWord (StringTemplate * param0, u32 param1, u16 param2) +void StringTemplate_SetMetLocationName(StringTemplate *template, u32 idx, u32 location) { - sub_02014DB8(param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); -} - -void StringTemplate_SetBallSealName (StringTemplate * param0, u32 param1, u32 param2) -{ - MessageLoader * v0 = MessageLoader_Init(1, 26, 12, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } -} - -void StringTemplate_SetBallSealNamePlural (StringTemplate * param0, u32 param1, u32 param2) -{ - MessageLoader * v0 = MessageLoader_Init(1, 26, 13, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } -} - -void StringTemplate_SetMetLocationName (StringTemplate * param0, u32 param1, u32 param2) -{ - static const u16 v0[] = { - 433, 435, 434, + static const u16 sMetLocationBanks[] = { + MESSAGE_BANK_LOCATION_NAMES, + MESSAGE_BANK_SPECIAL_MET_LOCATION_NAMES, + MESSAGE_BANK_MYSTERY_GIFT_EVENT_NAMES, }; - int v1; - int v2; - MessageLoader * v3; - v1 = sub_02017038(param2); - v2 = sub_02017058(param2); - v3 = MessageLoader_Init(1, 26, v0[v1], param0->unk_04); + int metLocationType = sub_02017038(location); + int metLocationID = sub_02017058(location); + MessageLoader *loader = InitMessageLoader(sMetLocationBanks[metLocationType], template->heapID); - if (v3) { - if ((v2 < MessageLoader_MessageCount(v3)) && (!((v1 == 0) && (v2 == 0)))) { - MessageLoader_GetStrbuf(v3, v2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v3); + if (loader) { + if (metLocationID < MessageLoader_MessageCount(loader) + && (!(metLocationType == 0 && metLocationID == 0))) { + MessageLoader_GetStrbuf(loader, metLocationID, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } else { - u32 v4, v5; + MessageLoader_Free(loader); - MessageLoader_Free(v3); - - if ((v1 == 0) && (v2 == 0)) { - v4 = v0[1]; - v5 = 12; + u32 bankID, msgID; + if (metLocationType == 0 && metLocationID == 0) { + bankID = sMetLocationBanks[1]; + msgID = pl_msg_00000435_00012; } else { - v4 = v0[2]; - v5 = 2; + bankID = sMetLocationBanks[2]; + msgID = pl_msg_00000434_00002; } - v3 = MessageLoader_Init(1, 26, v4, param0->unk_04); - - if (v3) { - MessageLoader_GetStrbuf(v3, v5, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v3); - } + SetArgFromArchive(template, idx, msgID, bankID); } } } -void StringTemplate_SetPoffinName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetPoffinName(StringTemplate *template, u32 idx, u32 poffin) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 465, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, poffin, MESSAGE_BANK_POFFIN_NAMES); } -void StringTemplate_SetContestAccessoryName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetContestAccessoryName(StringTemplate *template, u32 idx, u32 accessory) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 386, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, accessory, MESSAGE_BANK_CONTEST_ACCESSORY_NAMES); } -void StringTemplate_SetContestAccessoryNameWithArticle (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetContestAccessoryNameWithArticle(StringTemplate *template, u32 idx, u32 accessory) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 387, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, accessory, MESSAGE_BANK_CONTEST_ACCESSORY_NAMES_WITH_ARTICLES); } -void StringTemplate_SetContestBackdropName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetContestBackdropName(StringTemplate *template, u32 idx, u32 backdrop) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 388, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, backdrop, MESSAGE_BANK_CONTEST_BACKDROP_NAMES); } -void StringTemplate_SetUnionGroupName (StringTemplate * param0, SaveData * param1, int param2, int param3, int param4) +void StringTemplate_SetUnionGroupName(StringTemplate *template, SaveData *save, int groupID, int idx, int nameType) { - int v0, v1; - Strbuf* v2; - UnkStruct_0202B4A0 * v3 = sub_0202B4A0(param1); + int gender, countryCode; + Strbuf *groupName; + UnkStruct_0202B4A0 *group = sub_0202B4A0(save); - v0 = sub_0202B47C(v3, param2); - v1 = sub_0202B488(v3, param2); - v2 = Strbuf_Init(64, 4); + gender = sub_0202B47C(group, groupID); + countryCode = sub_0202B488(group, groupID); + groupName = Strbuf_Init(64, HEAP_ID_FIELD); - Strbuf_CopyChars(v2, sub_0202B42C(v3, param2, param4)); - StringTemplate_SetStrbuf(param0, param3, v2, v0, 1, v1); - Strbuf_Free(v2); + Strbuf_CopyChars(groupName, sub_0202B42C(group, groupID, nameType)); + StringTemplate_SetStrbuf(template, idx, groupName, gender, 1, countryCode); + Strbuf_Free(groupName); } -void StringTemplate_SetPlazaMinigameName (StringTemplate * param0, u32 param1, enum PlazaMinigame param2) +void StringTemplate_SetPlazaMinigameName(StringTemplate *template, u32 idx, enum PlazaMinigame minigame) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 651, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, minigame, MESSAGE_BANK_PLAZA_MINIGAME_NAMES); } -void StringTemplate_SetPlazaEventName (StringTemplate * param0, u32 param1, int param2) +void StringTemplate_SetPlazaEventName(StringTemplate *template, u32 idx, int event) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 649, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, event, MESSAGE_BANK_PLAZA_EVENT_NAMES); } -void StringTemplate_SetPlazaItemName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetPlazaItemName(StringTemplate *template, u32 idx, u32 item) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 652, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, item, MESSAGE_BANK_PLAZA_ITEM_NAMES); } -void StringTemplate_SetJPGreeting (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetJPGreeting(StringTemplate *template, u32 idx, u32 greeting) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 667, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, greeting, MESSAGE_BANK_GREETINGS_JP); } -void StringTemplate_SetENGreeting (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetENGreeting(StringTemplate *template, u32 idx, u32 greeting) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 663, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, greeting, MESSAGE_BANK_GREETINGS_EN); } -void StringTemplate_SetFRGreeting (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetFRGreeting(StringTemplate *template, u32 idx, u32 greeting) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 664, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, greeting, MESSAGE_BANK_GREETINGS_FR); } -void StringTemplate_SetITGreeting (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetITGreeting(StringTemplate *template, u32 idx, u32 greeting) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 666, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, greeting, MESSAGE_BANK_GREETINGS_IT); } -void StringTemplate_SetDEGreeting (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetDEGreeting(StringTemplate *template, u32 idx, u32 greeting) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 665, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, greeting, MESSAGE_BANK_GREETINGS_DE); } -void StringTemplate_SetESGreeting (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetESGreeting(StringTemplate *template, u32 idx, u32 greeting) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 668, param0->unk_04); - - if (v0) { - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); - } + SetArgFromArchive(template, idx, greeting, MESSAGE_BANK_GREETINGS_ES); } -void StringTemplate_SetFurniture (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetFurniture(StringTemplate *template, u32 idx, u32 furniture) { - MessageLoader * v0; + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_FURNITURE_NAMES, template->heapID); - v0 = MessageLoader_Init(1, 26, 371, param0->unk_04); - - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); + MessageLoader_GetStrbuf(loader, furniture, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } -void StringTemplate_SetMonthName (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetMonthName(StringTemplate *template, u32 idx, u32 month) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 414, param0->unk_04); + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_MONTH_NAMES, template->heapID); - if (v0) { - if ((param2 < 1) || (param2 > 12)) { - param2 = 1; + if (loader) { + if (month < 1 || month > 12) { + month = 1; } - MessageLoader_GetStrbuf(v0, param2 - 1 + 0, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); + MessageLoader_GetStrbuf(loader, month - 1, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } } -void StringTemplate_CapitalizeArgAtIndex (StringTemplate * param0, u32 param1) +void StringTemplate_CapitalizeArgAtIndex(StringTemplate *template, u32 idx) { - Strbuf_UpperChar(param0->unk_08[param1].unk_04, 0); + Strbuf_UpperChar(template->args[idx].strbuf, 0); } -void StringTemplate_SetDepartmentStoreFloor (StringTemplate * param0, u32 param1, u32 param2) +void StringTemplate_SetDepartmentStoreFloor(StringTemplate *template, u32 idx, u32 floor) { - MessageLoader * v0 = MessageLoader_Init(1, 26, 361, param0->unk_04); + MessageLoader *loader = InitMessageLoader(MESSAGE_BANK_COMMON_STRINGS_2, template->heapID); - GF_ASSERT(param2 <= 5); + GF_ASSERT(floor <= 5); - if (v0) { - if (param2 == 0) { - param2 = 121; + if (loader) { + if (floor == pl_msg_00000361_00000) { + floor = pl_msg_00000361_00121; } else { - param2 += 115; + floor += pl_msg_00000361_00115; } - MessageLoader_GetStrbuf(v0, param2, param0->unk_0C); - sub_0200B448(param0, param1, param0->unk_0C, NULL); - MessageLoader_Free(v0); + MessageLoader_GetStrbuf(loader, floor, template->templateBuf); + SetStringTemplateArg(template, idx, template->templateBuf, NULL); + MessageLoader_Free(loader); } } -void StringTemplate_Format (const StringTemplate * param0, Strbuf *param1, const Strbuf *param2) +void StringTemplate_Format(const StringTemplate *template, Strbuf *dst, const Strbuf *fmtString) { - const u16 * v0; - u16 * v1; + const charcode_t *c = Strbuf_GetData(fmtString); + Strbuf_Clear(dst); - v0 = Strbuf_GetData(param2); - Strbuf_Clear(param1); + while (*c != CHAR_EOS) { + if (*c == CHAR_FORMAT_ARG) { + if (CharCode_IsFormatArg(c)) { + u32 idx = CharCode_FormatArgParam(c, 0); + GF_ASSERT(idx < template->maxArgs); - while (*v0 != 0xffff) { - if (*v0 == 0xfffe) { - if (CharCode_IsFormatArg(v0)) { - u32 v2; - - v2 = CharCode_FormatArgParam(v0, 0); - GF_ASSERT(v2 < param0->unk_00); - - Strbuf_ConcatTrainerName(param1, param0->unk_08[v2].unk_04); - v0 = CharCode_SkipFormatArg(v0); + Strbuf_ConcatTrainerName(dst, template->args[idx].strbuf); + c = CharCode_SkipFormatArg(c); } else { - const u16 * v3 = v0; + const charcode_t *tmp = c; + c = CharCode_SkipFormatArg(c); - v0 = CharCode_SkipFormatArg(v0); - - while (v3 < v0) { - Strbuf_AppendChar(param1, *v3++); + while (tmp < c) { + Strbuf_AppendChar(dst, *tmp++); } } } else { - Strbuf_AppendChar(param1, *v0++); + Strbuf_AppendChar(dst, *c++); } } } -void StringTemplate_ClearArgs (StringTemplate * param0) +void StringTemplate_ClearArgs(StringTemplate *template) { - u32 v0; - - for (v0 = 0; v0 < param0->unk_00; v0++) { - Strbuf_Clear(param0->unk_08[v0].unk_04); + for (u32 i = 0; i < template->maxArgs; i++) { + Strbuf_Clear(template->args[i].strbuf); } }