From 2ea6caea07ef5926b344871fc283fc1984bd2414 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 5 Jan 2018 21:40:52 -0600 Subject: remove asm and combine easy chat files --- src/easy_chat.c | 446 ------------- src/easy_chat_1.c | 1744 ++++++++++++++++++++++++++++++++++++++++++++++++ src/easy_chat_2.c | 429 ++++++++++++ src/easy_chat_before.c | 1744 ------------------------------------------------ 4 files changed, 2173 insertions(+), 2190 deletions(-) delete mode 100644 src/easy_chat.c create mode 100644 src/easy_chat_1.c delete mode 100644 src/easy_chat_before.c (limited to 'src') diff --git a/src/easy_chat.c b/src/easy_chat.c deleted file mode 100644 index 88afa8fe3..000000000 --- a/src/easy_chat.c +++ /dev/null @@ -1,446 +0,0 @@ -#include "global.h" -#include "easy_chat.h" -#include "ewram.h" -#include "constants/easy_chat.h" -#include "data2.h" -#include "event_data.h" -#include "field_message_box.h" -#include "pokedex.h" -#include "random.h" -#include "string_util.h" -#include "strings.h" -#include "strings2.h" -#include "text.h" - -static u16 sub_80EB9D8(void); -static u16 sub_80EB960(void); - -extern void *gEasyChatGroupWords[]; -extern const u8 gEasyChatGroupSizes[]; - -extern u16 gSpecialVar_0x8004; - -// put this in .bss, damnit! -__attribute__((section(".bss"))) u8 gUnknown_03000740 = 0; - -// returns the end of the destination buffer text -u8 *EasyChat_GetWordText(u8 *dst, u16 word) -{ - u16 group; - u16 wordIndex; - u8 *src; - u16 i; - - if (sub_80EB37C(word)) - return StringCopy(dst, gOtherText_ThreeQuestions); - - if (word == 0xFFFF) - { - *dst = EOS; - return dst; - } - else - { - group = EC_GROUP(word); - wordIndex = EC_INDEX(word); - switch (group) - { - case EC_GROUP_POKEMON: // 0 - case EC_GROUP_POKEMON_2: // 21 - dst = StringCopy(dst, gSpeciesNames[wordIndex]); - break; - case EC_GROUP_MOVE_1: // 18 - case EC_GROUP_MOVE_2: // 19 - dst = StringCopy(dst, gMoveNames[wordIndex]); - break; - default: - src = gEasyChatGroupWords[group]; - for (i = wordIndex - 1; i != 0xFFFF; i--) - { - while (*src++ != EOS) - ; - } - dst = StringCopy(dst, src); - break; - } - *dst = EOS; - return dst; - } -} - -u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16 arg2, u16 arg3) -{ - u16 i; - u16 n; - - const u16 i1 = arg2 - 1; - - for (i = 0; i < arg3; i++) - { - u16 word; - - for (n = 0; n < i1; n++) - { - dst = EasyChat_GetWordText(dst, words[0]); - - if (words[0] != 0xFFFF) - { - dst[0] = CHAR_SPACE; - dst++; - } - - words++; - } - - word = words[0]; - words++; - dst = EasyChat_GetWordText(dst, word); - - dst[0] = CHAR_NEWLINE; - dst++; - } - - dst--; - dst[0] = EOS; - - return dst; -} - -u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3) -{ - u16 i; - u16 n; - - const u16 i1 = arg2 - 1; - - for (i = 0; i < arg3; i++) - { - u16 word; - - for (n = 0; n < i1; n++) - { - dst = EasyChat_GetWordText(dst, words[0]); - - if (words[0] != 0xFFFF) - { - dst[0] = CHAR_SPACE; - dst++; - } - - words++; - } - - word = words[0]; - words++; - dst = EasyChat_GetWordText(dst, word); - - // Only difference with ConvertEasyChatWordsToString - dst[0] = (i == 0) ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; - dst++; - } - - dst--; - dst[0] = EOS; - - return dst; -} - - -u16 unref_sub_80EB5E0(u16 arg0) -{ - const u8 *chars; - u16 i; - u16 length; - int group, word; - - - if (arg0 == 0xFFFF) - return 0; - - group = EC_GROUP(arg0); - word = EC_INDEX(arg0); - switch (group) - { - case EC_GROUP_POKEMON: // 0 - case EC_GROUP_POKEMON_2: // 21 - chars = gSpeciesNames[word]; - break; - case EC_GROUP_MOVE_1: // 18 - case EC_GROUP_MOVE_2: // 19 - chars = gMoveNames[word]; - break; - default: - chars = gEasyChatGroupWords[group]; - for (i = word - 1; i != 0xFFFF; i--) - { - while (*chars++ != EOS) - ; - } - break; - } - - length = 0; - while (*chars != EOS) - { - chars++; - length++; - } - - return length; -} - -bool8 sub_80EB680(u16 *arg0, u16 arg1, u16 arg2, u16 arg3) -{ - return FALSE; -} - -void unref_sub_80EB684(u8 arg0, u16 arg1) -{ - u16 *ptr; - u16 c; - - // FIXME: find actual tv shows used - switch (arg0) - { - case 5: - c = 6; - ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x04); - break; - case 7: - c = 2; - ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x1C); - break; - case 8: - c = 1; - ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x02); - break; - default: - return; - } - - c -= 1; - while (c != 0xFFFF) - { - *ptr = -1; - ptr++; - c -= 1; - } -} - -void sub_80EB6FC(u16 *arg0, u16 arg1) -{ - u16 i; - - for (i = arg1 - 1; i != 0xFFFF; i--) - { - *arg0 = 0xFFFF; - arg0++; - } - -} - -u16 sub_80EB72C(u16 group) -{ - u16 local1 = Random() % gEasyChatGroupSizes[group]; - - if (group == EC_GROUP_POKEMON - || group == EC_GROUP_POKEMON_2 - || group == EC_GROUP_MOVE_1 - || group == EC_GROUP_MOVE_2) - { - local1 = ((u16 *) gEasyChatGroupWords[group])[local1]; - } - - return ((group & 0x7F) << 9) | (local1 & 0x1FF); -} - -u16 sub_80EB784(u16 group) -{ - if (!sub_80EAD7C(group)) - return -1; - - if (group != EC_GROUP_POKEMON) - { - if (group == EC_GROUP_TRENDY_SAYING) - return sub_80EB960(); - } - else - { - return sub_80EB9D8(); - } - - return sub_80EB72C(group); -} - -void sub_80EB7C4(void) -{ - u16 *words; - u16 arg1, arg2; - - switch (gSpecialVar_0x8004) - { - case 0: - words = gSaveBlock1.easyChats.unk2B1C; - arg1 = 2; - arg2 = 2; - break; - case 1: - words = gSaveBlock1.easyChats.unk2B28; - if (sub_80EB680(gSaveBlock1.easyChats.unk2B28, 3, 2, 20)) - { - arg1 = 2; - arg2 = 3; - } - else - { - arg1 = 3; - arg2 = 2; - } - break; - case 2: - words = gSaveBlock1.easyChats.unk2B34; - arg1 = 3; - arg2 = 2; - break; - case 3: - words = gSaveBlock1.easyChats.unk2B40; - arg1 = 3; - arg2 = 2; - break; - default: - return; - } - - ConvertEasyChatWordsToString(gStringVar4, words, arg1, arg2); - ShowFieldAutoScrollMessage(gStringVar4); -} - -void BufferRandomHobbyOrLifestyleString(void) -{ - u16 group, local2; - - if (Random() & 1) - group = EC_GROUP_HOBBIES; - else - group = EC_GROUP_LIFESTYLE; - - local2 = sub_80EB784(group); - EasyChat_GetWordText(gStringVar2, local2); -} - -u8 sub_80EB868(u8 arg0) -{ - int offset; - int index; - - index = arg0 / 8; - offset = arg0 % 8; - return (gSaveBlock1.unk2D8C[index] >> offset) & 1; -} - -void sub_80EB890(u8 arg0) -{ - int offset; - int index; - - if (arg0 < 33) - { - index = arg0 / 8; - offset = arg0 % 8; - gSaveBlock1.unk2D8C[index] |= 1 << offset; - } -} - -u8 sub_80EB8C0(void) -{ - u8 i, count; - - for (i = 0, count = 0; i < 33; i++) - { - if (sub_80EB868(i)) - count++; - } - return count; -} - -u16 sub_80EB8EC(void) -{ - u16 i; - u16 local1, local2; - - local1 = sub_80EB8C0(); - if (local1 == 33) - return -1; - - local2 = Random() % (33 - local1); - for (i = 0; i < 33; i++) - { - if (sub_80EB868(i) == 0) - { - if (local2 == 0) - { - sub_80EB890(i); - return (i & 0x1FF) | 0x2800; - } - local2--; - } - } - return -1; -} - -static u16 sub_80EB960(void) -{ - u16 i; - u16 local1; - - local1 = sub_80EB8C0(); - if (local1 == 0) - return -1; - - local1 = Random() % local1; - for (i = 0; i < 33; i++) - { - if (sub_80EB868(i)) - { - if (local1 == 0) - return (i & 0x1FF) | 0x2800; - local1--; - } - } - - return -1; -} - -u8 sub_80EB9C8(void) -{ - return IsNationalPokedexEnabled(); -} - -static u16 sub_80EB9D8(void) -{ - u16 *speciesList; - u16 local1; - u16 i; - - local1 = sub_80EAE88(0); - - if (local1 == 0) - return -1; - - local1 = Random() % local1; - speciesList = (u16 *) gEasyChatGroupWords[EC_GROUP_POKEMON]; - for (i = 0; i < gEasyChatGroupSizes[EC_GROUP_POKEMON]; i++) - { - const u16 dexNum = SpeciesToNationalPokedexNum(*speciesList); - const u8 local2 = GetSetPokedexFlag(dexNum, 0); - - if (local2) - { - if (local1 == 0) - return *speciesList & 0x1FF; - local1--; - } - speciesList++; - } - return -1; -} diff --git a/src/easy_chat_1.c b/src/easy_chat_1.c new file mode 100644 index 000000000..59e463260 --- /dev/null +++ b/src/easy_chat_1.c @@ -0,0 +1,1744 @@ +#include "global.h" +#include "constants/easy_chat.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "dewford_trend.h" +#include "easy_chat.h" +#include "event_data.h" +#include "ewram.h" +#include "graphics.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "unknown_task.h" + +extern const struct WindowConfig gWindowConfig_81E6D54; +extern const struct WindowConfig gWindowConfig_81E6DA8; + +extern void sub_80546B8(void); + +#define shared1000 (*(struct Shared1000 *)(gSharedMem + 0x1000)) + +const u16 gMysteryEventPhrase[] = {EC_WORD_MYSTERY, EC_WORD_EVENT, EC_WORD_IS, EC_WORD_EXCITING}; + +const u16 gBerryMasterWifePhrases[][2] = +{ +#if ENGLISH + {EC_WORD_GREAT, EC_WORD_BATTLE}, + {EC_WORD_CHALLENGE, EC_WORD_CONTEST}, + {EC_WORD_OVERWHELMING, EC_POKEMON(LATIAS)}, + {EC_WORD_COOL, EC_POKEMON(LATIOS)}, + {EC_WORD_SUPER, EC_WORD_HUSTLE}, +#else + {EC_WORD_GREAT, EC_WORD_FIGHT}, + {EC_WORD_CONTEST, EC_WORD_CHALLENGE}, + {EC_POKEMON(LATIAS), EC_WORD_OVERWHELMING}, + {EC_POKEMON(LATIOS), EC_WORD_COOL}, + {EC_WORD_SUPER, 0xFFFF}, +#endif +}; + +// const pointer to shared1000. easy_chat might be two separate files. +struct Shared1000 *const gUnknown_083DB694 = &shared1000; + +const struct UnknownTaskStruct gUnknown_083DB698 = +{ + ®_BG3VOFS, + ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, + 1 +}; + +const u8 gUnknown_083DB6A4[] = {4, 0, 0, 0, 1, 5, 0, 2, 2, 3, 2, 2, 2, 3}; + +// choose by alphabet keyboard +const u8 gUnknown_083DB6B2[][16] = +{ + _("ABCDEF "), + _("GHIJKL"), + _("MNOPQRS"), + _("TUVWXYZ"), +}; + +struct EasyChatPrompt +{ + const u8 *text1; + const u8 *text2; + bool8 unk8; +}; + +const struct EasyChatPrompt gUnknown_083DB6F4[] = +{ + {OtherText_MakeProfilePage1, OtherText_MakeProfilePage2, TRUE}, + {OtherText_MakeMessagePage1, OtherText_MakeMessagePage2, TRUE}, + {OtherText_CombineNinePhrasesPage1, OtherText_CombineNinePhrasesPage2, TRUE}, + {OtherText_DescribeFeelingsPage1, OtherText_DescribeFeelingsPage2, TRUE}, + {OtherText_ImproveBardSongPage1, OtherText_ImproveBardSongPage2, TRUE}, + {OtherText_CombineTwoPhrasesPage1, OtherText_CombineTwoPhrasesPage2, TRUE}, + {OtherText_YourProfile, OtherText_ConfirmTrendyPage2, FALSE}, + {OtherText_YourFeelingBattle, OtherText_ConfirmTrendyPage2, TRUE}, + {OtherText_SetWinMessage, OtherText_ConfirmTrendyPage2, TRUE}, + {OtherText_SetLossMessage, OtherText_ConfirmTrendyPage2, TRUE}, + {OtherText_MailMessage, OtherText_ConfirmTrendyPage2, TRUE}, + {OtherText_MailSalutation, OtherText_ConfirmTrendyPage2, TRUE}, + {OtherText_NewSong, OtherText_ConfirmTrendyPage2, FALSE}, + {OtherText_TheAnswer, OtherText_ConfirmTrendyPage2, FALSE}, + {OtherText_ConfirmTrendyPage1, OtherText_ConfirmTrendyPage2, TRUE}, + {OtherText_HipsterPage1, OtherText_HipsterPage2, TRUE}, + {OtherText_WithFourPhrases, OtherText_CombineNinePhrasesPage2, TRUE}, +}; + +const u8 gUnknown_083DB7C0[][2] = +{ + { 0, 6}, + { 1, 7}, + { 1, 8}, + { 1, 9}, + { 2, 10}, + {16, 13}, + { 4, 12}, + { 3, 13}, + { 3, 13}, + { 5, 14}, + { 3, 13}, + { 3, 13}, + { 3, 13}, + {15, 13}, +}; + +void sub_80E62F8(void); +void sub_80E6424(void); +void sub_80E6554(void); +void sub_80E6630(void); +void sub_80E6690(void); +void sub_80E682C(void (*)(void)); +void sub_80E69F8(void); +void sub_80E6A6C(void); +void sub_80E6A88(void); +void sub_80E6AA8(void); +void sub_80E6AC4(void); +void sub_80E6AE4(void); +void sub_80E6BC0(void); +void sub_80E6C84(void); +void sub_80E6D7C(void); +void sub_80E6F68(void); +void sub_80E6FC8(void); +void sub_80E7114(void); +void sub_80E718C(void); +void sub_80E7218(void); +void sub_80E7294(void); +void sub_80E7324(void); +void sub_80E73D0(void); +void sub_80E7458(void); +void sub_80E752C(void); +void sub_80E7574(void); +bool8 sub_80E75D8(void); +bool8 sub_80E77C8(void); +void sub_80E7A98(void); +void sub_80E7AD4(void); +bool8 sub_80E7B40(void); +void sub_80E7D30(void); +void sub_80E7D6C(void); +void sub_80E7D9C(void); +bool8 sub_80E7DD0(void); +void sub_80E7E50(void); +void sub_80E7F00(u16, u16); +u8 sub_80E7FA8(void); +bool8 sub_80E8054(void); +u8 sub_80E8094(void); +u8 sub_80E810C(void); +void sub_80E81C0(void); +void sub_80E81FC(void); +void sub_80E8218(void); + +void sub_80E8398(); +void sub_80E8420(void); +void sub_80E8504(void); +void sub_80E87CC(); + +void sub_80E88F0(void); +void sub_80E8958(); + +void sub_80E8BF4(); +void sub_80E8CEC(void); +void sub_80E8D54(void); +void sub_80E8D8C(); +void sub_80E8DD8(void); +void sub_80E91D4(); +void sub_80E9368(); +void sub_80E95A4(void); +void sub_80E9744(void); +void sub_80E98C4(void); +void sub_80E9974(void); +void sub_80E9A14(void); +void sub_80E9A4C(void); +void sub_80E9AD4(void); +void sub_80E9C94(void); +void sub_80E9D00(void); +void sub_80E9D7C(void); +void sub_80E9E08(); +bool8 sub_80E9E54(void); +void sub_80E9E98(void); +u8 sub_80E9EA8(void); +u8 sub_80E9F50(void); +u8 sub_80E9FD4(void); +u8 sub_80EA014(void); +u8 sub_80EA050(void); +u8 sub_80EA0E4(void); +u8 sub_80EA184(void); +void sub_80EAC5C(void); +void sub_80EAD08(void); +u8 sub_80EAD7C(u8); +void sub_80EAECC(void); +void sub_80EB040(void); +void sub_80EB0B0(void); +u8 *sub_80EB218(u8 *, u16, u16); +u16 sub_80EB2D4(); +bool8 sub_80EB680(u16 *, u16, u16, u16); + +void sub_80E60D8(void) +{ + u8 r4 = 3; + u16 *r1; + + switch (gSpecialVar_0x8004) + { + case 0: + r1 = gSaveBlock1.easyChats.unk2B1C; + break; + case 1: + r1 = gSaveBlock1.easyChats.unk2B28; + break; + case 2: + r1 = gSaveBlock1.easyChats.unk2B34; + break; + case 3: + r1 = gSaveBlock1.easyChats.unk2B40; + break; + case 4: + r1 = gSaveBlock1.mail[gSpecialVar_0x8005].words; + break; + case 6: + { + struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; + u16 i; + for (i = 0; i < 6; i++) + bard->temporaryLyrics[i] = bard->songLyrics[i]; + r1 = bard->temporaryLyrics; + } + break; + case 5: + // TODO: Is this the right TV show? + r1 = gSaveBlock1.tvShows[gSpecialVar_0x8005].fanclubLetter.pad04; + r4 = gSpecialVar_0x8006; + break; + case 7: + // TODO: Is this the right TV show? + r1 = &gSaveBlock1.tvShows[gSpecialVar_0x8005].fanclubOpinions.var1C[gSpecialVar_0x8006]; + r4 = 1; + break; + case 8: + // TODO: Is this the right TV show? + r1 = &gSaveBlock1.tvShows[gSpecialVar_0x8005].fanclubOpinions.var02; + r4 = 0; + break; + case 9: + r1 = NULL; + break; + case 10: + r1 = &gSaveBlock1.gabbyAndTyData.quote; + *r1 = 0xFFFF; + r4 = 1; + break; + case 11: + // TODO: Is this the right TV show? + r1 = &gSaveBlock1.tvShows[gSpecialVar_0x8005].bravoTrainer.var04[gSpecialVar_0x8006]; + r4 = 0; + break; + case 12: + // TODO: Is this the right TV show? + r1 = gSaveBlock1.tvShows[gSpecialVar_0x8005].bravoTrainerTower.var18; + r4 = 1; + break; + case 13: + shared1000.unk9C7C = 0xFFFF; + shared1000.unk9C7E = -1; + r1 = &shared1000.unk9C7C; + break; + default: + return; + } + sub_80E62A0(gSpecialVar_0x8004, r1, sub_80546B8, r4); +} + +void sub_80E62A0(u8 a, u16 *b, void (*c)(void), u8 d) +{ + shared1000.unk0 = c; + shared1000.unk4 = b; + shared1000.unk8 = a; + shared1000.unkB = d; + if (a == 9) + { + shared1000.unk4 = &shared1000.unk9C7C; + shared1000.unk9C7C = gSaveBlock1.easyChatPairs[0].words[0]; + shared1000.unk9C7E = gSaveBlock1.easyChatPairs[0].words[1]; + } + SetMainCallback2(sub_80E62F8); +} + +void sub_80E62F8(void) +{ + switch (gMain.state) + { + case 0: + default: + REG_DISPCNT = 0; + SetVBlankCallback(0); + ResetPaletteFade(); + ResetSpriteData(); + dp12_8087EA4(); + remove_some_task(); + sub_80EAD08(); + sub_80895F8(gUnknown_083DB698); + FreeSpriteTileRanges(); + FreeAllSpritePalettes(); + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E6DA8); + break; + case 2: + InitMenuWindow(&gWindowConfig_81E6D54); + InitMenuWindow(&gWindowConfig_81E6DA8); + MenuZeroFillScreen(); + break; + case 3: + sub_80E6424(); + break; + case 4: + sub_80E8DD8(); + break; + case 5: + sub_80E8218(); + sub_80E8CEC(); + break; + case 6: + sub_80E69F8(); + sub_80E682C(sub_80E6AA8); + SetVBlankCallback(sub_80E6A6C); + break; + case 7: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + break; + case 8: + REG_DISPCNT = 0x1F40; + SetMainCallback2(sub_80E6A88); + FlagSet(FLAG_SYS_CHAT_USED); + break; + } + gMain.state++; +} + +void sub_80E6424(void) +{ + shared1000.unk9 = gUnknown_083DB6A4[shared1000.unk8]; + switch (shared1000.unk9) + { + case 4: + shared1000.unkA = 4; + shared1000.unk83 = 2; + shared1000.unk84 = 2; + shared1000.unk88 = 5; + shared1000.unk8A = 4; + break; + case 5: + shared1000.unkA = 4; + shared1000.unk83 = 1; + shared1000.unk84 = 4; + shared1000.unk88 = 16; + shared1000.unk8A = 2; + break; + case 0: + shared1000.unkA = 6; + shared1000.unk83 = 2; + shared1000.unk84 = 3; + shared1000.unk88 = 4; + shared1000.unk8A = 3; + break; + case 1: + shared1000.unkA = 9; + shared1000.unk83 = 2; + shared1000.unk84 = 5; + shared1000.unk88 = 4; + shared1000.unk8A = 0; + break; + case 2: + shared1000.unkA = 1; + shared1000.unk83 = 1; + shared1000.unk84 = 1; + shared1000.unk88 = 16; + shared1000.unk8A = 4; + break; + case 3: + shared1000.unkA = 2; + shared1000.unk83 = 2; + shared1000.unk84 = 1; + shared1000.unk88 = 5; + shared1000.unk8A = 3; + break; + } + shared1000.unk86 = 0; + shared1000.unk85 = 0; + shared1000.unk87 = 0; + shared1000.unk26 = 0; + shared1000.unk1BA = 0; + shared1000.unk1BE = 2; + sub_80E6554(); + sub_80EAECC(); + sub_80EB040(); + sub_80E7E50(); + sub_80E6630(); + sub_80E6690(); +} + +void sub_80E6554(void) +{ + u16 r4 = 0; + u16 r7; + u16 r5; + + for (r7 = 0; ; r7++) + { + for (r5 = 0; r5 < 2; r5++) + { + shared1000.unk2A[r7][r5] = r4++; + if (r4 == 17) + break; + } + if (r4 == 17) + break; + } + shared1000.unk28 = 17; + while (r4 < 22) + { + if (sub_80EAD7C(r4) != 0) + { + r5++; + if (r5 > 1) + { + r7++; + r5 = 0; + } + shared1000.unk2A[r7][r5] = r4; + shared1000.unk78[r4 - 17] = 1; // hmm... + shared1000.unk28++; + } + else + { + shared1000.unk78[r4 - 17] = 0; + } + r4++; + } + shared1000.unk1B6 = (shared1000.unk28 + 1) / 2; +} + +void sub_80E6630(void) +{ + u8 i; + u8 r3; + + for (i = 0; i < 4; i++) + { + const u8 *row = gUnknown_083DB6B2[i]; + + for (r3 = 0; row[r3] != EOS; r3++) + { + if (row[r3] != CHAR_SPACE) + shared1000.unk40[i][r3] = row[r3] + 0x46; + else + shared1000.unk40[i][r3] = CHAR_SPACE; + } + } +} + +void sub_80E6690(void) +{ + u8 *pointers[] = + { + shared1000.unk9C80, shared1000.unk9CC9, + shared1000.unk9D12, shared1000.unk9D5B, + }; + u8 *r3; + u16 i; + + for (i = 0; i < 2; i++) + { + const struct EasyChatPrompt *prompt = &gUnknown_083DB6F4[gUnknown_083DB7C0[shared1000.unk8][i]]; + + r3 = StringCopy(pointers[i * 2 + 0], prompt->text1); + if (prompt->unk8) + { + StringCopy(pointers[i * 2 + 1], prompt->text2); + } + else + { + *r3++ = CHAR_SPACE; + StringCopy(r3, prompt->text2); + *pointers[i * 2 + 1] = EOS; + } + } + + for (i = 0; i < 0x24; i++) + shared1000.unk9DA4[i] = 0; + shared1000.unk9DA4[i] = 0xFF; + + r3 = shared1000.unk9F6E; + r3[0] = EXT_CTRL_CODE_BEGIN; + r3[1] = 0x11; + r3[2] = 0xE0; + r3[3] = 0xFF; +} + +// Default profile phrase +const u16 gUnknown_083DB7EC[] = +{ +#if ENGLISH + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_POKEMON, + EC_WORD_GREAT, +#else + EC_WORD_I_AM, + EC_WORD_BIG, + EC_WORD_IN, + EC_WORD_POKEMON, +#endif +}; + +const u16 gUnknown_083DB7F4[] = +{ + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_QUES, + EC_WORD_HERE_I_COME, + EC_WORD_EXCL, +}; + +// ResetDefaultEasyChatPhrases +void InitEasyChatPhrases(void) +{ + u16 i; + u16 j; + + for (i = 0; i < 4; i++) + gSaveBlock1.easyChats.unk2B1C[i] = gUnknown_083DB7EC[i]; + + for (i = 0; i < 6; i++) + gSaveBlock1.easyChats.unk2B28[i] = gUnknown_083DB7F4[i]; + + for (i = 0; i < 6; i++) + { + gSaveBlock1.easyChats.unk2B34[i] = 0xFFFF; + gSaveBlock1.easyChats.unk2B40[i] = 0xFFFF; + } + + for (i = 0; i < 16; i++) + { + for (j = 0; j < 9; j++) + gSaveBlock1.mail[i].words[j] = 0xFFFF; + } + + for (i = 0; i < 64; i++) + gSaveBlock1.unk2D8C[i] = 0; +} + +void sub_80E682C(void (*func)(void)) +{ + shared1000.unk20 = func; + shared1000.unk24 = 0; +} + +void sub_80E683C(void) +{ + u16 i; + + if (shared1000.unk26 == 0) + { + for (i = 0; i < shared1000.unk1B6; i++) + shared1000.unk1AA[i] = 2; + shared1000.unk1AA[i - 1] = shared1000.unk28 % 2; + if (shared1000.unk1AA[i - 1] == 0) + shared1000.unk1AA[i - 1] = 2; + } + else + { + shared1000.unk1AA[0] = 7; + shared1000.unk1AA[1] = 6; + shared1000.unk1AA[2] = 7; + shared1000.unk1AA[3] = 7; + } + shared1000.unk1A8 = 0; + shared1000.unk1A9 = 0; + shared1000.unk1B5 = 0; + shared1000.unk1B7 = 0; + sub_80E9A4C(); +} + +void sub_80E68E8(void) +{ + sub_80EB0B0(); + if (shared1000.unk26 == 0) + { + u16 i; + u8 r6; + + r6 = shared1000.unk1B8; + shared1000.unk9A28 = (shared1000.unk4178[r6] + 1) / 2; + for (i = 0; i < shared1000.unk9A28; i++) + shared1000.unk99A6[i] = 2; + i--; + shared1000.unk99A6[i] = shared1000.unk4178[r6] % 2; + if (shared1000.unk99A6[i] == 0) + shared1000.unk99A6[i] = 2; + } + else + { + u16 i; + u8 r6; + + r6 = shared1000.unk1B8; + shared1000.unk9A28 = (shared1000.unk4142[r6] + 1) / 2; + for (i = 0; i < shared1000.unk9A28; i++) + shared1000.unk99A6[i] = 2; + i--; + shared1000.unk99A6[i] = shared1000.unk4142[r6] % 2; + if (shared1000.unk99A6[i] == 0) + shared1000.unk99A6[i] = 2; + } + shared1000.unk99A4 = 0; + shared1000.unk99A5 = 0; + shared1000.unk9A29 = 0; + sub_80E9A4C(); +} + +void sub_80E69F8(void) +{ + switch (shared1000.unk8) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 6: + case 9: + case 13: + default: + sub_80E9368(shared1000.unk8); + break; + case 5: + case 7: + case 8: + case 10: + case 11: + case 12: + sub_80E9368(shared1000.unk8); + sub_80E8BF4(shared1000.unkB, shared1000.unk9); + break; + } +} + +void sub_80E6A6C(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + sub_80EAC5C(); + TransferPlttBuffer(); + sub_8089668(); +} + +void sub_80E6A88(void) +{ + shared1000.unk20(); + AnimateSprites(); + BuildOamBuffer(); + sub_80EAD08(); +} + +void sub_80E6AA8(void) +{ + if (!UpdatePaletteFade()) + sub_80E682C(sub_80E6AC4); +} + +void sub_80E6AC4(void) +{ + sub_80E88F0(); + sub_80E8398(0); + sub_80E91D4(0); + sub_80E682C(sub_80E6AE4); +} + +void sub_80E6AE4(void) +{ + shared1000.unk87 = sub_80E75D8(); + if (shared1000.unk87) + PlaySE(SE_SELECT); + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (shared1000.unk86 == shared1000.unk84) + { + switch (shared1000.unk85) + { + case 0: + sub_80E682C(sub_80E6BC0); + return; + case 1: + sub_80E682C(sub_80E6C84); + return; + case 2: + sub_80E682C(sub_80E6D7C); + return; + } + } + else + { + shared1000.unk27 = shared1000.unk86 * shared1000.unk83 + shared1000.unk85; + sub_80E7574(); + sub_80E682C(sub_80E6F68); + return; + } + } + if (gMain.newKeys & B_BUTTON) + { + sub_80E682C(sub_80E6C84); + } +} + +void sub_80E6BC0(void) +{ + switch (shared1000.unk24) + { + case 0: + sub_80E8398(2); + if (shared1000.unk8 == 6) + { + sub_80E91D4(6); + shared1000.unk24 = 100; + } + else + { + sub_80E91D4(2); + DisplayYesNoMenu(23, 8, 1); + MoveMenuCursor(1); + shared1000.unk24++; + } + break; + case 1: + switch (ProcessMenuInputNoWrap_()) + { + case 0: + sub_80E7D6C(); + sub_80E98C4(); + sub_80E95A4(); + shared1000.unk24++; + break; + case -1: + case 1: + shared1000.unk24++; + break; + } + break; + case 2: + sub_80E81FC(); + sub_80E682C(sub_80E6AC4); + break; + case 100: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + sub_80E682C(sub_80E6AC4); + break; + } +} + +void sub_80E6C84(void) +{ + switch (shared1000.unk24) + { + case 0: + sub_80E8398(2); + sub_80E91D4(3); + DisplayYesNoMenu(23, 8, 0); + MoveMenuCursor(1); + if (shared1000.unk8 == 9 + || shared1000.unk8 == 4 + || shared1000.unk8 == 7 + || shared1000.unk8 == 8 + || shared1000.unk8 == 10 + || shared1000.unk8 == 11 + || shared1000.unk8 == 12 + || shared1000.unk8 == 5 + || shared1000.unk8 == 13) + shared1000.unk24 = 2; + else + shared1000.unk24++; + break; + case 1: + switch (ProcessMenuInputNoWrap_()) + { + case 0: + sub_80E91D4(4); + DisplayYesNoMenu(23, 8, 0); + MoveMenuCursor(1); + shared1000.unk24++; + break; + case -1: + case 1: + shared1000.unk24 = 0xFF; + break; + } + break; + case 2: + switch (ProcessMenuInputNoWrap_()) + { + case 0: + gSpecialVar_Result = 0; + sub_80E682C(sub_80E752C); + break; + case -1: + case 1: + shared1000.unk24 = 0xFF; + break; + } + break; + case 0xFF: + HandleDestroyMenuCursors(); + sub_80E81FC(); + sub_80E682C(sub_80E6AC4); + break; + } +} + +void sub_80E6D7C(void) +{ + switch (shared1000.unk24) + { + case 0: + sub_80E8398(2); + if (sub_80E8054()) + { + sub_80E91D4(5); + shared1000.unk24 = 10; + break; + } + if (shared1000.unk8 == 9) + { + if (sub_80E7FA8() == 0) + { + sub_80E91D4(8); + shared1000.unk24 = 10; + break; + } + if (shared1000.unkC[0] == 0xFFFF || shared1000.unkC[1] == 0xFFFF) + { + sub_80E91D4(9); + shared1000.unk24 = 10; + break; + } + } + if (shared1000.unk8 == 4 && sub_80E7FA8() == 0) + { + sub_80E682C(sub_80E6C84); + } + else + { + sub_80E91D4(1); + sub_80E9744(); + DisplayYesNoMenu(23, 8, 0); + MoveMenuCursor(0); + shared1000.unk24++; + } + break; + case 1: + switch (ProcessMenuInputNoWrap_()) + { + case 0: + gSpecialVar_Result = (sub_80E7FA8() != 0); + sub_80E7D9C(); + if (shared1000.unk8 == 0) + gSpecialVar_0x8004 = sub_80E8094(); + if (shared1000.unk8 == 9) // dewford trend? + { + sub_80E81C0(); + gSpecialVar_0x8004 = sub_80FA364(&shared1000.unk9C7C); + } + if (shared1000.unk8 == 13) + { + if (shared1000.unkC[0] == 0xFFFF || shared1000.unkC[1] == 0xFFFF) + gSpecialVar_Result = 0; + gSpecialVar_0x8004 = sub_80E810C(); + } + sub_80E682C(sub_80E752C); + break; + case -1: + case 1: + HandleDestroyMenuCursors(); + sub_80E81FC(); + if (shared1000.unk8 == 6 && sub_80E7FA8() != 0) + { + shared1000.unk24 = 100; + } + else + { + sub_80E95A4(); + sub_80E682C(sub_80E6AC4); + } + break; + } + break; + case 10: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + sub_80E682C(sub_80E6AC4); + break; + case 100: + sub_80E91D4(7); + shared1000.unk24++; + // fall through + case 101: + if (gMain.newKeys & A_BUTTON) + shared1000.unk24++; + break; + case 102: + sub_80E7E50(); + sub_80E95A4(); + sub_80E682C(sub_80E6AC4); + break; + } +} + +void sub_80E6F68(void) +{ + switch (shared1000.unk24) + { + case 0: + sub_80E8398(1); + sub_80E91D4(10); + sub_80E683C(); + sub_80E9974(); + sub_80E9E98(); + shared1000.unk24++; + break; + case 1: + if (sub_80E9EA8() != 0) + { + sub_80E8D8C(1); + sub_80E8420(); + sub_80E8958(0); + sub_80E682C(sub_80E6FC8); + } + break; + } +} + +void sub_80E6FC8(void) +{ + shared1000.unk96 = sub_80E77C8(); + if (shared1000.unk1C0 != 0) + { + PlaySE(SE_SELECT); + shared1000.unk1C4 = sub_80E6FC8; + sub_80E682C(sub_80E7458); + } + else + { + if (shared1000.unk96) + PlaySE(SE_SELECT); + if (gMain.newKeys & A_BUTTON) + { + if (shared1000.unk1B7 != 0) + { + PlaySE(SE_SELECT); + switch (shared1000.unk1A8) + { + case 1: + sub_80E682C(sub_80E718C); + break; + case 2: + if (shared1000.unk8 != 6) + { + sub_80E7F00(shared1000.unk27, 0xFFFF); + sub_80E7574(); + sub_80E95A4(); + } + break; + case 3: + sub_80E682C(sub_80E7114); + break; + } + } + else + { + if (shared1000.unk26 == 0 + || shared1000.unk4142[shared1000.unk40[shared1000.unk1A8][shared1000.unk1A9]] != 0) + { + PlaySE(SE_SELECT); + sub_80E7AD4(); + sub_80E682C(sub_80E7218); + } + } + } + else if (gMain.newKeys & B_BUTTON) + { + sub_80E682C(sub_80E7114); + } + else if (gMain.newKeys & SELECT_BUTTON) + { + sub_80E682C(sub_80E718C); + } + } +} + +void sub_80E7114(void) +{ + switch (shared1000.unk24) + { + case 0: + sub_80E8504(); + sub_80E9E98(); + sub_80E88F0(); + sub_80E8D8C(0); + shared1000.unk24++; + break; + case 1: + case 2: + shared1000.unk24++; + break; + case 3: + if (sub_80E9F50() != 0) + shared1000.unk24++; + break; + case 4: + sub_80E682C(sub_80E6AC4); + break; + } +} + +void sub_80E718C(void) +{ + switch (shared1000.unk24) + { + case 0: + sub_80E8504(); + sub_80E9E98(); + sub_80E88F0(); + shared1000.unk24++; + sub_80E8D54(); + break; + case 1: + if (sub_80E9FD4() != 0) + { + shared1000.unk26 = !shared1000.unk26; + sub_80E683C(); + sub_80E9974(); + sub_80E9E98(); + shared1000.unk24++; + } + break; + default: + shared1000.unk24++; + break; + case 8: + if (sub_80EA014() != 0) + { + sub_80E8420(); + sub_80E8958(0); + sub_80E682C(sub_80E6FC8); + } + break; + } +} + +void sub_80E7218(void) +{ + switch (shared1000.unk24) + { + default: + shared1000.unk24++; + break; + case 8: + sub_80E8D8C(0); + sub_80E8504(); + sub_80E9AD4(); + sub_80E68E8(); + sub_80E88F0(); + sub_80E9E98(); + shared1000.unk24++; + break; + case 9: + if (sub_80EA050() != 0) + { + sub_80E9C94(); + shared1000.unk24++; + } + break; + case 10: + sub_80E87CC(1); + sub_80E8958(1); + sub_80E682C(sub_80E7294); + break; + case 11: + break; + } +} + +void sub_80E7294(void) +{ + shared1000.unk1B9 = sub_80E7B40(); + if (shared1000.unk1C0 != 0) + { + PlaySE(SE_SELECT); + shared1000.unk1C4 = sub_80E7294; + sub_80E682C(sub_80E7458); + } + else + { + if (shared1000.unk1B9) + PlaySE(SE_SELECT); + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_80E682C(sub_80E7324); + } + else if (gMain.newKeys & B_BUTTON) + { + sub_80E682C(sub_80E73D0); + } + } +} + +void sub_80E7324(void) +{ + switch (shared1000.unk24) + { + case 0: + if (!sub_80E7DD0()) + { + sub_80E682C(sub_80E7294); + } + else + { + sub_80E88F0(); + sub_80E87CC(0); + shared1000.unk24++; + } + break; + case 1: + shared1000.unk24++; + break; + case 2: + sub_80E9E98(); + shared1000.unk24++; + break; + case 3: + if (sub_80EA184() != 0) + shared1000.unk24++; + break; + case 4: + if (shared1000.unk8 == 6 && sub_80E7FA8() != 0) + sub_80E682C(sub_80E6D7C); + else + sub_80E682C(sub_80E6AC4); + break; + } +} + +void sub_80E73D0(void) +{ + switch (shared1000.unk24) + { + case 0: + sub_80E87CC(0); + sub_80E88F0(); + shared1000.unk24++; + break; + case 1: + sub_80E9AD4(); + sub_80E9E98(); + shared1000.unk24++; + break; + case 2: + if (sub_80EA0E4() != 0) + { + sub_80E8D8C(1); + sub_80E9A14(); + shared1000.unk24++; + } + break; + case 3: + sub_80E8420(); + sub_80E8958(0); + shared1000.unk24++; + break; + case 4: + sub_80E9974(); + sub_80E682C(sub_80E6FC8); + break; + } +} + +void sub_80E7458(void) +{ + switch (shared1000.unk24) + { + case 0: + if (shared1000.unk1C4 == sub_80E6FC8) + sub_80E9D7C(); + else + sub_80E9D00(); + sub_80E9E08(shared1000.unk1BE); + shared1000.unk24++; + break; + case 1: + if (sub_80E9E54()) + { + if (shared1000.unk1C4 == sub_80E6FC8) + { + sub_80E9D7C(); + shared1000.unk1B5 += shared1000.unk1C0; + sub_80E7A98(); + shared1000.unk96 = TRUE; + } + else + { + shared1000.unk9A29 += shared1000.unk1C0; + sub_80E7D30(); + shared1000.unk1B9 = 1; + } + shared1000.unk1BE = 2; + sub_80E682C(shared1000.unk1C4); + } + break; + } +} + +void sub_80E752C(void) +{ + switch (shared1000.unk24) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + shared1000.unk24++; + break; + case 1: + if (!UpdatePaletteFade()) + SetMainCallback2(shared1000.unk0); + break; + } +} + +void sub_80E7574(void) +{ + if (shared1000.unk8 == 1 + && shared1000.unk7E[shared1000.unk86] == 2 + && sub_80EB2D4(shared1000.unkC[shared1000.unk27]) != 7) + shared1000.unk7D = 1; + else + shared1000.unk7D = 0; + shared1000.unk7D = 0; // What the hell? +} + +bool8 sub_80E75D8(void) +{ + bool8 pressedUpDown = FALSE; + u8 r0; + + if (gMain.newKeys & START_BUTTON) + { + shared1000.unk86 = shared1000.unk84; + shared1000.unk85 = 2; + return TRUE; + } + + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + shared1000.unk86--; + if (shared1000.unk86 < 0) + shared1000.unk86 = shared1000.unk84; + pressedUpDown = TRUE; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + shared1000.unk86++; + if (shared1000.unk86 > shared1000.unk84) + shared1000.unk86 = 0; + pressedUpDown = TRUE; + } + + if (pressedUpDown) + { + if (shared1000.unk9 == 2) + { + if (shared1000.unk86 == shared1000.unk84) + shared1000.unk85 = 2; + else + shared1000.unk85 = 0; + return TRUE; + } + else + { + if (shared1000.unk85 >= shared1000.unk83) + shared1000.unk85 = shared1000.unk83 - 1; + if (shared1000.unk86 != shared1000.unk84) + { + r0 = shared1000.unk86 * shared1000.unk83 + shared1000.unk85; + if (r0 >= shared1000.unkA) + shared1000.unk85 = r0 - shared1000.unkA; + } + return TRUE; + } + } + else + { + if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + if (--shared1000.unk85 < 0) + { + if (shared1000.unk86 == shared1000.unk84) + { + shared1000.unk85 = 2; + } + else + { + shared1000.unk85 = shared1000.unk83 - 1; + r0 = shared1000.unk86 * shared1000.unk83 + shared1000.unk85; + if (r0 >= shared1000.unkA) + shared1000.unk85 = r0 - shared1000.unkA; + } + } + return TRUE; + } + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + if (shared1000.unk86 == shared1000.unk84) + { + if (++shared1000.unk85 > 2) + shared1000.unk85 = 0; + } + else + { + if (++shared1000.unk85 >= shared1000.unk83) + shared1000.unk85 = 0; + r0 = shared1000.unk86 * shared1000.unk83 + shared1000.unk85; + if (r0 >= shared1000.unkA) + shared1000.unk85 = r0 - shared1000.unkA; + } + return TRUE; + } + } + return FALSE; +} + +bool8 sub_80E77C8(void) +{ + bool8 pressedLeftRight = FALSE; + bool8 pressedUpDown; + + if (shared1000.unk1B7 != 0) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + shared1000.unk1A8--; + if (shared1000.unk1A8 < 1) + shared1000.unk1A8 = 3; + return TRUE; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + shared1000.unk1A8++; + if (shared1000.unk1A8 > 3) + shared1000.unk1A8 = 1; + return TRUE; + } + } + else + { + if (shared1000.unk26 == 1) + { + pressedUpDown = FALSE; + + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + shared1000.unk1A8--; + if (shared1000.unk1A8 < 0) + shared1000.unk1A8 = 3; + pressedUpDown = TRUE; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + shared1000.unk1A8++; + if (shared1000.unk1A8 > 3) + shared1000.unk1A8 = 0; + pressedUpDown = TRUE; + } + + if (pressedUpDown) + { + sub_80E7A98(); + return TRUE; + } + } + else + { + pressedUpDown = FALSE; + shared1000.unk1C0 = 0; + + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (shared1000.unk1A8 == 0) + return FALSE; + shared1000.unk1A8--; + if (shared1000.unk1A8 < shared1000.unk1B5) + shared1000.unk1C0 = -1; + pressedUpDown = TRUE; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (shared1000.unk1A8 >= shared1000.unk1B6 - 1) + return FALSE; + shared1000.unk1A8++; + if (shared1000.unk1A8 > shared1000.unk1B5 + 3) + shared1000.unk1C0 = 1; + pressedUpDown = TRUE; + } + + if (pressedUpDown) + { + if (shared1000.unk1C0 == 0) + { + sub_80E7A98(); + return TRUE; + } + return FALSE; + } + } + } + + if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + if (shared1000.unk1A9 != 0) + shared1000.unk1A9--; + else + shared1000.unk1A9 = shared1000.unk1AA[shared1000.unk1A8]; + pressedLeftRight = TRUE; + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + if (shared1000.unk1B7 != 0 + || shared1000.unk1A9 == shared1000.unk1AA[shared1000.unk1A8]) + shared1000.unk1A9 = 0; + else + shared1000.unk1A9++; + pressedLeftRight = TRUE; + } + + if (pressedLeftRight) + { + s8 r9 = shared1000.unk1B7; + + shared1000.unk1B7 = (shared1000.unk1A9 == shared1000.unk1AA[shared1000.unk1A8]); + if (shared1000.unk1B7 != 0) + { + shared1000.unk1A8 -= shared1000.unk1B5; + if (shared1000.unk1A8 == 0) + { + shared1000.unk1A8 = 1; + shared1000.unk1A9 = shared1000.unk1AA[shared1000.unk1A8]; + } + } + else if (r9 != 0) + { + shared1000.unk1A8 += shared1000.unk1B5; + if (shared1000.unk1A9 != 0) + shared1000.unk1A9 = shared1000.unk1AA[shared1000.unk1A8] - 1; + } + return TRUE; + } + + return FALSE; +} + +void sub_80E7A98(void) +{ + if (shared1000.unk1A9 >= shared1000.unk1AA[shared1000.unk1A8]) + shared1000.unk1A9 = shared1000.unk1AA[shared1000.unk1A8] - 1; +} + +void sub_80E7AD4(void) +{ + if (shared1000.unk26 == 0) + shared1000.unk1B8 = shared1000.unk2A[shared1000.unk1A8][shared1000.unk1A9]; + else + shared1000.unk1B8 = shared1000.unk40[shared1000.unk1A8][shared1000.unk1A9]; +} + +bool8 sub_80E7B40(void) +{ + bool8 pressedUpDown = FALSE; + + shared1000.unk1C0 = 0; + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (shared1000.unk99A4 == 0) + return FALSE; + shared1000.unk99A4--; + if (shared1000.unk99A4 < shared1000.unk9A29) + { + shared1000.unk1C0 = -1; + return FALSE; + } + pressedUpDown = TRUE; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (shared1000.unk99A4 >= shared1000.unk9A28 - 1) + return FALSE; + shared1000.unk99A4++; + if (shared1000.unk99A4 >= shared1000.unk9A29 + 4) + { + shared1000.unk1C0 = 1; + return FALSE; + } + pressedUpDown = TRUE; + } + + if (pressedUpDown) + { + sub_80E7D30(); + return TRUE; + } + + if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + shared1000.unk99A5--; + if (shared1000.unk99A5 < 0) + shared1000.unk99A5 = shared1000.unk99A6[shared1000.unk99A4] - 1; + return TRUE; + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + shared1000.unk99A5++; + if (shared1000.unk99A5 >= shared1000.unk99A6[shared1000.unk99A4]) + shared1000.unk99A5 = 0; + return TRUE; + } + + if (gMain.newKeys & START_BUTTON) + { + if (shared1000.unk9A29 != 0) + { + shared1000.unk1C0 = -shared1000.unk9A29; + if (shared1000.unk1C0 < -4) + shared1000.unk1C0 = -4; + } + shared1000.unk99A4 += shared1000.unk1C0; + shared1000.unk1BE = 4; + } + else if (gMain.newKeys & SELECT_BUTTON) + { + if (shared1000.unk9A29 < shared1000.unk9A28 - 4) + { + shared1000.unk1C0 = shared1000.unk9A28 - 4 - shared1000.unk9A29; + if (shared1000.unk1C0 > 4) + shared1000.unk1C0 = 4; + } + shared1000.unk99A4 += shared1000.unk1C0; + shared1000.unk1BE = 4; + } + + return FALSE; +} + +void sub_80E7D30(void) +{ + if (shared1000.unk99A5 >= shared1000.unk99A6[shared1000.unk99A4]) + shared1000.unk99A5 = shared1000.unk99A6[shared1000.unk99A4] - 1; +} + +void sub_80E7D6C(void) +{ + u16 i; + + for (i = 0; i < shared1000.unkA; i++) + sub_80E7F00(i, 0xFFFF); +} + +void sub_80E7D9C(void) +{ + u16 i; + + for (i = 0; i < shared1000.unkA; i++) + shared1000.unk4[i] = shared1000.unkC[i]; +} + +bool8 sub_80E7DD0(void) +{ + u16 r4 = shared1000.unk9A2A[shared1000.unk99A4][shared1000.unk99A5]; + + if (shared1000.unk7D != 0 + && shared1000.unk7E[shared1000.unk86] > 1 + && sub_80EB2D4(r4) == 7) + return FALSE; + + sub_80E7F00(shared1000.unk27, r4); + sub_80E95A4(); + return TRUE; +} + +void sub_80E7E50(void) +{ + u16 r5 = 0; + u16 i; + u16 j; + + for (i = 0; i < shared1000.unk84; i++) + { + shared1000.unk7E[i] = 0; + for (j = 0; j < shared1000.unk83; j++) + { + shared1000.unkC[r5] = shared1000.unk4[r5]; + shared1000.unk8C[i][j] = 0; + r5++; + } + } +} + +void sub_80E7F00(u16 a, u16 b) +{ + u16 r5 = a / shared1000.unk83; + u16 r8 = a % shared1000.unk83; + u16 r4 = sub_80EB2D4(shared1000.unkC[a]); + u16 r3 = sub_80EB2D4(b); + + if (r4 == 7) + { + if (r3 != 7) + shared1000.unk7E[r5]--; + } + else + { + if (r3 == 7) + shared1000.unk7E[r5]++; + } + r3 = 0; + shared1000.unk8C[r5][r8] = r3; + shared1000.unkC[a] = b; +} + +u8 sub_80E7FA8(void) +{ + u16 r8 = 0; + u16 i; + u8 *r1; + u8 *r2; + + for (i = 0; i < shared1000.unkA; i++) + { + sub_80EB218(shared1000.unk9E14, shared1000.unk4[i], 0); + sub_80EB218(shared1000.unk9E41, shared1000.unkC[i], 0); + r1 = shared1000.unk9E14; + r2 = shared1000.unk9E41; + while (*r1 == *r2 && *r1 != 0xFF) + { + r1++; + r2++; + } + if (*r1 != *r2) + r8++; + } + return r8; +} + +bool8 sub_80E8054(void) +{ + u16 i; + + for (i = 0; i < shared1000.unkA; i++) + { + if (shared1000.unkC[i] != 0xFFFF) + return FALSE; + } + return TRUE; +} + +// CheckMysteryEventPhrase +bool8 sub_80E8094(void) +{ + u16 i; + u8 *r3; + u8 *r4; + + for (i = 0; i < 4; i++) + { + sub_80EB218(shared1000.unk9E14, shared1000.unkC[i], 0); + sub_80EB218(shared1000.unk9E41, gMysteryEventPhrase[i], 0); + r3 = shared1000.unk9E14; + r4 = shared1000.unk9E41; + while (*r3 != 0xFF && *r4 != 0xFF) + { + if (*r3++ != *r4++) + return FALSE; + } + if (*r3 != 0xFF || *r4 != 0xFF) + return FALSE; + } + return TRUE; +} + +u8 sub_80E810C(void) +{ + u16 i; + + for (i = 0; i < 5; i++) + { + u8 *ptr; + u8 *r3; + + ptr = sub_80EB218(shared1000.unk9E6E, shared1000.unkC[0], 0); + *ptr++ = CHAR_SPACE; + sub_80EB218(ptr, shared1000.unkC[1], 0); + + ptr = sub_80EB218(shared1000.unk9EEE, gBerryMasterWifePhrases[i][0], 0); + *ptr++ = CHAR_SPACE; + sub_80EB218(ptr, gBerryMasterWifePhrases[i][1], 0); + + ptr = shared1000.unk9E6E; + r3 = shared1000.unk9EEE; + while (*ptr != EOS && *r3 != EOS) + { + if (*ptr++ != *r3++) + break; + } + if (*ptr == EOS && *r3 == EOS) + return i + 1; + } + return 0; +} + +void sub_80E81C0(void) +{ + u8 *ptr; + + ptr = sub_80EB218(gStringVar2, shared1000.unk9C7C, 0); + *ptr++ = CHAR_SPACE; + sub_80EB218(ptr, shared1000.unk9C7E, 0); +} + +void sub_80E81FC(void) +{ + PlaySE(SE_SELECT); + sub_80E95A4(); + MenuZeroFillWindowRect(0, 0, 29, 13); +} diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index f9843cda9..767128750 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -6,10 +6,12 @@ #include "easy_chat.h" #include "event_data.h" #include "field_map_obj.h" +#include "field_message_box.h" #include "graphics.h" #include "menu.h" #include "palette.h" #include "pokedex.h" +#include "random.h" #include "sprite.h" #include "string_util.h" #include "strings.h" @@ -64,7 +66,12 @@ u8 *sub_80EB218(u8 *, u16, u16); u16 sub_80EB2D4(u16); bool8 sub_80EB37C(u16); bool8 sub_80EB868(u8); +static u16 sub_80EB960(void); u8 sub_80EB9C8(void); +static u16 sub_80EB9D8(void); + +// put this in .bss, damnit! +__attribute__((section(".bss"))) u8 gUnknown_03000740 = 0; const u16 InterviewPalette_0[] = INCBIN_U16("graphics/misc/interview_pal0.gbapal"); const u16 InterviewPalette_1[] = INCBIN_U16("graphics/misc/interview_pal1.gbapal"); @@ -2617,3 +2624,425 @@ u32 de_sub_80EB748(s32 group, s32 index) return r7; } #endif + +// returns the end of the destination buffer text +u8 *EasyChat_GetWordText(u8 *dst, u16 word) +{ + u16 group; + u16 wordIndex; + const u8 *src; + u16 i; + + if (sub_80EB37C(word)) + return StringCopy(dst, gOtherText_ThreeQuestions); + + if (word == 0xFFFF) + { + *dst = EOS; + return dst; + } + else + { + group = EC_GROUP(word); + wordIndex = EC_INDEX(word); + switch (group) + { + case EC_GROUP_POKEMON: // 0 + case EC_GROUP_POKEMON_2: // 21 + dst = StringCopy(dst, gSpeciesNames[wordIndex]); + break; + case EC_GROUP_MOVE_1: // 18 + case EC_GROUP_MOVE_2: // 19 + dst = StringCopy(dst, gMoveNames[wordIndex]); + break; + default: + src = gEasyChatGroupWords[group]; + for (i = wordIndex - 1; i != 0xFFFF; i--) + { + while (*src++ != EOS) + ; + } + dst = StringCopy(dst, src); + break; + } + *dst = EOS; + return dst; + } +} + +u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16 arg2, u16 arg3) +{ + u16 i; + u16 n; + + const u16 i1 = arg2 - 1; + + for (i = 0; i < arg3; i++) + { + u16 word; + + for (n = 0; n < i1; n++) + { + dst = EasyChat_GetWordText(dst, words[0]); + + if (words[0] != 0xFFFF) + { + dst[0] = CHAR_SPACE; + dst++; + } + + words++; + } + + word = words[0]; + words++; + dst = EasyChat_GetWordText(dst, word); + + dst[0] = CHAR_NEWLINE; + dst++; + } + + dst--; + dst[0] = EOS; + + return dst; +} + +u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3) +{ + u16 i; + u16 n; + + const u16 i1 = arg2 - 1; + + for (i = 0; i < arg3; i++) + { + u16 word; + + for (n = 0; n < i1; n++) + { + dst = EasyChat_GetWordText(dst, words[0]); + + if (words[0] != 0xFFFF) + { + dst[0] = CHAR_SPACE; + dst++; + } + + words++; + } + + word = words[0]; + words++; + dst = EasyChat_GetWordText(dst, word); + + // Only difference with ConvertEasyChatWordsToString + dst[0] = (i == 0) ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL; + dst++; + } + + dst--; + dst[0] = EOS; + + return dst; +} + + +u16 unref_sub_80EB5E0(u16 arg0) +{ + const u8 *chars; + u16 i; + u16 length; + int group, word; + + + if (arg0 == 0xFFFF) + return 0; + + group = EC_GROUP(arg0); + word = EC_INDEX(arg0); + switch (group) + { + case EC_GROUP_POKEMON: // 0 + case EC_GROUP_POKEMON_2: // 21 + chars = gSpeciesNames[word]; + break; + case EC_GROUP_MOVE_1: // 18 + case EC_GROUP_MOVE_2: // 19 + chars = gMoveNames[word]; + break; + default: + chars = gEasyChatGroupWords[group]; + for (i = word - 1; i != 0xFFFF; i--) + { + while (*chars++ != EOS) + ; + } + break; + } + + length = 0; + while (*chars != EOS) + { + chars++; + length++; + } + + return length; +} + +bool8 sub_80EB680(u16 *arg0, u16 arg1, u16 arg2, u16 arg3) +{ + return FALSE; +} + +void unref_sub_80EB684(u8 arg0, u16 arg1) +{ + u16 *ptr; + u16 c; + + // FIXME: find actual tv shows used + switch (arg0) + { + case 5: + c = 6; + ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x04); + break; + case 7: + c = 2; + ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x1C); + break; + case 8: + c = 1; + ptr = (u16*)((void *)&gSaveBlock1.tvShows[arg1] + 0x02); + break; + default: + return; + } + + c -= 1; + while (c != 0xFFFF) + { + *ptr = -1; + ptr++; + c -= 1; + } +} + +void sub_80EB6FC(u16 *arg0, u16 arg1) +{ + u16 i; + + for (i = arg1 - 1; i != 0xFFFF; i--) + { + *arg0 = 0xFFFF; + arg0++; + } + +} + +u16 sub_80EB72C(u16 group) +{ + u16 local1 = Random() % gEasyChatGroupSizes[group]; + + if (group == EC_GROUP_POKEMON + || group == EC_GROUP_POKEMON_2 + || group == EC_GROUP_MOVE_1 + || group == EC_GROUP_MOVE_2) + { + local1 = ((u16 *) gEasyChatGroupWords[group])[local1]; + } + + return ((group & 0x7F) << 9) | (local1 & 0x1FF); +} + +u16 sub_80EB784(u16 group) +{ + if (!sub_80EAD7C(group)) + return -1; + + if (group != EC_GROUP_POKEMON) + { + if (group == EC_GROUP_TRENDY_SAYING) + return sub_80EB960(); + } + else + { + return sub_80EB9D8(); + } + + return sub_80EB72C(group); +} + +void sub_80EB7C4(void) +{ + u16 *words; + u16 arg1, arg2; + + switch (gSpecialVar_0x8004) + { + case 0: + words = gSaveBlock1.easyChats.unk2B1C; + arg1 = 2; + arg2 = 2; + break; + case 1: + words = gSaveBlock1.easyChats.unk2B28; + if (sub_80EB680(gSaveBlock1.easyChats.unk2B28, 3, 2, 20)) + { + arg1 = 2; + arg2 = 3; + } + else + { + arg1 = 3; + arg2 = 2; + } + break; + case 2: + words = gSaveBlock1.easyChats.unk2B34; + arg1 = 3; + arg2 = 2; + break; + case 3: + words = gSaveBlock1.easyChats.unk2B40; + arg1 = 3; + arg2 = 2; + break; + default: + return; + } + + ConvertEasyChatWordsToString(gStringVar4, words, arg1, arg2); + ShowFieldAutoScrollMessage(gStringVar4); +} + +void BufferRandomHobbyOrLifestyleString(void) +{ + u16 group, local2; + + if (Random() & 1) + group = EC_GROUP_HOBBIES; + else + group = EC_GROUP_LIFESTYLE; + + local2 = sub_80EB784(group); + EasyChat_GetWordText(gStringVar2, local2); +} + +u8 sub_80EB868(u8 arg0) +{ + int offset; + int index; + + index = arg0 / 8; + offset = arg0 % 8; + return (gSaveBlock1.unk2D8C[index] >> offset) & 1; +} + +void sub_80EB890(u8 arg0) +{ + int offset; + int index; + + if (arg0 < 33) + { + index = arg0 / 8; + offset = arg0 % 8; + gSaveBlock1.unk2D8C[index] |= 1 << offset; + } +} + +u8 sub_80EB8C0(void) +{ + u8 i, count; + + for (i = 0, count = 0; i < 33; i++) + { + if (sub_80EB868(i)) + count++; + } + return count; +} + +u16 sub_80EB8EC(void) +{ + u16 i; + u16 local1, local2; + + local1 = sub_80EB8C0(); + if (local1 == 33) + return -1; + + local2 = Random() % (33 - local1); + for (i = 0; i < 33; i++) + { + if (sub_80EB868(i) == 0) + { + if (local2 == 0) + { + sub_80EB890(i); + return (i & 0x1FF) | 0x2800; + } + local2--; + } + } + return -1; +} + +static u16 sub_80EB960(void) +{ + u16 i; + u16 local1; + + local1 = sub_80EB8C0(); + if (local1 == 0) + return -1; + + local1 = Random() % local1; + for (i = 0; i < 33; i++) + { + if (sub_80EB868(i)) + { + if (local1 == 0) + return (i & 0x1FF) | 0x2800; + local1--; + } + } + + return -1; +} + +u8 sub_80EB9C8(void) +{ + return IsNationalPokedexEnabled(); +} + +static u16 sub_80EB9D8(void) +{ + u16 *speciesList; + u16 local1; + u16 i; + + local1 = sub_80EAE88(0); + + if (local1 == 0) + return -1; + + local1 = Random() % local1; + speciesList = (u16 *) gEasyChatGroupWords[EC_GROUP_POKEMON]; + for (i = 0; i < gEasyChatGroupSizes[EC_GROUP_POKEMON]; i++) + { + const u16 dexNum = SpeciesToNationalPokedexNum(*speciesList); + const u8 local2 = GetSetPokedexFlag(dexNum, 0); + + if (local2) + { + if (local1 == 0) + return *speciesList & 0x1FF; + local1--; + } + speciesList++; + } + return -1; +} diff --git a/src/easy_chat_before.c b/src/easy_chat_before.c deleted file mode 100644 index 59e463260..000000000 --- a/src/easy_chat_before.c +++ /dev/null @@ -1,1744 +0,0 @@ -#include "global.h" -#include "constants/easy_chat.h" -#include "constants/songs.h" -#include "constants/species.h" -#include "dewford_trend.h" -#include "easy_chat.h" -#include "event_data.h" -#include "ewram.h" -#include "graphics.h" -#include "main.h" -#include "menu.h" -#include "palette.h" -#include "sound.h" -#include "sprite.h" -#include "string_util.h" -#include "strings.h" -#include "unknown_task.h" - -extern const struct WindowConfig gWindowConfig_81E6D54; -extern const struct WindowConfig gWindowConfig_81E6DA8; - -extern void sub_80546B8(void); - -#define shared1000 (*(struct Shared1000 *)(gSharedMem + 0x1000)) - -const u16 gMysteryEventPhrase[] = {EC_WORD_MYSTERY, EC_WORD_EVENT, EC_WORD_IS, EC_WORD_EXCITING}; - -const u16 gBerryMasterWifePhrases[][2] = -{ -#if ENGLISH - {EC_WORD_GREAT, EC_WORD_BATTLE}, - {EC_WORD_CHALLENGE, EC_WORD_CONTEST}, - {EC_WORD_OVERWHELMING, EC_POKEMON(LATIAS)}, - {EC_WORD_COOL, EC_POKEMON(LATIOS)}, - {EC_WORD_SUPER, EC_WORD_HUSTLE}, -#else - {EC_WORD_GREAT, EC_WORD_FIGHT}, - {EC_WORD_CONTEST, EC_WORD_CHALLENGE}, - {EC_POKEMON(LATIAS), EC_WORD_OVERWHELMING}, - {EC_POKEMON(LATIOS), EC_WORD_COOL}, - {EC_WORD_SUPER, 0xFFFF}, -#endif -}; - -// const pointer to shared1000. easy_chat might be two separate files. -struct Shared1000 *const gUnknown_083DB694 = &shared1000; - -const struct UnknownTaskStruct gUnknown_083DB698 = -{ - ®_BG3VOFS, - ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, - 1 -}; - -const u8 gUnknown_083DB6A4[] = {4, 0, 0, 0, 1, 5, 0, 2, 2, 3, 2, 2, 2, 3}; - -// choose by alphabet keyboard -const u8 gUnknown_083DB6B2[][16] = -{ - _("ABCDEF "), - _("GHIJKL"), - _("MNOPQRS"), - _("TUVWXYZ"), -}; - -struct EasyChatPrompt -{ - const u8 *text1; - const u8 *text2; - bool8 unk8; -}; - -const struct EasyChatPrompt gUnknown_083DB6F4[] = -{ - {OtherText_MakeProfilePage1, OtherText_MakeProfilePage2, TRUE}, - {OtherText_MakeMessagePage1, OtherText_MakeMessagePage2, TRUE}, - {OtherText_CombineNinePhrasesPage1, OtherText_CombineNinePhrasesPage2, TRUE}, - {OtherText_DescribeFeelingsPage1, OtherText_DescribeFeelingsPage2, TRUE}, - {OtherText_ImproveBardSongPage1, OtherText_ImproveBardSongPage2, TRUE}, - {OtherText_CombineTwoPhrasesPage1, OtherText_CombineTwoPhrasesPage2, TRUE}, - {OtherText_YourProfile, OtherText_ConfirmTrendyPage2, FALSE}, - {OtherText_YourFeelingBattle, OtherText_ConfirmTrendyPage2, TRUE}, - {OtherText_SetWinMessage, OtherText_ConfirmTrendyPage2, TRUE}, - {OtherText_SetLossMessage, OtherText_ConfirmTrendyPage2, TRUE}, - {OtherText_MailMessage, OtherText_ConfirmTrendyPage2, TRUE}, - {OtherText_MailSalutation, OtherText_ConfirmTrendyPage2, TRUE}, - {OtherText_NewSong, OtherText_ConfirmTrendyPage2, FALSE}, - {OtherText_TheAnswer, OtherText_ConfirmTrendyPage2, FALSE}, - {OtherText_ConfirmTrendyPage1, OtherText_ConfirmTrendyPage2, TRUE}, - {OtherText_HipsterPage1, OtherText_HipsterPage2, TRUE}, - {OtherText_WithFourPhrases, OtherText_CombineNinePhrasesPage2, TRUE}, -}; - -const u8 gUnknown_083DB7C0[][2] = -{ - { 0, 6}, - { 1, 7}, - { 1, 8}, - { 1, 9}, - { 2, 10}, - {16, 13}, - { 4, 12}, - { 3, 13}, - { 3, 13}, - { 5, 14}, - { 3, 13}, - { 3, 13}, - { 3, 13}, - {15, 13}, -}; - -void sub_80E62F8(void); -void sub_80E6424(void); -void sub_80E6554(void); -void sub_80E6630(void); -void sub_80E6690(void); -void sub_80E682C(void (*)(void)); -void sub_80E69F8(void); -void sub_80E6A6C(void); -void sub_80E6A88(void); -void sub_80E6AA8(void); -void sub_80E6AC4(void); -void sub_80E6AE4(void); -void sub_80E6BC0(void); -void sub_80E6C84(void); -void sub_80E6D7C(void); -void sub_80E6F68(void); -void sub_80E6FC8(void); -void sub_80E7114(void); -void sub_80E718C(void); -void sub_80E7218(void); -void sub_80E7294(void); -void sub_80E7324(void); -void sub_80E73D0(void); -void sub_80E7458(void); -void sub_80E752C(void); -void sub_80E7574(void); -bool8 sub_80E75D8(void); -bool8 sub_80E77C8(void); -void sub_80E7A98(void); -void sub_80E7AD4(void); -bool8 sub_80E7B40(void); -void sub_80E7D30(void); -void sub_80E7D6C(void); -void sub_80E7D9C(void); -bool8 sub_80E7DD0(void); -void sub_80E7E50(void); -void sub_80E7F00(u16, u16); -u8 sub_80E7FA8(void); -bool8 sub_80E8054(void); -u8 sub_80E8094(void); -u8 sub_80E810C(void); -void sub_80E81C0(void); -void sub_80E81FC(void); -void sub_80E8218(void); - -void sub_80E8398(); -void sub_80E8420(void); -void sub_80E8504(void); -void sub_80E87CC(); - -void sub_80E88F0(void); -void sub_80E8958(); - -void sub_80E8BF4(); -void sub_80E8CEC(void); -void sub_80E8D54(void); -void sub_80E8D8C(); -void sub_80E8DD8(void); -void sub_80E91D4(); -void sub_80E9368(); -void sub_80E95A4(void); -void sub_80E9744(void); -void sub_80E98C4(void); -void sub_80E9974(void); -void sub_80E9A14(void); -void sub_80E9A4C(void); -void sub_80E9AD4(void); -void sub_80E9C94(void); -void sub_80E9D00(void); -void sub_80E9D7C(void); -void sub_80E9E08(); -bool8 sub_80E9E54(void); -void sub_80E9E98(void); -u8 sub_80E9EA8(void); -u8 sub_80E9F50(void); -u8 sub_80E9FD4(void); -u8 sub_80EA014(void); -u8 sub_80EA050(void); -u8 sub_80EA0E4(void); -u8 sub_80EA184(void); -void sub_80EAC5C(void); -void sub_80EAD08(void); -u8 sub_80EAD7C(u8); -void sub_80EAECC(void); -void sub_80EB040(void); -void sub_80EB0B0(void); -u8 *sub_80EB218(u8 *, u16, u16); -u16 sub_80EB2D4(); -bool8 sub_80EB680(u16 *, u16, u16, u16); - -void sub_80E60D8(void) -{ - u8 r4 = 3; - u16 *r1; - - switch (gSpecialVar_0x8004) - { - case 0: - r1 = gSaveBlock1.easyChats.unk2B1C; - break; - case 1: - r1 = gSaveBlock1.easyChats.unk2B28; - break; - case 2: - r1 = gSaveBlock1.easyChats.unk2B34; - break; - case 3: - r1 = gSaveBlock1.easyChats.unk2B40; - break; - case 4: - r1 = gSaveBlock1.mail[gSpecialVar_0x8005].words; - break; - case 6: - { - struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard; - u16 i; - for (i = 0; i < 6; i++) - bard->temporaryLyrics[i] = bard->songLyrics[i]; - r1 = bard->temporaryLyrics; - } - break; - case 5: - // TODO: Is this the right TV show? - r1 = gSaveBlock1.tvShows[gSpecialVar_0x8005].fanclubLetter.pad04; - r4 = gSpecialVar_0x8006; - break; - case 7: - // TODO: Is this the right TV show? - r1 = &gSaveBlock1.tvShows[gSpecialVar_0x8005].fanclubOpinions.var1C[gSpecialVar_0x8006]; - r4 = 1; - break; - case 8: - // TODO: Is this the right TV show? - r1 = &gSaveBlock1.tvShows[gSpecialVar_0x8005].fanclubOpinions.var02; - r4 = 0; - break; - case 9: - r1 = NULL; - break; - case 10: - r1 = &gSaveBlock1.gabbyAndTyData.quote; - *r1 = 0xFFFF; - r4 = 1; - break; - case 11: - // TODO: Is this the right TV show? - r1 = &gSaveBlock1.tvShows[gSpecialVar_0x8005].bravoTrainer.var04[gSpecialVar_0x8006]; - r4 = 0; - break; - case 12: - // TODO: Is this the right TV show? - r1 = gSaveBlock1.tvShows[gSpecialVar_0x8005].bravoTrainerTower.var18; - r4 = 1; - break; - case 13: - shared1000.unk9C7C = 0xFFFF; - shared1000.unk9C7E = -1; - r1 = &shared1000.unk9C7C; - break; - default: - return; - } - sub_80E62A0(gSpecialVar_0x8004, r1, sub_80546B8, r4); -} - -void sub_80E62A0(u8 a, u16 *b, void (*c)(void), u8 d) -{ - shared1000.unk0 = c; - shared1000.unk4 = b; - shared1000.unk8 = a; - shared1000.unkB = d; - if (a == 9) - { - shared1000.unk4 = &shared1000.unk9C7C; - shared1000.unk9C7C = gSaveBlock1.easyChatPairs[0].words[0]; - shared1000.unk9C7E = gSaveBlock1.easyChatPairs[0].words[1]; - } - SetMainCallback2(sub_80E62F8); -} - -void sub_80E62F8(void) -{ - switch (gMain.state) - { - case 0: - default: - REG_DISPCNT = 0; - SetVBlankCallback(0); - ResetPaletteFade(); - ResetSpriteData(); - dp12_8087EA4(); - remove_some_task(); - sub_80EAD08(); - sub_80895F8(gUnknown_083DB698); - FreeSpriteTileRanges(); - FreeAllSpritePalettes(); - break; - case 1: - SetUpWindowConfig(&gWindowConfig_81E6DA8); - break; - case 2: - InitMenuWindow(&gWindowConfig_81E6D54); - InitMenuWindow(&gWindowConfig_81E6DA8); - MenuZeroFillScreen(); - break; - case 3: - sub_80E6424(); - break; - case 4: - sub_80E8DD8(); - break; - case 5: - sub_80E8218(); - sub_80E8CEC(); - break; - case 6: - sub_80E69F8(); - sub_80E682C(sub_80E6AA8); - SetVBlankCallback(sub_80E6A6C); - break; - case 7: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - break; - case 8: - REG_DISPCNT = 0x1F40; - SetMainCallback2(sub_80E6A88); - FlagSet(FLAG_SYS_CHAT_USED); - break; - } - gMain.state++; -} - -void sub_80E6424(void) -{ - shared1000.unk9 = gUnknown_083DB6A4[shared1000.unk8]; - switch (shared1000.unk9) - { - case 4: - shared1000.unkA = 4; - shared1000.unk83 = 2; - shared1000.unk84 = 2; - shared1000.unk88 = 5; - shared1000.unk8A = 4; - break; - case 5: - shared1000.unkA = 4; - shared1000.unk83 = 1; - shared1000.unk84 = 4; - shared1000.unk88 = 16; - shared1000.unk8A = 2; - break; - case 0: - shared1000.unkA = 6; - shared1000.unk83 = 2; - shared1000.unk84 = 3; - shared1000.unk88 = 4; - shared1000.unk8A = 3; - break; - case 1: - shared1000.unkA = 9; - shared1000.unk83 = 2; - shared1000.unk84 = 5; - shared1000.unk88 = 4; - shared1000.unk8A = 0; - break; - case 2: - shared1000.unkA = 1; - shared1000.unk83 = 1; - shared1000.unk84 = 1; - shared1000.unk88 = 16; - shared1000.unk8A = 4; - break; - case 3: - shared1000.unkA = 2; - shared1000.unk83 = 2; - shared1000.unk84 = 1; - shared1000.unk88 = 5; - shared1000.unk8A = 3; - break; - } - shared1000.unk86 = 0; - shared1000.unk85 = 0; - shared1000.unk87 = 0; - shared1000.unk26 = 0; - shared1000.unk1BA = 0; - shared1000.unk1BE = 2; - sub_80E6554(); - sub_80EAECC(); - sub_80EB040(); - sub_80E7E50(); - sub_80E6630(); - sub_80E6690(); -} - -void sub_80E6554(void) -{ - u16 r4 = 0; - u16 r7; - u16 r5; - - for (r7 = 0; ; r7++) - { - for (r5 = 0; r5 < 2; r5++) - { - shared1000.unk2A[r7][r5] = r4++; - if (r4 == 17) - break; - } - if (r4 == 17) - break; - } - shared1000.unk28 = 17; - while (r4 < 22) - { - if (sub_80EAD7C(r4) != 0) - { - r5++; - if (r5 > 1) - { - r7++; - r5 = 0; - } - shared1000.unk2A[r7][r5] = r4; - shared1000.unk78[r4 - 17] = 1; // hmm... - shared1000.unk28++; - } - else - { - shared1000.unk78[r4 - 17] = 0; - } - r4++; - } - shared1000.unk1B6 = (shared1000.unk28 + 1) / 2; -} - -void sub_80E6630(void) -{ - u8 i; - u8 r3; - - for (i = 0; i < 4; i++) - { - const u8 *row = gUnknown_083DB6B2[i]; - - for (r3 = 0; row[r3] != EOS; r3++) - { - if (row[r3] != CHAR_SPACE) - shared1000.unk40[i][r3] = row[r3] + 0x46; - else - shared1000.unk40[i][r3] = CHAR_SPACE; - } - } -} - -void sub_80E6690(void) -{ - u8 *pointers[] = - { - shared1000.unk9C80, shared1000.unk9CC9, - shared1000.unk9D12, shared1000.unk9D5B, - }; - u8 *r3; - u16 i; - - for (i = 0; i < 2; i++) - { - const struct EasyChatPrompt *prompt = &gUnknown_083DB6F4[gUnknown_083DB7C0[shared1000.unk8][i]]; - - r3 = StringCopy(pointers[i * 2 + 0], prompt->text1); - if (prompt->unk8) - { - StringCopy(pointers[i * 2 + 1], prompt->text2); - } - else - { - *r3++ = CHAR_SPACE; - StringCopy(r3, prompt->text2); - *pointers[i * 2 + 1] = EOS; - } - } - - for (i = 0; i < 0x24; i++) - shared1000.unk9DA4[i] = 0; - shared1000.unk9DA4[i] = 0xFF; - - r3 = shared1000.unk9F6E; - r3[0] = EXT_CTRL_CODE_BEGIN; - r3[1] = 0x11; - r3[2] = 0xE0; - r3[3] = 0xFF; -} - -// Default profile phrase -const u16 gUnknown_083DB7EC[] = -{ -#if ENGLISH - EC_WORD_I_AM, - EC_WORD_A, - EC_WORD_POKEMON, - EC_WORD_GREAT, -#else - EC_WORD_I_AM, - EC_WORD_BIG, - EC_WORD_IN, - EC_WORD_POKEMON, -#endif -}; - -const u16 gUnknown_083DB7F4[] = -{ - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_READY, - EC_WORD_QUES, - EC_WORD_HERE_I_COME, - EC_WORD_EXCL, -}; - -// ResetDefaultEasyChatPhrases -void InitEasyChatPhrases(void) -{ - u16 i; - u16 j; - - for (i = 0; i < 4; i++) - gSaveBlock1.easyChats.unk2B1C[i] = gUnknown_083DB7EC[i]; - - for (i = 0; i < 6; i++) - gSaveBlock1.easyChats.unk2B28[i] = gUnknown_083DB7F4[i]; - - for (i = 0; i < 6; i++) - { - gSaveBlock1.easyChats.unk2B34[i] = 0xFFFF; - gSaveBlock1.easyChats.unk2B40[i] = 0xFFFF; - } - - for (i = 0; i < 16; i++) - { - for (j = 0; j < 9; j++) - gSaveBlock1.mail[i].words[j] = 0xFFFF; - } - - for (i = 0; i < 64; i++) - gSaveBlock1.unk2D8C[i] = 0; -} - -void sub_80E682C(void (*func)(void)) -{ - shared1000.unk20 = func; - shared1000.unk24 = 0; -} - -void sub_80E683C(void) -{ - u16 i; - - if (shared1000.unk26 == 0) - { - for (i = 0; i < shared1000.unk1B6; i++) - shared1000.unk1AA[i] = 2; - shared1000.unk1AA[i - 1] = shared1000.unk28 % 2; - if (shared1000.unk1AA[i - 1] == 0) - shared1000.unk1AA[i - 1] = 2; - } - else - { - shared1000.unk1AA[0] = 7; - shared1000.unk1AA[1] = 6; - shared1000.unk1AA[2] = 7; - shared1000.unk1AA[3] = 7; - } - shared1000.unk1A8 = 0; - shared1000.unk1A9 = 0; - shared1000.unk1B5 = 0; - shared1000.unk1B7 = 0; - sub_80E9A4C(); -} - -void sub_80E68E8(void) -{ - sub_80EB0B0(); - if (shared1000.unk26 == 0) - { - u16 i; - u8 r6; - - r6 = shared1000.unk1B8; - shared1000.unk9A28 = (shared1000.unk4178[r6] + 1) / 2; - for (i = 0; i < shared1000.unk9A28; i++) - shared1000.unk99A6[i] = 2; - i--; - shared1000.unk99A6[i] = shared1000.unk4178[r6] % 2; - if (shared1000.unk99A6[i] == 0) - shared1000.unk99A6[i] = 2; - } - else - { - u16 i; - u8 r6; - - r6 = shared1000.unk1B8; - shared1000.unk9A28 = (shared1000.unk4142[r6] + 1) / 2; - for (i = 0; i < shared1000.unk9A28; i++) - shared1000.unk99A6[i] = 2; - i--; - shared1000.unk99A6[i] = shared1000.unk4142[r6] % 2; - if (shared1000.unk99A6[i] == 0) - shared1000.unk99A6[i] = 2; - } - shared1000.unk99A4 = 0; - shared1000.unk99A5 = 0; - shared1000.unk9A29 = 0; - sub_80E9A4C(); -} - -void sub_80E69F8(void) -{ - switch (shared1000.unk8) - { - case 0: - case 1: - case 2: - case 3: - case 4: - case 6: - case 9: - case 13: - default: - sub_80E9368(shared1000.unk8); - break; - case 5: - case 7: - case 8: - case 10: - case 11: - case 12: - sub_80E9368(shared1000.unk8); - sub_80E8BF4(shared1000.unkB, shared1000.unk9); - break; - } -} - -void sub_80E6A6C(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - sub_80EAC5C(); - TransferPlttBuffer(); - sub_8089668(); -} - -void sub_80E6A88(void) -{ - shared1000.unk20(); - AnimateSprites(); - BuildOamBuffer(); - sub_80EAD08(); -} - -void sub_80E6AA8(void) -{ - if (!UpdatePaletteFade()) - sub_80E682C(sub_80E6AC4); -} - -void sub_80E6AC4(void) -{ - sub_80E88F0(); - sub_80E8398(0); - sub_80E91D4(0); - sub_80E682C(sub_80E6AE4); -} - -void sub_80E6AE4(void) -{ - shared1000.unk87 = sub_80E75D8(); - if (shared1000.unk87) - PlaySE(SE_SELECT); - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - if (shared1000.unk86 == shared1000.unk84) - { - switch (shared1000.unk85) - { - case 0: - sub_80E682C(sub_80E6BC0); - return; - case 1: - sub_80E682C(sub_80E6C84); - return; - case 2: - sub_80E682C(sub_80E6D7C); - return; - } - } - else - { - shared1000.unk27 = shared1000.unk86 * shared1000.unk83 + shared1000.unk85; - sub_80E7574(); - sub_80E682C(sub_80E6F68); - return; - } - } - if (gMain.newKeys & B_BUTTON) - { - sub_80E682C(sub_80E6C84); - } -} - -void sub_80E6BC0(void) -{ - switch (shared1000.unk24) - { - case 0: - sub_80E8398(2); - if (shared1000.unk8 == 6) - { - sub_80E91D4(6); - shared1000.unk24 = 100; - } - else - { - sub_80E91D4(2); - DisplayYesNoMenu(23, 8, 1); - MoveMenuCursor(1); - shared1000.unk24++; - } - break; - case 1: - switch (ProcessMenuInputNoWrap_()) - { - case 0: - sub_80E7D6C(); - sub_80E98C4(); - sub_80E95A4(); - shared1000.unk24++; - break; - case -1: - case 1: - shared1000.unk24++; - break; - } - break; - case 2: - sub_80E81FC(); - sub_80E682C(sub_80E6AC4); - break; - case 100: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - sub_80E682C(sub_80E6AC4); - break; - } -} - -void sub_80E6C84(void) -{ - switch (shared1000.unk24) - { - case 0: - sub_80E8398(2); - sub_80E91D4(3); - DisplayYesNoMenu(23, 8, 0); - MoveMenuCursor(1); - if (shared1000.unk8 == 9 - || shared1000.unk8 == 4 - || shared1000.unk8 == 7 - || shared1000.unk8 == 8 - || shared1000.unk8 == 10 - || shared1000.unk8 == 11 - || shared1000.unk8 == 12 - || shared1000.unk8 == 5 - || shared1000.unk8 == 13) - shared1000.unk24 = 2; - else - shared1000.unk24++; - break; - case 1: - switch (ProcessMenuInputNoWrap_()) - { - case 0: - sub_80E91D4(4); - DisplayYesNoMenu(23, 8, 0); - MoveMenuCursor(1); - shared1000.unk24++; - break; - case -1: - case 1: - shared1000.unk24 = 0xFF; - break; - } - break; - case 2: - switch (ProcessMenuInputNoWrap_()) - { - case 0: - gSpecialVar_Result = 0; - sub_80E682C(sub_80E752C); - break; - case -1: - case 1: - shared1000.unk24 = 0xFF; - break; - } - break; - case 0xFF: - HandleDestroyMenuCursors(); - sub_80E81FC(); - sub_80E682C(sub_80E6AC4); - break; - } -} - -void sub_80E6D7C(void) -{ - switch (shared1000.unk24) - { - case 0: - sub_80E8398(2); - if (sub_80E8054()) - { - sub_80E91D4(5); - shared1000.unk24 = 10; - break; - } - if (shared1000.unk8 == 9) - { - if (sub_80E7FA8() == 0) - { - sub_80E91D4(8); - shared1000.unk24 = 10; - break; - } - if (shared1000.unkC[0] == 0xFFFF || shared1000.unkC[1] == 0xFFFF) - { - sub_80E91D4(9); - shared1000.unk24 = 10; - break; - } - } - if (shared1000.unk8 == 4 && sub_80E7FA8() == 0) - { - sub_80E682C(sub_80E6C84); - } - else - { - sub_80E91D4(1); - sub_80E9744(); - DisplayYesNoMenu(23, 8, 0); - MoveMenuCursor(0); - shared1000.unk24++; - } - break; - case 1: - switch (ProcessMenuInputNoWrap_()) - { - case 0: - gSpecialVar_Result = (sub_80E7FA8() != 0); - sub_80E7D9C(); - if (shared1000.unk8 == 0) - gSpecialVar_0x8004 = sub_80E8094(); - if (shared1000.unk8 == 9) // dewford trend? - { - sub_80E81C0(); - gSpecialVar_0x8004 = sub_80FA364(&shared1000.unk9C7C); - } - if (shared1000.unk8 == 13) - { - if (shared1000.unkC[0] == 0xFFFF || shared1000.unkC[1] == 0xFFFF) - gSpecialVar_Result = 0; - gSpecialVar_0x8004 = sub_80E810C(); - } - sub_80E682C(sub_80E752C); - break; - case -1: - case 1: - HandleDestroyMenuCursors(); - sub_80E81FC(); - if (shared1000.unk8 == 6 && sub_80E7FA8() != 0) - { - shared1000.unk24 = 100; - } - else - { - sub_80E95A4(); - sub_80E682C(sub_80E6AC4); - } - break; - } - break; - case 10: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - sub_80E682C(sub_80E6AC4); - break; - case 100: - sub_80E91D4(7); - shared1000.unk24++; - // fall through - case 101: - if (gMain.newKeys & A_BUTTON) - shared1000.unk24++; - break; - case 102: - sub_80E7E50(); - sub_80E95A4(); - sub_80E682C(sub_80E6AC4); - break; - } -} - -void sub_80E6F68(void) -{ - switch (shared1000.unk24) - { - case 0: - sub_80E8398(1); - sub_80E91D4(10); - sub_80E683C(); - sub_80E9974(); - sub_80E9E98(); - shared1000.unk24++; - break; - case 1: - if (sub_80E9EA8() != 0) - { - sub_80E8D8C(1); - sub_80E8420(); - sub_80E8958(0); - sub_80E682C(sub_80E6FC8); - } - break; - } -} - -void sub_80E6FC8(void) -{ - shared1000.unk96 = sub_80E77C8(); - if (shared1000.unk1C0 != 0) - { - PlaySE(SE_SELECT); - shared1000.unk1C4 = sub_80E6FC8; - sub_80E682C(sub_80E7458); - } - else - { - if (shared1000.unk96) - PlaySE(SE_SELECT); - if (gMain.newKeys & A_BUTTON) - { - if (shared1000.unk1B7 != 0) - { - PlaySE(SE_SELECT); - switch (shared1000.unk1A8) - { - case 1: - sub_80E682C(sub_80E718C); - break; - case 2: - if (shared1000.unk8 != 6) - { - sub_80E7F00(shared1000.unk27, 0xFFFF); - sub_80E7574(); - sub_80E95A4(); - } - break; - case 3: - sub_80E682C(sub_80E7114); - break; - } - } - else - { - if (shared1000.unk26 == 0 - || shared1000.unk4142[shared1000.unk40[shared1000.unk1A8][shared1000.unk1A9]] != 0) - { - PlaySE(SE_SELECT); - sub_80E7AD4(); - sub_80E682C(sub_80E7218); - } - } - } - else if (gMain.newKeys & B_BUTTON) - { - sub_80E682C(sub_80E7114); - } - else if (gMain.newKeys & SELECT_BUTTON) - { - sub_80E682C(sub_80E718C); - } - } -} - -void sub_80E7114(void) -{ - switch (shared1000.unk24) - { - case 0: - sub_80E8504(); - sub_80E9E98(); - sub_80E88F0(); - sub_80E8D8C(0); - shared1000.unk24++; - break; - case 1: - case 2: - shared1000.unk24++; - break; - case 3: - if (sub_80E9F50() != 0) - shared1000.unk24++; - break; - case 4: - sub_80E682C(sub_80E6AC4); - break; - } -} - -void sub_80E718C(void) -{ - switch (shared1000.unk24) - { - case 0: - sub_80E8504(); - sub_80E9E98(); - sub_80E88F0(); - shared1000.unk24++; - sub_80E8D54(); - break; - case 1: - if (sub_80E9FD4() != 0) - { - shared1000.unk26 = !shared1000.unk26; - sub_80E683C(); - sub_80E9974(); - sub_80E9E98(); - shared1000.unk24++; - } - break; - default: - shared1000.unk24++; - break; - case 8: - if (sub_80EA014() != 0) - { - sub_80E8420(); - sub_80E8958(0); - sub_80E682C(sub_80E6FC8); - } - break; - } -} - -void sub_80E7218(void) -{ - switch (shared1000.unk24) - { - default: - shared1000.unk24++; - break; - case 8: - sub_80E8D8C(0); - sub_80E8504(); - sub_80E9AD4(); - sub_80E68E8(); - sub_80E88F0(); - sub_80E9E98(); - shared1000.unk24++; - break; - case 9: - if (sub_80EA050() != 0) - { - sub_80E9C94(); - shared1000.unk24++; - } - break; - case 10: - sub_80E87CC(1); - sub_80E8958(1); - sub_80E682C(sub_80E7294); - break; - case 11: - break; - } -} - -void sub_80E7294(void) -{ - shared1000.unk1B9 = sub_80E7B40(); - if (shared1000.unk1C0 != 0) - { - PlaySE(SE_SELECT); - shared1000.unk1C4 = sub_80E7294; - sub_80E682C(sub_80E7458); - } - else - { - if (shared1000.unk1B9) - PlaySE(SE_SELECT); - if (gMain.newKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_80E682C(sub_80E7324); - } - else if (gMain.newKeys & B_BUTTON) - { - sub_80E682C(sub_80E73D0); - } - } -} - -void sub_80E7324(void) -{ - switch (shared1000.unk24) - { - case 0: - if (!sub_80E7DD0()) - { - sub_80E682C(sub_80E7294); - } - else - { - sub_80E88F0(); - sub_80E87CC(0); - shared1000.unk24++; - } - break; - case 1: - shared1000.unk24++; - break; - case 2: - sub_80E9E98(); - shared1000.unk24++; - break; - case 3: - if (sub_80EA184() != 0) - shared1000.unk24++; - break; - case 4: - if (shared1000.unk8 == 6 && sub_80E7FA8() != 0) - sub_80E682C(sub_80E6D7C); - else - sub_80E682C(sub_80E6AC4); - break; - } -} - -void sub_80E73D0(void) -{ - switch (shared1000.unk24) - { - case 0: - sub_80E87CC(0); - sub_80E88F0(); - shared1000.unk24++; - break; - case 1: - sub_80E9AD4(); - sub_80E9E98(); - shared1000.unk24++; - break; - case 2: - if (sub_80EA0E4() != 0) - { - sub_80E8D8C(1); - sub_80E9A14(); - shared1000.unk24++; - } - break; - case 3: - sub_80E8420(); - sub_80E8958(0); - shared1000.unk24++; - break; - case 4: - sub_80E9974(); - sub_80E682C(sub_80E6FC8); - break; - } -} - -void sub_80E7458(void) -{ - switch (shared1000.unk24) - { - case 0: - if (shared1000.unk1C4 == sub_80E6FC8) - sub_80E9D7C(); - else - sub_80E9D00(); - sub_80E9E08(shared1000.unk1BE); - shared1000.unk24++; - break; - case 1: - if (sub_80E9E54()) - { - if (shared1000.unk1C4 == sub_80E6FC8) - { - sub_80E9D7C(); - shared1000.unk1B5 += shared1000.unk1C0; - sub_80E7A98(); - shared1000.unk96 = TRUE; - } - else - { - shared1000.unk9A29 += shared1000.unk1C0; - sub_80E7D30(); - shared1000.unk1B9 = 1; - } - shared1000.unk1BE = 2; - sub_80E682C(shared1000.unk1C4); - } - break; - } -} - -void sub_80E752C(void) -{ - switch (shared1000.unk24) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - shared1000.unk24++; - break; - case 1: - if (!UpdatePaletteFade()) - SetMainCallback2(shared1000.unk0); - break; - } -} - -void sub_80E7574(void) -{ - if (shared1000.unk8 == 1 - && shared1000.unk7E[shared1000.unk86] == 2 - && sub_80EB2D4(shared1000.unkC[shared1000.unk27]) != 7) - shared1000.unk7D = 1; - else - shared1000.unk7D = 0; - shared1000.unk7D = 0; // What the hell? -} - -bool8 sub_80E75D8(void) -{ - bool8 pressedUpDown = FALSE; - u8 r0; - - if (gMain.newKeys & START_BUTTON) - { - shared1000.unk86 = shared1000.unk84; - shared1000.unk85 = 2; - return TRUE; - } - - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - shared1000.unk86--; - if (shared1000.unk86 < 0) - shared1000.unk86 = shared1000.unk84; - pressedUpDown = TRUE; - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - shared1000.unk86++; - if (shared1000.unk86 > shared1000.unk84) - shared1000.unk86 = 0; - pressedUpDown = TRUE; - } - - if (pressedUpDown) - { - if (shared1000.unk9 == 2) - { - if (shared1000.unk86 == shared1000.unk84) - shared1000.unk85 = 2; - else - shared1000.unk85 = 0; - return TRUE; - } - else - { - if (shared1000.unk85 >= shared1000.unk83) - shared1000.unk85 = shared1000.unk83 - 1; - if (shared1000.unk86 != shared1000.unk84) - { - r0 = shared1000.unk86 * shared1000.unk83 + shared1000.unk85; - if (r0 >= shared1000.unkA) - shared1000.unk85 = r0 - shared1000.unkA; - } - return TRUE; - } - } - else - { - if (gMain.newAndRepeatedKeys & DPAD_LEFT) - { - if (--shared1000.unk85 < 0) - { - if (shared1000.unk86 == shared1000.unk84) - { - shared1000.unk85 = 2; - } - else - { - shared1000.unk85 = shared1000.unk83 - 1; - r0 = shared1000.unk86 * shared1000.unk83 + shared1000.unk85; - if (r0 >= shared1000.unkA) - shared1000.unk85 = r0 - shared1000.unkA; - } - } - return TRUE; - } - if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - { - if (shared1000.unk86 == shared1000.unk84) - { - if (++shared1000.unk85 > 2) - shared1000.unk85 = 0; - } - else - { - if (++shared1000.unk85 >= shared1000.unk83) - shared1000.unk85 = 0; - r0 = shared1000.unk86 * shared1000.unk83 + shared1000.unk85; - if (r0 >= shared1000.unkA) - shared1000.unk85 = r0 - shared1000.unkA; - } - return TRUE; - } - } - return FALSE; -} - -bool8 sub_80E77C8(void) -{ - bool8 pressedLeftRight = FALSE; - bool8 pressedUpDown; - - if (shared1000.unk1B7 != 0) - { - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - shared1000.unk1A8--; - if (shared1000.unk1A8 < 1) - shared1000.unk1A8 = 3; - return TRUE; - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - shared1000.unk1A8++; - if (shared1000.unk1A8 > 3) - shared1000.unk1A8 = 1; - return TRUE; - } - } - else - { - if (shared1000.unk26 == 1) - { - pressedUpDown = FALSE; - - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - shared1000.unk1A8--; - if (shared1000.unk1A8 < 0) - shared1000.unk1A8 = 3; - pressedUpDown = TRUE; - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - shared1000.unk1A8++; - if (shared1000.unk1A8 > 3) - shared1000.unk1A8 = 0; - pressedUpDown = TRUE; - } - - if (pressedUpDown) - { - sub_80E7A98(); - return TRUE; - } - } - else - { - pressedUpDown = FALSE; - shared1000.unk1C0 = 0; - - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (shared1000.unk1A8 == 0) - return FALSE; - shared1000.unk1A8--; - if (shared1000.unk1A8 < shared1000.unk1B5) - shared1000.unk1C0 = -1; - pressedUpDown = TRUE; - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (shared1000.unk1A8 >= shared1000.unk1B6 - 1) - return FALSE; - shared1000.unk1A8++; - if (shared1000.unk1A8 > shared1000.unk1B5 + 3) - shared1000.unk1C0 = 1; - pressedUpDown = TRUE; - } - - if (pressedUpDown) - { - if (shared1000.unk1C0 == 0) - { - sub_80E7A98(); - return TRUE; - } - return FALSE; - } - } - } - - if (gMain.newAndRepeatedKeys & DPAD_LEFT) - { - if (shared1000.unk1A9 != 0) - shared1000.unk1A9--; - else - shared1000.unk1A9 = shared1000.unk1AA[shared1000.unk1A8]; - pressedLeftRight = TRUE; - } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - { - if (shared1000.unk1B7 != 0 - || shared1000.unk1A9 == shared1000.unk1AA[shared1000.unk1A8]) - shared1000.unk1A9 = 0; - else - shared1000.unk1A9++; - pressedLeftRight = TRUE; - } - - if (pressedLeftRight) - { - s8 r9 = shared1000.unk1B7; - - shared1000.unk1B7 = (shared1000.unk1A9 == shared1000.unk1AA[shared1000.unk1A8]); - if (shared1000.unk1B7 != 0) - { - shared1000.unk1A8 -= shared1000.unk1B5; - if (shared1000.unk1A8 == 0) - { - shared1000.unk1A8 = 1; - shared1000.unk1A9 = shared1000.unk1AA[shared1000.unk1A8]; - } - } - else if (r9 != 0) - { - shared1000.unk1A8 += shared1000.unk1B5; - if (shared1000.unk1A9 != 0) - shared1000.unk1A9 = shared1000.unk1AA[shared1000.unk1A8] - 1; - } - return TRUE; - } - - return FALSE; -} - -void sub_80E7A98(void) -{ - if (shared1000.unk1A9 >= shared1000.unk1AA[shared1000.unk1A8]) - shared1000.unk1A9 = shared1000.unk1AA[shared1000.unk1A8] - 1; -} - -void sub_80E7AD4(void) -{ - if (shared1000.unk26 == 0) - shared1000.unk1B8 = shared1000.unk2A[shared1000.unk1A8][shared1000.unk1A9]; - else - shared1000.unk1B8 = shared1000.unk40[shared1000.unk1A8][shared1000.unk1A9]; -} - -bool8 sub_80E7B40(void) -{ - bool8 pressedUpDown = FALSE; - - shared1000.unk1C0 = 0; - if (gMain.newAndRepeatedKeys & DPAD_UP) - { - if (shared1000.unk99A4 == 0) - return FALSE; - shared1000.unk99A4--; - if (shared1000.unk99A4 < shared1000.unk9A29) - { - shared1000.unk1C0 = -1; - return FALSE; - } - pressedUpDown = TRUE; - } - else if (gMain.newAndRepeatedKeys & DPAD_DOWN) - { - if (shared1000.unk99A4 >= shared1000.unk9A28 - 1) - return FALSE; - shared1000.unk99A4++; - if (shared1000.unk99A4 >= shared1000.unk9A29 + 4) - { - shared1000.unk1C0 = 1; - return FALSE; - } - pressedUpDown = TRUE; - } - - if (pressedUpDown) - { - sub_80E7D30(); - return TRUE; - } - - if (gMain.newAndRepeatedKeys & DPAD_LEFT) - { - shared1000.unk99A5--; - if (shared1000.unk99A5 < 0) - shared1000.unk99A5 = shared1000.unk99A6[shared1000.unk99A4] - 1; - return TRUE; - } - else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) - { - shared1000.unk99A5++; - if (shared1000.unk99A5 >= shared1000.unk99A6[shared1000.unk99A4]) - shared1000.unk99A5 = 0; - return TRUE; - } - - if (gMain.newKeys & START_BUTTON) - { - if (shared1000.unk9A29 != 0) - { - shared1000.unk1C0 = -shared1000.unk9A29; - if (shared1000.unk1C0 < -4) - shared1000.unk1C0 = -4; - } - shared1000.unk99A4 += shared1000.unk1C0; - shared1000.unk1BE = 4; - } - else if (gMain.newKeys & SELECT_BUTTON) - { - if (shared1000.unk9A29 < shared1000.unk9A28 - 4) - { - shared1000.unk1C0 = shared1000.unk9A28 - 4 - shared1000.unk9A29; - if (shared1000.unk1C0 > 4) - shared1000.unk1C0 = 4; - } - shared1000.unk99A4 += shared1000.unk1C0; - shared1000.unk1BE = 4; - } - - return FALSE; -} - -void sub_80E7D30(void) -{ - if (shared1000.unk99A5 >= shared1000.unk99A6[shared1000.unk99A4]) - shared1000.unk99A5 = shared1000.unk99A6[shared1000.unk99A4] - 1; -} - -void sub_80E7D6C(void) -{ - u16 i; - - for (i = 0; i < shared1000.unkA; i++) - sub_80E7F00(i, 0xFFFF); -} - -void sub_80E7D9C(void) -{ - u16 i; - - for (i = 0; i < shared1000.unkA; i++) - shared1000.unk4[i] = shared1000.unkC[i]; -} - -bool8 sub_80E7DD0(void) -{ - u16 r4 = shared1000.unk9A2A[shared1000.unk99A4][shared1000.unk99A5]; - - if (shared1000.unk7D != 0 - && shared1000.unk7E[shared1000.unk86] > 1 - && sub_80EB2D4(r4) == 7) - return FALSE; - - sub_80E7F00(shared1000.unk27, r4); - sub_80E95A4(); - return TRUE; -} - -void sub_80E7E50(void) -{ - u16 r5 = 0; - u16 i; - u16 j; - - for (i = 0; i < shared1000.unk84; i++) - { - shared1000.unk7E[i] = 0; - for (j = 0; j < shared1000.unk83; j++) - { - shared1000.unkC[r5] = shared1000.unk4[r5]; - shared1000.unk8C[i][j] = 0; - r5++; - } - } -} - -void sub_80E7F00(u16 a, u16 b) -{ - u16 r5 = a / shared1000.unk83; - u16 r8 = a % shared1000.unk83; - u16 r4 = sub_80EB2D4(shared1000.unkC[a]); - u16 r3 = sub_80EB2D4(b); - - if (r4 == 7) - { - if (r3 != 7) - shared1000.unk7E[r5]--; - } - else - { - if (r3 == 7) - shared1000.unk7E[r5]++; - } - r3 = 0; - shared1000.unk8C[r5][r8] = r3; - shared1000.unkC[a] = b; -} - -u8 sub_80E7FA8(void) -{ - u16 r8 = 0; - u16 i; - u8 *r1; - u8 *r2; - - for (i = 0; i < shared1000.unkA; i++) - { - sub_80EB218(shared1000.unk9E14, shared1000.unk4[i], 0); - sub_80EB218(shared1000.unk9E41, shared1000.unkC[i], 0); - r1 = shared1000.unk9E14; - r2 = shared1000.unk9E41; - while (*r1 == *r2 && *r1 != 0xFF) - { - r1++; - r2++; - } - if (*r1 != *r2) - r8++; - } - return r8; -} - -bool8 sub_80E8054(void) -{ - u16 i; - - for (i = 0; i < shared1000.unkA; i++) - { - if (shared1000.unkC[i] != 0xFFFF) - return FALSE; - } - return TRUE; -} - -// CheckMysteryEventPhrase -bool8 sub_80E8094(void) -{ - u16 i; - u8 *r3; - u8 *r4; - - for (i = 0; i < 4; i++) - { - sub_80EB218(shared1000.unk9E14, shared1000.unkC[i], 0); - sub_80EB218(shared1000.unk9E41, gMysteryEventPhrase[i], 0); - r3 = shared1000.unk9E14; - r4 = shared1000.unk9E41; - while (*r3 != 0xFF && *r4 != 0xFF) - { - if (*r3++ != *r4++) - return FALSE; - } - if (*r3 != 0xFF || *r4 != 0xFF) - return FALSE; - } - return TRUE; -} - -u8 sub_80E810C(void) -{ - u16 i; - - for (i = 0; i < 5; i++) - { - u8 *ptr; - u8 *r3; - - ptr = sub_80EB218(shared1000.unk9E6E, shared1000.unkC[0], 0); - *ptr++ = CHAR_SPACE; - sub_80EB218(ptr, shared1000.unkC[1], 0); - - ptr = sub_80EB218(shared1000.unk9EEE, gBerryMasterWifePhrases[i][0], 0); - *ptr++ = CHAR_SPACE; - sub_80EB218(ptr, gBerryMasterWifePhrases[i][1], 0); - - ptr = shared1000.unk9E6E; - r3 = shared1000.unk9EEE; - while (*ptr != EOS && *r3 != EOS) - { - if (*ptr++ != *r3++) - break; - } - if (*ptr == EOS && *r3 == EOS) - return i + 1; - } - return 0; -} - -void sub_80E81C0(void) -{ - u8 *ptr; - - ptr = sub_80EB218(gStringVar2, shared1000.unk9C7C, 0); - *ptr++ = CHAR_SPACE; - sub_80EB218(ptr, shared1000.unk9C7E, 0); -} - -void sub_80E81FC(void) -{ - PlaySE(SE_SELECT); - sub_80E95A4(); - MenuZeroFillWindowRect(0, 0, 29, 13); -} -- cgit v1.2.3