From ecf7cf9835ca2f50b4c483c9ee4156d2057e5406 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 6 Mar 2020 17:07:36 -0500 Subject: through sub_80FFF80 --- src/clear_save_data_screen.c | 4 +- src/easy_chat_2.c | 1380 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1382 insertions(+), 2 deletions(-) create mode 100644 src/easy_chat_2.c (limited to 'src') diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c index 5485e8da9..b6f8b83e9 100644 --- a/src/clear_save_data_screen.c +++ b/src/clear_save_data_screen.c @@ -131,7 +131,7 @@ static void Task_HandleYesNoMenu(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case -1: + case MENU_B_PRESSED: case 1: PlaySE(SE_SELECT); break; @@ -142,7 +142,7 @@ static void Task_HandleYesNoMenu(u8 taskId) CopyWindowToVram(1, 3); ClearSaveData(); break; - case -2: + case MENU_NOTHING_CHOSEN: default: return; } diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c new file mode 100644 index 000000000..9e018feaf --- /dev/null +++ b/src/easy_chat_2.c @@ -0,0 +1,1380 @@ +#include "global.h" +#include "gflib.h" +#include "easy_chat.h" +#include "event_data.h" +#include "menu.h" +#include "mevent.h" +#include "overworld.h" +#include "strings.h" +#include "task.h" +#include "constants/songs.h" +#include "constants/flags.h" + +#define EZCHAT_TASK_STATE 0 +#define EZCHAT_TASK_TYPE 1 +#define EZCHAT_TASK_WORDS 2 +#define EZCHAT_TASK_MAINCALLBACK 4 +#define EZCHAT_TASK_UNK06 6 +#define EZCHAT_TASK_SIZE 7 + +struct EasyChatScreenTemplate +{ + u8 type; + u8 numColumns; + u8 numRows; + u8 frameId; + const u8 *titleText; + const u8 *instructionsText1; + const u8 *instructionsText2; + const u8 *confirmText1; + const u8 *confirmText2; +}; + +struct EasyChatScreen +{ + /*0x00*/ u8 type; + /*0x01*/ u8 templateId; + /*0x02*/ u8 numColumns; + /*0x03*/ u8 numRows; + /*0x04*/ u8 state; + /*0x05*/ s8 mainCursorColumn; + /*0x06*/ s8 mainCursorRow; + /*0x07*/ u8 unk_07; + /*0x08*/ u8 stateBackup; + /*0x09*/ u8 unk_09; + /*0x0A*/ s8 unk_0a; + /*0x0B*/ s8 unk_0b; + /*0x0C*/ u8 unk_0c; + /*0x0D*/ u8 unk_0d; + /*0x0E*/ u8 unk_0e; + /*0x0F*/ u8 unk_0f; + /*0x10*/ s8 unk_10; + /*0x11*/ s8 unk_11; + /*0x12*/ u8 unk_12; + /*0x14*/ u16 *words; + /*0x18*/ u16 ecWordBuffer[9]; +}; + +EWRAM_DATA struct EasyChatScreen *sEasyChatScreen = NULL; + +void sub_80FEC0C(void); +void sub_80FEC54(u8 taskId); +void sub_80FEC90(u8 taskId); +bool8 sub_80FED80(u8 taskId); +void sub_80FEE24(MainCallback cb); +void sub_80FEF2C(void); +void sub_80FEF4C(void); +bool8 EasyChat_AllocateResources(u8 type, u16 *words); +void EasyChat_FreeResources(void); +u16 sub_80FF028(void); +u16 sub_80FF098(void); +u16 sub_80FF20C(void); +u16 sub_80FF360(void); +u16 sub_80FF41C(void); +u16 sub_80FF4A8(void); +u16 sub_80FF4F0(void); +u16 sub_80FF544(void); +u16 sub_80FF590(void); +u16 sub_80FF5A8(void); +u16 sub_80FF5C0(void); +u8 sub_80FF5F0(void); +int sub_80FF5FC(void); +int sub_80FF678(void); +int sub_80FF688(void); +int sub_80FF6B4(void); +int sub_80FF6C8(void); +void sub_80FF6F0(void); +void sub_80FF728(void); +void sub_80FF768(u16 word); +bool8 sub_80FF78C(void); +u16 sub_80FF7CC(u32 action); +int sub_80FF80C(u32 action); +int sub_80FF8D8(u32 action); +int sub_80FF968(u32 action); +void sub_80FF9E8(void); +void sub_80FFA0C(void); +u16 sub_80FFA38(u32 action); +u16 sub_80FFB6C(void); +u16 sub_80FFB8C(void); +int sub_80FFBAC(void); +u16 sub_80FFBE4(void); +u8 sub_80FFC04(u8 unkB); +void sub_80FFC1C(void); +void sub_80FFC44(void); +bool8 sub_80FFC6C(void); +bool8 sub_80FFCC0(void); +bool8 GetEasyChatScreenFrameId(void); +bool8 IsPhraseDifferentThanPlayerInput(const u16 *wordsToCompare, u8 numWords); +u8 GetEasyChatScreenTemplateId(u8 type); +bool32 IsEcWordBufferUninitialized(void); +bool8 sub_80FFF80(void); +bool8 sub_80FFF98(void); +void sub_810011C(void); +void sub_8100134(u16 v0); +bool8 sub_810014C(void); +bool8 sub_8100BF4(void); + +void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback) +{ + u8 taskId; + ResetTasks(); + taskId = CreateTask(sub_80FEC54, 0); + gTasks[taskId].data[EZCHAT_TASK_TYPE] = type; + SetWordTaskArg(taskId, EZCHAT_TASK_WORDS, (uintptr_t)words); + SetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK, (uintptr_t)callback); + SetMainCallback2(sub_80FEC0C); +} + +void sub_80FEC0C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void VBlankCallback_EasyChatScreen(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +void sub_80FEC38(u8 taskId, TaskFunc func) +{ + gTasks[taskId].func = func; + gTasks[taskId].data[EZCHAT_TASK_STATE] = 0; +} + +void sub_80FEC54(u8 taskId) +{ + if (!IsUpdateLinkStateCBActive()) + { + while (sub_80FED80(taskId)) + ; + } + else + { + if (sub_80FED80(taskId) == TRUE) + return; + } + sub_80FEC38(taskId, sub_80FEC90); +} + +void sub_80FEC90(u8 taskId) +{ + u16 v0; + s16 *data; + + data = gTasks[taskId].data; + switch (data[EZCHAT_TASK_STATE]) + { + case 0: + SetVBlankCallback(VBlankCallback_EasyChatScreen); + BlendPalettes(0xFFFFFFFF, 16, 0); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + data[EZCHAT_TASK_STATE]++; + break; + case 1: + v0 = sub_80FF028(); + if (v0 == 23) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + data[EZCHAT_TASK_STATE] = 3; + } + else if (v0 != 0) + { + PlaySE(SE_SELECT); + sub_8100134(v0); + data[EZCHAT_TASK_STATE]++; + } + break; + case 2: + if (!sub_810014C()) + data[EZCHAT_TASK_STATE] = 1; + break; + case 3: + if (!gPaletteFade.active) + { + if (data[EZCHAT_TASK_TYPE] == 14) + sub_80FEF4C(); + if (data[EZCHAT_TASK_TYPE] == 0) + { + FlagSet(FLAG_SYS_SET_TRAINER_CARD_PROFILE); + sub_80FEF2C(); + } + sub_80FEE24((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + } + break; + } +} + +bool8 sub_80FED80(u8 taskId) +{ + s16 *data; + + data = gTasks[taskId].data; + switch (data[EZCHAT_TASK_STATE]) + { + case 0: + SetVBlankCallback(NULL); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + break; + case 1: + if (!InitEasyChatSelection()) + { + sub_80FEE24((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + } + break; + case 2: + if (!EasyChat_AllocateResources(data[EZCHAT_TASK_TYPE], (u16 *)GetWordTaskArg(taskId, EZCHAT_TASK_WORDS))) + { + sub_80FEE24((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + } + break; + case 3: + if (!sub_80FFF80()) + { + sub_80FEE24((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + } + break; + case 4: + if (sub_80FFF98()) + { + return TRUE; + } + break; + default: + return FALSE; + } + data[EZCHAT_TASK_STATE]++; + return TRUE; +} + +void sub_80FEE24(MainCallback callback) +{ + DestroyEasyChatSelectionData(); + EasyChat_FreeResources(); + sub_810011C(); + FreeAllWindowBuffers(); + SetMainCallback2(callback); +} + +void ShowEasyChatScreen(void) +{ + u16 *words; + switch (gSpecialVar_0x8004) + { + case EASY_CHAT_TYPE_PROFILE: + words = gSaveBlock1Ptr->easyChatProfile; + break; + case EASY_CHAT_TYPE_BATTLE_START: + words = gSaveBlock1Ptr->easyChatBattleStart; + break; + case EASY_CHAT_TYPE_BATTLE_WON: + words = gSaveBlock1Ptr->easyChatBattleWon; + break; + case EASY_CHAT_TYPE_BATTLE_LOST: + words = gSaveBlock1Ptr->easyChatBattleLost; + break; + case EASY_CHAT_TYPE_QUESTIONNAIRE: + words = GetMEventProfileECWordsMaybe(); + break; + case EASY_CHAT_TYPE_MAIL: + words = gSaveBlock1Ptr->mail[gSpecialVar_0x8005].words; + break; + default: + return; + } + DoEasyChatScreen(gSpecialVar_0x8004, words, sub_80568C4); +} + +static const u16 gUnknown_843F29C[] = { + EC_WORD_MYSTERY, + EC_WORD_EVENT, + EC_WORD_IS, + EC_WORD_EXCITING +}; + +void sub_80FEF2C(void) +{ + gSpecialVar_0x8004 = IsPhraseDifferentThanPlayerInput(gUnknown_843F29C, NELEMS(gUnknown_843F29C)); +} + +static const u16 gUnknown_843F2A4[] = { + EC_WORD_LINK, + EC_WORD_TOGETHER, + EC_WORD_WITH, + EC_WORD_ALL +}; + +void sub_80FEF4C(void) +{ + gSpecialVar_0x8004 = IsPhraseDifferentThanPlayerInput(gUnknown_843F2A4, NELEMS(gUnknown_843F2A4)); +} + +const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = { + { + .type = EASY_CHAT_TYPE_PROFILE, + .numColumns = 2, + .numRows = 2, + .frameId = 0, + .titleText = gUnknown_8418A2B, + .instructionsText1 = gUnknown_84186D1, + .instructionsText2 = gUnknown_84186EF, + .confirmText1 = gUnknown_841880E, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_BATTLE_START, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418A33, + .instructionsText1 = gUnknown_8418706, + .instructionsText2 = gUnknown_8418725, + .confirmText1 = gUnknown_841881B, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_BATTLE_WON, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418A4A, + .instructionsText1 = gUnknown_8418706, + .instructionsText2 = gUnknown_8418725, + .confirmText1 = gUnknown_841883E, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_BATTLE_LOST, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418A61, + .instructionsText1 = gUnknown_8418706, + .instructionsText2 = gUnknown_8418725, + .confirmText1 = gUnknown_841885F, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_MAIL, + .numColumns = 2, + .numRows = 5, + .frameId = 2, + .titleText = NULL, + .instructionsText1 = gUnknown_8418780, + .instructionsText2 = gUnknown_841879E, + .confirmText1 = gUnknown_841888C, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_MAIL_NO_CONFIRM, + .numColumns = 2, + .numRows = 2, + .frameId = 0, + .instructionsText1 = gUnknown_8418780, + .instructionsText2 = gUnknown_841879E, + }, { + .type = EASY_CHAT_TYPE_BARD_SONG, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418A77, + .instructionsText1 = gUnknown_84187B2, + .instructionsText2 = gUnknown_84187D1, + .confirmText1 = gUnknown_84188AC, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_INTERVIEW, + .numColumns = 2, + .numRows = 3, + .frameId = 1, + .titleText = gUnknown_8418AA1, + .instructionsText1 = gUnknown_8418745, + .instructionsText2 = gUnknown_8418763, + .confirmText1 = gUnknown_8418881, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_TRENDY_PHRASE, + .numColumns = 2, + .numRows = 1, + .frameId = 3, + .titleText = gUnknown_8418A87, + .instructionsText1 = gUnknown_84188B9, + .instructionsText2 = gUnknown_84188D6, + .confirmText1 = gUnknown_84188F0, + .confirmText2 = gUnknown_8418902 + }, { + .type = EASY_CHAT_TYPE_QUESTIONNAIRE, + .numColumns = 2, + .numRows = 2, + .frameId = 0, + .titleText = gUnknown_8418AB2, + .instructionsText1 = gUnknown_84186D1, + .instructionsText2 = gUnknown_84187EE, + .confirmText1 = gUnknown_8418881, + .confirmText2 = gUnknown_8418902 + } +}; + +bool8 EasyChat_AllocateResources(u8 type, u16 *words) +{ + u8 templateId; + int i; + + sEasyChatScreen = malloc(sizeof(*sEasyChatScreen)); + if (sEasyChatScreen == NULL) + return FALSE; + + sEasyChatScreen->type = type; + sEasyChatScreen->words = words; + sEasyChatScreen->state = 0; + sEasyChatScreen->mainCursorColumn = 0; + sEasyChatScreen->mainCursorRow = 0; + sEasyChatScreen->unk_09 = 0; + templateId = GetEasyChatScreenTemplateId(type); + + sEasyChatScreen->numColumns = sEasyChatScreenTemplates[templateId].numColumns; + sEasyChatScreen->numRows = sEasyChatScreenTemplates[templateId].numRows; + sEasyChatScreen->unk_07 = sEasyChatScreen->numColumns * sEasyChatScreen->numRows; + sEasyChatScreen->templateId = templateId; + if (sEasyChatScreen->unk_07 > 9) + sEasyChatScreen->unk_07 = 9; + + CpuCopy16(words, sEasyChatScreen->ecWordBuffer, sEasyChatScreen->unk_07 * sizeof(u16)); + sEasyChatScreen->unk_0d = (GetNumDisplayableGroups() - 1) / 2 + 1; + return TRUE; +} + +void EasyChat_FreeResources(void) +{ + if (sEasyChatScreen != NULL) + Free(sEasyChatScreen); +} + +u16 sub_80FF028(void) +{ + switch (sEasyChatScreen->state) + { + case 0: + return sub_80FF098(); + case 1: + return sub_80FF20C(); + case 2: + return sub_80FF360(); + case 3: + return sub_80FF41C(); + case 4: + return sub_80FF4A8(); + case 5: + return sub_80FF544(); + case 6: + return sub_80FF4F0(); + } + return 0; +} + +u16 sub_80FF098(void) +{ + do + { + if (JOY_NEW(A_BUTTON)) + { + sEasyChatScreen->state = 2; + sEasyChatScreen->unk_0a = 0; + sEasyChatScreen->unk_0b = 0; + sEasyChatScreen->unk_0c = 0; + return 9; + } + else if (JOY_NEW(B_BUTTON)) + { + return sub_80FF590(); + } + else if (JOY_NEW(START_BUTTON)) + { + return sub_80FF5C0(); + } + else if (JOY_NEW(DPAD_UP)) + { + sEasyChatScreen->mainCursorRow--; + break; + } + else if (JOY_NEW(DPAD_LEFT)) + { + sEasyChatScreen->mainCursorColumn--; + break; + } + else if (JOY_NEW(DPAD_DOWN)) + { + sEasyChatScreen->mainCursorRow++; + break; + } + else if (JOY_NEW(DPAD_RIGHT)) + { + sEasyChatScreen->mainCursorColumn++; + break; + } + + return 0; + } while (0); + + if (sEasyChatScreen->mainCursorRow < 0) + sEasyChatScreen->mainCursorRow = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows; + + if (sEasyChatScreen->mainCursorRow > sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows) + sEasyChatScreen->mainCursorRow = 0; + + if (sEasyChatScreen->mainCursorRow == sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows) + { + if (sEasyChatScreen->mainCursorColumn > 2) + sEasyChatScreen->mainCursorColumn = 2; + + sEasyChatScreen->state = 1; + return 3; + } + + if (sEasyChatScreen->mainCursorColumn < 0) + sEasyChatScreen->mainCursorColumn = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns - 1; + + if (sEasyChatScreen->mainCursorColumn >= sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns) + sEasyChatScreen->mainCursorColumn = 0; + + if (GetEasyChatScreenFrameId() == 2 && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4) + sEasyChatScreen->mainCursorColumn = 0; + + return 2; +} + +u16 sub_80FF20C(void) +{ + do + { + if (JOY_NEW(A_BUTTON)) + { + switch (sEasyChatScreen->mainCursorColumn) + { + case 0: + return sub_80FF5A8(); + case 1: + return sub_80FF590(); + case 2: + return sub_80FF5C0(); + } + } + + if (JOY_NEW(B_BUTTON)) + { + return sub_80FF590(); + } + else if (JOY_NEW(START_BUTTON)) + { + return sub_80FF5C0(); + } + else if (JOY_NEW(DPAD_UP)) + { + sEasyChatScreen->mainCursorRow--; + break; + } + else if (JOY_NEW(DPAD_LEFT)) + { + sEasyChatScreen->mainCursorColumn--; + break; + } + else if (JOY_NEW(DPAD_DOWN)) + { + sEasyChatScreen->mainCursorRow = 0; + break; + } + else if (JOY_NEW(DPAD_RIGHT)) + { + sEasyChatScreen->mainCursorColumn++; + break; + } + + return 0; + } while (0); + + if (sEasyChatScreen->mainCursorRow == sEasyChatScreenTemplates[sEasyChatScreen->templateId].numRows) + { + if (sEasyChatScreen->mainCursorColumn < 0) + sEasyChatScreen->mainCursorColumn = 2; + + if (sEasyChatScreen->mainCursorColumn >= 3) + sEasyChatScreen->mainCursorColumn = 0; + + return 3; + } + + if (sEasyChatScreen->mainCursorColumn >= sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns) + sEasyChatScreen->mainCursorColumn = sEasyChatScreenTemplates[sEasyChatScreen->templateId].numColumns - 1; + + if (GetEasyChatScreenFrameId() == 2 && sEasyChatScreen->mainCursorColumn == 1 && sEasyChatScreen->mainCursorRow == 4) + sEasyChatScreen->mainCursorColumn = 0; + + sEasyChatScreen->state = 0; + return 2; +} + +u16 sub_80FF360(void) +{ + if (JOY_NEW(B_BUTTON)) + return sub_80FF678(); + + if (JOY_NEW(A_BUTTON)) + { + if (sEasyChatScreen->unk_0a != -1) + return sub_80FF5FC(); + + switch (sEasyChatScreen->unk_0b) + { + case 0: + return sub_80FF688(); + case 1: + return sub_80FF6B4(); + case 2: + return sub_80FF678(); + } + } + + if (JOY_NEW(SELECT_BUTTON)) + return sub_80FF688(); + + if (JOY_REPT(DPAD_UP)) + return sub_80FF7CC(2); + + if (JOY_REPT(DPAD_DOWN)) + return sub_80FF7CC(3); + + if (JOY_REPT(DPAD_LEFT)) + return sub_80FF7CC(1); + + if (JOY_REPT(DPAD_RIGHT)) + return sub_80FF7CC(0); + + return 0; +} + +u16 sub_80FF41C(void) +{ + if (JOY_NEW(B_BUTTON)) + { + sEasyChatScreen->state = 2; + return 13; + } + + if (JOY_NEW(A_BUTTON)) + return sub_80FF6C8(); + + if (JOY_NEW(START_BUTTON)) + return sub_80FFA38(4); + + if (JOY_NEW(SELECT_BUTTON)) + return sub_80FFA38(5); + + if (JOY_REPT(DPAD_UP)) + return sub_80FFA38(2); + + if (JOY_REPT(DPAD_DOWN)) + return sub_80FFA38(3); + + if (JOY_REPT(DPAD_LEFT)) + return sub_80FFA38(1); + + if (JOY_REPT(DPAD_RIGHT)) + return sub_80FFA38(0); + + return 0; +} + +u16 sub_80FF4A8(void) +{ + u8 var0; + + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case MENU_B_PRESSED: // B Button + case 1: // No + sEasyChatScreen->state = sub_80FF5F0(); + return 7; + case 0: // Yes + gSpecialVar_Result = 0; + + return 23; + default: + return 0; + } +} + +u16 sub_80FF4F0(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case MENU_B_PRESSED: // B Button + case 1: // No + sEasyChatScreen->state = sub_80FF5F0(); + return 7; + case 0: // Yes + gSpecialVar_Result = sub_80FF78C(); + sub_80FF6F0(); + return 23; + default: + return 0; + } +} + +u16 sub_80FF544(void) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case MENU_B_PRESSED: // B Button + case 1: // No + sEasyChatScreen->state = 1; + return 7; + case 0: // Yes + sub_80FF728(); + sEasyChatScreen->state = 1; + return 8; + default: + return 0; + } +} + +u16 sub_80FF590(void) +{ + sEasyChatScreen->stateBackup = sEasyChatScreen->state; + sEasyChatScreen->state = 4; + return 5; +} + +u16 sub_80FF5A8(void) +{ + sEasyChatScreen->stateBackup = sEasyChatScreen->state; + sEasyChatScreen->state = 5; + return 4; +} + +u16 sub_80FF5C0(void) +{ + sEasyChatScreen->stateBackup = sEasyChatScreen->state; + if (IsEcWordBufferUninitialized()) + { + sEasyChatScreen->state = 4; + return 5; + } + else + { + sEasyChatScreen->state = 6; + return 6; + } +} + +u8 sub_80FF5F0(void) +{ + return sEasyChatScreen->stateBackup; +} + +int sub_80FF5FC(void) +{ + u16 var1; + + if (sEasyChatScreen->unk_09 == 0) + { + u8 groupId = GetSelectedGroupByIndex(sub_80FFB8C()); + GetUnlockedECWords(FALSE, groupId); + } + else + { + GetUnlockedECWords(TRUE, sub_80FFBAC()); + } + + var1 = GetNumDisplayedWords(); + if (var1 == 0) + return 0; + + sEasyChatScreen->unk_0f = (var1 - 1) / 2; + sEasyChatScreen->unk_0e = 0; + sEasyChatScreen->unk_10 = 0; + sEasyChatScreen->unk_11 = 0; + sEasyChatScreen->state = 3; + return 11; +} + +int sub_80FF678(void) +{ + sEasyChatScreen->state = 0; + return 10; +} + +int sub_80FF688(void) +{ + sEasyChatScreen->unk_0a = 0; + sEasyChatScreen->unk_0b = 0; + sEasyChatScreen->unk_0c = 0; + if (!sEasyChatScreen->unk_09) + sEasyChatScreen->unk_09 = 1; + else + sEasyChatScreen->unk_09 = 0; + + return 22; +} + +int sub_80FF6B4(void) +{ + sub_80FF768(0xFFFF); + return 1; +} + +int sub_80FF6C8(void) +{ + u16 easyChatWord = GetDisplayedWordByIndex(sub_80FFBE4()); + sub_80FF768(easyChatWord); + sEasyChatScreen->state = 0; + return 12; +} + +void sub_80FF6F0(void) +{ + u16 i; + for (i = 0; i < sEasyChatScreen->unk_07; i++) + sEasyChatScreen->words[i] = sEasyChatScreen->ecWordBuffer[i]; +} + +void sub_80FF728(void) +{ + u16 i; + for (i = 0; i < sEasyChatScreen->unk_07; i++) + sEasyChatScreen->ecWordBuffer[i] = 0xFFFF; +} + +void sub_80FF768(u16 easyChatWord) +{ + u16 index = sub_80FFB6C(); + sEasyChatScreen->ecWordBuffer[index] = easyChatWord; +} + +bool8 sub_80FF78C(void) +{ + u16 i; + for (i = 0; i < sEasyChatScreen->unk_07; i++) + { + if (sEasyChatScreen->ecWordBuffer[i] != sEasyChatScreen->words[i]) + return TRUE; + } + + return FALSE; +} + +u16 sub_80FF7CC(u32 action) +{ + if (sEasyChatScreen->unk_0a != -1) + { + if (sEasyChatScreen->unk_09 == 0) + return sub_80FF80C(action); + else + return sub_80FF8D8(action); + } + else + { + return sub_80FF968(action); + } +} + +int sub_80FF80C(u32 arg0) +{ + switch (arg0) + { + case 2: + if (sEasyChatScreen->unk_0b != -sEasyChatScreen->unk_0c) + { + if (sEasyChatScreen->unk_0b) + { + sEasyChatScreen->unk_0b--; + return 14; + } + else + { + sEasyChatScreen->unk_0c--; + return 16; + } + } + break; + case 3: + if (sEasyChatScreen->unk_0b + sEasyChatScreen->unk_0c < sEasyChatScreen->unk_0d - 1) + { + int var0; + if (sEasyChatScreen->unk_0b < 3) + { + sEasyChatScreen->unk_0b++; + var0 = 14; + } + else + { + sEasyChatScreen->unk_0c++; + var0 = 15; + } + + sub_80FFC1C(); + return var0; + } + break; + case 1: + if (sEasyChatScreen->unk_0a) + sEasyChatScreen->unk_0a--; + else + sub_80FF9E8(); + + return 14; + case 0: + if (sEasyChatScreen->unk_0a < 1) + { + sEasyChatScreen->unk_0a++; + if (sub_80FFC6C()) + sub_80FF9E8(); + } + else + { + sub_80FF9E8(); + } + return 14; + } + + return 0; +} + +int sub_80FF8D8(u32 arg0) +{ + switch (arg0) + { + case 2: + if (sEasyChatScreen->unk_0b > 0) + sEasyChatScreen->unk_0b--; + else + sEasyChatScreen->unk_0b = 3; + + sub_80FFC1C(); + return 14; + case 3: + if (sEasyChatScreen->unk_0b < 3) + sEasyChatScreen->unk_0b++; + else + sEasyChatScreen->unk_0b = 0; + + sub_80FFC1C(); + return 14; + case 0: + sEasyChatScreen->unk_0a++; + if (sub_80FFC6C()) + sub_80FF9E8(); + + return 14; + case 1: + sEasyChatScreen->unk_0a--; + if (sEasyChatScreen->unk_0a < 0) + sub_80FF9E8(); + + return 14; + } + + return 0; +} + +int sub_80FF968(u32 arg0) +{ + switch (arg0) + { + case 2: + if (sEasyChatScreen->unk_0b) + sEasyChatScreen->unk_0b--; + else + sEasyChatScreen->unk_0b = 2; + + return 14; + case 3: + if (sEasyChatScreen->unk_0b < 2) + sEasyChatScreen->unk_0b++; + else + sEasyChatScreen->unk_0b = 0; + + return 14; + case 1: + sEasyChatScreen->unk_0b++; + sub_80FFA0C(); + return 14; + case 0: + sEasyChatScreen->unk_0a = 0; + sEasyChatScreen->unk_0b++; + return 14; + } + + return 0; +} + +void sub_80FF9E8(void) +{ + sEasyChatScreen->unk_0a = 0xFF; + if (sEasyChatScreen->unk_0b) + sEasyChatScreen->unk_0b--; +} + +void sub_80FFA0C(void) +{ + if (sEasyChatScreen->unk_09 == 0) + { + sEasyChatScreen->unk_0a = 1; + sub_80FFC1C(); + } + else + { + sEasyChatScreen->unk_0a = sub_80FFC04(sEasyChatScreen->unk_0b); + } +} + +u16 sub_80FFA38(u32 arg0) +{ + u16 result; + switch (arg0) + { + case 2: + if (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e > 0) + { + if (sEasyChatScreen->unk_11 > 0) + { + sEasyChatScreen->unk_11--; + result = 17; + } + else + { + sEasyChatScreen->unk_0e--; + result = 18; + } + + sub_80FFC44(); + return result; + } + break; + case 3: + if (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e < sEasyChatScreen->unk_0f) + { + if (sEasyChatScreen->unk_11 < 3) + { + sEasyChatScreen->unk_11++; + result = 17; + } + else + { + sEasyChatScreen->unk_0e++; + result = 19; + } + + sub_80FFC44(); + return result; + } + break; + case 1: + if (sEasyChatScreen->unk_10 > 0) + sEasyChatScreen->unk_10--; + else + sEasyChatScreen->unk_10 = 1; + + sub_80FFC44(); + return 17; + case 0: + if (sEasyChatScreen->unk_10 < 1) + { + sEasyChatScreen->unk_10++; + if (sub_80FFCC0()) + sEasyChatScreen->unk_10 = 0; + } + else + { + sEasyChatScreen->unk_10 = 0; + } + return 17; + case 4: + if (sEasyChatScreen->unk_0e) + { + if (sEasyChatScreen->unk_0e > 3) + sEasyChatScreen->unk_0e -= 4; + else + sEasyChatScreen->unk_0e = 0; + + return 20; + } + break; + case 5: + if (sEasyChatScreen->unk_0e <= sEasyChatScreen->unk_0f - 4) + { + sEasyChatScreen->unk_0e += 4; + if (sEasyChatScreen->unk_0e > sEasyChatScreen->unk_0f - 3) + sEasyChatScreen->unk_0e = sEasyChatScreen->unk_0f + -3u; + + sub_80FFC44(); + return 21; + } + break; + } + + return 0; +} + +u16 sub_80FFB6C(void) +{ + return (sEasyChatScreen->mainCursorRow * sEasyChatScreen->numColumns) + sEasyChatScreen->mainCursorColumn; +} + +u16 sub_80FFB8C(void) +{ + return 2 * (sEasyChatScreen->unk_0b + sEasyChatScreen->unk_0c) + sEasyChatScreen->unk_0a; +} + +const u8 gUnknown_843F39C[][7] = { + {0x01, 0x02, 0x03, 0x04, 0x05, 0x06}, + {0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c}, + {0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13}, + {0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a} +}; + +int sub_80FFBAC(void) +{ + int var0 = sEasyChatScreen->unk_0a < NELEMS(*gUnknown_843F39C) ? sEasyChatScreen->unk_0a : 0; + int var1 = sEasyChatScreen->unk_0b < NELEMS(gUnknown_843F39C) ? sEasyChatScreen->unk_0b : 0; + return gUnknown_843F39C[var1][var0]; +} + +u16 sub_80FFBE4(void) +{ + return 2 * (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e) + sEasyChatScreen->unk_10; +} + +u8 sub_80FFC04(u8 arg0) +{ + switch (arg0) + { + case 0: + default: + return 6; + case 1: + return 5; + } +} + +void sub_80FFC1C(void) +{ + while (sub_80FFC6C()) + { + if (sEasyChatScreen->unk_0a) + sEasyChatScreen->unk_0a--; + else + break; + } +} + +void sub_80FFC44(void) +{ + while (sub_80FFCC0()) + { + if (sEasyChatScreen->unk_10) + sEasyChatScreen->unk_10--; + else + break; + } +} + +bool8 sub_80FFC6C(void) +{ + if (sEasyChatScreen->unk_09 == 0) + return sub_80FFB8C() >= GetNumDisplayableGroups() ? TRUE : FALSE; + else + return sEasyChatScreen->unk_0a > sub_80FFC04(sEasyChatScreen->unk_0b) ? TRUE : FALSE; +} + +bool8 sub_80FFCC0(void) +{ + return sub_80FFBE4() >= GetNumDisplayedWords() ? TRUE : FALSE; +} + +u8 GetEasyChatScreenFrameId(void) +{ + return sEasyChatScreenTemplates[sEasyChatScreen->templateId].frameId; +} + +const u8 *GetTitleText(void) +{ + return sEasyChatScreenTemplates[sEasyChatScreen->templateId].titleText; +} + +u16 *GetEasyChatWordBuffer(void) +{ + return sEasyChatScreen->ecWordBuffer; +} + +u8 GetNumRows(void) +{ + return sEasyChatScreen->numRows; +} + +u8 GetNumColumns(void) +{ + return sEasyChatScreen->numColumns; +} + +u8 GetMainCursorColumn(void) +{ + return sEasyChatScreen->mainCursorColumn; +} + +u8 GetMainCursorRow(void) +{ + return sEasyChatScreen->mainCursorRow; +} + +void GetEasyChatInstructionsText(const u8 **str1, const u8 **str2) +{ + *str1 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].instructionsText1; + *str2 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].instructionsText2; +} + +void GetEasyChatConfirmText(const u8 **str1, const u8 **str2) +{ + *str1 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].confirmText1; + *str2 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].confirmText2; +} + +void sub_80FFDC8(const u8 **str1, const u8 **str2) +{ + switch (sEasyChatScreen->type) + { + case EASY_CHAT_TYPE_MAIL: + *str1 = gUnknown_84189EE; + *str2 = NULL; + break; + default: + *str1 = gUnknown_84189E0; + *str2 = NULL; + break; + } + +} + +void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2) +{ + *str1 = gUnknown_8418937; + *str2 = gUnknown_8418956; +} + +void sub_80FFE08(u8 *arg0, u8 *arg1) +{ + *arg0 = sEasyChatScreen->unk_0a; + *arg1 = sEasyChatScreen->unk_0b; +} + +u8 sub_80FFE1C(void) +{ + return sEasyChatScreen->unk_09; +} + +u8 sub_80FFE28(void) +{ + return sEasyChatScreen->unk_0c; +} + +void sub_80FFE34(u8 *arg0, u8 *arg1) +{ + *arg0 = sEasyChatScreen->unk_10; + *arg1 = sEasyChatScreen->unk_11; +} + +u8 sub_80FFE48(void) +{ + return sEasyChatScreen->unk_0e; +} + +u8 sub_80FFE54(void) +{ + return sEasyChatScreen->unk_0f; +} + +u8 unref_sub_80FFE60(void) +{ + return 0; +} + +bool32 sub_80FFE64(void) +{ + switch (sEasyChatScreen->state) + { + case 2: + if (sEasyChatScreen->unk_09 == 0 && sEasyChatScreen->unk_0c) + return TRUE; + break; + case 3: + if (sEasyChatScreen->unk_0e) + return TRUE; + break; + } + + return FALSE; +} + +bool32 sub_80FFE98(void) +{ + switch (sEasyChatScreen->state) + { + case 2: + if (sEasyChatScreen->unk_09 == 0 && sEasyChatScreen->unk_0c + 4 <= sEasyChatScreen->unk_0d - 1) + return TRUE; + break; + case 3: + if (sEasyChatScreen->unk_0e + 4 <= sEasyChatScreen->unk_0f) + return TRUE; + break; + } + + return FALSE; +} + +bool8 IsPhraseDifferentThanPlayerInput(const u16 *phrase, u8 phraseLength) +{ + u8 i; + + for (i = 0; i < phraseLength; i++) + { + if (phrase[i] != sEasyChatScreen->ecWordBuffer[i]) + return TRUE; + } + + return FALSE; +} + +u8 GetEasyChatScreenTemplateId(u8 type) +{ + u32 i; + + for (i = 0; i < NELEMS(sEasyChatScreenTemplates); i++) + { + if (sEasyChatScreenTemplates[i].type == type) + return i; + } + + return 0; +} + +bool32 IsEcWordBufferUninitialized(void) +{ + int i; + + for (i = 0; i < sEasyChatScreen->unk_07; i++) + { + if (sEasyChatScreen->ecWordBuffer[i] != 0xFFFF) + return FALSE; + } + + return TRUE; +} + +bool8 sub_80FFF80(void) +{ + if (!sub_8100BF4()) + return FALSE; + else + return TRUE; +} -- cgit v1.2.3 From 6ce70985ebcb78267290e35e65aadb6a433c1cba Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 7 Mar 2020 12:37:18 -0500 Subject: through sub_8100B70 --- src/easy_chat_2.c | 14 - src/easy_chat_3.c | 983 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/graphics.c | 4 +- 3 files changed, 985 insertions(+), 16 deletions(-) create mode 100644 src/easy_chat_3.c (limited to 'src') diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 9e018feaf..28c091dc6 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -107,12 +107,6 @@ bool8 GetEasyChatScreenFrameId(void); bool8 IsPhraseDifferentThanPlayerInput(const u16 *wordsToCompare, u8 numWords); u8 GetEasyChatScreenTemplateId(u8 type); bool32 IsEcWordBufferUninitialized(void); -bool8 sub_80FFF80(void); -bool8 sub_80FFF98(void); -void sub_810011C(void); -void sub_8100134(u16 v0); -bool8 sub_810014C(void); -bool8 sub_8100BF4(void); void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback) { @@ -1370,11 +1364,3 @@ bool32 IsEcWordBufferUninitialized(void) return TRUE; } - -bool8 sub_80FFF80(void) -{ - if (!sub_8100BF4()) - return FALSE; - else - return TRUE; -} diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c new file mode 100644 index 000000000..d01203dcc --- /dev/null +++ b/src/easy_chat_3.c @@ -0,0 +1,983 @@ +#include "global.h" +#include "gflib.h" +#include "easy_chat.h" +#include "graphics.h" +#include "new_menu_helpers.h" + +struct Unk203A11C +{ + u16 unk0; + u16 windowId; + u16 unk4; + u8 unk6; + u8 unk7; + s8 unk8; + u8 unk9; + u8 unkA; + u8 unkB[0xC1]; + u8 unkCC[0x202]; + u16 unk2CE; + int unk2D0; + int unk2D4; + struct Sprite *unk2D8; + struct Sprite *unk2DC; + struct Sprite *unk2E0; + struct Sprite *unk2E4; + struct Sprite *unk2E8; + struct Sprite *unk2EC; + struct Sprite *unk2F0; + struct Sprite *unk2F4; + struct Sprite *unk2F8; + struct Sprite *unk2FC; + u16 unk300[BG_SCREEN_SIZE / 2]; + u16 unkB00[BG_SCREEN_SIZE / 2]; +}; + +struct EasyChatPhraseFrameDimensions +{ + u8 left; + u8 top; + u8 width; + u8 height; +}; + +EWRAM_DATA struct Unk203A11C *gUnknown_203ACEC = NULL; + +bool8 sub_8100258(void); +bool8 sub_8100290(void); +bool8 sub_8100374(void); +bool8 sub_81003A8(void); +bool8 sub_81003EC(void); +bool8 sub_8100430(void); +bool8 sub_8100474(void); +bool8 sub_81004B8(void); +bool8 sub_81004F4(void); +bool8 sub_81005C0(void); +bool8 sub_8100660(void); +bool8 sub_8100720(void); +bool8 sub_810072C(void); +bool8 sub_8100774(void); +bool8 sub_81007D0(void); +bool8 sub_8100890(void); +bool8 sub_810093C(void); +bool8 sub_81009F8(void); +bool8 sub_8100A04(void); +bool8 sub_8100A78(void); +bool8 sub_8100AE8(void); +bool8 sub_8100B70(void); +bool8 sub_8100BF4(void); +void sub_8100C5C(void); +void sub_8100CBC(void); +void sub_8100D24(void); +void sub_8100E34(void); +void sub_8100E7C(u8 a0); +void sub_8100F18(u8 initialCursorPos); +void sub_8100F44(void); +void sub_8100FDC(void); +void sub_8101100(u16 *buffer); +void sub_81012CC(void); +void sub_81012E0(u8 a0); +void sub_810131C(void); +void sub_81013EC(void); +void sub_8101410(void); +void sub_8101434(void); +void sub_8101478(void); +void sub_81015BC(void); +void sub_81015D4(u8 a0); +bool8 sub_81016AC(void); +void sub_81019B0(s16 a0, u8 a1); +bool8 sub_8101A10(void); +s32 sub_8101A48(void); +void sub_8101A5C(u8 left, u8 top, u8 right, u8 bottom); +void sub_8101A90(void); +void sub_8101AC4(void); +void sub_8101B58(u8 a0, u8 a1); +void sub_8101B88(void); +void sub_8101BA8(void); +void sub_8101BC0(void); +void sub_8101C48(void); +void sub_8101C80(void); +void sub_8101E80(void); +void sub_8101F04(void); +void sub_8101F80(void); +void sub_8101FAC(void); +bool8 sub_8102018(void); +void sub_81020AC(void); +bool8 sub_81020D0(void); +void sub_810215C(void); +void sub_8102178(void); +bool8 sub_81021B8(void); +void sub_81021D4(void); +void sub_810224C(void); +void sub_81022B0(void); +void sub_81022E0(u8 a0); +void sub_8102320(void); +void sub_8102394(void); +void sub_81023F8(void); +void sub_8102428(void); + +const u16 gUnknown_843F3B8[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.gbapal"); +const u16 gUnknown_843F3D8[] = INCBIN_U16("graphics/link_rfu/unk_8E9BD28.gbapal"); +const u16 gUnknown_843F3F8[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.4bpp"); +const u16 gUnknown_843F418[] = INCBIN_U16("graphics/link_rfu/unk_843F418.4bpp"); +const u16 gUnknown_843F518[] = INCBIN_U16("graphics/link_rfu/unk_843F518.4bpp"); +const u16 gUnknown_843F618[] = INCBIN_U16("graphics/link_rfu/unk_843F638.gbapal"); +const u32 gUnknown_843F638[] = INCBIN_U32("graphics/link_rfu/unk_843F638.4bpp.lz"); +const u16 gUnknown_843F76C[] = INCBIN_U16("graphics/link_rfu/unk_843F76C.gbapal"); +const u16 gUnknown_843F78C[] = INCBIN_U16("graphics/link_rfu/unk_843F78C.gbapal"); +const u32 gUnknown_843F7AC[] = INCBIN_U32("graphics/link_rfu/unk_843F7AC.4bpp.lz"); + +const u16 gUnknown_843F874[] = { + RGB( 0, 0, 0), + RGB( 0, 0, 0), + RGB( 7, 25, 31), + RGB(21, 21, 29) +}; + +const u16 gUnknown_843F87C[] = { + RGB( 0, 0, 0), + RGB(31, 31, 31), + RGB(12, 12, 12), + RGB(27, 26, 27), + RGB( 8, 17, 9) +}; + +const struct EasyChatPhraseFrameDimensions sPhraseFrameDimensions[] = { + { + .left = 0x03, + .top = 0x04, + .width = 0x18, + .height = 0x04 + }, { + .left = 0x01, + .top = 0x04, + .width = 0x1b, + .height = 0x04 + }, { + .left = 0x03, + .top = 0x00, + .width = 0x18, + .height = 0x0a + }, { + .left = 0x06, + .top = 0x06, + .width = 0x12, + .height = 0x04 + }, { + .left = 0x10, + .top = 0x04, + .width = 0x09, + .height = 0x02 + }, { + .left = 0x0e, + .top = 0x04, + .width = 0x12, + .height = 0x04 + } +}; + +const struct BgTemplate sEasyChatBgTemplates[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0, + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0, + }, { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x80, + }, { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0, + } +}; + +const struct WindowTemplate sEasyChatWindowTemplates[] = { + { + .bg = 1, + .tilemapLeft = 7, + .tilemapTop = 0, + .width = 16, + .height = 2, + .paletteNum = 10, + .baseBlock = 0x10, + }, + { + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 15, + .width = 22, + .height = 4, + .paletteNum = 15, + .baseBlock = 0xA, + }, + { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 0, + .width = 28, + .height = 32, + .paletteNum = 3, + .baseBlock = 0, + }, + DUMMY_WIN_TEMPLATE, +}; + +const struct WindowTemplate gUnknown_843F8D0 = { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 9, + .width = 5, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x062 +}; + +const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}"); +const u8 gUnknown_843F8DB[] = _("{CLEAR 17}"); + +bool8 sub_80FFF80(void) +{ + if (!sub_8100BF4()) + return FALSE; + else + return TRUE; +} + +bool8 sub_80FFF98(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sEasyChatBgTemplates, NELEMS(sEasyChatBgTemplates)); + SetBgTilemapBuffer(3, gUnknown_203ACEC->unkB00); + SetBgTilemapBuffer(1, gUnknown_203ACEC->unk300); + InitWindows(sEasyChatWindowTemplates); + DeactivateAllTextPrinters(); + sub_8100CBC(); + sub_8100C5C(); + CpuFastFill(0, (void *)VRAM + 0x1000000, 0x400); + break; + case 1: + DecompressAndLoadBgGfxUsingHeap(3, gEasyChatWindow_Gfx, 0, 0, 0); + CopyToBgTilemapBuffer(3, gEasyChatWindow_Tilemap, 0, 0); + sub_8100F44(); + sub_8102428(); + CopyBgTilemapBufferToVram(3); + break; + case 2: + sub_8101100(gUnknown_203ACEC->unk300); + DecompressAndLoadBgGfxUsingHeap(1, gUnknown_843F7AC, 0, 0, 0); + CopyBgTilemapBufferToVram(1); + break; + case 3: + sub_8100D24(); + sub_8100E34(); + sub_8100FDC(); + sub_81012CC(); + break; + case 4: + sub_8101A90(); + sub_8101AC4(); + break; + case 5: + if (IsDma3ManagerBusyWithBgCopy()) + { + return TRUE; + } + else + { + sub_8101A5C(0, 0, 0, 0); + SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0, 63)); + SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 59)); + ShowBg(3); + ShowBg(1); + ShowBg(2); + ShowBg(0); + sub_81021D4(); + sub_8102320(); + } + break; + default: + return FALSE; + } + + gUnknown_203ACEC->unk0++; + return TRUE; +} + +void sub_810011C(void) +{ + if (gUnknown_203ACEC) + Free(gUnknown_203ACEC); +} + +void sub_8100134(u16 arg0) +{ + gUnknown_203ACEC->unk4 = arg0; + gUnknown_203ACEC->unk0 = 0; + sub_810014C(); +} + +bool8 sub_810014C(void) +{ + switch (gUnknown_203ACEC->unk4) + { + case 0: return FALSE; + case 1: return sub_8100258(); + case 2: return sub_8100290(); + case 3: return sub_8100374(); + case 4: return sub_8100430(); + case 5: return sub_81003A8(); + case 6: return sub_81003EC(); + case 7: return sub_8100474(); + case 8: return sub_81004B8(); + case 9: return sub_81004F4(); + case 10: return sub_81005C0(); + case 11: return sub_81007D0(); + case 12: return sub_8100890(); + case 13: return sub_810093C(); + case 14: return sub_8100720(); + case 15: return sub_810072C(); + case 16: return sub_8100774(); + case 17: return sub_81009F8(); + case 18: return sub_8100A78(); + case 19: return sub_8100A04(); + case 20: return sub_8100B70(); + case 21: return sub_8100AE8(); + case 22: return sub_8100660(); + default: return FALSE; + } +} + +bool8 sub_8100258(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8100FDC(); + gUnknown_203ACEC->unk0++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool8 sub_8100290(void) +{ + u8 i; + u16 *ecWordBuffer; + u16 *ecWord; + u8 frameId; + u8 cursorColumn, cursorRow, numColumns; + s16 var1; + int stringWidth; + int trueStringWidth; + int var2; + u8 str[64]; + + ecWordBuffer = GetEasyChatWordBuffer(); + frameId = GetEasyChatScreenFrameId(); + cursorColumn = GetMainCursorColumn(); + cursorRow = GetMainCursorRow(); + numColumns = GetNumColumns(); + ecWord = &ecWordBuffer[cursorRow * numColumns]; + var1 = 8 * sPhraseFrameDimensions[frameId].left + 13; + for (i = 0; i < cursorColumn; i++) + { + if (*ecWord == 0xFFFF) + { + stringWidth = GetStringWidth(1, gUnknown_843F8D8, 0) * 7; + } + else + { + CopyEasyChatWord(str, *ecWord); + stringWidth = GetStringWidth(1, str, 0); + } + + trueStringWidth = stringWidth + 17; + var1 += trueStringWidth; + ecWord++; + } + + var2 = 8 * (sPhraseFrameDimensions[frameId].top + cursorRow * 2 + 1) + 1; + sub_8101B58(var1, var2); + return FALSE; +} + +bool8 sub_8100374(void) +{ + u8 xOffset; + switch (GetMainCursorColumn()) + { + case 0: + xOffset = 28; + break; + case 1: + xOffset = 115; + break; + case 2: + xOffset = 191; + break; + default: + return FALSE; + } + sub_8101B58(xOffset, 97); + return FALSE; +} + +bool8 sub_81003A8(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101B88(); + sub_8100E7C(2); + sub_8100F18(1); + gUnknown_203ACEC->unk0++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool8 sub_81003EC(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101B88(); + sub_8100E7C(3); + sub_8100F18(0); + gUnknown_203ACEC->unk0++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool8 sub_8100430(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101B88(); + sub_8100E7C(1); + sub_8100F18(1); + gUnknown_203ACEC->unk0++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool8 sub_8100474(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101BA8(); + sub_8100E7C(0); + ShowBg(0); + gUnknown_203ACEC->unk0++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool8 sub_81004B8(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101BA8(); + sub_8100E7C(0); + sub_8100FDC(); + gUnknown_203ACEC->unk0++; + // Fall through + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool8 sub_81004F4(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101B88(); + HideBg(0); + sub_8101A5C(0, 0, 0, 0); + sub_810131C(); + gUnknown_203ACEC->unk0++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81015D4(0); + gUnknown_203ACEC->unk0++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy() && !sub_81016AC()) + gUnknown_203ACEC->unk0++; + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_8101FAC(); + gUnknown_203ACEC->unk0++; + } + break; + case 4: + if (!sub_8102018()) + { + sub_8101BC0(); + sub_81022E0(0); + sub_810224C(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + default: + return FALSE; + } + + return TRUE; +} + +bool8 sub_81005C0(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101C48(); + sub_81020AC(); + sub_81022B0(); + gUnknown_203ACEC->unk0++; + break; + case 1: + if (sub_81020D0() == TRUE) + break; + + sub_81015D4(1); + gUnknown_203ACEC->unk0++; + // Fall through + case 2: + if (!sub_81016AC()) + gUnknown_203ACEC->unk0++; + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_8101BA8(); + ShowBg(0); + gUnknown_203ACEC->unk0++; + } + break; + case 4: + return FALSE; + } + + return TRUE; +} + +bool8 sub_8100660(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101C48(); + sub_81022B0(); + sub_810215C(); + sub_81015D4(5); + gUnknown_203ACEC->unk0++; + break; + case 1: + if (!sub_81016AC() && !sub_81021B8()) + { + sub_810131C(); + gUnknown_203ACEC->unk0++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81015D4(6); + sub_8102178(); + gUnknown_203ACEC->unk0++; + } + break; + case 3: + if (!sub_81016AC() && !sub_81021B8()) + { + sub_810224C(); + sub_8101BC0(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + case 4: + return FALSE; + } + + return TRUE; +} + +bool8 sub_8100720(void) +{ + sub_8101C80(); + return FALSE; +} + +bool8 sub_810072C(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_81019B0(1, 2); + gUnknown_203ACEC->unk0++; + // Fall through + case 1: + if (!sub_8101A10()) + { + sub_8101C80(); + sub_810224C(); + return FALSE; + } + break; + } + + return TRUE; +} + +bool8 sub_8100774(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_81019B0(-1, 2); + gUnknown_203ACEC->unk0++; + // Fall through + case 1: + if (!sub_8101A10()) + { + sub_810224C(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + case 2: + return FALSE; + } + + return TRUE; +} + +bool8 sub_81007D0(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101C48(); + sub_81020AC(); + sub_81022B0(); + gUnknown_203ACEC->unk0++; + break; + case 1: + if (!sub_81020D0()) + { + sub_81015BC(); + gUnknown_203ACEC->unk0++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81015D4(2); + gUnknown_203ACEC->unk0++; + } + break; + case 3: + if (!sub_81016AC()) + { + sub_81012E0(2); + gUnknown_203ACEC->unk0++; + } + break; + case 4: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_8101E80(); + sub_81022E0(1); + sub_810224C(); + sub_8102394(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + case 5: + return FALSE; + } + + return TRUE; +} + +bool8 sub_8100890(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8100FDC(); + gUnknown_203ACEC->unk0++; + break; + case 1: + sub_8101F80(); + sub_81022B0(); + sub_81023F8(); + sub_81015BC(); + gUnknown_203ACEC->unk0++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81015D4(3); + gUnknown_203ACEC->unk0++; + } + break; + case 3: + if (!sub_81016AC()) + { + ShowBg(0); + gUnknown_203ACEC->unk0++; + } + break; + case 4: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_8101BA8(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + case 5: + return FALSE; + } + + return TRUE; +} + +bool8 sub_810093C(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101F80(); + sub_81022B0(); + sub_81023F8(); + sub_81015BC(); + gUnknown_203ACEC->unk0++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81015D4(4); + gUnknown_203ACEC->unk0++; + } + break; + case 2: + if (!sub_81016AC()) + { + sub_810131C(); + gUnknown_203ACEC->unk0++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_8101FAC(); + gUnknown_203ACEC->unk0++; + } + break; + case 4: + if (!sub_8102018()) + { + sub_8101BC0(); + sub_81022E0(0); + sub_810224C(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + } + + return TRUE; +} + +bool8 sub_81009F8(void) +{ + sub_8101F04(); + return FALSE; +} + +bool8 sub_8100A04(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_81013EC(); + gUnknown_203ACEC->unk0++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81019B0(1, 2); + gUnknown_203ACEC->unk0++; + } + break; + case 2: + if (!sub_8101A10()) + { + sub_8101F04(); + sub_810224C(); + sub_8102394(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + case 3: + return FALSE; + } + + return TRUE; +} + +bool8 sub_8100A78(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101410(); + gUnknown_203ACEC->unk0++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81019B0(-1, 2); + gUnknown_203ACEC->unk0++; + } + break; + case 2: + if (!sub_8101A10()) + { + sub_810224C(); + sub_8102394(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + case 3: + return FALSE; + } + + return TRUE; +} + +bool8 sub_8100AE8(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101434(); + gUnknown_203ACEC->unk0++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + s16 var0 = sub_80FFE48() - sub_8101A48(); + sub_81019B0(var0, 4); + gUnknown_203ACEC->unk0++; + } + break; + case 2: + if (!sub_8101A10()) + { + sub_8101F04(); + sub_810224C(); + sub_8102394(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + case 3: + return FALSE; + } + + return TRUE; +} + +bool8 sub_8100B70(void) +{ + switch (gUnknown_203ACEC->unk0) + { + case 0: + sub_8101478(); + gUnknown_203ACEC->unk0++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + s16 var0 = sub_80FFE48() - sub_8101A48(); + sub_81019B0(var0, 4); + gUnknown_203ACEC->unk0++; + } + break; + case 2: + if (!sub_8101A10()) + { + sub_810224C(); + sub_8102394(); + gUnknown_203ACEC->unk0++; + return FALSE; + } + break; + case 3: + return FALSE; + } + + return TRUE; +} diff --git a/src/graphics.c b/src/graphics.c index eaa49247c..b0712ca8a 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1216,8 +1216,8 @@ const u16 gHoennTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.g const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz"); const u16 gUnknown_8E99D8C[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal"); -const u32 gUnknown_8E99DAC[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz"); -const u32 gUnknown_8E99E74[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz"); +const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz"); +const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz"); const u16 gUnknown_8E99F24[] = INCBIN_U16("graphics/link_rfu/unk_8E9A168.gbapal"); const u32 gUnknown_8E99F44[] = INCBIN_U32("graphics/link_rfu/unk_8E99F44.4bpp.lz"); -- cgit v1.2.3 From ab1d075682a34164ed82810108f909e1f9b46390 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 7 Mar 2020 18:05:54 -0500 Subject: through sub_8101558 --- src/easy_chat_3.c | 446 +++++++++++++++++++++++++++++++++++++++++++++++++++++- src/graphics.c | 2 +- 2 files changed, 442 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index d01203dcc..84a53aa1a 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -1,8 +1,11 @@ #include "global.h" #include "gflib.h" +#include "data_8479668.h" #include "easy_chat.h" #include "graphics.h" +#include "menu.h" #include "new_menu_helpers.h" +#include "text_window.h" struct Unk203A11C { @@ -13,8 +16,7 @@ struct Unk203A11C u8 unk7; s8 unk8; u8 unk9; - u8 unkA; - u8 unkB[0xC1]; + u8 unkA[0xC1]; u8 unkCC[0x202]; u16 unk2CE; int unk2D0; @@ -69,6 +71,7 @@ bool8 sub_8100BF4(void); void sub_8100C5C(void); void sub_8100CBC(void); void sub_8100D24(void); +void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow); void sub_8100E34(void); void sub_8100E7C(u8 a0); void sub_8100F18(u8 initialCursorPos); @@ -76,15 +79,21 @@ void sub_8100F44(void); void sub_8100FDC(void); void sub_8101100(u16 *buffer); void sub_81012CC(void); -void sub_81012E0(u8 a0); +void sub_81012E0(u32 a0); void sub_810131C(void); +void sub_810133C(void); +void PrintEasyChatKeyboardText(void); +void sub_81013DC(void); void sub_81013EC(void); void sub_8101410(void); void sub_8101434(void); void sub_8101478(void); +void sub_81014AC(u8 a0, u8 a1); +void sub_8101558(u8 a0, u8 a1); void sub_81015BC(void); void sub_81015D4(u8 a0); bool8 sub_81016AC(void); +void sub_810198C(void); void sub_81019B0(s16 a0, u8 a1); bool8 sub_8101A10(void); s32 sub_8101A48(void); @@ -243,7 +252,7 @@ const struct WindowTemplate sEasyChatWindowTemplates[] = { DUMMY_WIN_TEMPLATE, }; -const struct WindowTemplate gUnknown_843F8D0 = { +const struct WindowTemplate sEasyChatYesNoWindowTemplate = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 9, @@ -254,7 +263,14 @@ const struct WindowTemplate gUnknown_843F8D0 = { }; const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}"); -const u8 gUnknown_843F8DB[] = _("{CLEAR 17}"); +const u8 sText_Clear17[] = _("{CLEAR 17}"); + +const u8 *const sEasyChatKeyboardText[] = { + gUnknown_847A8D8, + gUnknown_847A8FA, + gUnknown_847A913, + gUnknown_847A934 +}; bool8 sub_80FFF80(void) { @@ -981,3 +997,423 @@ bool8 sub_8100B70(void) return TRUE; } + +bool8 sub_8100BF4(void) +{ + gUnknown_203ACEC = Alloc(sizeof(*gUnknown_203ACEC)); + if (!gUnknown_203ACEC) + return FALSE; + + gUnknown_203ACEC->unk0 = 0; + gUnknown_203ACEC->unk2D8 = NULL; + gUnknown_203ACEC->unk2DC = NULL; + gUnknown_203ACEC->unk2E0 = NULL; + gUnknown_203ACEC->unk2E4 = NULL; + gUnknown_203ACEC->unk2E8 = NULL; + gUnknown_203ACEC->unk2EC = NULL; + gUnknown_203ACEC->unk2F0 = NULL; + gUnknown_203ACEC->unk2F4 = NULL; + gUnknown_203ACEC->unk2F8 = NULL; + gUnknown_203ACEC->unk2FC = NULL; + return TRUE; +} + +void sub_8100C5C(void) +{ + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); +} + +void sub_8100CBC(void) +{ + ResetPaletteFade(); + LoadPalette(gEasyChatMode_Pal, 0, 32); + LoadPalette(gUnknown_843F76C, 1 * 16, 32); + LoadPalette(gUnknown_843F78C, 4 * 16, 32); + LoadPalette(gUnknown_843F874, 10 * 16, 8); + LoadPalette(gUnknown_843F87C, 11 * 16, 10); + LoadPalette(gUnknown_843F87C, 15 * 16, 10); + LoadPalette(gUnknown_843F87C, 3 * 16, 10); +} + +void sub_8100D24(void) +{ + int xOffset; + const u8 *titleText = GetTitleText(); + if (!titleText) + return; + + xOffset = (128 - GetStringWidth(1, titleText, 0)) / 2u; + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + sub_8100DC4(0, 1, titleText, xOffset, 0, TEXT_SPEED_FF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +void sub_8100D84(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) +{ + if (fontId == 1) y += 2; + AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback); +} + +void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 bg, u8 fg, u8 shadow) +{ + u8 color[3]; + if (fontId == 1) y += 2; + color[0] = bg; + color[1] = fg; + color[2] = shadow; + AddTextPrinterParameterized3(windowId, fontId, x, y, color, speed, str); +} + +void sub_8100E34(void) +{ + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); + TextWindow_SetUserSelectedFrame(1, 1, 0xE0); + DrawTextBorderOuter(1, 1, 14); + sub_8100E7C(0); + PutWindowTilemap(1); + CopyBgTilemapBufferToVram(0); +} + +void sub_8100E7C(u8 arg0) +{ + const u8 *text2 = NULL; + const u8 *text1 = NULL; + switch (arg0) + { + case 0: + GetEasyChatInstructionsText(&text1, &text2); + break; + case 2: + sub_80FFDC8(&text1, &text2); + break; + case 3: + GetEasyChatConfirmText(&text1, &text2); + break; + case 1: + GetEasyChatConfirmDeletionText(&text1, &text2); + break; + } + + FillWindowPixelBuffer(1, PIXEL_FILL(1)); + if (text1) + sub_8100D84(1, 1, text1, 0, 0, TEXT_SPEED_FF, NULL); + + if (text2) + sub_8100D84(1, 1, text2, 0, 16, TEXT_SPEED_FF, NULL); + + CopyWindowToVram(1, 3); +} + +void sub_8100F18(u8 initialCursorPos) +{ + CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, 1, 0, 2, 0x001, 14, initialCursorPos); +} + +void sub_8100F44(void) +{ + u8 frameId; + struct WindowTemplate template; + + frameId = GetEasyChatScreenFrameId(); + template.bg = 3; + template.tilemapLeft = sPhraseFrameDimensions[frameId].left; + template.tilemapTop = sPhraseFrameDimensions[frameId].top; + template.width = sPhraseFrameDimensions[frameId].width; + template.height = sPhraseFrameDimensions[frameId].height; + template.paletteNum = 11; + template.baseBlock = 0x060; + gUnknown_203ACEC->windowId = AddWindow(&template); + PutWindowTilemap(gUnknown_203ACEC->windowId); +} + +void sub_8100FDC(void) +{ + u16 *ecWord; + u8 numColumns, numRows; + u8 *str; + u8 frameId; + int i, j, k; + + ecWord = GetEasyChatWordBuffer(); + numColumns = GetNumColumns(); + numRows = GetNumRows(); + frameId = GetEasyChatScreenFrameId(); + FillWindowPixelBuffer(gUnknown_203ACEC->windowId, PIXEL_FILL(1)); + for (i = 0; i < numRows; i++) + { + str = gUnknown_203ACEC->unkA; + str[0] = EOS; + str = StringAppend(str, sText_Clear17); + for (j = 0; j < numColumns; j++) + { + if (*ecWord != 0xFFFF) + { + str = CopyEasyChatWord(str, *ecWord); + ecWord++; + } + else + { + str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_RED); + ecWord++; + for (k = 0; k < 7; k++) + { + *str++ = CHAR_EXTRA_EMOJI; + *str++ = 9; + } + + str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_DARK_GREY); + } + + str = StringAppend(str, sText_Clear17); + if (frameId == 2) + { + if (j == 0 && i == 4) + break; + } + } + + *str = EOS; + sub_8100D84(gUnknown_203ACEC->windowId, 1, gUnknown_203ACEC->unkA, 0, i * 16, TEXT_SPEED_FF, NULL); + } + + CopyWindowToVram(gUnknown_203ACEC->windowId, 3); +} + +void sub_8101100(u16 *tilemap) +{ + u8 frameId; + int right, bottom; + int x, y; + + frameId = GetEasyChatScreenFrameId(); + CpuFastFill(0, tilemap, BG_SCREEN_SIZE); + if (frameId == 2) + { + right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width; + bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height; + for (y = sPhraseFrameDimensions[frameId].top; y < bottom; y++) + { + x = sPhraseFrameDimensions[frameId].left - 1; + tilemap[y * 32 + x] = 0x1005; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x1000; + + tilemap[y* 32 + x] = 0x1007; + } + } + else + { + y = sPhraseFrameDimensions[frameId].top - 1; + x = sPhraseFrameDimensions[frameId].left - 1; + right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width; + bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height; + tilemap[y * 32 + x] = 0x1001; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x1002; + + tilemap[y * 32 + x] = 0x1003; + y++; + for (; y < bottom; y++) + { + x = sPhraseFrameDimensions[frameId].left - 1; + tilemap[y * 32 + x] = 0x1005; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x1000; + + tilemap[y* 32 + x] = 0x1007; + } + + x = sPhraseFrameDimensions[frameId].left - 1; + tilemap[y * 32 + x] = 0x1009; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x100A; + + tilemap[y * 32 + x] = 0x100B; + } +} + +void sub_81012CC(void) +{ + PutWindowTilemap(2); + CopyBgTilemapBufferToVram(2); +} + +void sub_81012E0(u32 arg0) +{ + sub_810198C(); + FillWindowPixelBuffer(2, PIXEL_FILL(1)); + switch (arg0) + { + case 0: + sub_810133C(); + break; + case 1: + PrintEasyChatKeyboardText(); + break; + case 2: + sub_81013DC(); + break; + } + + CopyWindowToVram(2, 2); +} + +void sub_810131C(void) +{ + if (!sub_80FFE1C()) + sub_81012E0(0); + else + sub_81012E0(1); +} + +void sub_810133C(void) +{ + int i; + int x, y; + + i = 0; + y = 96; + while (1) + { + for (x = 0; x < 2; x++) + { + u8 groupId = GetSelectedGroupByIndex(i++); + if (groupId == EC_NUM_GROUPS) + { + sub_81019B0(sub_80FFE28(), 0); + return; + } + + sub_8100D84(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SPEED_FF, NULL); + } + + y += 16; + } +} + +void PrintEasyChatKeyboardText(void) +{ + u32 i; + + for (i = 0; i < NELEMS(sEasyChatKeyboardText); i++) + sub_8100D84(2, 1, sEasyChatKeyboardText[i], 10, 96 + i * 16, TEXT_SPEED_FF, NULL); +} + +void sub_81013DC(void) +{ + sub_81014AC(0, 4); +} + +void sub_81013EC(void) +{ + u8 var0 = sub_80FFE48() + 3; + sub_8101558(var0, 1); + sub_81014AC(var0, 1); +} + +void sub_8101410(void) +{ + u8 var0 = sub_80FFE48(); + sub_8101558(var0, 1); + sub_81014AC(var0, 1); +} + +void sub_8101434(void) +{ + u8 var0 = sub_80FFE48(); + u8 var1 = var0 + 4; + u8 var2 = sub_80FFE54() + 1; + if (var1 > var2) + var1 = var2; + + if (var0 < var1) + { + u8 var3 = var1 - var0; + sub_8101558(var0, var3); + sub_81014AC(var0, var3); + } +} + +void sub_8101478(void) +{ + u8 var0 = sub_80FFE48(); + u8 var1 = sub_8101A48(); + if (var0 < var1) + { + u8 var2 = var1 - var0; + sub_8101558(var0, var2); + sub_81014AC(var0, var2); + } +} + +void sub_81014AC(u8 arg0, u8 arg1) +{ + int i, j; + u16 easyChatWord; + u8 *str; + int y; + u8 y_; + int var0; + + var0 = arg0 * 2; + y = (arg0 * 16 + 96) & 0xFF; + + for (i = 0; i < arg1; i++) + { + for (j = 0; j < 2; j++) + { + // FIXME: Dumb trick needed to match + y_ = y << 18 >> 18; + easyChatWord = GetDisplayedWordByIndex(var0++); + if (easyChatWord != 0xFFFF) + { + + CopyEasyChatWordPadded(gUnknown_203ACEC->unkCC, easyChatWord, 0); + + sub_8100D84(2, 1, gUnknown_203ACEC->unkCC, (j * 13 + 3) * 8, y_, TEXT_SPEED_FF, NULL); + } + } + y += 16; + + } + + CopyWindowToVram(2, 2); +} + +void sub_8101558(u8 arg0, u8 arg1) +{ + int y; + int var0; + int var1; + int var2; + + y = (arg0 * 16 + 96) & 0xFF; + var2 = arg1 * 16; + var0 = y + var2; + if (var0 > 255) + { + var1 = var0 - 256; + var2 = 256 - y; + } + else + { + var1 = 0; + } + + FillWindowPixelRect(2, PIXEL_FILL(1), 0, y, 224, var2); + if (var1) + FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, var1); +} diff --git a/src/graphics.c b/src/graphics.c index b0712ca8a..100ddfdf6 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1215,7 +1215,7 @@ const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp. const u16 gHoennTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.gbapal"); const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz"); -const u16 gUnknown_8E99D8C[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal"); +const u16 gEasyChatMode_Pal[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal"); const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz"); const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz"); -- cgit v1.2.3 From 1346f7287c06d25258b559398d827a41c281a128 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 7 Mar 2020 18:24:35 -0500 Subject: through sub_8101A5C --- src/easy_chat_3.c | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 225 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index 84a53aa1a..75fdb20a3 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -17,7 +17,7 @@ struct Unk203A11C s8 unk8; u8 unk9; u8 unkA[0xC1]; - u8 unkCC[0x202]; + u8 unkCC[0x200]; u16 unk2CE; int unk2D0; int unk2D4; @@ -91,8 +91,10 @@ void sub_8101478(void); void sub_81014AC(u8 a0, u8 a1); void sub_8101558(u8 a0, u8 a1); void sub_81015BC(void); -void sub_81015D4(u8 a0); +void sub_81015D4(int a0); bool8 sub_81016AC(void); +void sub_81016E4(u8 a0); +void sub_8101830(int left, int top, int width, int height); void sub_810198C(void); void sub_81019B0(s16 a0, u8 a1); bool8 sub_8101A10(void); @@ -1417,3 +1419,224 @@ void sub_8101558(u8 arg0, u8 arg1) if (var1) FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, var1); } + +void sub_81015BC(void) +{ + FillWindowPixelBuffer(2, PIXEL_FILL(1)); + CopyWindowToVram(2, 2); +} + +void sub_81015D4(int arg0) +{ + switch (arg0) + { + case 0: + gUnknown_203ACEC->unk6 = 0; + gUnknown_203ACEC->unk7 = 10; + break; + case 1: + gUnknown_203ACEC->unk6 = 9; + gUnknown_203ACEC->unk7 = 0; + break; + case 2: + gUnknown_203ACEC->unk6 = 11; + gUnknown_203ACEC->unk7 = 17; + break; + case 3: + gUnknown_203ACEC->unk6 = 17; + gUnknown_203ACEC->unk7 = 0; + break; + case 4: + gUnknown_203ACEC->unk6 = 17; + gUnknown_203ACEC->unk7 = 10; + break; + case 5: + gUnknown_203ACEC->unk6 = 18; + gUnknown_203ACEC->unk7 = 22; + break; + case 6: + gUnknown_203ACEC->unk6 = 22; + gUnknown_203ACEC->unk7 = 18; + break; + } + + gUnknown_203ACEC->unk8 = gUnknown_203ACEC->unk6 < gUnknown_203ACEC->unk7 ? 1 : -1; +} + +bool8 sub_81016AC(void) +{ + u8 var0, var1; + if (gUnknown_203ACEC->unk6 == gUnknown_203ACEC->unk7) + return FALSE; + + gUnknown_203ACEC->unk6 += gUnknown_203ACEC->unk8; + sub_81016E4(gUnknown_203ACEC->unk6); + var0 = gUnknown_203ACEC->unk6; + var1 = gUnknown_203ACEC->unk7; + return (var0 ^ var1) > 0; +} + +void sub_81016E4(u8 arg0) +{ + FillBgTilemapBufferRect_Palette0(1, 0, 0, 10, 30, 10); + switch (arg0) + { + case 0: + break; + case 1: + sub_8101830(11, 14, 3, 2); + break; + case 2: + sub_8101830(9, 14, 7, 2); + break; + case 3: + sub_8101830(7, 14, 11, 2); + break; + case 4: + sub_8101830(5, 14, 15, 2); + break; + case 5: + sub_8101830(3, 14, 19, 2); + break; + case 6: + sub_8101830(1, 14, 23, 2); + break; + case 11: + sub_8101830(1, 10, 24, 10); + break; + case 12: + sub_8101830(1, 10, 25, 10); + break; + case 13: + sub_8101830(1, 10, 26, 10); + break; + case 14: + sub_8101830(1, 10, 27, 10); + break; + case 15: + sub_8101830(1, 10, 28, 10); + break; + case 16: + sub_8101830(1, 10, 29, 10); + break; + case 17: + sub_8101830(0, 10, 30, 10); + break; + case 10: + case 18: + sub_8101830(1, 10, 23, 10); + break; + case 9: + case 19: + sub_8101830(1, 11, 23, 8); + break; + case 8: + case 20: + sub_8101830(1, 12, 23, 6); + break; + case 7: + case 21: + sub_8101830(1, 13, 23, 4); + break; + case 22: + sub_8101830(1, 14, 23, 2); + break; + } + + CopyBgTilemapBufferToVram(1); +} + +void sub_8101830(int left, int top, int width, int height) +{ + u16 *tilemap; + int right; + int bottom; + int x, y; + + tilemap = gUnknown_203ACEC->unk300; + right = left + width - 1; + bottom = top + height - 1; + x = left; + y = top; + tilemap[y * 32 + x] = 0x4001; + x++; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x4002; + + tilemap[y * 32 + x] = 0x4003; + y++; + for (; y < bottom; y++) + { + tilemap[y * 32 + left] = 0x4005; + x = left + 1; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x4000; + + tilemap[y * 32 + x] = 0x4007; + } + + tilemap[y * 32 + left] = 0x4009; + x = left + 1; + for (; x < right; x++) + tilemap[y * 32 + x] = 0x400A; + + tilemap[y * 32 + x] = 0x400B; + sub_8101A5C((left + 1) * 8, (top + 1) * 8, (width - 2) * 8, (height - 2) * 8); +} + +void sub_810198C(void) +{ + ChangeBgY(2, 0x800, 0); + gUnknown_203ACEC->unk2CE = 0; +} + +void sub_81019B0(s16 arg0, u8 arg1) +{ + int bgY; + s16 var0; + + bgY = GetBgY(2); + gUnknown_203ACEC->unk2CE += arg0; + var0 = arg0 * 16; + bgY += var0 << 8; + if (arg1) + { + gUnknown_203ACEC->unk2D0 = bgY; + gUnknown_203ACEC->unk2D4 = arg1 * 256; + if (var0 < 0) + gUnknown_203ACEC->unk2D4 = -gUnknown_203ACEC->unk2D4; + } + else + { + ChangeBgY(2, bgY, 0); + } +} + +bool8 sub_8101A10(void) +{ + int bgY; + + bgY = GetBgY(2); + if (bgY == gUnknown_203ACEC->unk2D0) + { + return FALSE; + } + else + { + ChangeBgY(2, gUnknown_203ACEC->unk2D4, 1); + return TRUE; + } +} + +int sub_8101A48(void) +{ + return gUnknown_203ACEC->unk2CE; +} + +void sub_8101A5C(u8 left, u8 top, u8 width, u8 height) +{ + u16 horizontalDimensions = WIN_RANGE(left, left + width); + u16 verticalDimensions = WIN_RANGE(top, top + height); + SetGpuReg(REG_OFFSET_WIN0H, horizontalDimensions); + SetGpuReg(REG_OFFSET_WIN0V, verticalDimensions); +} -- cgit v1.2.3 From 40e4ef8f77caf47932d3b2c75481be9680eeea17 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 7 Mar 2020 20:46:29 -0500 Subject: through sub_8101BA8 --- src/easy_chat_3.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 113 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index 75fdb20a3..3f9b3c65b 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -1,6 +1,7 @@ #include "global.h" #include "gflib.h" #include "data_8479668.h" +#include "decompress.h" #include "easy_chat.h" #include "graphics.h" #include "menu.h" @@ -102,7 +103,8 @@ s32 sub_8101A48(void); void sub_8101A5C(u8 left, u8 top, u8 right, u8 bottom); void sub_8101A90(void); void sub_8101AC4(void); -void sub_8101B58(u8 a0, u8 a1); +void sub_8101B20(struct Sprite * sprite); +void sub_8101B58(u8 x, u8 y); void sub_8101B88(void); void sub_8101BA8(void); void sub_8101BC0(void); @@ -274,6 +276,63 @@ const u8 *const sEasyChatKeyboardText[] = { gUnknown_847A934 }; +const struct SpriteSheet sEasyChatSpriteSheets[] = { + {gUnknown_843F3F8, 0x0020, 0}, + {gUnknown_843F418, 0x0100, 2}, + {gUnknown_843F518, 0x0100, 3}, + {} +}; + +const struct SpritePalette sEasyChatSpritePalettes[] = { + {gUnknown_843F3B8, 0}, + {gUnknown_843F3D8, 1}, + {gUnknown_8E99F24, 2}, + {gUnknown_843F618, 3}, + {} +}; + +const struct CompressedSpriteSheet gUnknown_843F938[] = { + {gUnknown_843F638, 0x0800, 5}, + {gUnknown_8E9BD28, 0x1000, 1}, + {gUnknown_8E99F44, 0x0800, 6}, + {gUnknown_8E9A168, 0x1000, 4} +}; + +const u8 gUnknown_843F958[] = { + 0, + 12, + 24, + 56, + 68, + 80, + 92 +}; + +const struct OamData gUnknown_843F960 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .mosaic = FALSE, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0x000, + .priority = 3, + .paletteNum = 0 +}; + +const struct SpriteTemplate gUnknown_843F968 = { + .tileTag = 0, + .paletteTag = 0, + .oam = &gUnknown_843F960, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8101B20 +}; + bool8 sub_80FFF80(void) { if (!sub_8100BF4()) @@ -1640,3 +1699,56 @@ void sub_8101A5C(u8 left, u8 top, u8 width, u8 height) SetGpuReg(REG_OFFSET_WIN0H, horizontalDimensions); SetGpuReg(REG_OFFSET_WIN0V, verticalDimensions); } + +void sub_8101A90(void) +{ + u32 i; + + LoadSpriteSheets(sEasyChatSpriteSheets); + LoadSpritePalettes(sEasyChatSpritePalettes); + for (i = 0; i < NELEMS(gUnknown_843F938); i++) + LoadCompressedSpriteSheet(&gUnknown_843F938[i]); +} + +void sub_8101AC4(void) +{ + u8 frameId = GetEasyChatScreenFrameId(); + s16 x = sPhraseFrameDimensions[frameId].left * 8 + 13; + s16 y = (sPhraseFrameDimensions[frameId].top + 1) * 8 + 1; + u8 spriteId = CreateSprite(&gUnknown_843F968, x, y, 2); + gUnknown_203ACEC->unk2D8 = &gSprites[spriteId]; + gSprites[spriteId].data[1] = 1; +} + +void sub_8101B20(struct Sprite *sprite) +{ + if (sprite->data[1]) + { + if (++sprite->data[0] > 2) + { + sprite->data[0] = 0; + if (++sprite->pos2.x > 0) + sprite->pos2.x = -6; + } + } +} + +void sub_8101B58(u8 x, u8 y) +{ + gUnknown_203ACEC->unk2D8->pos1.x = x; + gUnknown_203ACEC->unk2D8->pos1.y = y; + gUnknown_203ACEC->unk2D8->pos2.x = 0; + gUnknown_203ACEC->unk2D8->data[0] = 0; +} + +void sub_8101B88(void) +{ + gUnknown_203ACEC->unk2D8->data[0] = 0; + gUnknown_203ACEC->unk2D8->data[1] = 0; + gUnknown_203ACEC->unk2D8->pos2.x = 0; +} + +void sub_8101BA8(void) +{ + gUnknown_203ACEC->unk2D8->data[1] = 1; +} -- cgit v1.2.3 From c81edda7956500731d66b55b5b3c98cada723347 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 7 Mar 2020 21:29:31 -0500 Subject: through sub_8101F80 --- src/easy_chat_2.c | 2 +- src/easy_chat_3.c | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 269 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 28c091dc6..409c1a0f7 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -1271,7 +1271,7 @@ u8 sub_80FFE28(void) return sEasyChatScreen->unk_0c; } -void sub_80FFE34(u8 *arg0, u8 *arg1) +void sub_80FFE34(s8 *arg0, s8 *arg1) { *arg0 = sEasyChatScreen->unk_10; *arg1 = sEasyChatScreen->unk_11; diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index 3f9b3c65b..419f32e56 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -110,8 +110,12 @@ void sub_8101BA8(void); void sub_8101BC0(void); void sub_8101C48(void); void sub_8101C80(void); +void sub_8101CE4(s8 a0, s8 a1); +void sub_8101D9C(s8 a0, s8 a1); void sub_8101E80(void); +void sub_8101ED4(struct Sprite * sprite); void sub_8101F04(void); +void sub_8101F40(u8 x, u8 y); void sub_8101F80(void); void sub_8101FAC(void); bool8 sub_8102018(void); @@ -333,6 +337,119 @@ const struct SpriteTemplate gUnknown_843F968 = { .callback = sub_8101B20 }; +const struct OamData gUnknown_843F980 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .mosaic = FALSE, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0x000, + .priority = 1, + .paletteNum = 0 +}; + +const union AnimCmd gUnknown_843F988[] = { + ANIMCMD_FRAME(0x00, 0), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_843F990[] = { + ANIMCMD_FRAME(0x20, 0), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_843F998[] = { + ANIMCMD_FRAME(0x40, 0), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_843F9A0[] = { + ANIMCMD_FRAME(0x60, 0), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_843F9A8[] = { + gUnknown_843F988, + gUnknown_843F990, + gUnknown_843F998, + gUnknown_843F9A0 +}; + +const struct SpriteTemplate gUnknown_843F9B8 = { + .tileTag = 1, + .paletteTag = 1, + .oam = &gUnknown_843F980, + .anims = gUnknown_843F9A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8101B20 +}; + +const struct OamData gUnknown_843F9D0 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, + .mosaic = FALSE, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0x000, + .priority = 1, + .paletteNum = 0 +}; + +const union AnimCmd gUnknown_843F9D8[] = { + ANIMCMD_FRAME(0x60, 0), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_843F9E0[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_FRAME(0x20, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_843F9EC[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_FRAME(0x00, 4), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_843F9F8[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_FRAME(0x60, 0), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_843FA04[] = { + ANIMCMD_FRAME(0x40, 4), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_843FA0C[] = { + gUnknown_843F9D8, + gUnknown_843F9E0, + gUnknown_843F9EC, + gUnknown_843F9F8, + gUnknown_843FA04 +}; + +const struct SpriteTemplate gUnknown_843FA20 = { + .tileTag = 4, + .paletteTag = 2, + .oam = &gUnknown_843F9D0, + .anims = gUnknown_843FA0C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + bool8 sub_80FFF80(void) { if (!sub_8100BF4()) @@ -1752,3 +1869,154 @@ void sub_8101BA8(void) { gUnknown_203ACEC->unk2D8->data[1] = 1; } + +void sub_8101BC0(void) +{ + u8 spriteId = CreateSprite(&gUnknown_843F9B8, 0, 0, 3); + gUnknown_203ACEC->unk2DC = &gSprites[spriteId]; + gUnknown_203ACEC->unk2DC->pos2.x = 32; + + spriteId = CreateSprite(&gUnknown_843F9B8, 0, 0, 3); + gUnknown_203ACEC->unk2E0 = &gSprites[spriteId]; + gUnknown_203ACEC->unk2E0->pos2.x = -32; + + gUnknown_203ACEC->unk2DC->hFlip = 1; + sub_8101C80(); +} + +void sub_8101C48(void) +{ + DestroySprite(gUnknown_203ACEC->unk2DC); + gUnknown_203ACEC->unk2DC = NULL; + DestroySprite(gUnknown_203ACEC->unk2E0); + gUnknown_203ACEC->unk2E0 = NULL; +} + +void sub_8101C80(void) +{ + u8 var0; + u8 var1; + + if (gUnknown_203ACEC->unk2DC && gUnknown_203ACEC->unk2E0) + { + sub_80FFE08(&var0, &var1); + if (!sub_80FFE1C()) + sub_8101CE4(var0, var1); + else + sub_8101D9C(var0, var1); + } +} + +void sub_8101CE4(s8 arg0, s8 arg1) +{ + if (arg0 != -1) + { + StartSpriteAnim(gUnknown_203ACEC->unk2DC, 0); + gUnknown_203ACEC->unk2DC->pos1.x = arg0 * 84 + 58; + gUnknown_203ACEC->unk2DC->pos1.y = arg1 * 16 + 96; + + StartSpriteAnim(gUnknown_203ACEC->unk2E0, 0); + gUnknown_203ACEC->unk2E0->pos1.x = arg0 * 84 + 58; + gUnknown_203ACEC->unk2E0->pos1.y = arg1 * 16 + 96; + } + else + { + StartSpriteAnim(gUnknown_203ACEC->unk2DC, 1); + gUnknown_203ACEC->unk2DC->pos1.x = 216; + gUnknown_203ACEC->unk2DC->pos1.y = arg1 * 16 + 112; + + StartSpriteAnim(gUnknown_203ACEC->unk2E0, 1); + gUnknown_203ACEC->unk2E0->pos1.x = 216; + gUnknown_203ACEC->unk2E0->pos1.y = arg1 * 16 + 112; + } +} + +void sub_8101D9C(s8 arg0, s8 arg1) +{ + int anim; + int x, y; + + if (arg0 != -1) + { + y = arg1 * 16 + 96; + x = 32; + if (arg0 == 6 && arg1 == 0) + { + x = 157; + anim = 2; + } + else + { + x += gUnknown_843F958[arg0 < NELEMS(gUnknown_843F958) ? arg0 : 0]; + anim = 3; + } + + StartSpriteAnim(gUnknown_203ACEC->unk2DC, anim); + gUnknown_203ACEC->unk2DC->pos1.x = x; + gUnknown_203ACEC->unk2DC->pos1.y = y; + + StartSpriteAnim(gUnknown_203ACEC->unk2E0, anim); + gUnknown_203ACEC->unk2E0->pos1.x = x; + gUnknown_203ACEC->unk2E0->pos1.y = y; + } + else + { + StartSpriteAnim(gUnknown_203ACEC->unk2DC, 1); + gUnknown_203ACEC->unk2DC->pos1.x = 216; + gUnknown_203ACEC->unk2DC->pos1.y = arg1 * 16 + 112; + + StartSpriteAnim(gUnknown_203ACEC->unk2E0, 1); + gUnknown_203ACEC->unk2E0->pos1.x = 216; + gUnknown_203ACEC->unk2E0->pos1.y = arg1 * 16 + 112; + } +} + +void sub_8101E80(void) +{ + u8 spriteId = CreateSprite(&gUnknown_843F968, 0, 0, 4); + gUnknown_203ACEC->unk2E4 = &gSprites[spriteId]; + gUnknown_203ACEC->unk2E4->callback = sub_8101ED4; + gUnknown_203ACEC->unk2E4->oam.priority = 2; + sub_8101F04(); +} + +void sub_8101ED4(struct Sprite *sprite) +{ + if (++sprite->data[0] > 2) + { + sprite->data[0] = 0; + if (++sprite->pos2.x > 0) + sprite->pos2.x = -6; + } +} + +void sub_8101F04(void) +{ + s8 var0, var1; + u8 x, y; + + sub_80FFE34(&var0, &var1); + x = var0 * 13 + 3; + y = var1 * 2 + 11; + sub_8101F40(x, y); +} + +void sub_8101F40(u8 x, u8 y) +{ + if (gUnknown_203ACEC->unk2E4) + { + gUnknown_203ACEC->unk2E4->pos1.x = x * 8 + 4; + gUnknown_203ACEC->unk2E4->pos1.y = (y + 1) * 8 + 1; + gUnknown_203ACEC->unk2E4->pos2.x = 0; + gUnknown_203ACEC->unk2E4->data[0] = 0; + } +} + +void sub_8101F80(void) +{ + if (gUnknown_203ACEC->unk2E4) + { + DestroySprite(gUnknown_203ACEC->unk2E4); + gUnknown_203ACEC->unk2E4 = NULL; + } +} -- cgit v1.2.3 From e1537a1d728a8e2d217d5224e3d813da6f5fa222 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 8 Mar 2020 09:49:07 -0400 Subject: easy_chat_3 finish decomp --- src/easy_chat_3.c | 271 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 270 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index 419f32e56..ad6d293db 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -6,6 +6,7 @@ #include "graphics.h" #include "menu.h" #include "new_menu_helpers.h" +#include "strings.h" #include "text_window.h" struct Unk203A11C @@ -127,7 +128,7 @@ bool8 sub_81021B8(void); void sub_81021D4(void); void sub_810224C(void); void sub_81022B0(void); -void sub_81022E0(u8 a0); +void sub_81022E0(int a0); void sub_8102320(void); void sub_8102394(void); void sub_81023F8(void); @@ -450,6 +451,96 @@ const struct SpriteTemplate gUnknown_843FA20 = { .callback = SpriteCallbackDummy }; +const struct OamData gUnknown_843FA38 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0x000, + .priority = 3, + .paletteNum = 0 +}; + +const struct SpriteTemplate gUnknown_843FA40 = { + .tileTag = 6, + .paletteTag = 2, + .oam = &gUnknown_843FA38, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gUnknown_843FA58 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0x000, + .priority = 1, + .paletteNum = 0 +}; + +const struct OamData gUnknown_843FA60 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0x000, + .priority = 1, + .paletteNum = 0 +}; + +const union AnimCmd gUnknown_843FA68[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_843FA70[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_843FA78[] = { + gUnknown_843FA68, + gUnknown_843FA70, +}; + +const struct SpriteTemplate gUnknown_843FA80 = { + .tileTag = 3, + .paletteTag = 2, + .oam = &gUnknown_843FA58, + .anims = gUnknown_843FA78, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct SpriteTemplate gUnknown_843FA98 = { + .tileTag = 2, + .paletteTag = 2, + .oam = &gUnknown_843FA60, + .anims = gUnknown_843FA78, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + bool8 sub_80FFF80(void) { if (!sub_8100BF4()) @@ -2020,3 +2111,181 @@ void sub_8101F80(void) gUnknown_203ACEC->unk2E4 = NULL; } } + +void sub_8101FAC(void) +{ + u8 spriteId = CreateSprite(&gUnknown_843FA40, 208, 128, 6); + gUnknown_203ACEC->unk2E8 = &gSprites[spriteId]; + gUnknown_203ACEC->unk2E8->pos2.x = -64; + + spriteId = CreateSprite(&gUnknown_843FA20, 208, 80, 5); + gUnknown_203ACEC->unk2EC = &gSprites[spriteId]; + gUnknown_203ACEC->unk9 = 0; +} + +bool8 sub_8102018(void) +{ + switch (gUnknown_203ACEC->unk9) + { + default: + return FALSE; + case 0: + gUnknown_203ACEC->unk2E8->pos2.x += 8; + if (gUnknown_203ACEC->unk2E8->pos2.x >= 0) + { + gUnknown_203ACEC->unk2E8->pos2.x = 0; + if (!sub_80FFE1C()) + StartSpriteAnim(gUnknown_203ACEC->unk2EC, 1); + else + StartSpriteAnim(gUnknown_203ACEC->unk2EC, 2); + + gUnknown_203ACEC->unk9++; + } + break; + case 1: + if (gUnknown_203ACEC->unk2EC->animEnded) + { + gUnknown_203ACEC->unk9 = 2; + return FALSE; + } + } + + return TRUE; +} + +void sub_81020AC(void) +{ + gUnknown_203ACEC->unk9 = 0; + StartSpriteAnim(gUnknown_203ACEC->unk2EC, 3); +} + +bool8 sub_81020D0(void) +{ + switch (gUnknown_203ACEC->unk9) + { + default: + return FALSE; + case 0: + if (gUnknown_203ACEC->unk2EC->animEnded) + gUnknown_203ACEC->unk9 = 1; + break; + case 1: + gUnknown_203ACEC->unk2E8->pos2.x -= 8; + if (gUnknown_203ACEC->unk2E8->pos2.x <= -64) + { + DestroySprite(gUnknown_203ACEC->unk2EC); + DestroySprite(gUnknown_203ACEC->unk2E8); + gUnknown_203ACEC->unk2EC = NULL; + gUnknown_203ACEC->unk2E8 = NULL; + gUnknown_203ACEC->unk9++; + return FALSE; + } + } + + return TRUE; +} + +void sub_810215C(void) +{ + StartSpriteAnim(gUnknown_203ACEC->unk2EC, 4); +} + +void sub_8102178(void) +{ + if (!sub_80FFE1C()) + StartSpriteAnim(gUnknown_203ACEC->unk2EC, 1); + else + StartSpriteAnim(gUnknown_203ACEC->unk2EC, 2); +} + +bool8 sub_81021B8(void) +{ + return !gUnknown_203ACEC->unk2EC->animEnded; +} + +void sub_81021D4(void) +{ + u8 spriteId = CreateSprite(&gUnknown_843FA98, 96, 80, 0); + if (spriteId != MAX_SPRITES) + gUnknown_203ACEC->unk2F0 = &gSprites[spriteId]; + + spriteId = CreateSprite(&gUnknown_843FA98, 96, 156, 0); + if (spriteId != MAX_SPRITES) + { + gUnknown_203ACEC->unk2F4 = &gSprites[spriteId]; + gUnknown_203ACEC->unk2F4->vFlip = 1; + } + + sub_81022B0(); +} + +void sub_810224C(void) +{ + gUnknown_203ACEC->unk2F0->invisible = !sub_80FFE64(); + gUnknown_203ACEC->unk2F4->invisible = !sub_80FFE98(); +} + +void sub_81022B0(void) +{ + gUnknown_203ACEC->unk2F0->invisible = TRUE; + gUnknown_203ACEC->unk2F4->invisible = TRUE; +} + +void sub_81022E0(int arg0) +{ + if (!arg0) + { + gUnknown_203ACEC->unk2F0->pos1.x = 96; + gUnknown_203ACEC->unk2F4->pos1.x = 96; + } + else + { + gUnknown_203ACEC->unk2F0->pos1.x = 120; + gUnknown_203ACEC->unk2F4->pos1.x = 120; + } +} + +void sub_8102320(void) +{ + u8 spriteId = CreateSprite(&gUnknown_843FA80, 220, 84, 1); + if (spriteId != MAX_SPRITES) + gUnknown_203ACEC->unk2F8 = &gSprites[spriteId]; + + spriteId = CreateSprite(&gUnknown_843FA80, 220, 156, 1); + if (spriteId != MAX_SPRITES) + { + gUnknown_203ACEC->unk2FC = &gSprites[spriteId]; + StartSpriteAnim(gUnknown_203ACEC->unk2FC, 1); + } + + sub_81023F8(); +} + +void sub_8102394(void) +{ + gUnknown_203ACEC->unk2F8->invisible = !sub_80FFE64(); + gUnknown_203ACEC->unk2FC->invisible = !sub_80FFE98(); +} + +void sub_81023F8(void) +{ + gUnknown_203ACEC->unk2F8->invisible = TRUE; + gUnknown_203ACEC->unk2FC->invisible = TRUE; +} + +void sub_8102428(void) +{ + u16 windowId; + struct WindowTemplate template; + template.bg = 3; + template.tilemapLeft = 4; + template.tilemapTop = 11; + template.width = 24; + template.height = 2; + template.paletteNum = 11; + template.baseBlock = 0x030; + windowId = AddWindow(&template); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + sub_8100D84(windowId, 1, gUnknown_841EE2B, 0, 0, 0, NULL); + PutWindowTilemap(windowId); +} -- cgit v1.2.3 From a9b72fbd7f00a1337c2f91f57d83110dbaeb1fa5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 8 Mar 2020 12:32:34 -0400 Subject: Document Easy Chat 2/3 --- src/easy_chat_2.c | 678 ++++++++++++----------- src/easy_chat_3.c | 1565 +++++++++++++++++++++++++++-------------------------- src/graphics.c | 6 +- 3 files changed, 1127 insertions(+), 1122 deletions(-) (limited to 'src') diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 409c1a0f7..78f8f96f9 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -8,7 +8,6 @@ #include "strings.h" #include "task.h" #include "constants/songs.h" -#include "constants/flags.h" #define EZCHAT_TASK_STATE 0 #define EZCHAT_TASK_TYPE 1 @@ -39,87 +38,86 @@ struct EasyChatScreen /*0x04*/ u8 state; /*0x05*/ s8 mainCursorColumn; /*0x06*/ s8 mainCursorRow; - /*0x07*/ u8 unk_07; + /*0x07*/ u8 numWords; /*0x08*/ u8 stateBackup; - /*0x09*/ u8 unk_09; - /*0x0A*/ s8 unk_0a; - /*0x0B*/ s8 unk_0b; - /*0x0C*/ u8 unk_0c; - /*0x0D*/ u8 unk_0d; - /*0x0E*/ u8 unk_0e; - /*0x0F*/ u8 unk_0f; - /*0x10*/ s8 unk_10; - /*0x11*/ s8 unk_11; + /*0x09*/ bool8 isAlphaMode; + /*0x0A*/ s8 selectGroupCursorX; + /*0x0B*/ s8 selectGroupCursorY; + /*0x0C*/ u8 selectGroupRowsAbove; + /*0x0D*/ u8 selectGroupNumRows; + /*0x0E*/ u8 selectWordRowsAbove; + /*0x0F*/ u8 selectWordNumRows; + /*0x10*/ s8 selectWordCursorX; + /*0x11*/ s8 selectWordCursorY; /*0x12*/ u8 unk_12; /*0x14*/ u16 *words; /*0x18*/ u16 ecWordBuffer[9]; }; -EWRAM_DATA struct EasyChatScreen *sEasyChatScreen = NULL; - -void sub_80FEC0C(void); -void sub_80FEC54(u8 taskId); -void sub_80FEC90(u8 taskId); -bool8 sub_80FED80(u8 taskId); -void sub_80FEE24(MainCallback cb); -void sub_80FEF2C(void); -void sub_80FEF4C(void); -bool8 EasyChat_AllocateResources(u8 type, u16 *words); -void EasyChat_FreeResources(void); -u16 sub_80FF028(void); -u16 sub_80FF098(void); -u16 sub_80FF20C(void); -u16 sub_80FF360(void); -u16 sub_80FF41C(void); -u16 sub_80FF4A8(void); -u16 sub_80FF4F0(void); -u16 sub_80FF544(void); -u16 sub_80FF590(void); -u16 sub_80FF5A8(void); -u16 sub_80FF5C0(void); -u8 sub_80FF5F0(void); -int sub_80FF5FC(void); -int sub_80FF678(void); -int sub_80FF688(void); -int sub_80FF6B4(void); -int sub_80FF6C8(void); -void sub_80FF6F0(void); -void sub_80FF728(void); -void sub_80FF768(u16 word); -bool8 sub_80FF78C(void); -u16 sub_80FF7CC(u32 action); -int sub_80FF80C(u32 action); -int sub_80FF8D8(u32 action); -int sub_80FF968(u32 action); -void sub_80FF9E8(void); -void sub_80FFA0C(void); -u16 sub_80FFA38(u32 action); -u16 sub_80FFB6C(void); -u16 sub_80FFB8C(void); -int sub_80FFBAC(void); -u16 sub_80FFBE4(void); -u8 sub_80FFC04(u8 unkB); -void sub_80FFC1C(void); -void sub_80FFC44(void); -bool8 sub_80FFC6C(void); -bool8 sub_80FFCC0(void); -bool8 GetEasyChatScreenFrameId(void); -bool8 IsPhraseDifferentThanPlayerInput(const u16 *wordsToCompare, u8 numWords); -u8 GetEasyChatScreenTemplateId(u8 type); -bool32 IsEcWordBufferUninitialized(void); +static EWRAM_DATA struct EasyChatScreen *sEasyChatScreen = NULL; + +static void CB2_EasyChatScreen(void); +static void Task_InitEasyChat(u8 taskId); +static void Task_RunEasyChat(u8 taskId); +static bool8 Task_InitEasyChatInternal(u8 taskId); +static void DismantleEasyChat(MainCallback cb); +static void CompareProfileResponseWithPassphrase(void); +static void CompareQuestionnaireResponseWithPassphrase(void); +static bool8 EasyChat_AllocateResources(u8 type, u16 *words); +static void EasyChat_FreeResources(void); +static u16 EasyChatScreen_HandleJoypad(void); +static u16 HandleJoypad_SelectField(void); +static u16 HandleJoypad_SelectFooter(void); +static u16 HandleJoypad_SelectGroup(void); +static u16 HandleJoypad_SelectWord(void); +static u16 Cancel_HandleYesNoMenu(void); +static u16 Confirm_HandleYesNoMenu(void); +static u16 DelAll_HandleYesNoMenu(void); +static u16 Cancel_CreateYesNoMenu(void); +static u16 DelAll_CreateYesNoMenu(void); +static u16 Confirm_CreateYesNoMenu(void); +static u8 GetStateBackup(void); +int OpenSelectedGroup(void); +int BackOutFromGroupToFieldSelect(void); +int ToggleGroupAlphaMode(void); +int DeleteSelectedWord(void); +int PlaceSelectedWord(void); +static void CommitECWords(void); +static void DeleteAllECFields(void); +static void SetEasyChatWordToField(u16 word); +static bool8 HasECMessageChanged(void); +static u16 SelectGroupCursorAction(u32 action); +int UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(u32 action); +int UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(u32 action); +int UpdateSelectGroupCursorPos_InsideBlueBox(u32 action); +static void GroupCursorMoveToBlueBox(void); +static void GroupCursorWrapAroundLeft(void); +static u16 SelectWordCursorAction(u32 action); +static u16 GetSelectedFieldIndex(void); +static u16 GetSelectedGroupIndex(void); +int GetSelectedLetter(void); +static u16 GetSelectWordCursorPos(void); +static u8 GetMaxGroupCursorXinAlphaMode(u8 unkB); +static void MoveGroupCursorXToMaxCol(void); +static void MoveWordCursorXToMaxCol(void); +static bool8 GroupSelectCursorXPosTooFarRight(void); +static bool8 WordSelectCursorXPosTooFarRight(void); +static bool8 IsPhraseDifferentThanPlayerInput(const u16 *wordsToCompare, u8 numWords); +static u8 GetEasyChatScreenTemplateId(u8 type); +static bool32 IsEcWordBufferUninitialized(void); void DoEasyChatScreen(u8 type, u16 *words, MainCallback callback) { u8 taskId; ResetTasks(); - taskId = CreateTask(sub_80FEC54, 0); + taskId = CreateTask(Task_InitEasyChat, 0); gTasks[taskId].data[EZCHAT_TASK_TYPE] = type; SetWordTaskArg(taskId, EZCHAT_TASK_WORDS, (uintptr_t)words); SetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK, (uintptr_t)callback); - SetMainCallback2(sub_80FEC0C); + SetMainCallback2(CB2_EasyChatScreen); } -void sub_80FEC0C(void) +static void CB2_EasyChatScreen(void) { RunTasks(); AnimateSprites(); @@ -127,37 +125,37 @@ void sub_80FEC0C(void) UpdatePaletteFade(); } -void VBlankCallback_EasyChatScreen(void) +static void VBlankCallback_EasyChatScreen(void) { TransferPlttBuffer(); LoadOam(); ProcessSpriteCopyRequests(); } -void sub_80FEC38(u8 taskId, TaskFunc func) +static void SetEasyChatTaskFunc(u8 taskId, TaskFunc func) { gTasks[taskId].func = func; gTasks[taskId].data[EZCHAT_TASK_STATE] = 0; } -void sub_80FEC54(u8 taskId) +static void Task_InitEasyChat(u8 taskId) { if (!IsUpdateLinkStateCBActive()) { - while (sub_80FED80(taskId)) + while (Task_InitEasyChatInternal(taskId)) ; } else { - if (sub_80FED80(taskId) == TRUE) + if (Task_InitEasyChatInternal(taskId) == TRUE) return; } - sub_80FEC38(taskId, sub_80FEC90); + SetEasyChatTaskFunc(taskId, Task_RunEasyChat); } -void sub_80FEC90(u8 taskId) +static void Task_RunEasyChat(u8 taskId) { - u16 v0; + u16 action; s16 *data; data = gTasks[taskId].data; @@ -170,40 +168,40 @@ void sub_80FEC90(u8 taskId) data[EZCHAT_TASK_STATE]++; break; case 1: - v0 = sub_80FF028(); - if (v0 == 23) + action = EasyChatScreen_HandleJoypad(); + if (action == 23) { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); data[EZCHAT_TASK_STATE] = 3; } - else if (v0 != 0) + else if (action != 0) { PlaySE(SE_SELECT); - sub_8100134(v0); + EasyChatInterfaceCommand_Setup(action); data[EZCHAT_TASK_STATE]++; } break; case 2: - if (!sub_810014C()) + if (!EasyChatInterfaceCommand_Run()) data[EZCHAT_TASK_STATE] = 1; break; case 3: if (!gPaletteFade.active) { - if (data[EZCHAT_TASK_TYPE] == 14) - sub_80FEF4C(); - if (data[EZCHAT_TASK_TYPE] == 0) + if (data[EZCHAT_TASK_TYPE] == EASY_CHAT_TYPE_QUESTIONNAIRE) + CompareQuestionnaireResponseWithPassphrase(); + if (data[EZCHAT_TASK_TYPE] == EASY_CHAT_TYPE_PROFILE) { FlagSet(FLAG_SYS_SET_TRAINER_CARD_PROFILE); - sub_80FEF2C(); + CompareProfileResponseWithPassphrase(); } - sub_80FEE24((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + DismantleEasyChat((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); } break; } } -bool8 sub_80FED80(u8 taskId) +static bool8 Task_InitEasyChatInternal(u8 taskId) { s16 *data; @@ -219,23 +217,23 @@ bool8 sub_80FED80(u8 taskId) case 1: if (!InitEasyChatSelection()) { - sub_80FEE24((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + DismantleEasyChat((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); } break; case 2: if (!EasyChat_AllocateResources(data[EZCHAT_TASK_TYPE], (u16 *)GetWordTaskArg(taskId, EZCHAT_TASK_WORDS))) { - sub_80FEE24((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + DismantleEasyChat((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); } break; case 3: - if (!sub_80FFF80()) + if (!InitEasyChatGraphicsWork()) { - sub_80FEE24((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); + DismantleEasyChat((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK)); } break; case 4: - if (sub_80FFF98()) + if (LoadEasyChatGraphics()) { return TRUE; } @@ -247,11 +245,11 @@ bool8 sub_80FED80(u8 taskId) return TRUE; } -void sub_80FEE24(MainCallback callback) +static void DismantleEasyChat(MainCallback callback) { DestroyEasyChatSelectionData(); EasyChat_FreeResources(); - sub_810011C(); + DestroyEasyChatGraphicsResources(); FreeAllWindowBuffers(); SetMainCallback2(callback); } @@ -285,31 +283,31 @@ void ShowEasyChatScreen(void) DoEasyChatScreen(gSpecialVar_0x8004, words, sub_80568C4); } -static const u16 gUnknown_843F29C[] = { +static const u16 sECPhrase_MysteryEventIsExciting[] = { EC_WORD_MYSTERY, EC_WORD_EVENT, EC_WORD_IS, EC_WORD_EXCITING }; -void sub_80FEF2C(void) +static void CompareProfileResponseWithPassphrase(void) { - gSpecialVar_0x8004 = IsPhraseDifferentThanPlayerInput(gUnknown_843F29C, NELEMS(gUnknown_843F29C)); + gSpecialVar_0x8004 = IsPhraseDifferentThanPlayerInput(sECPhrase_MysteryEventIsExciting, NELEMS(sECPhrase_MysteryEventIsExciting)); } -static const u16 gUnknown_843F2A4[] = { +static const u16 sECPhrase_LinkTogetherWithAll[] = { EC_WORD_LINK, EC_WORD_TOGETHER, EC_WORD_WITH, EC_WORD_ALL }; -void sub_80FEF4C(void) +static void CompareQuestionnaireResponseWithPassphrase(void) { - gSpecialVar_0x8004 = IsPhraseDifferentThanPlayerInput(gUnknown_843F2A4, NELEMS(gUnknown_843F2A4)); + gSpecialVar_0x8004 = IsPhraseDifferentThanPlayerInput(sECPhrase_LinkTogetherWithAll, NELEMS(sECPhrase_LinkTogetherWithAll)); } -const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = { +static const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = { { .type = EASY_CHAT_TYPE_PROFILE, .numColumns = 2, @@ -410,7 +408,7 @@ const struct EasyChatScreenTemplate sEasyChatScreenTemplates[] = { } }; -bool8 EasyChat_AllocateResources(u8 type, u16 *words) +static bool8 EasyChat_AllocateResources(u8 type, u16 *words) { u8 templateId; int i; @@ -424,68 +422,68 @@ bool8 EasyChat_AllocateResources(u8 type, u16 *words) sEasyChatScreen->state = 0; sEasyChatScreen->mainCursorColumn = 0; sEasyChatScreen->mainCursorRow = 0; - sEasyChatScreen->unk_09 = 0; + sEasyChatScreen->isAlphaMode = FALSE; templateId = GetEasyChatScreenTemplateId(type); sEasyChatScreen->numColumns = sEasyChatScreenTemplates[templateId].numColumns; sEasyChatScreen->numRows = sEasyChatScreenTemplates[templateId].numRows; - sEasyChatScreen->unk_07 = sEasyChatScreen->numColumns * sEasyChatScreen->numRows; + sEasyChatScreen->numWords = sEasyChatScreen->numColumns * sEasyChatScreen->numRows; sEasyChatScreen->templateId = templateId; - if (sEasyChatScreen->unk_07 > 9) - sEasyChatScreen->unk_07 = 9; + if (sEasyChatScreen->numWords > 9) + sEasyChatScreen->numWords = 9; - CpuCopy16(words, sEasyChatScreen->ecWordBuffer, sEasyChatScreen->unk_07 * sizeof(u16)); - sEasyChatScreen->unk_0d = (GetNumDisplayableGroups() - 1) / 2 + 1; + CpuCopy16(words, sEasyChatScreen->ecWordBuffer, sEasyChatScreen->numWords * sizeof(u16)); + sEasyChatScreen->selectGroupNumRows = (GetNumDisplayableGroups() - 1) / 2 + 1; return TRUE; } -void EasyChat_FreeResources(void) +static void EasyChat_FreeResources(void) { if (sEasyChatScreen != NULL) Free(sEasyChatScreen); } -u16 sub_80FF028(void) +static u16 EasyChatScreen_HandleJoypad(void) { switch (sEasyChatScreen->state) { case 0: - return sub_80FF098(); + return HandleJoypad_SelectField(); case 1: - return sub_80FF20C(); + return HandleJoypad_SelectFooter(); case 2: - return sub_80FF360(); + return HandleJoypad_SelectGroup(); case 3: - return sub_80FF41C(); + return HandleJoypad_SelectWord(); case 4: - return sub_80FF4A8(); + return Cancel_HandleYesNoMenu(); case 5: - return sub_80FF544(); + return DelAll_HandleYesNoMenu(); case 6: - return sub_80FF4F0(); + return Confirm_HandleYesNoMenu(); } return 0; } -u16 sub_80FF098(void) +static u16 HandleJoypad_SelectField(void) { do { if (JOY_NEW(A_BUTTON)) { sEasyChatScreen->state = 2; - sEasyChatScreen->unk_0a = 0; - sEasyChatScreen->unk_0b = 0; - sEasyChatScreen->unk_0c = 0; + sEasyChatScreen->selectGroupCursorX = 0; + sEasyChatScreen->selectGroupCursorY = 0; + sEasyChatScreen->selectGroupRowsAbove = 0; return 9; } else if (JOY_NEW(B_BUTTON)) { - return sub_80FF590(); + return Cancel_CreateYesNoMenu(); } else if (JOY_NEW(START_BUTTON)) { - return sub_80FF5C0(); + return Confirm_CreateYesNoMenu(); } else if (JOY_NEW(DPAD_UP)) { @@ -538,7 +536,7 @@ u16 sub_80FF098(void) return 2; } -u16 sub_80FF20C(void) +static u16 HandleJoypad_SelectFooter(void) { do { @@ -547,21 +545,21 @@ u16 sub_80FF20C(void) switch (sEasyChatScreen->mainCursorColumn) { case 0: - return sub_80FF5A8(); + return DelAll_CreateYesNoMenu(); case 1: - return sub_80FF590(); + return Cancel_CreateYesNoMenu(); case 2: - return sub_80FF5C0(); + return Confirm_CreateYesNoMenu(); } } if (JOY_NEW(B_BUTTON)) { - return sub_80FF590(); + return Cancel_CreateYesNoMenu(); } else if (JOY_NEW(START_BUTTON)) { - return sub_80FF5C0(); + return Confirm_CreateYesNoMenu(); } else if (JOY_NEW(DPAD_UP)) { @@ -608,46 +606,46 @@ u16 sub_80FF20C(void) return 2; } -u16 sub_80FF360(void) +static u16 HandleJoypad_SelectGroup(void) { if (JOY_NEW(B_BUTTON)) - return sub_80FF678(); + return BackOutFromGroupToFieldSelect(); if (JOY_NEW(A_BUTTON)) { - if (sEasyChatScreen->unk_0a != -1) - return sub_80FF5FC(); + if (sEasyChatScreen->selectGroupCursorX != -1) + return OpenSelectedGroup(); - switch (sEasyChatScreen->unk_0b) + switch (sEasyChatScreen->selectGroupCursorY) { case 0: - return sub_80FF688(); + return ToggleGroupAlphaMode(); case 1: - return sub_80FF6B4(); + return DeleteSelectedWord(); case 2: - return sub_80FF678(); + return BackOutFromGroupToFieldSelect(); } } if (JOY_NEW(SELECT_BUTTON)) - return sub_80FF688(); + return ToggleGroupAlphaMode(); if (JOY_REPT(DPAD_UP)) - return sub_80FF7CC(2); + return SelectGroupCursorAction(2); if (JOY_REPT(DPAD_DOWN)) - return sub_80FF7CC(3); + return SelectGroupCursorAction(3); if (JOY_REPT(DPAD_LEFT)) - return sub_80FF7CC(1); + return SelectGroupCursorAction(1); if (JOY_REPT(DPAD_RIGHT)) - return sub_80FF7CC(0); + return SelectGroupCursorAction(0); return 0; } -u16 sub_80FF41C(void) +static u16 HandleJoypad_SelectWord(void) { if (JOY_NEW(B_BUTTON)) { @@ -656,30 +654,30 @@ u16 sub_80FF41C(void) } if (JOY_NEW(A_BUTTON)) - return sub_80FF6C8(); + return PlaceSelectedWord(); if (JOY_NEW(START_BUTTON)) - return sub_80FFA38(4); + return SelectWordCursorAction(4); if (JOY_NEW(SELECT_BUTTON)) - return sub_80FFA38(5); + return SelectWordCursorAction(5); if (JOY_REPT(DPAD_UP)) - return sub_80FFA38(2); + return SelectWordCursorAction(2); if (JOY_REPT(DPAD_DOWN)) - return sub_80FFA38(3); + return SelectWordCursorAction(3); if (JOY_REPT(DPAD_LEFT)) - return sub_80FFA38(1); + return SelectWordCursorAction(1); if (JOY_REPT(DPAD_RIGHT)) - return sub_80FFA38(0); + return SelectWordCursorAction(0); return 0; } -u16 sub_80FF4A8(void) +static u16 Cancel_HandleYesNoMenu(void) { u8 var0; @@ -687,7 +685,7 @@ u16 sub_80FF4A8(void) { case MENU_B_PRESSED: // B Button case 1: // No - sEasyChatScreen->state = sub_80FF5F0(); + sEasyChatScreen->state = GetStateBackup(); return 7; case 0: // Yes gSpecialVar_Result = 0; @@ -698,24 +696,24 @@ u16 sub_80FF4A8(void) } } -u16 sub_80FF4F0(void) +static u16 Confirm_HandleYesNoMenu(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { case MENU_B_PRESSED: // B Button case 1: // No - sEasyChatScreen->state = sub_80FF5F0(); + sEasyChatScreen->state = GetStateBackup(); return 7; case 0: // Yes - gSpecialVar_Result = sub_80FF78C(); - sub_80FF6F0(); + gSpecialVar_Result = HasECMessageChanged(); + CommitECWords(); return 23; default: return 0; } } -u16 sub_80FF544(void) +static u16 DelAll_HandleYesNoMenu(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { @@ -724,7 +722,7 @@ u16 sub_80FF544(void) sEasyChatScreen->state = 1; return 7; case 0: // Yes - sub_80FF728(); + DeleteAllECFields(); sEasyChatScreen->state = 1; return 8; default: @@ -732,21 +730,21 @@ u16 sub_80FF544(void) } } -u16 sub_80FF590(void) +static u16 Cancel_CreateYesNoMenu(void) { sEasyChatScreen->stateBackup = sEasyChatScreen->state; sEasyChatScreen->state = 4; return 5; } -u16 sub_80FF5A8(void) +static u16 DelAll_CreateYesNoMenu(void) { sEasyChatScreen->stateBackup = sEasyChatScreen->state; sEasyChatScreen->state = 5; return 4; } -u16 sub_80FF5C0(void) +static u16 Confirm_CreateYesNoMenu(void) { sEasyChatScreen->stateBackup = sEasyChatScreen->state; if (IsEcWordBufferUninitialized()) @@ -761,94 +759,94 @@ u16 sub_80FF5C0(void) } } -u8 sub_80FF5F0(void) +static u8 GetStateBackup(void) { return sEasyChatScreen->stateBackup; } -int sub_80FF5FC(void) +int OpenSelectedGroup(void) { - u16 var1; + u16 numDisplayedWords; - if (sEasyChatScreen->unk_09 == 0) + if (!sEasyChatScreen->isAlphaMode) { - u8 groupId = GetSelectedGroupByIndex(sub_80FFB8C()); + u8 groupId = GetSelectedGroupByIndex(GetSelectedGroupIndex()); GetUnlockedECWords(FALSE, groupId); } else { - GetUnlockedECWords(TRUE, sub_80FFBAC()); + GetUnlockedECWords(TRUE, GetSelectedLetter()); } - var1 = GetNumDisplayedWords(); - if (var1 == 0) + numDisplayedWords = GetNumDisplayedWords(); + if (numDisplayedWords == 0) return 0; - sEasyChatScreen->unk_0f = (var1 - 1) / 2; - sEasyChatScreen->unk_0e = 0; - sEasyChatScreen->unk_10 = 0; - sEasyChatScreen->unk_11 = 0; + sEasyChatScreen->selectWordNumRows = (numDisplayedWords - 1) / 2; + sEasyChatScreen->selectWordRowsAbove = 0; + sEasyChatScreen->selectWordCursorX = 0; + sEasyChatScreen->selectWordCursorY = 0; sEasyChatScreen->state = 3; return 11; } -int sub_80FF678(void) +int BackOutFromGroupToFieldSelect(void) { sEasyChatScreen->state = 0; return 10; } -int sub_80FF688(void) +int ToggleGroupAlphaMode(void) { - sEasyChatScreen->unk_0a = 0; - sEasyChatScreen->unk_0b = 0; - sEasyChatScreen->unk_0c = 0; - if (!sEasyChatScreen->unk_09) - sEasyChatScreen->unk_09 = 1; + sEasyChatScreen->selectGroupCursorX = 0; + sEasyChatScreen->selectGroupCursorY = 0; + sEasyChatScreen->selectGroupRowsAbove = 0; + if (!sEasyChatScreen->isAlphaMode) + sEasyChatScreen->isAlphaMode = TRUE; else - sEasyChatScreen->unk_09 = 0; + sEasyChatScreen->isAlphaMode = FALSE; return 22; } -int sub_80FF6B4(void) +int DeleteSelectedWord(void) { - sub_80FF768(0xFFFF); + SetEasyChatWordToField(0xFFFF); return 1; } -int sub_80FF6C8(void) +int PlaceSelectedWord(void) { - u16 easyChatWord = GetDisplayedWordByIndex(sub_80FFBE4()); - sub_80FF768(easyChatWord); + u16 easyChatWord = GetDisplayedWordByIndex(GetSelectWordCursorPos()); + SetEasyChatWordToField(easyChatWord); sEasyChatScreen->state = 0; return 12; } -void sub_80FF6F0(void) +static void CommitECWords(void) { u16 i; - for (i = 0; i < sEasyChatScreen->unk_07; i++) + for (i = 0; i < sEasyChatScreen->numWords; i++) sEasyChatScreen->words[i] = sEasyChatScreen->ecWordBuffer[i]; } -void sub_80FF728(void) +static void DeleteAllECFields(void) { u16 i; - for (i = 0; i < sEasyChatScreen->unk_07; i++) + for (i = 0; i < sEasyChatScreen->numWords; i++) sEasyChatScreen->ecWordBuffer[i] = 0xFFFF; } -void sub_80FF768(u16 easyChatWord) +static void SetEasyChatWordToField(u16 easyChatWord) { - u16 index = sub_80FFB6C(); + u16 index = GetSelectedFieldIndex(); sEasyChatScreen->ecWordBuffer[index] = easyChatWord; } -bool8 sub_80FF78C(void) +static bool8 HasECMessageChanged(void) { u16 i; - for (i = 0; i < sEasyChatScreen->unk_07; i++) + for (i = 0; i < sEasyChatScreen->numWords; i++) { if (sEasyChatScreen->ecWordBuffer[i] != sEasyChatScreen->words[i]) return TRUE; @@ -857,76 +855,76 @@ bool8 sub_80FF78C(void) return FALSE; } -u16 sub_80FF7CC(u32 action) +static u16 SelectGroupCursorAction(u32 action) { - if (sEasyChatScreen->unk_0a != -1) + if (sEasyChatScreen->selectGroupCursorX != -1) { - if (sEasyChatScreen->unk_09 == 0) - return sub_80FF80C(action); + if (!sEasyChatScreen->isAlphaMode) + return UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(action); else - return sub_80FF8D8(action); + return UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(action); } else { - return sub_80FF968(action); + return UpdateSelectGroupCursorPos_InsideBlueBox(action); } } -int sub_80FF80C(u32 arg0) +int UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(u32 arg0) { switch (arg0) { case 2: - if (sEasyChatScreen->unk_0b != -sEasyChatScreen->unk_0c) + if (sEasyChatScreen->selectGroupCursorY != -sEasyChatScreen->selectGroupRowsAbove) { - if (sEasyChatScreen->unk_0b) + if (sEasyChatScreen->selectGroupCursorY) { - sEasyChatScreen->unk_0b--; + sEasyChatScreen->selectGroupCursorY--; return 14; } else { - sEasyChatScreen->unk_0c--; + sEasyChatScreen->selectGroupRowsAbove--; return 16; } } break; case 3: - if (sEasyChatScreen->unk_0b + sEasyChatScreen->unk_0c < sEasyChatScreen->unk_0d - 1) + if (sEasyChatScreen->selectGroupCursorY + sEasyChatScreen->selectGroupRowsAbove < sEasyChatScreen->selectGroupNumRows - 1) { int var0; - if (sEasyChatScreen->unk_0b < 3) + if (sEasyChatScreen->selectGroupCursorY < 3) { - sEasyChatScreen->unk_0b++; + sEasyChatScreen->selectGroupCursorY++; var0 = 14; } else { - sEasyChatScreen->unk_0c++; + sEasyChatScreen->selectGroupRowsAbove++; var0 = 15; } - sub_80FFC1C(); + MoveGroupCursorXToMaxCol(); return var0; } break; case 1: - if (sEasyChatScreen->unk_0a) - sEasyChatScreen->unk_0a--; + if (sEasyChatScreen->selectGroupCursorX) + sEasyChatScreen->selectGroupCursorX--; else - sub_80FF9E8(); + GroupCursorMoveToBlueBox(); return 14; case 0: - if (sEasyChatScreen->unk_0a < 1) + if (sEasyChatScreen->selectGroupCursorX < 1) { - sEasyChatScreen->unk_0a++; - if (sub_80FFC6C()) - sub_80FF9E8(); + sEasyChatScreen->selectGroupCursorX++; + if (GroupSelectCursorXPosTooFarRight()) + GroupCursorMoveToBlueBox(); } else { - sub_80FF9E8(); + GroupCursorMoveToBlueBox(); } return 14; } @@ -934,36 +932,36 @@ int sub_80FF80C(u32 arg0) return 0; } -int sub_80FF8D8(u32 arg0) +int UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(u32 arg0) { switch (arg0) { case 2: - if (sEasyChatScreen->unk_0b > 0) - sEasyChatScreen->unk_0b--; + if (sEasyChatScreen->selectGroupCursorY > 0) + sEasyChatScreen->selectGroupCursorY--; else - sEasyChatScreen->unk_0b = 3; + sEasyChatScreen->selectGroupCursorY = 3; - sub_80FFC1C(); + MoveGroupCursorXToMaxCol(); return 14; case 3: - if (sEasyChatScreen->unk_0b < 3) - sEasyChatScreen->unk_0b++; + if (sEasyChatScreen->selectGroupCursorY < 3) + sEasyChatScreen->selectGroupCursorY++; else - sEasyChatScreen->unk_0b = 0; + sEasyChatScreen->selectGroupCursorY = 0; - sub_80FFC1C(); + MoveGroupCursorXToMaxCol(); return 14; case 0: - sEasyChatScreen->unk_0a++; - if (sub_80FFC6C()) - sub_80FF9E8(); + sEasyChatScreen->selectGroupCursorX++; + if (GroupSelectCursorXPosTooFarRight()) + GroupCursorMoveToBlueBox(); return 14; case 1: - sEasyChatScreen->unk_0a--; - if (sEasyChatScreen->unk_0a < 0) - sub_80FF9E8(); + sEasyChatScreen->selectGroupCursorX--; + if (sEasyChatScreen->selectGroupCursorX < 0) + GroupCursorMoveToBlueBox(); return 14; } @@ -971,137 +969,137 @@ int sub_80FF8D8(u32 arg0) return 0; } -int sub_80FF968(u32 arg0) +int UpdateSelectGroupCursorPos_InsideBlueBox(u32 arg0) { switch (arg0) { case 2: - if (sEasyChatScreen->unk_0b) - sEasyChatScreen->unk_0b--; + if (sEasyChatScreen->selectGroupCursorY) + sEasyChatScreen->selectGroupCursorY--; else - sEasyChatScreen->unk_0b = 2; + sEasyChatScreen->selectGroupCursorY = 2; return 14; case 3: - if (sEasyChatScreen->unk_0b < 2) - sEasyChatScreen->unk_0b++; + if (sEasyChatScreen->selectGroupCursorY < 2) + sEasyChatScreen->selectGroupCursorY++; else - sEasyChatScreen->unk_0b = 0; + sEasyChatScreen->selectGroupCursorY = 0; return 14; case 1: - sEasyChatScreen->unk_0b++; - sub_80FFA0C(); + sEasyChatScreen->selectGroupCursorY++; + GroupCursorWrapAroundLeft(); return 14; case 0: - sEasyChatScreen->unk_0a = 0; - sEasyChatScreen->unk_0b++; + sEasyChatScreen->selectGroupCursorX = 0; + sEasyChatScreen->selectGroupCursorY++; return 14; } return 0; } -void sub_80FF9E8(void) +static void GroupCursorMoveToBlueBox(void) { - sEasyChatScreen->unk_0a = 0xFF; - if (sEasyChatScreen->unk_0b) - sEasyChatScreen->unk_0b--; + sEasyChatScreen->selectGroupCursorX = 0xFF; + if (sEasyChatScreen->selectGroupCursorY) + sEasyChatScreen->selectGroupCursorY--; } -void sub_80FFA0C(void) +static void GroupCursorWrapAroundLeft(void) { - if (sEasyChatScreen->unk_09 == 0) + if (!sEasyChatScreen->isAlphaMode) { - sEasyChatScreen->unk_0a = 1; - sub_80FFC1C(); + sEasyChatScreen->selectGroupCursorX = 1; + MoveGroupCursorXToMaxCol(); } else { - sEasyChatScreen->unk_0a = sub_80FFC04(sEasyChatScreen->unk_0b); + sEasyChatScreen->selectGroupCursorX = GetMaxGroupCursorXinAlphaMode(sEasyChatScreen->selectGroupCursorY); } } -u16 sub_80FFA38(u32 arg0) +static u16 SelectWordCursorAction(u32 arg0) { u16 result; switch (arg0) { - case 2: - if (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e > 0) + case 2: // up + if (sEasyChatScreen->selectWordCursorY + sEasyChatScreen->selectWordRowsAbove > 0) { - if (sEasyChatScreen->unk_11 > 0) + if (sEasyChatScreen->selectWordCursorY > 0) { - sEasyChatScreen->unk_11--; + sEasyChatScreen->selectWordCursorY--; result = 17; } else { - sEasyChatScreen->unk_0e--; + sEasyChatScreen->selectWordRowsAbove--; result = 18; } - sub_80FFC44(); + MoveWordCursorXToMaxCol(); return result; } break; - case 3: - if (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e < sEasyChatScreen->unk_0f) + case 3: // down + if (sEasyChatScreen->selectWordCursorY + sEasyChatScreen->selectWordRowsAbove < sEasyChatScreen->selectWordNumRows) { - if (sEasyChatScreen->unk_11 < 3) + if (sEasyChatScreen->selectWordCursorY < 3) { - sEasyChatScreen->unk_11++; + sEasyChatScreen->selectWordCursorY++; result = 17; } else { - sEasyChatScreen->unk_0e++; + sEasyChatScreen->selectWordRowsAbove++; result = 19; } - sub_80FFC44(); + MoveWordCursorXToMaxCol(); return result; } break; - case 1: - if (sEasyChatScreen->unk_10 > 0) - sEasyChatScreen->unk_10--; + case 1: // left + if (sEasyChatScreen->selectWordCursorX > 0) + sEasyChatScreen->selectWordCursorX--; else - sEasyChatScreen->unk_10 = 1; + sEasyChatScreen->selectWordCursorX = 1; - sub_80FFC44(); + MoveWordCursorXToMaxCol(); return 17; - case 0: - if (sEasyChatScreen->unk_10 < 1) + case 0: // right + if (sEasyChatScreen->selectWordCursorX < 1) { - sEasyChatScreen->unk_10++; - if (sub_80FFCC0()) - sEasyChatScreen->unk_10 = 0; + sEasyChatScreen->selectWordCursorX++; + if (WordSelectCursorXPosTooFarRight()) + sEasyChatScreen->selectWordCursorX = 0; } else { - sEasyChatScreen->unk_10 = 0; + sEasyChatScreen->selectWordCursorX = 0; } return 17; - case 4: - if (sEasyChatScreen->unk_0e) + case 4: // pg up + if (sEasyChatScreen->selectWordRowsAbove) { - if (sEasyChatScreen->unk_0e > 3) - sEasyChatScreen->unk_0e -= 4; + if (sEasyChatScreen->selectWordRowsAbove > 3) + sEasyChatScreen->selectWordRowsAbove -= 4; else - sEasyChatScreen->unk_0e = 0; + sEasyChatScreen->selectWordRowsAbove = 0; return 20; } break; - case 5: - if (sEasyChatScreen->unk_0e <= sEasyChatScreen->unk_0f - 4) + case 5: // pg dn + if (sEasyChatScreen->selectWordRowsAbove <= sEasyChatScreen->selectWordNumRows - 4) { - sEasyChatScreen->unk_0e += 4; - if (sEasyChatScreen->unk_0e > sEasyChatScreen->unk_0f - 3) - sEasyChatScreen->unk_0e = sEasyChatScreen->unk_0f + -3u; + sEasyChatScreen->selectWordRowsAbove += 4; + if (sEasyChatScreen->selectWordRowsAbove > sEasyChatScreen->selectWordNumRows - 3) + sEasyChatScreen->selectWordRowsAbove = sEasyChatScreen->selectWordNumRows + -3u; - sub_80FFC44(); + MoveWordCursorXToMaxCol(); return 21; } break; @@ -1110,36 +1108,36 @@ u16 sub_80FFA38(u32 arg0) return 0; } -u16 sub_80FFB6C(void) +static u16 GetSelectedFieldIndex(void) { return (sEasyChatScreen->mainCursorRow * sEasyChatScreen->numColumns) + sEasyChatScreen->mainCursorColumn; } -u16 sub_80FFB8C(void) +static u16 GetSelectedGroupIndex(void) { - return 2 * (sEasyChatScreen->unk_0b + sEasyChatScreen->unk_0c) + sEasyChatScreen->unk_0a; + return 2 * (sEasyChatScreen->selectGroupCursorY + sEasyChatScreen->selectGroupRowsAbove) + sEasyChatScreen->selectGroupCursorX; } -const u8 gUnknown_843F39C[][7] = { - {0x01, 0x02, 0x03, 0x04, 0x05, 0x06}, - {0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c}, - {0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13}, - {0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a} +static const u8 sAlphabetLayout[][7] = { + { 1, 2, 3, 4, 5, 6}, + { 7, 8, 9, 10, 11, 12}, + {13, 14, 15, 16, 17, 18, 19}, + {20, 21, 22, 23, 24, 25, 26} }; -int sub_80FFBAC(void) +int GetSelectedLetter(void) { - int var0 = sEasyChatScreen->unk_0a < NELEMS(*gUnknown_843F39C) ? sEasyChatScreen->unk_0a : 0; - int var1 = sEasyChatScreen->unk_0b < NELEMS(gUnknown_843F39C) ? sEasyChatScreen->unk_0b : 0; - return gUnknown_843F39C[var1][var0]; + int col = sEasyChatScreen->selectGroupCursorX < NELEMS(*sAlphabetLayout) ? sEasyChatScreen->selectGroupCursorX : 0; + int row = sEasyChatScreen->selectGroupCursorY < NELEMS(sAlphabetLayout) ? sEasyChatScreen->selectGroupCursorY : 0; + return sAlphabetLayout[row][col]; } -u16 sub_80FFBE4(void) +static u16 GetSelectWordCursorPos(void) { - return 2 * (sEasyChatScreen->unk_11 + sEasyChatScreen->unk_0e) + sEasyChatScreen->unk_10; + return 2 * (sEasyChatScreen->selectWordCursorY + sEasyChatScreen->selectWordRowsAbove) + sEasyChatScreen->selectWordCursorX; } -u8 sub_80FFC04(u8 arg0) +static u8 GetMaxGroupCursorXinAlphaMode(u8 arg0) { switch (arg0) { @@ -1151,39 +1149,39 @@ u8 sub_80FFC04(u8 arg0) } } -void sub_80FFC1C(void) +static void MoveGroupCursorXToMaxCol(void) { - while (sub_80FFC6C()) + while (GroupSelectCursorXPosTooFarRight()) { - if (sEasyChatScreen->unk_0a) - sEasyChatScreen->unk_0a--; + if (sEasyChatScreen->selectGroupCursorX) + sEasyChatScreen->selectGroupCursorX--; else break; } } -void sub_80FFC44(void) +static void MoveWordCursorXToMaxCol(void) { - while (sub_80FFCC0()) + while (WordSelectCursorXPosTooFarRight()) { - if (sEasyChatScreen->unk_10) - sEasyChatScreen->unk_10--; + if (sEasyChatScreen->selectWordCursorX) + sEasyChatScreen->selectWordCursorX--; else break; } } -bool8 sub_80FFC6C(void) +static bool8 GroupSelectCursorXPosTooFarRight(void) { - if (sEasyChatScreen->unk_09 == 0) - return sub_80FFB8C() >= GetNumDisplayableGroups() ? TRUE : FALSE; + if (!sEasyChatScreen->isAlphaMode) + return GetSelectedGroupIndex() >= GetNumDisplayableGroups() ? TRUE : FALSE; else - return sEasyChatScreen->unk_0a > sub_80FFC04(sEasyChatScreen->unk_0b) ? TRUE : FALSE; + return sEasyChatScreen->selectGroupCursorX > GetMaxGroupCursorXinAlphaMode(sEasyChatScreen->selectGroupCursorY) ? TRUE : FALSE; } -bool8 sub_80FFCC0(void) +static bool8 WordSelectCursorXPosTooFarRight(void) { - return sub_80FFBE4() >= GetNumDisplayedWords() ? TRUE : FALSE; + return GetSelectWordCursorPos() >= GetNumDisplayedWords() ? TRUE : FALSE; } u8 GetEasyChatScreenFrameId(void) @@ -1233,7 +1231,7 @@ void GetEasyChatConfirmText(const u8 **str1, const u8 **str2) *str2 = sEasyChatScreenTemplates[sEasyChatScreen->templateId].confirmText2; } -void sub_80FFDC8(const u8 **str1, const u8 **str2) +void GetEasyChatConfirmCancelText(const u8 **str1, const u8 **str2) { switch (sEasyChatScreen->type) { @@ -1255,36 +1253,36 @@ void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2) *str2 = gUnknown_8418956; } -void sub_80FFE08(u8 *arg0, u8 *arg1) +void GetECSelectGroupCursorCoords(u8 *Xp, u8 *Yp) { - *arg0 = sEasyChatScreen->unk_0a; - *arg1 = sEasyChatScreen->unk_0b; + *Xp = sEasyChatScreen->selectGroupCursorX; + *Yp = sEasyChatScreen->selectGroupCursorY; } -u8 sub_80FFE1C(void) +bool8 IsEasyChatAlphaMode(void) { - return sEasyChatScreen->unk_09; + return sEasyChatScreen->isAlphaMode; } -u8 sub_80FFE28(void) +u8 GetECSelectGroupRowsAbove(void) { - return sEasyChatScreen->unk_0c; + return sEasyChatScreen->selectGroupRowsAbove; } -void sub_80FFE34(s8 *arg0, s8 *arg1) +void GetECSelectWordCursorCoords(s8 *Xp, s8 *Yp) { - *arg0 = sEasyChatScreen->unk_10; - *arg1 = sEasyChatScreen->unk_11; + *Xp = sEasyChatScreen->selectWordCursorX; + *Yp = sEasyChatScreen->selectWordCursorY; } -u8 sub_80FFE48(void) +u8 GetECSelectWordRowsAbove(void) { - return sEasyChatScreen->unk_0e; + return sEasyChatScreen->selectWordRowsAbove; } -u8 sub_80FFE54(void) +u8 GetECSelectWordNumRows(void) { - return sEasyChatScreen->unk_0f; + return sEasyChatScreen->selectWordNumRows; } u8 unref_sub_80FFE60(void) @@ -1292,16 +1290,16 @@ u8 unref_sub_80FFE60(void) return 0; } -bool32 sub_80FFE64(void) +bool32 ShouldDrawECUpArrow(void) { switch (sEasyChatScreen->state) { case 2: - if (sEasyChatScreen->unk_09 == 0 && sEasyChatScreen->unk_0c) + if (!sEasyChatScreen->isAlphaMode && sEasyChatScreen->selectGroupRowsAbove != 0) return TRUE; break; case 3: - if (sEasyChatScreen->unk_0e) + if (sEasyChatScreen->selectWordRowsAbove != 0) return TRUE; break; } @@ -1309,16 +1307,16 @@ bool32 sub_80FFE64(void) return FALSE; } -bool32 sub_80FFE98(void) +bool32 ShouldDrawECDownArrow(void) { switch (sEasyChatScreen->state) { case 2: - if (sEasyChatScreen->unk_09 == 0 && sEasyChatScreen->unk_0c + 4 <= sEasyChatScreen->unk_0d - 1) + if (!sEasyChatScreen->isAlphaMode && sEasyChatScreen->selectGroupRowsAbove + 4 <= sEasyChatScreen->selectGroupNumRows - 1) return TRUE; break; case 3: - if (sEasyChatScreen->unk_0e + 4 <= sEasyChatScreen->unk_0f) + if (sEasyChatScreen->selectWordRowsAbove + 4 <= sEasyChatScreen->selectWordNumRows) return TRUE; break; } @@ -1326,7 +1324,7 @@ bool32 sub_80FFE98(void) return FALSE; } -bool8 IsPhraseDifferentThanPlayerInput(const u16 *phrase, u8 phraseLength) +static bool8 IsPhraseDifferentThanPlayerInput(const u16 *phrase, u8 phraseLength) { u8 i; @@ -1339,7 +1337,7 @@ bool8 IsPhraseDifferentThanPlayerInput(const u16 *phrase, u8 phraseLength) return FALSE; } -u8 GetEasyChatScreenTemplateId(u8 type) +static u8 GetEasyChatScreenTemplateId(u8 type) { u32 i; @@ -1352,11 +1350,11 @@ u8 GetEasyChatScreenTemplateId(u8 type) return 0; } -bool32 IsEcWordBufferUninitialized(void) +static bool32 IsEcWordBufferUninitialized(void) { int i; - for (i = 0; i < sEasyChatScreen->unk_07; i++) + for (i = 0; i < sEasyChatScreen->numWords; i++) { if (sEasyChatScreen->ecWordBuffer[i] != 0xFFFF) return FALSE; diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index ad6d293db..f3c7bedd9 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -9,32 +9,32 @@ #include "strings.h" #include "text_window.h" -struct Unk203A11C +struct ECWork { - u16 unk0; + u16 state; u16 windowId; - u16 unk4; - u8 unk6; - u8 unk7; - s8 unk8; - u8 unk9; - u8 unkA[0xC1]; - u8 unkCC[0x200]; - u16 unk2CE; - int unk2D0; - int unk2D4; - struct Sprite *unk2D8; - struct Sprite *unk2DC; - struct Sprite *unk2E0; - struct Sprite *unk2E4; - struct Sprite *unk2E8; - struct Sprite *unk2EC; - struct Sprite *unk2F0; - struct Sprite *unk2F4; - struct Sprite *unk2F8; - struct Sprite *unk2FC; - u16 unk300[BG_SCREEN_SIZE / 2]; - u16 unkB00[BG_SCREEN_SIZE / 2]; + u16 id; + u8 frameAnimIdx; + u8 frameAnimTarget; + s8 frameAnimDelta; + u8 modeIconState; + u8 ecPrintBuffer[0xC1]; + u8 ecPaddedWordBuffer[0x200]; + u16 bg2ScrollRow; + int tgtBgY; + int deltaBgY; + struct Sprite *selectDestFieldCursorSprite; + struct Sprite *rectCursorSpriteRight; + struct Sprite *rectCursorSpriteLeft; + struct Sprite *selectWordCursorSprite; + struct Sprite *selectGroupHelpSprite; + struct Sprite *modeIconsSprite; + struct Sprite *upTriangleCursorSprite; + struct Sprite *downTriangleCursorSprite; + struct Sprite *startPgUpButtonSprite; + struct Sprite *selectPgDnButtonSprite; + u16 bg1TilemapBuffer[BG_SCREEN_SIZE / 2]; + u16 bg3TilemapBuffer[BG_SCREEN_SIZE / 2]; }; struct EasyChatPhraseFrameDimensions @@ -45,114 +45,114 @@ struct EasyChatPhraseFrameDimensions u8 height; }; -EWRAM_DATA struct Unk203A11C *gUnknown_203ACEC = NULL; - -bool8 sub_8100258(void); -bool8 sub_8100290(void); -bool8 sub_8100374(void); -bool8 sub_81003A8(void); -bool8 sub_81003EC(void); -bool8 sub_8100430(void); -bool8 sub_8100474(void); -bool8 sub_81004B8(void); -bool8 sub_81004F4(void); -bool8 sub_81005C0(void); -bool8 sub_8100660(void); -bool8 sub_8100720(void); -bool8 sub_810072C(void); -bool8 sub_8100774(void); -bool8 sub_81007D0(void); -bool8 sub_8100890(void); -bool8 sub_810093C(void); -bool8 sub_81009F8(void); -bool8 sub_8100A04(void); -bool8 sub_8100A78(void); -bool8 sub_8100AE8(void); -bool8 sub_8100B70(void); -bool8 sub_8100BF4(void); -void sub_8100C5C(void); -void sub_8100CBC(void); -void sub_8100D24(void); -void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow); -void sub_8100E34(void); -void sub_8100E7C(u8 a0); -void sub_8100F18(u8 initialCursorPos); -void sub_8100F44(void); -void sub_8100FDC(void); -void sub_8101100(u16 *buffer); -void sub_81012CC(void); -void sub_81012E0(u32 a0); -void sub_810131C(void); -void sub_810133C(void); -void PrintEasyChatKeyboardText(void); -void sub_81013DC(void); -void sub_81013EC(void); -void sub_8101410(void); -void sub_8101434(void); -void sub_8101478(void); -void sub_81014AC(u8 a0, u8 a1); -void sub_8101558(u8 a0, u8 a1); -void sub_81015BC(void); -void sub_81015D4(int a0); -bool8 sub_81016AC(void); -void sub_81016E4(u8 a0); -void sub_8101830(int left, int top, int width, int height); -void sub_810198C(void); -void sub_81019B0(s16 a0, u8 a1); -bool8 sub_8101A10(void); -s32 sub_8101A48(void); -void sub_8101A5C(u8 left, u8 top, u8 right, u8 bottom); -void sub_8101A90(void); -void sub_8101AC4(void); -void sub_8101B20(struct Sprite * sprite); -void sub_8101B58(u8 x, u8 y); -void sub_8101B88(void); -void sub_8101BA8(void); -void sub_8101BC0(void); -void sub_8101C48(void); -void sub_8101C80(void); -void sub_8101CE4(s8 a0, s8 a1); -void sub_8101D9C(s8 a0, s8 a1); -void sub_8101E80(void); -void sub_8101ED4(struct Sprite * sprite); -void sub_8101F04(void); -void sub_8101F40(u8 x, u8 y); -void sub_8101F80(void); -void sub_8101FAC(void); -bool8 sub_8102018(void); -void sub_81020AC(void); -bool8 sub_81020D0(void); -void sub_810215C(void); -void sub_8102178(void); -bool8 sub_81021B8(void); -void sub_81021D4(void); -void sub_810224C(void); -void sub_81022B0(void); -void sub_81022E0(int a0); -void sub_8102320(void); -void sub_8102394(void); -void sub_81023F8(void); -void sub_8102428(void); - -const u16 gUnknown_843F3B8[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.gbapal"); -const u16 gUnknown_843F3D8[] = INCBIN_U16("graphics/link_rfu/unk_8E9BD28.gbapal"); -const u16 gUnknown_843F3F8[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.4bpp"); -const u16 gUnknown_843F418[] = INCBIN_U16("graphics/link_rfu/unk_843F418.4bpp"); -const u16 gUnknown_843F518[] = INCBIN_U16("graphics/link_rfu/unk_843F518.4bpp"); -const u16 gUnknown_843F618[] = INCBIN_U16("graphics/link_rfu/unk_843F638.gbapal"); -const u32 gUnknown_843F638[] = INCBIN_U32("graphics/link_rfu/unk_843F638.4bpp.lz"); -const u16 gUnknown_843F76C[] = INCBIN_U16("graphics/link_rfu/unk_843F76C.gbapal"); -const u16 gUnknown_843F78C[] = INCBIN_U16("graphics/link_rfu/unk_843F78C.gbapal"); -const u32 gUnknown_843F7AC[] = INCBIN_U32("graphics/link_rfu/unk_843F7AC.4bpp.lz"); - -const u16 gUnknown_843F874[] = { +static EWRAM_DATA struct ECWork *sEasyChatGraphicsResources = NULL; + +static bool8 ECInterfaceCmd_01(void); +static bool8 ECInterfaceCmd_02(void); +static bool8 ECInterfaceCmd_03(void); +static bool8 ECInterfaceCmd_05(void); +static bool8 ECInterfaceCmd_06(void); +static bool8 ECInterfaceCmd_04(void); +static bool8 ECInterfaceCmd_07(void); +static bool8 ECInterfaceCmd_08(void); +static bool8 ECInterfaceCmd_09(void); +static bool8 ECInterfaceCmd_10(void); +static bool8 ECInterfaceCmd_22(void); +static bool8 ECInterfaceCmd_14(void); +static bool8 ECInterfaceCmd_15(void); +static bool8 ECInterfaceCmd_16(void); +static bool8 ECInterfaceCmd_11(void); +static bool8 ECInterfaceCmd_12(void); +static bool8 ECInterfaceCmd_13(void); +static bool8 ECInterfaceCmd_17(void); +static bool8 ECInterfaceCmd_19(void); +static bool8 ECInterfaceCmd_18(void); +static bool8 ECInterfaceCmd_21(void); +static bool8 ECInterfaceCmd_20(void); +static bool8 InitEasyChatGraphicsWork_Internal(void); +static void SetGpuRegsForEasyChatInit(void); +static void LoadEasyChatPals(void); +static void PrintTitleText(void); +static void EC_AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow); +static void PrintECInstructionsText(void); +static void PrintECInterfaceTextById(u8 a0); +static void EC_CreateYesNoMenuWithInitialCursorPos(u8 initialCursorPos); +static void CreatePhraseFrameWindow(void); +static void PrintECFields(void); +static void DrawECFrameInTilemapBuffer(u16 *buffer); +static void PutWin2TilemapAndCopyToVram(void); +static void PrintECMenuById(u32 a0); +static void PrintECGroupOrAlphaMenu(void); +static void PrintECGroupsMenu(void); +static void PrintEasyChatKeyboardText(void); +static void PrintECWordsMenu(void); +static void UpdateWin2PrintWordsScrollDown(void); +static void UpdateWin2PrintWordsScrollUp(void); +static void UpdateWin2PrintWordsScrollPageDown(void); +static void UpdateWin2PrintWordsScrollPageUp(void); +static void PrintECRowsWin2(u8 row, u8 remrow); +static void ClearECRowsWin2(u8 row, u8 remrow); +static void ClearWin2AndCopyToVram(void); +static void StartWin2FrameAnim(int a0); +static bool8 AnimateFrameResize(void); +static void RedrawFrameByIndex(u8 a0); +static void RedrawFrameByRect(int left, int top, int width, int height); +static void InitBg2Scroll(void); +static void ScheduleBg2VerticalScroll(s16 direction, u8 speed); +static bool8 AnimateBg2VerticalScroll(void); +static int GetBg2ScrollRow(void); +static void SetRegWin0Coords(u8 left, u8 top, u8 right, u8 bottom); +static void LoadSpriteGfx(void); +static void CreateSelectDestFieldCursorSprite(void); +static void SpriteCB_BounceCursor(struct Sprite * sprite); +static void SetSelectDestFieldCursorSpritePosAndResetAnim(u8 x, u8 y); +static void FreezeSelectDestFieldCursorSprite(void); +static void UnfreezeSelectDestFieldCursorSprite(void); +static void CreateRedRectangularCursorSpritePair(void); +static void DestroyRedRectangularCursor(void); +static void EC_MoveCursor(void); +static void MoveCursor_Group(s8 a0, s8 a1); +static void MoveCursor_Alpha(s8 a0, s8 a1); +static void CreateSelectWordCursorSprite(void); +static void SpriteCB_SelectWordCursorSprite(struct Sprite * sprite); +static void SetSelectWordCursorSpritePos(void); +static void SetSelectWordCursorSpritePosExplicit(u8 x, u8 y); +static void DestroySelectWordCursorSprite(void); +static void CreateSelectGroupHelpSprite(void); +static bool8 AnimateSeletGroupModeAndHelpSpriteEnter(void); +static void StartModeIconHidingAnimation(void); +static bool8 RunModeIconHidingAnimation(void); +static void ShrinkModeIconsSprite(void); +static void ShowModeIconsSprite(void); +static bool8 ModeIconsSpriteAnimIsEnded(void); +static void CreateVerticalScrollArrowSprites(void); +static void UpdateVerticalScrollArrowVisibility(void); +static void HideVerticalScrollArrowSprites(void); +static void UpdateVerticalScrollArrowSpriteXPos(int a0); +static void CreateStartSelectButtonsSprites(void); +static void UpdateStartSelectButtonSpriteVisibility(void); +static void HideStartSelectButtonSprites(void); +static void CreateFooterWindow(void); + +static const u16 gUnknown_843F3B8[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.gbapal"); +static const u16 gUnknown_843F3D8[] = INCBIN_U16("graphics/link_rfu/unk_8E9BD28.gbapal"); +static const u16 sRightTriangleCursor_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F3F8.4bpp"); +static const u16 sUpTriangleCursor_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F418.4bpp"); +static const u16 sStartSelectButtons_Tiles[] = INCBIN_U16("graphics/link_rfu/unk_843F518.4bpp"); +static const u16 gUnknown_843F618[] = INCBIN_U16("graphics/link_rfu/unk_843F638.gbapal"); +static const u32 gUnknown_843F638[] = INCBIN_U32("graphics/link_rfu/unk_843F638.4bpp.lz"); +static const u16 gUnknown_843F76C[] = INCBIN_U16("graphics/link_rfu/unk_843F76C.gbapal"); +static const u16 gUnknown_843F78C[] = INCBIN_U16("graphics/link_rfu/unk_843F78C.gbapal"); +static const u32 gUnknown_843F7AC[] = INCBIN_U32("graphics/link_rfu/unk_843F7AC.4bpp.lz"); + +static const u16 gUnknown_843F874[] = { RGB( 0, 0, 0), RGB( 0, 0, 0), RGB( 7, 25, 31), RGB(21, 21, 29) }; -const u16 gUnknown_843F87C[] = { +static const u16 gUnknown_843F87C[] = { RGB( 0, 0, 0), RGB(31, 31, 31), RGB(12, 12, 12), @@ -160,7 +160,7 @@ const u16 gUnknown_843F87C[] = { RGB( 8, 17, 9) }; -const struct EasyChatPhraseFrameDimensions sPhraseFrameDimensions[] = { +static const struct EasyChatPhraseFrameDimensions sPhraseFrameDimensions[] = { { .left = 0x03, .top = 0x04, @@ -194,7 +194,7 @@ const struct EasyChatPhraseFrameDimensions sPhraseFrameDimensions[] = { } }; -const struct BgTemplate sEasyChatBgTemplates[] = { +static const struct BgTemplate sEasyChatBgTemplates[] = { { .bg = 0, .charBaseIndex = 0, @@ -230,7 +230,7 @@ const struct BgTemplate sEasyChatBgTemplates[] = { } }; -const struct WindowTemplate sEasyChatWindowTemplates[] = { +static const struct WindowTemplate sEasyChatWindowTemplates[] = { { .bg = 1, .tilemapLeft = 7, @@ -261,7 +261,7 @@ const struct WindowTemplate sEasyChatWindowTemplates[] = { DUMMY_WIN_TEMPLATE, }; -const struct WindowTemplate sEasyChatYesNoWindowTemplate = { +static const struct WindowTemplate sEasyChatYesNoWindowTemplate = { .bg = 0, .tilemapLeft = 22, .tilemapTop = 9, @@ -271,24 +271,24 @@ const struct WindowTemplate sEasyChatYesNoWindowTemplate = { .baseBlock = 0x062 }; -const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}"); -const u8 sText_Clear17[] = _("{CLEAR 17}"); +static const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}"); +static const u8 sText_Clear17[] = _("{CLEAR 17}"); -const u8 *const sEasyChatKeyboardText[] = { +static const u8 *const sEasyChatKeyboardText[] = { gUnknown_847A8D8, gUnknown_847A8FA, gUnknown_847A913, gUnknown_847A934 }; -const struct SpriteSheet sEasyChatSpriteSheets[] = { - {gUnknown_843F3F8, 0x0020, 0}, - {gUnknown_843F418, 0x0100, 2}, - {gUnknown_843F518, 0x0100, 3}, +static const struct SpriteSheet sEasyChatSpriteSheets[] = { + {sRightTriangleCursor_Tiles, 0x0020, 0}, + {sUpTriangleCursor_Tiles, 0x0100, 2}, + {sStartSelectButtons_Tiles, 0x0100, 3}, {} }; -const struct SpritePalette sEasyChatSpritePalettes[] = { +static const struct SpritePalette sEasyChatSpritePalettes[] = { {gUnknown_843F3B8, 0}, {gUnknown_843F3D8, 1}, {gUnknown_8E99F24, 2}, @@ -296,14 +296,14 @@ const struct SpritePalette sEasyChatSpritePalettes[] = { {} }; -const struct CompressedSpriteSheet gUnknown_843F938[] = { +static const struct CompressedSpriteSheet sEasyChatCompressedSpriteSheets[] = { {gUnknown_843F638, 0x0800, 5}, - {gUnknown_8E9BD28, 0x1000, 1}, - {gUnknown_8E99F44, 0x0800, 6}, - {gUnknown_8E9A168, 0x1000, 4} + {gEasyChatRedRectangularCursor_Tiles, 0x1000, 1}, + {gEasyChatSelectGroupHelp_Tiles, 0x0800, 6}, + {gEasyChatModeIcons_Tiles, 0x1000, 4} }; -const u8 gUnknown_843F958[] = { +static const u8 sECDisplay_AlphaModeXCoords[] = { 0, 12, 24, @@ -313,7 +313,7 @@ const u8 gUnknown_843F958[] = { 92 }; -const struct OamData gUnknown_843F960 = { +static const struct OamData sOamData_RightTriangleCursor = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -328,17 +328,17 @@ const struct OamData gUnknown_843F960 = { .paletteNum = 0 }; -const struct SpriteTemplate gUnknown_843F968 = { +static const struct SpriteTemplate sSpriteTemplate_RightTriangleCursor = { .tileTag = 0, .paletteTag = 0, - .oam = &gUnknown_843F960, + .oam = &sOamData_RightTriangleCursor, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8101B20 + .callback = SpriteCB_BounceCursor }; -const struct OamData gUnknown_843F980 = { +static const struct OamData sOamData_RedRectangularCursor = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -353,44 +353,44 @@ const struct OamData gUnknown_843F980 = { .paletteNum = 0 }; -const union AnimCmd gUnknown_843F988[] = { +static const union AnimCmd sAnimCmd_RectCursor_Wide[] = { ANIMCMD_FRAME(0x00, 0), ANIMCMD_END }; -const union AnimCmd gUnknown_843F990[] = { +static const union AnimCmd sAnimCmd_RectCursor_Norm[] = { ANIMCMD_FRAME(0x20, 0), ANIMCMD_END }; -const union AnimCmd gUnknown_843F998[] = { +static const union AnimCmd sAnimCmd_RectCursor_NormTaller[] = { ANIMCMD_FRAME(0x40, 0), ANIMCMD_END }; -const union AnimCmd gUnknown_843F9A0[] = { +static const union AnimCmd sAnimCmd_RectCursor_Narrow[] = { ANIMCMD_FRAME(0x60, 0), ANIMCMD_END }; -const union AnimCmd *const gUnknown_843F9A8[] = { - gUnknown_843F988, - gUnknown_843F990, - gUnknown_843F998, - gUnknown_843F9A0 +static const union AnimCmd *const sAnimTable_RedRectangularCursor[] = { + sAnimCmd_RectCursor_Wide, + sAnimCmd_RectCursor_Norm, + sAnimCmd_RectCursor_NormTaller, + sAnimCmd_RectCursor_Narrow }; -const struct SpriteTemplate gUnknown_843F9B8 = { +static const struct SpriteTemplate sSpriteTemplate_RedRectangularCursor = { .tileTag = 1, .paletteTag = 1, - .oam = &gUnknown_843F980, - .anims = gUnknown_843F9A8, + .oam = &sOamData_RedRectangularCursor, + .anims = sAnimTable_RedRectangularCursor, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8101B20 + .callback = SpriteCB_BounceCursor }; -const struct OamData gUnknown_843F9D0 = { +static const struct OamData sOamData_EasyChatModeIcons = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -405,53 +405,53 @@ const struct OamData gUnknown_843F9D0 = { .paletteNum = 0 }; -const union AnimCmd gUnknown_843F9D8[] = { +static const union AnimCmd sAnim_EasyChatModeIcon_Hidden[] = { ANIMCMD_FRAME(0x60, 0), ANIMCMD_END }; -const union AnimCmd gUnknown_843F9E0[] = { +static const union AnimCmd sAnim_EasyChatModeIcon_ToGroupMode[] = { ANIMCMD_FRAME(0x40, 4), ANIMCMD_FRAME(0x20, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_843F9EC[] = { +static const union AnimCmd sAnim_EasyChatModeIcon_ToAlphaMode[] = { ANIMCMD_FRAME(0x40, 4), ANIMCMD_FRAME(0x00, 4), ANIMCMD_END }; -const union AnimCmd gUnknown_843F9F8[] = { +static const union AnimCmd sAnim_EasyChatModeIcon_ToHidden[] = { ANIMCMD_FRAME(0x40, 4), ANIMCMD_FRAME(0x60, 0), ANIMCMD_END }; -const union AnimCmd gUnknown_843FA04[] = { +static const union AnimCmd sAnim_EasyChatModeIcon_HoldSmall[] = { ANIMCMD_FRAME(0x40, 4), ANIMCMD_END }; -const union AnimCmd *const gUnknown_843FA0C[] = { - gUnknown_843F9D8, - gUnknown_843F9E0, - gUnknown_843F9EC, - gUnknown_843F9F8, - gUnknown_843FA04 +static const union AnimCmd *const sAnimTable_EasyChatModeIcons[] = { + sAnim_EasyChatModeIcon_Hidden, + sAnim_EasyChatModeIcon_ToGroupMode, + sAnim_EasyChatModeIcon_ToAlphaMode, + sAnim_EasyChatModeIcon_ToHidden, + sAnim_EasyChatModeIcon_HoldSmall }; -const struct SpriteTemplate gUnknown_843FA20 = { +static const struct SpriteTemplate sSpriteTemplate_EasyChatModeIcons = { .tileTag = 4, .paletteTag = 2, - .oam = &gUnknown_843F9D0, - .anims = gUnknown_843FA0C, + .oam = &sOamData_EasyChatModeIcons, + .anims = sAnimTable_EasyChatModeIcons, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -const struct OamData gUnknown_843FA38 = { +static const struct OamData sOamData_SelectGroupHelp = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -466,17 +466,17 @@ const struct OamData gUnknown_843FA38 = { .paletteNum = 0 }; -const struct SpriteTemplate gUnknown_843FA40 = { +static const struct SpriteTemplate sSpriteTemplate_SelectGroupHelp = { .tileTag = 6, .paletteTag = 2, - .oam = &gUnknown_843FA38, + .oam = &sOamData_SelectGroupHelp, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -const struct OamData gUnknown_843FA58 = { +static const struct OamData gUnknown_843FA58 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -491,7 +491,7 @@ const struct OamData gUnknown_843FA58 = { .paletteNum = 0 }; -const struct OamData gUnknown_843FA60 = { +static const struct OamData sOamData_UpTriangleCursor = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, @@ -506,22 +506,22 @@ const struct OamData gUnknown_843FA60 = { .paletteNum = 0 }; -const union AnimCmd gUnknown_843FA68[] = { +static const union AnimCmd gUnknown_843FA68[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END, }; -const union AnimCmd gUnknown_843FA70[] = { +static const union AnimCmd gUnknown_843FA70[] = { ANIMCMD_FRAME(4, 0), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_843FA78[] = { +static const union AnimCmd *const gUnknown_843FA78[] = { gUnknown_843FA68, gUnknown_843FA70, }; -const struct SpriteTemplate gUnknown_843FA80 = { +static const struct SpriteTemplate sSpriteTemplate_StartSelectButtons = { .tileTag = 3, .paletteTag = 2, .oam = &gUnknown_843FA58, @@ -531,60 +531,60 @@ const struct SpriteTemplate gUnknown_843FA80 = { .callback = SpriteCallbackDummy, }; -const struct SpriteTemplate gUnknown_843FA98 = { +static const struct SpriteTemplate sSpriteTemplate_UpTriangleCursor = { .tileTag = 2, .paletteTag = 2, - .oam = &gUnknown_843FA60, + .oam = &sOamData_UpTriangleCursor, .anims = gUnknown_843FA78, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -bool8 sub_80FFF80(void) +bool8 InitEasyChatGraphicsWork(void) { - if (!sub_8100BF4()) + if (!InitEasyChatGraphicsWork_Internal()) return FALSE; else return TRUE; } -bool8 sub_80FFF98(void) +bool8 LoadEasyChatGraphics(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sEasyChatBgTemplates, NELEMS(sEasyChatBgTemplates)); - SetBgTilemapBuffer(3, gUnknown_203ACEC->unkB00); - SetBgTilemapBuffer(1, gUnknown_203ACEC->unk300); + SetBgTilemapBuffer(3, sEasyChatGraphicsResources->bg3TilemapBuffer); + SetBgTilemapBuffer(1, sEasyChatGraphicsResources->bg1TilemapBuffer); InitWindows(sEasyChatWindowTemplates); DeactivateAllTextPrinters(); - sub_8100CBC(); - sub_8100C5C(); + LoadEasyChatPals(); + SetGpuRegsForEasyChatInit(); CpuFastFill(0, (void *)VRAM + 0x1000000, 0x400); break; case 1: DecompressAndLoadBgGfxUsingHeap(3, gEasyChatWindow_Gfx, 0, 0, 0); CopyToBgTilemapBuffer(3, gEasyChatWindow_Tilemap, 0, 0); - sub_8100F44(); - sub_8102428(); + CreatePhraseFrameWindow(); + CreateFooterWindow(); CopyBgTilemapBufferToVram(3); break; case 2: - sub_8101100(gUnknown_203ACEC->unk300); + DrawECFrameInTilemapBuffer(sEasyChatGraphicsResources->bg1TilemapBuffer); DecompressAndLoadBgGfxUsingHeap(1, gUnknown_843F7AC, 0, 0, 0); CopyBgTilemapBufferToVram(1); break; case 3: - sub_8100D24(); - sub_8100E34(); - sub_8100FDC(); - sub_81012CC(); + PrintTitleText(); + PrintECInstructionsText(); + PrintECFields(); + PutWin2TilemapAndCopyToVram(); break; case 4: - sub_8101A90(); - sub_8101AC4(); + LoadSpriteGfx(); + CreateSelectDestFieldCursorSprite(); break; case 5: if (IsDma3ManagerBusyWithBgCopy()) @@ -593,76 +593,76 @@ bool8 sub_80FFF98(void) } else { - sub_8101A5C(0, 0, 0, 0); + SetRegWin0Coords(0, 0, 0, 0); SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0, 63)); SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 59)); ShowBg(3); ShowBg(1); ShowBg(2); ShowBg(0); - sub_81021D4(); - sub_8102320(); + CreateVerticalScrollArrowSprites(); + CreateStartSelectButtonsSprites(); } break; default: return FALSE; } - gUnknown_203ACEC->unk0++; + sEasyChatGraphicsResources->state++; return TRUE; } -void sub_810011C(void) +void DestroyEasyChatGraphicsResources(void) { - if (gUnknown_203ACEC) - Free(gUnknown_203ACEC); + if (sEasyChatGraphicsResources) + Free(sEasyChatGraphicsResources); } -void sub_8100134(u16 arg0) +void EasyChatInterfaceCommand_Setup(u16 id) { - gUnknown_203ACEC->unk4 = arg0; - gUnknown_203ACEC->unk0 = 0; - sub_810014C(); + sEasyChatGraphicsResources->id = id; + sEasyChatGraphicsResources->state = 0; + EasyChatInterfaceCommand_Run(); } -bool8 sub_810014C(void) +bool8 EasyChatInterfaceCommand_Run(void) { - switch (gUnknown_203ACEC->unk4) + switch (sEasyChatGraphicsResources->id) { case 0: return FALSE; - case 1: return sub_8100258(); - case 2: return sub_8100290(); - case 3: return sub_8100374(); - case 4: return sub_8100430(); - case 5: return sub_81003A8(); - case 6: return sub_81003EC(); - case 7: return sub_8100474(); - case 8: return sub_81004B8(); - case 9: return sub_81004F4(); - case 10: return sub_81005C0(); - case 11: return sub_81007D0(); - case 12: return sub_8100890(); - case 13: return sub_810093C(); - case 14: return sub_8100720(); - case 15: return sub_810072C(); - case 16: return sub_8100774(); - case 17: return sub_81009F8(); - case 18: return sub_8100A78(); - case 19: return sub_8100A04(); - case 20: return sub_8100B70(); - case 21: return sub_8100AE8(); - case 22: return sub_8100660(); + case 1: return ECInterfaceCmd_01(); + case 2: return ECInterfaceCmd_02(); + case 3: return ECInterfaceCmd_03(); + case 4: return ECInterfaceCmd_04(); + case 5: return ECInterfaceCmd_05(); + case 6: return ECInterfaceCmd_06(); + case 7: return ECInterfaceCmd_07(); + case 8: return ECInterfaceCmd_08(); + case 9: return ECInterfaceCmd_09(); + case 10: return ECInterfaceCmd_10(); + case 11: return ECInterfaceCmd_11(); + case 12: return ECInterfaceCmd_12(); + case 13: return ECInterfaceCmd_13(); + case 14: return ECInterfaceCmd_14(); + case 15: return ECInterfaceCmd_15(); + case 16: return ECInterfaceCmd_16(); + case 17: return ECInterfaceCmd_17(); + case 18: return ECInterfaceCmd_18(); + case 19: return ECInterfaceCmd_19(); + case 20: return ECInterfaceCmd_20(); + case 21: return ECInterfaceCmd_21(); + case 22: return ECInterfaceCmd_22(); default: return FALSE; } } -bool8 sub_8100258(void) +static bool8 ECInterfaceCmd_01(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8100FDC(); - gUnknown_203ACEC->unk0++; + PrintECFields(); + sEasyChatGraphicsResources->state++; break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -671,7 +671,7 @@ bool8 sub_8100258(void) return TRUE; } -bool8 sub_8100290(void) +static bool8 ECInterfaceCmd_02(void) { u8 i; u16 *ecWordBuffer; @@ -709,11 +709,11 @@ bool8 sub_8100290(void) } var2 = 8 * (sPhraseFrameDimensions[frameId].top + cursorRow * 2 + 1) + 1; - sub_8101B58(var1, var2); + SetSelectDestFieldCursorSpritePosAndResetAnim(var1, var2); return FALSE; } -bool8 sub_8100374(void) +static bool8 ECInterfaceCmd_03(void) { u8 xOffset; switch (GetMainCursorColumn()) @@ -730,19 +730,19 @@ bool8 sub_8100374(void) default: return FALSE; } - sub_8101B58(xOffset, 97); + SetSelectDestFieldCursorSpritePosAndResetAnim(xOffset, 97); return FALSE; } -bool8 sub_81003A8(void) +static bool8 ECInterfaceCmd_05(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101B88(); - sub_8100E7C(2); - sub_8100F18(1); - gUnknown_203ACEC->unk0++; + FreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(2); + EC_CreateYesNoMenuWithInitialCursorPos(1); + sEasyChatGraphicsResources->state++; break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -751,15 +751,15 @@ bool8 sub_81003A8(void) return TRUE; } -bool8 sub_81003EC(void) +static bool8 ECInterfaceCmd_06(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101B88(); - sub_8100E7C(3); - sub_8100F18(0); - gUnknown_203ACEC->unk0++; + FreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(3); + EC_CreateYesNoMenuWithInitialCursorPos(0); + sEasyChatGraphicsResources->state++; break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -768,15 +768,15 @@ bool8 sub_81003EC(void) return TRUE; } -bool8 sub_8100430(void) +static bool8 ECInterfaceCmd_04(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101B88(); - sub_8100E7C(1); - sub_8100F18(1); - gUnknown_203ACEC->unk0++; + FreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(1); + EC_CreateYesNoMenuWithInitialCursorPos(1); + sEasyChatGraphicsResources->state++; break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -785,15 +785,15 @@ bool8 sub_8100430(void) return TRUE; } -bool8 sub_8100474(void) +static bool8 ECInterfaceCmd_07(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101BA8(); - sub_8100E7C(0); + UnfreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(0); ShowBg(0); - gUnknown_203ACEC->unk0++; + sEasyChatGraphicsResources->state++; break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -802,15 +802,15 @@ bool8 sub_8100474(void) return TRUE; } -bool8 sub_81004B8(void) +static bool8 ECInterfaceCmd_08(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101BA8(); - sub_8100E7C(0); - sub_8100FDC(); - gUnknown_203ACEC->unk0++; + UnfreezeSelectDestFieldCursorSprite(); + PrintECInterfaceTextById(0); + PrintECFields(); + sEasyChatGraphicsResources->state++; // Fall through case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -819,42 +819,42 @@ bool8 sub_81004B8(void) return TRUE; } -bool8 sub_81004F4(void) +static bool8 ECInterfaceCmd_09(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101B88(); + FreezeSelectDestFieldCursorSprite(); HideBg(0); - sub_8101A5C(0, 0, 0, 0); - sub_810131C(); - gUnknown_203ACEC->unk0++; + SetRegWin0Coords(0, 0, 0, 0); + PrintECGroupOrAlphaMenu(); + sEasyChatGraphicsResources->state++; break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_81015D4(0); - gUnknown_203ACEC->unk0++; + StartWin2FrameAnim(0); + sEasyChatGraphicsResources->state++; } break; case 2: - if (!IsDma3ManagerBusyWithBgCopy() && !sub_81016AC()) - gUnknown_203ACEC->unk0++; + if (!IsDma3ManagerBusyWithBgCopy() && !AnimateFrameResize()) + sEasyChatGraphicsResources->state++; break; case 3: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_8101FAC(); - gUnknown_203ACEC->unk0++; + CreateSelectGroupHelpSprite(); + sEasyChatGraphicsResources->state++; } break; case 4: - if (!sub_8102018()) + if (!AnimateSeletGroupModeAndHelpSpriteEnter()) { - sub_8101BC0(); - sub_81022E0(0); - sub_810224C(); - gUnknown_203ACEC->unk0++; + CreateRedRectangularCursorSpritePair(); + UpdateVerticalScrollArrowSpriteXPos(0); + UpdateVerticalScrollArrowVisibility(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -865,33 +865,33 @@ bool8 sub_81004F4(void) return TRUE; } -bool8 sub_81005C0(void) +static bool8 ECInterfaceCmd_10(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101C48(); - sub_81020AC(); - sub_81022B0(); - gUnknown_203ACEC->unk0++; + DestroyRedRectangularCursor(); + StartModeIconHidingAnimation(); + HideVerticalScrollArrowSprites(); + sEasyChatGraphicsResources->state++; break; case 1: - if (sub_81020D0() == TRUE) + if (RunModeIconHidingAnimation() == TRUE) break; - sub_81015D4(1); - gUnknown_203ACEC->unk0++; + StartWin2FrameAnim(1); + sEasyChatGraphicsResources->state++; // Fall through case 2: - if (!sub_81016AC()) - gUnknown_203ACEC->unk0++; + if (!AnimateFrameResize()) + sEasyChatGraphicsResources->state++; break; case 3: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_8101BA8(); + UnfreezeSelectDestFieldCursorSprite(); ShowBg(0); - gUnknown_203ACEC->unk0++; + sEasyChatGraphicsResources->state++; } break; case 4: @@ -901,38 +901,38 @@ bool8 sub_81005C0(void) return TRUE; } -bool8 sub_8100660(void) +static bool8 ECInterfaceCmd_22(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101C48(); - sub_81022B0(); - sub_810215C(); - sub_81015D4(5); - gUnknown_203ACEC->unk0++; + DestroyRedRectangularCursor(); + HideVerticalScrollArrowSprites(); + ShrinkModeIconsSprite(); + StartWin2FrameAnim(5); + sEasyChatGraphicsResources->state++; break; case 1: - if (!sub_81016AC() && !sub_81021B8()) + if (!AnimateFrameResize() && !ModeIconsSpriteAnimIsEnded()) { - sub_810131C(); - gUnknown_203ACEC->unk0++; + PrintECGroupOrAlphaMenu(); + sEasyChatGraphicsResources->state++; } break; case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_81015D4(6); - sub_8102178(); - gUnknown_203ACEC->unk0++; + StartWin2FrameAnim(6); + ShowModeIconsSprite(); + sEasyChatGraphicsResources->state++; } break; case 3: - if (!sub_81016AC() && !sub_81021B8()) + if (!AnimateFrameResize() && !ModeIconsSpriteAnimIsEnded()) { - sub_810224C(); - sub_8101BC0(); - gUnknown_203ACEC->unk0++; + UpdateVerticalScrollArrowVisibility(); + CreateRedRectangularCursorSpritePair(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -943,25 +943,25 @@ bool8 sub_8100660(void) return TRUE; } -bool8 sub_8100720(void) +static bool8 ECInterfaceCmd_14(void) { - sub_8101C80(); + EC_MoveCursor(); return FALSE; } -bool8 sub_810072C(void) +static bool8 ECInterfaceCmd_15(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_81019B0(1, 2); - gUnknown_203ACEC->unk0++; + ScheduleBg2VerticalScroll(1, 2); + sEasyChatGraphicsResources->state++; // Fall through case 1: - if (!sub_8101A10()) + if (!AnimateBg2VerticalScroll()) { - sub_8101C80(); - sub_810224C(); + EC_MoveCursor(); + UpdateVerticalScrollArrowVisibility(); return FALSE; } break; @@ -970,19 +970,19 @@ bool8 sub_810072C(void) return TRUE; } -bool8 sub_8100774(void) +static bool8 ECInterfaceCmd_16(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_81019B0(-1, 2); - gUnknown_203ACEC->unk0++; + ScheduleBg2VerticalScroll(-1, 2); + sEasyChatGraphicsResources->state++; // Fall through case 1: - if (!sub_8101A10()) + if (!AnimateBg2VerticalScroll()) { - sub_810224C(); - gUnknown_203ACEC->unk0++; + UpdateVerticalScrollArrowVisibility(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -993,45 +993,45 @@ bool8 sub_8100774(void) return TRUE; } -bool8 sub_81007D0(void) +static bool8 ECInterfaceCmd_11(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101C48(); - sub_81020AC(); - sub_81022B0(); - gUnknown_203ACEC->unk0++; + DestroyRedRectangularCursor(); + StartModeIconHidingAnimation(); + HideVerticalScrollArrowSprites(); + sEasyChatGraphicsResources->state++; break; case 1: - if (!sub_81020D0()) + if (!RunModeIconHidingAnimation()) { - sub_81015BC(); - gUnknown_203ACEC->unk0++; + ClearWin2AndCopyToVram(); + sEasyChatGraphicsResources->state++; } break; case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_81015D4(2); - gUnknown_203ACEC->unk0++; + StartWin2FrameAnim(2); + sEasyChatGraphicsResources->state++; } break; case 3: - if (!sub_81016AC()) + if (!AnimateFrameResize()) { - sub_81012E0(2); - gUnknown_203ACEC->unk0++; + PrintECMenuById(2); + sEasyChatGraphicsResources->state++; } break; case 4: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_8101E80(); - sub_81022E0(1); - sub_810224C(); - sub_8102394(); - gUnknown_203ACEC->unk0++; + CreateSelectWordCursorSprite(); + UpdateVerticalScrollArrowSpriteXPos(1); + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -1042,40 +1042,40 @@ bool8 sub_81007D0(void) return TRUE; } -bool8 sub_8100890(void) +static bool8 ECInterfaceCmd_12(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8100FDC(); - gUnknown_203ACEC->unk0++; + PrintECFields(); + sEasyChatGraphicsResources->state++; break; case 1: - sub_8101F80(); - sub_81022B0(); - sub_81023F8(); - sub_81015BC(); - gUnknown_203ACEC->unk0++; + DestroySelectWordCursorSprite(); + HideVerticalScrollArrowSprites(); + HideStartSelectButtonSprites(); + ClearWin2AndCopyToVram(); + sEasyChatGraphicsResources->state++; break; case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_81015D4(3); - gUnknown_203ACEC->unk0++; + StartWin2FrameAnim(3); + sEasyChatGraphicsResources->state++; } break; case 3: - if (!sub_81016AC()) + if (!AnimateFrameResize()) { ShowBg(0); - gUnknown_203ACEC->unk0++; + sEasyChatGraphicsResources->state++; } break; case 4: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_8101BA8(); - gUnknown_203ACEC->unk0++; + UnfreezeSelectDestFieldCursorSprite(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -1086,45 +1086,45 @@ bool8 sub_8100890(void) return TRUE; } -bool8 sub_810093C(void) +static bool8 ECInterfaceCmd_13(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101F80(); - sub_81022B0(); - sub_81023F8(); - sub_81015BC(); - gUnknown_203ACEC->unk0++; + DestroySelectWordCursorSprite(); + HideVerticalScrollArrowSprites(); + HideStartSelectButtonSprites(); + ClearWin2AndCopyToVram(); + sEasyChatGraphicsResources->state++; break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_81015D4(4); - gUnknown_203ACEC->unk0++; + StartWin2FrameAnim(4); + sEasyChatGraphicsResources->state++; } break; case 2: - if (!sub_81016AC()) + if (!AnimateFrameResize()) { - sub_810131C(); - gUnknown_203ACEC->unk0++; + PrintECGroupOrAlphaMenu(); + sEasyChatGraphicsResources->state++; } break; case 3: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_8101FAC(); - gUnknown_203ACEC->unk0++; + CreateSelectGroupHelpSprite(); + sEasyChatGraphicsResources->state++; } break; case 4: - if (!sub_8102018()) + if (!AnimateSeletGroupModeAndHelpSpriteEnter()) { - sub_8101BC0(); - sub_81022E0(0); - sub_810224C(); - gUnknown_203ACEC->unk0++; + CreateRedRectangularCursorSpritePair(); + UpdateVerticalScrollArrowSpriteXPos(0); + UpdateVerticalScrollArrowVisibility(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -1133,34 +1133,34 @@ bool8 sub_810093C(void) return TRUE; } -bool8 sub_81009F8(void) +static bool8 ECInterfaceCmd_17(void) { - sub_8101F04(); + SetSelectWordCursorSpritePos(); return FALSE; } -bool8 sub_8100A04(void) +static bool8 ECInterfaceCmd_19(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_81013EC(); - gUnknown_203ACEC->unk0++; + UpdateWin2PrintWordsScrollDown(); + sEasyChatGraphicsResources->state++; break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_81019B0(1, 2); - gUnknown_203ACEC->unk0++; + ScheduleBg2VerticalScroll(1, 2); + sEasyChatGraphicsResources->state++; } break; case 2: - if (!sub_8101A10()) + if (!AnimateBg2VerticalScroll()) { - sub_8101F04(); - sub_810224C(); - sub_8102394(); - gUnknown_203ACEC->unk0++; + SetSelectWordCursorSpritePos(); + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -1171,27 +1171,27 @@ bool8 sub_8100A04(void) return TRUE; } -bool8 sub_8100A78(void) +static bool8 ECInterfaceCmd_18(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101410(); - gUnknown_203ACEC->unk0++; + UpdateWin2PrintWordsScrollUp(); + sEasyChatGraphicsResources->state++; break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_81019B0(-1, 2); - gUnknown_203ACEC->unk0++; + ScheduleBg2VerticalScroll(-1, 2); + sEasyChatGraphicsResources->state++; } break; case 2: - if (!sub_8101A10()) + if (!AnimateBg2VerticalScroll()) { - sub_810224C(); - sub_8102394(); - gUnknown_203ACEC->unk0++; + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -1202,29 +1202,29 @@ bool8 sub_8100A78(void) return TRUE; } -bool8 sub_8100AE8(void) +static bool8 ECInterfaceCmd_21(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101434(); - gUnknown_203ACEC->unk0++; + UpdateWin2PrintWordsScrollPageDown(); + sEasyChatGraphicsResources->state++; break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - s16 var0 = sub_80FFE48() - sub_8101A48(); - sub_81019B0(var0, 4); - gUnknown_203ACEC->unk0++; + s16 direction = GetECSelectWordRowsAbove() - GetBg2ScrollRow(); + ScheduleBg2VerticalScroll(direction, 4); + sEasyChatGraphicsResources->state++; } break; case 2: - if (!sub_8101A10()) + if (!AnimateBg2VerticalScroll()) { - sub_8101F04(); - sub_810224C(); - sub_8102394(); - gUnknown_203ACEC->unk0++; + SetSelectWordCursorSpritePos(); + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -1235,28 +1235,28 @@ bool8 sub_8100AE8(void) return TRUE; } -bool8 sub_8100B70(void) +static bool8 ECInterfaceCmd_20(void) { - switch (gUnknown_203ACEC->unk0) + switch (sEasyChatGraphicsResources->state) { case 0: - sub_8101478(); - gUnknown_203ACEC->unk0++; + UpdateWin2PrintWordsScrollPageUp(); + sEasyChatGraphicsResources->state++; break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - s16 var0 = sub_80FFE48() - sub_8101A48(); - sub_81019B0(var0, 4); - gUnknown_203ACEC->unk0++; + s16 direction = GetECSelectWordRowsAbove() - GetBg2ScrollRow(); + ScheduleBg2VerticalScroll(direction, 4); + sEasyChatGraphicsResources->state++; } break; case 2: - if (!sub_8101A10()) + if (!AnimateBg2VerticalScroll()) { - sub_810224C(); - sub_8102394(); - gUnknown_203ACEC->unk0++; + UpdateVerticalScrollArrowVisibility(); + UpdateStartSelectButtonSpriteVisibility(); + sEasyChatGraphicsResources->state++; return FALSE; } break; @@ -1267,27 +1267,27 @@ bool8 sub_8100B70(void) return TRUE; } -bool8 sub_8100BF4(void) +static bool8 InitEasyChatGraphicsWork_Internal(void) { - gUnknown_203ACEC = Alloc(sizeof(*gUnknown_203ACEC)); - if (!gUnknown_203ACEC) + sEasyChatGraphicsResources = Alloc(sizeof(*sEasyChatGraphicsResources)); + if (!sEasyChatGraphicsResources) return FALSE; - gUnknown_203ACEC->unk0 = 0; - gUnknown_203ACEC->unk2D8 = NULL; - gUnknown_203ACEC->unk2DC = NULL; - gUnknown_203ACEC->unk2E0 = NULL; - gUnknown_203ACEC->unk2E4 = NULL; - gUnknown_203ACEC->unk2E8 = NULL; - gUnknown_203ACEC->unk2EC = NULL; - gUnknown_203ACEC->unk2F0 = NULL; - gUnknown_203ACEC->unk2F4 = NULL; - gUnknown_203ACEC->unk2F8 = NULL; - gUnknown_203ACEC->unk2FC = NULL; + sEasyChatGraphicsResources->state = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite = NULL; + sEasyChatGraphicsResources->rectCursorSpriteRight = NULL; + sEasyChatGraphicsResources->rectCursorSpriteLeft = NULL; + sEasyChatGraphicsResources->selectWordCursorSprite = NULL; + sEasyChatGraphicsResources->selectGroupHelpSprite = NULL; + sEasyChatGraphicsResources->modeIconsSprite = NULL; + sEasyChatGraphicsResources->upTriangleCursorSprite = NULL; + sEasyChatGraphicsResources->downTriangleCursorSprite = NULL; + sEasyChatGraphicsResources->startPgUpButtonSprite = NULL; + sEasyChatGraphicsResources->selectPgDnButtonSprite = NULL; return TRUE; } -void sub_8100C5C(void) +static void SetGpuRegsForEasyChatInit(void) { ChangeBgX(3, 0, 0); ChangeBgY(3, 0, 0); @@ -1300,7 +1300,7 @@ void sub_8100C5C(void) SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON); } -void sub_8100CBC(void) +static void LoadEasyChatPals(void) { ResetPaletteFade(); LoadPalette(gEasyChatMode_Pal, 0, 32); @@ -1312,7 +1312,7 @@ void sub_8100CBC(void) LoadPalette(gUnknown_843F87C, 3 * 16, 10); } -void sub_8100D24(void) +static void PrintTitleText(void) { int xOffset; const u8 *titleText = GetTitleText(); @@ -1321,18 +1321,18 @@ void sub_8100D24(void) xOffset = (128 - GetStringWidth(1, titleText, 0)) / 2u; FillWindowPixelBuffer(0, PIXEL_FILL(0)); - sub_8100DC4(0, 1, titleText, xOffset, 0, TEXT_SPEED_FF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); + EC_AddTextPrinterParameterized2(0, 1, titleText, xOffset, 0, TEXT_SPEED_FF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY); PutWindowTilemap(0); CopyWindowToVram(0, 3); } -void sub_8100D84(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) +static void EC_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) { if (fontId == 1) y += 2; AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback); } -void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 bg, u8 fg, u8 shadow) +static void EC_AddTextPrinterParameterized2(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 bg, u8 fg, u8 shadow) { u8 color[3]; if (fontId == 1) y += 2; @@ -1342,27 +1342,27 @@ void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 AddTextPrinterParameterized3(windowId, fontId, x, y, color, speed, str); } -void sub_8100E34(void) +static void PrintECInstructionsText(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); TextWindow_SetUserSelectedFrame(1, 1, 0xE0); DrawTextBorderOuter(1, 1, 14); - sub_8100E7C(0); + PrintECInterfaceTextById(0); PutWindowTilemap(1); CopyBgTilemapBufferToVram(0); } -void sub_8100E7C(u8 arg0) +static void PrintECInterfaceTextById(u8 direction) { const u8 *text2 = NULL; const u8 *text1 = NULL; - switch (arg0) + switch (direction) { case 0: GetEasyChatInstructionsText(&text1, &text2); break; case 2: - sub_80FFDC8(&text1, &text2); + GetEasyChatConfirmCancelText(&text1, &text2); break; case 3: GetEasyChatConfirmText(&text1, &text2); @@ -1374,20 +1374,20 @@ void sub_8100E7C(u8 arg0) FillWindowPixelBuffer(1, PIXEL_FILL(1)); if (text1) - sub_8100D84(1, 1, text1, 0, 0, TEXT_SPEED_FF, NULL); + EC_AddTextPrinterParameterized(1, 1, text1, 0, 0, TEXT_SPEED_FF, NULL); if (text2) - sub_8100D84(1, 1, text2, 0, 16, TEXT_SPEED_FF, NULL); + EC_AddTextPrinterParameterized(1, 1, text2, 0, 16, TEXT_SPEED_FF, NULL); CopyWindowToVram(1, 3); } -void sub_8100F18(u8 initialCursorPos) +static void EC_CreateYesNoMenuWithInitialCursorPos(u8 initialCursorPos) { CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, 1, 0, 2, 0x001, 14, initialCursorPos); } -void sub_8100F44(void) +static void CreatePhraseFrameWindow(void) { u8 frameId; struct WindowTemplate template; @@ -1400,11 +1400,11 @@ void sub_8100F44(void) template.height = sPhraseFrameDimensions[frameId].height; template.paletteNum = 11; template.baseBlock = 0x060; - gUnknown_203ACEC->windowId = AddWindow(&template); - PutWindowTilemap(gUnknown_203ACEC->windowId); + sEasyChatGraphicsResources->windowId = AddWindow(&template); + PutWindowTilemap(sEasyChatGraphicsResources->windowId); } -void sub_8100FDC(void) +static void PrintECFields(void) { u16 *ecWord; u8 numColumns, numRows; @@ -1416,10 +1416,10 @@ void sub_8100FDC(void) numColumns = GetNumColumns(); numRows = GetNumRows(); frameId = GetEasyChatScreenFrameId(); - FillWindowPixelBuffer(gUnknown_203ACEC->windowId, PIXEL_FILL(1)); + FillWindowPixelBuffer(sEasyChatGraphicsResources->windowId, PIXEL_FILL(1)); for (i = 0; i < numRows; i++) { - str = gUnknown_203ACEC->unkA; + str = sEasyChatGraphicsResources->ecPrintBuffer; str[0] = EOS; str = StringAppend(str, sText_Clear17); for (j = 0; j < numColumns; j++) @@ -1451,13 +1451,13 @@ void sub_8100FDC(void) } *str = EOS; - sub_8100D84(gUnknown_203ACEC->windowId, 1, gUnknown_203ACEC->unkA, 0, i * 16, TEXT_SPEED_FF, NULL); + EC_AddTextPrinterParameterized(sEasyChatGraphicsResources->windowId, 1, sEasyChatGraphicsResources->ecPrintBuffer, 0, i * 16, TEXT_SPEED_FF, NULL); } - CopyWindowToVram(gUnknown_203ACEC->windowId, 3); + CopyWindowToVram(sEasyChatGraphicsResources->windowId, 3); } -void sub_8101100(u16 *tilemap) +static void DrawECFrameInTilemapBuffer(u16 *tilemap) { u8 frameId; int right, bottom; @@ -1514,41 +1514,41 @@ void sub_8101100(u16 *tilemap) } } -void sub_81012CC(void) +static void PutWin2TilemapAndCopyToVram(void) { PutWindowTilemap(2); CopyBgTilemapBufferToVram(2); } -void sub_81012E0(u32 arg0) +static void PrintECMenuById(u32 id) { - sub_810198C(); + InitBg2Scroll(); FillWindowPixelBuffer(2, PIXEL_FILL(1)); - switch (arg0) + switch (id) { case 0: - sub_810133C(); + PrintECGroupsMenu(); break; case 1: PrintEasyChatKeyboardText(); break; case 2: - sub_81013DC(); + PrintECWordsMenu(); break; } CopyWindowToVram(2, 2); } -void sub_810131C(void) +static void PrintECGroupOrAlphaMenu(void) { - if (!sub_80FFE1C()) - sub_81012E0(0); + if (!IsEasyChatAlphaMode()) + PrintECMenuById(0); else - sub_81012E0(1); + PrintECMenuById(1); } -void sub_810133C(void) +static void PrintECGroupsMenu(void) { int i; int x, y; @@ -1562,97 +1562,97 @@ void sub_810133C(void) u8 groupId = GetSelectedGroupByIndex(i++); if (groupId == EC_NUM_GROUPS) { - sub_81019B0(sub_80FFE28(), 0); + ScheduleBg2VerticalScroll(GetECSelectGroupRowsAbove(), 0); return; } - sub_8100D84(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SPEED_FF, NULL); + EC_AddTextPrinterParameterized(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SPEED_FF, NULL); } y += 16; } } -void PrintEasyChatKeyboardText(void) +static void PrintEasyChatKeyboardText(void) { u32 i; for (i = 0; i < NELEMS(sEasyChatKeyboardText); i++) - sub_8100D84(2, 1, sEasyChatKeyboardText[i], 10, 96 + i * 16, TEXT_SPEED_FF, NULL); + EC_AddTextPrinterParameterized(2, 1, sEasyChatKeyboardText[i], 10, 96 + i * 16, TEXT_SPEED_FF, NULL); } -void sub_81013DC(void) +static void PrintECWordsMenu(void) { - sub_81014AC(0, 4); + PrintECRowsWin2(0, 4); } -void sub_81013EC(void) +static void UpdateWin2PrintWordsScrollDown(void) { - u8 var0 = sub_80FFE48() + 3; - sub_8101558(var0, 1); - sub_81014AC(var0, 1); + u8 rowsAbove = GetECSelectWordRowsAbove() + 3; + ClearECRowsWin2(rowsAbove, 1); + PrintECRowsWin2(rowsAbove, 1); } -void sub_8101410(void) +static void UpdateWin2PrintWordsScrollUp(void) { - u8 var0 = sub_80FFE48(); - sub_8101558(var0, 1); - sub_81014AC(var0, 1); + u8 rowsAbove = GetECSelectWordRowsAbove(); + ClearECRowsWin2(rowsAbove, 1); + PrintECRowsWin2(rowsAbove, 1); } -void sub_8101434(void) +static void UpdateWin2PrintWordsScrollPageDown(void) { - u8 var0 = sub_80FFE48(); - u8 var1 = var0 + 4; - u8 var2 = sub_80FFE54() + 1; - if (var1 > var2) - var1 = var2; + u8 row = GetECSelectWordRowsAbove(); + u8 maxrow = row + 4; + u8 numrowsplus1 = GetECSelectWordNumRows() + 1; + if (maxrow > numrowsplus1) + maxrow = numrowsplus1; - if (var0 < var1) + if (row < maxrow) { - u8 var3 = var1 - var0; - sub_8101558(var0, var3); - sub_81014AC(var0, var3); + u8 remrow = maxrow - row; + ClearECRowsWin2(row, remrow); + PrintECRowsWin2(row, remrow); } } -void sub_8101478(void) +static void UpdateWin2PrintWordsScrollPageUp(void) { - u8 var0 = sub_80FFE48(); - u8 var1 = sub_8101A48(); - if (var0 < var1) + u8 row = GetECSelectWordRowsAbove(); + u8 maxrow = GetBg2ScrollRow(); + if (row < maxrow) { - u8 var2 = var1 - var0; - sub_8101558(var0, var2); - sub_81014AC(var0, var2); + u8 remrow = maxrow - row; + ClearECRowsWin2(row, remrow); + PrintECRowsWin2(row, remrow); } } -void sub_81014AC(u8 arg0, u8 arg1) +static void PrintECRowsWin2(u8 row, u8 remrow) { int i, j; u16 easyChatWord; u8 *str; int y; u8 y_; - int var0; + int ecWordIdx; - var0 = arg0 * 2; - y = (arg0 * 16 + 96) & 0xFF; + ecWordIdx = row * 2; + y = (row * 16 + 96) & 0xFF; - for (i = 0; i < arg1; i++) + for (i = 0; i < remrow; i++) { for (j = 0; j < 2; j++) { // FIXME: Dumb trick needed to match y_ = y << 18 >> 18; - easyChatWord = GetDisplayedWordByIndex(var0++); + easyChatWord = GetDisplayedWordByIndex(ecWordIdx++); if (easyChatWord != 0xFFFF) { - CopyEasyChatWordPadded(gUnknown_203ACEC->unkCC, easyChatWord, 0); + CopyEasyChatWordPadded(sEasyChatGraphicsResources->ecPaddedWordBuffer, easyChatWord, 0); - sub_8100D84(2, 1, gUnknown_203ACEC->unkCC, (j * 13 + 3) * 8, y_, TEXT_SPEED_FF, NULL); + EC_AddTextPrinterParameterized(2, 1, sEasyChatGraphicsResources->ecPaddedWordBuffer, (j * 13 + 3) * 8, y_, TEXT_SPEED_FF, NULL); } } y += 16; @@ -1662,165 +1662,170 @@ void sub_81014AC(u8 arg0, u8 arg1) CopyWindowToVram(2, 2); } -void sub_8101558(u8 arg0, u8 arg1) +static void ClearECRowsWin2(u8 row, u8 remrow) { int y; - int var0; - int var1; - int var2; - - y = (arg0 * 16 + 96) & 0xFF; - var2 = arg1 * 16; - var0 = y + var2; - if (var0 > 255) + int totalHeight; + int heightWrappedAround; + int heightToBottom; + + y = (row * 16 + 96) & 0xFF; + heightToBottom = remrow * 16; + totalHeight = y + heightToBottom; + if (totalHeight > 255) { - var1 = var0 - 256; - var2 = 256 - y; + heightWrappedAround = totalHeight - 256; + heightToBottom = 256 - y; } else { - var1 = 0; + heightWrappedAround = 0; } - FillWindowPixelRect(2, PIXEL_FILL(1), 0, y, 224, var2); - if (var1) - FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, var1); + FillWindowPixelRect(2, PIXEL_FILL(1), 0, y, 224, heightToBottom); + if (heightWrappedAround) + FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, heightWrappedAround); } -void sub_81015BC(void) +static void ClearWin2AndCopyToVram(void) { FillWindowPixelBuffer(2, PIXEL_FILL(1)); CopyWindowToVram(2, 2); } -void sub_81015D4(int arg0) +static void StartWin2FrameAnim(int animNo) { - switch (arg0) + switch (animNo) { case 0: - gUnknown_203ACEC->unk6 = 0; - gUnknown_203ACEC->unk7 = 10; + sEasyChatGraphicsResources->frameAnimIdx = 0; + sEasyChatGraphicsResources->frameAnimTarget = 10; break; case 1: - gUnknown_203ACEC->unk6 = 9; - gUnknown_203ACEC->unk7 = 0; + sEasyChatGraphicsResources->frameAnimIdx = 9; + sEasyChatGraphicsResources->frameAnimTarget = 0; break; case 2: - gUnknown_203ACEC->unk6 = 11; - gUnknown_203ACEC->unk7 = 17; + sEasyChatGraphicsResources->frameAnimIdx = 11; + sEasyChatGraphicsResources->frameAnimTarget = 17; break; case 3: - gUnknown_203ACEC->unk6 = 17; - gUnknown_203ACEC->unk7 = 0; + sEasyChatGraphicsResources->frameAnimIdx = 17; + sEasyChatGraphicsResources->frameAnimTarget = 0; break; case 4: - gUnknown_203ACEC->unk6 = 17; - gUnknown_203ACEC->unk7 = 10; + sEasyChatGraphicsResources->frameAnimIdx = 17; + sEasyChatGraphicsResources->frameAnimTarget = 10; break; case 5: - gUnknown_203ACEC->unk6 = 18; - gUnknown_203ACEC->unk7 = 22; + sEasyChatGraphicsResources->frameAnimIdx = 18; + sEasyChatGraphicsResources->frameAnimTarget = 22; break; case 6: - gUnknown_203ACEC->unk6 = 22; - gUnknown_203ACEC->unk7 = 18; + sEasyChatGraphicsResources->frameAnimIdx = 22; + sEasyChatGraphicsResources->frameAnimTarget = 18; break; } - gUnknown_203ACEC->unk8 = gUnknown_203ACEC->unk6 < gUnknown_203ACEC->unk7 ? 1 : -1; + sEasyChatGraphicsResources->frameAnimDelta = sEasyChatGraphicsResources->frameAnimIdx < sEasyChatGraphicsResources->frameAnimTarget ? 1 : -1; } -bool8 sub_81016AC(void) +static bool8 AnimateFrameResize(void) { - u8 var0, var1; - if (gUnknown_203ACEC->unk6 == gUnknown_203ACEC->unk7) + if (sEasyChatGraphicsResources->frameAnimIdx == sEasyChatGraphicsResources->frameAnimTarget) return FALSE; - gUnknown_203ACEC->unk6 += gUnknown_203ACEC->unk8; - sub_81016E4(gUnknown_203ACEC->unk6); - var0 = gUnknown_203ACEC->unk6; - var1 = gUnknown_203ACEC->unk7; - return (var0 ^ var1) > 0; + sEasyChatGraphicsResources->frameAnimIdx += sEasyChatGraphicsResources->frameAnimDelta; + RedrawFrameByIndex(sEasyChatGraphicsResources->frameAnimIdx); + return sEasyChatGraphicsResources->frameAnimIdx != sEasyChatGraphicsResources->frameAnimTarget; } -void sub_81016E4(u8 arg0) +static void RedrawFrameByIndex(u8 direction) { FillBgTilemapBufferRect_Palette0(1, 0, 0, 10, 30, 10); - switch (arg0) + switch (direction) { case 0: break; case 1: - sub_8101830(11, 14, 3, 2); + RedrawFrameByRect(11, 14, 3, 2); break; case 2: - sub_8101830(9, 14, 7, 2); + RedrawFrameByRect(9, 14, 7, 2); break; case 3: - sub_8101830(7, 14, 11, 2); + RedrawFrameByRect(7, 14, 11, 2); break; case 4: - sub_8101830(5, 14, 15, 2); + RedrawFrameByRect(5, 14, 15, 2); break; case 5: - sub_8101830(3, 14, 19, 2); + RedrawFrameByRect(3, 14, 19, 2); break; case 6: - sub_8101830(1, 14, 23, 2); + RedrawFrameByRect(1, 14, 23, 2); + break; + case 7: + RedrawFrameByRect(1, 13, 23, 4); + break; + case 8: + RedrawFrameByRect(1, 12, 23, 6); + break; + case 9: + RedrawFrameByRect(1, 11, 23, 8); + break; + case 10: + RedrawFrameByRect(1, 10, 23, 10); break; case 11: - sub_8101830(1, 10, 24, 10); + RedrawFrameByRect(1, 10, 24, 10); break; case 12: - sub_8101830(1, 10, 25, 10); + RedrawFrameByRect(1, 10, 25, 10); break; case 13: - sub_8101830(1, 10, 26, 10); + RedrawFrameByRect(1, 10, 26, 10); break; case 14: - sub_8101830(1, 10, 27, 10); + RedrawFrameByRect(1, 10, 27, 10); break; case 15: - sub_8101830(1, 10, 28, 10); + RedrawFrameByRect(1, 10, 28, 10); break; case 16: - sub_8101830(1, 10, 29, 10); + RedrawFrameByRect(1, 10, 29, 10); break; case 17: - sub_8101830(0, 10, 30, 10); + RedrawFrameByRect(0, 10, 30, 10); break; - case 10: case 18: - sub_8101830(1, 10, 23, 10); + RedrawFrameByRect(1, 10, 23, 10); break; - case 9: case 19: - sub_8101830(1, 11, 23, 8); + RedrawFrameByRect(1, 11, 23, 8); break; - case 8: case 20: - sub_8101830(1, 12, 23, 6); + RedrawFrameByRect(1, 12, 23, 6); break; - case 7: case 21: - sub_8101830(1, 13, 23, 4); + RedrawFrameByRect(1, 13, 23, 4); break; case 22: - sub_8101830(1, 14, 23, 2); + RedrawFrameByRect(1, 14, 23, 2); break; } CopyBgTilemapBufferToVram(1); } -void sub_8101830(int left, int top, int width, int height) +static void RedrawFrameByRect(int left, int top, int width, int height) { u16 *tilemap; int right; int bottom; int x, y; - tilemap = gUnknown_203ACEC->unk300; + tilemap = sEasyChatGraphicsResources->bg1TilemapBuffer; right = left + width - 1; bottom = top + height - 1; x = left; @@ -1848,30 +1853,30 @@ void sub_8101830(int left, int top, int width, int height) tilemap[y * 32 + x] = 0x400A; tilemap[y * 32 + x] = 0x400B; - sub_8101A5C((left + 1) * 8, (top + 1) * 8, (width - 2) * 8, (height - 2) * 8); + SetRegWin0Coords((left + 1) * 8, (top + 1) * 8, (width - 2) * 8, (height - 2) * 8); } -void sub_810198C(void) +static void InitBg2Scroll(void) { ChangeBgY(2, 0x800, 0); - gUnknown_203ACEC->unk2CE = 0; + sEasyChatGraphicsResources->bg2ScrollRow = 0; } -void sub_81019B0(s16 arg0, u8 arg1) +static void ScheduleBg2VerticalScroll(s16 direction, u8 speed) { int bgY; - s16 var0; + s16 totalDelta; bgY = GetBgY(2); - gUnknown_203ACEC->unk2CE += arg0; - var0 = arg0 * 16; - bgY += var0 << 8; - if (arg1) + sEasyChatGraphicsResources->bg2ScrollRow += direction; + totalDelta = direction * 16; + bgY += totalDelta << 8; + if (speed) { - gUnknown_203ACEC->unk2D0 = bgY; - gUnknown_203ACEC->unk2D4 = arg1 * 256; - if (var0 < 0) - gUnknown_203ACEC->unk2D4 = -gUnknown_203ACEC->unk2D4; + sEasyChatGraphicsResources->tgtBgY = bgY; + sEasyChatGraphicsResources->deltaBgY = speed * 256; + if (totalDelta < 0) + sEasyChatGraphicsResources->deltaBgY = -sEasyChatGraphicsResources->deltaBgY; } else { @@ -1879,28 +1884,28 @@ void sub_81019B0(s16 arg0, u8 arg1) } } -bool8 sub_8101A10(void) +static bool8 AnimateBg2VerticalScroll(void) { int bgY; bgY = GetBgY(2); - if (bgY == gUnknown_203ACEC->unk2D0) + if (bgY == sEasyChatGraphicsResources->tgtBgY) { return FALSE; } else { - ChangeBgY(2, gUnknown_203ACEC->unk2D4, 1); + ChangeBgY(2, sEasyChatGraphicsResources->deltaBgY, 1); return TRUE; } } -int sub_8101A48(void) +static int GetBg2ScrollRow(void) { - return gUnknown_203ACEC->unk2CE; + return sEasyChatGraphicsResources->bg2ScrollRow; } -void sub_8101A5C(u8 left, u8 top, u8 width, u8 height) +static void SetRegWin0Coords(u8 left, u8 top, u8 width, u8 height) { u16 horizontalDimensions = WIN_RANGE(left, left + width); u16 verticalDimensions = WIN_RANGE(top, top + height); @@ -1908,27 +1913,27 @@ void sub_8101A5C(u8 left, u8 top, u8 width, u8 height) SetGpuReg(REG_OFFSET_WIN0V, verticalDimensions); } -void sub_8101A90(void) +static void LoadSpriteGfx(void) { u32 i; LoadSpriteSheets(sEasyChatSpriteSheets); LoadSpritePalettes(sEasyChatSpritePalettes); - for (i = 0; i < NELEMS(gUnknown_843F938); i++) - LoadCompressedSpriteSheet(&gUnknown_843F938[i]); + for (i = 0; i < NELEMS(sEasyChatCompressedSpriteSheets); i++) + LoadCompressedSpriteSheet(&sEasyChatCompressedSpriteSheets[i]); } -void sub_8101AC4(void) +static void CreateSelectDestFieldCursorSprite(void) { u8 frameId = GetEasyChatScreenFrameId(); s16 x = sPhraseFrameDimensions[frameId].left * 8 + 13; s16 y = (sPhraseFrameDimensions[frameId].top + 1) * 8 + 1; - u8 spriteId = CreateSprite(&gUnknown_843F968, x, y, 2); - gUnknown_203ACEC->unk2D8 = &gSprites[spriteId]; + u8 spriteId = CreateSprite(&sSpriteTemplate_RightTriangleCursor, x, y, 2); + sEasyChatGraphicsResources->selectDestFieldCursorSprite = &gSprites[spriteId]; gSprites[spriteId].data[1] = 1; } -void sub_8101B20(struct Sprite *sprite) +static void SpriteCB_BounceCursor(struct Sprite *sprite) { if (sprite->data[1]) { @@ -1941,137 +1946,137 @@ void sub_8101B20(struct Sprite *sprite) } } -void sub_8101B58(u8 x, u8 y) +static void SetSelectDestFieldCursorSpritePosAndResetAnim(u8 x, u8 y) { - gUnknown_203ACEC->unk2D8->pos1.x = x; - gUnknown_203ACEC->unk2D8->pos1.y = y; - gUnknown_203ACEC->unk2D8->pos2.x = 0; - gUnknown_203ACEC->unk2D8->data[0] = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->pos1.x = x; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->pos1.y = y; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->pos2.x = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->data[0] = 0; } -void sub_8101B88(void) +static void FreezeSelectDestFieldCursorSprite(void) { - gUnknown_203ACEC->unk2D8->data[0] = 0; - gUnknown_203ACEC->unk2D8->data[1] = 0; - gUnknown_203ACEC->unk2D8->pos2.x = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->data[0] = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->data[1] = 0; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->pos2.x = 0; } -void sub_8101BA8(void) +static void UnfreezeSelectDestFieldCursorSprite(void) { - gUnknown_203ACEC->unk2D8->data[1] = 1; + sEasyChatGraphicsResources->selectDestFieldCursorSprite->data[1] = 1; } -void sub_8101BC0(void) +static void CreateRedRectangularCursorSpritePair(void) { - u8 spriteId = CreateSprite(&gUnknown_843F9B8, 0, 0, 3); - gUnknown_203ACEC->unk2DC = &gSprites[spriteId]; - gUnknown_203ACEC->unk2DC->pos2.x = 32; + u8 spriteId = CreateSprite(&sSpriteTemplate_RedRectangularCursor, 0, 0, 3); + sEasyChatGraphicsResources->rectCursorSpriteRight = &gSprites[spriteId]; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos2.x = 32; - spriteId = CreateSprite(&gUnknown_843F9B8, 0, 0, 3); - gUnknown_203ACEC->unk2E0 = &gSprites[spriteId]; - gUnknown_203ACEC->unk2E0->pos2.x = -32; + spriteId = CreateSprite(&sSpriteTemplate_RedRectangularCursor, 0, 0, 3); + sEasyChatGraphicsResources->rectCursorSpriteLeft = &gSprites[spriteId]; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos2.x = -32; - gUnknown_203ACEC->unk2DC->hFlip = 1; - sub_8101C80(); + sEasyChatGraphicsResources->rectCursorSpriteRight->hFlip = TRUE; + EC_MoveCursor(); } -void sub_8101C48(void) +static void DestroyRedRectangularCursor(void) { - DestroySprite(gUnknown_203ACEC->unk2DC); - gUnknown_203ACEC->unk2DC = NULL; - DestroySprite(gUnknown_203ACEC->unk2E0); - gUnknown_203ACEC->unk2E0 = NULL; + DestroySprite(sEasyChatGraphicsResources->rectCursorSpriteRight); + sEasyChatGraphicsResources->rectCursorSpriteRight = NULL; + DestroySprite(sEasyChatGraphicsResources->rectCursorSpriteLeft); + sEasyChatGraphicsResources->rectCursorSpriteLeft = NULL; } -void sub_8101C80(void) +static void EC_MoveCursor(void) { - u8 var0; - u8 var1; + u8 x; + u8 y; - if (gUnknown_203ACEC->unk2DC && gUnknown_203ACEC->unk2E0) + if (sEasyChatGraphicsResources->rectCursorSpriteRight && sEasyChatGraphicsResources->rectCursorSpriteLeft) { - sub_80FFE08(&var0, &var1); - if (!sub_80FFE1C()) - sub_8101CE4(var0, var1); + GetECSelectGroupCursorCoords(&x, &y); + if (!IsEasyChatAlphaMode()) + MoveCursor_Group(x, y); else - sub_8101D9C(var0, var1); + MoveCursor_Alpha(x, y); } } -void sub_8101CE4(s8 arg0, s8 arg1) +static void MoveCursor_Group(s8 x, s8 y) { - if (arg0 != -1) + if (x != -1) { - StartSpriteAnim(gUnknown_203ACEC->unk2DC, 0); - gUnknown_203ACEC->unk2DC->pos1.x = arg0 * 84 + 58; - gUnknown_203ACEC->unk2DC->pos1.y = arg1 * 16 + 96; + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 0); + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.x = x * 84 + 58; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.y = y * 16 + 96; - StartSpriteAnim(gUnknown_203ACEC->unk2E0, 0); - gUnknown_203ACEC->unk2E0->pos1.x = arg0 * 84 + 58; - gUnknown_203ACEC->unk2E0->pos1.y = arg1 * 16 + 96; + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 0); + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.x = x * 84 + 58; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.y = y * 16 + 96; } else { - StartSpriteAnim(gUnknown_203ACEC->unk2DC, 1); - gUnknown_203ACEC->unk2DC->pos1.x = 216; - gUnknown_203ACEC->unk2DC->pos1.y = arg1 * 16 + 112; + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 1); + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.x = 216; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.y = y * 16 + 112; - StartSpriteAnim(gUnknown_203ACEC->unk2E0, 1); - gUnknown_203ACEC->unk2E0->pos1.x = 216; - gUnknown_203ACEC->unk2E0->pos1.y = arg1 * 16 + 112; + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 1); + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.x = 216; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.y = y * 16 + 112; } } -void sub_8101D9C(s8 arg0, s8 arg1) +static void MoveCursor_Alpha(s8 cursorX, s8 cursorY) { int anim; int x, y; - if (arg0 != -1) + if (cursorX != -1) { - y = arg1 * 16 + 96; + y = cursorY * 16 + 96; x = 32; - if (arg0 == 6 && arg1 == 0) + if (cursorX == 6 && cursorY == 0) { x = 157; anim = 2; } else { - x += gUnknown_843F958[arg0 < NELEMS(gUnknown_843F958) ? arg0 : 0]; + x += sECDisplay_AlphaModeXCoords[cursorX < NELEMS(sECDisplay_AlphaModeXCoords) ? cursorX : 0]; anim = 3; } - StartSpriteAnim(gUnknown_203ACEC->unk2DC, anim); - gUnknown_203ACEC->unk2DC->pos1.x = x; - gUnknown_203ACEC->unk2DC->pos1.y = y; + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, anim); + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.x = x; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.y = y; - StartSpriteAnim(gUnknown_203ACEC->unk2E0, anim); - gUnknown_203ACEC->unk2E0->pos1.x = x; - gUnknown_203ACEC->unk2E0->pos1.y = y; + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, anim); + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.x = x; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.y = y; } else { - StartSpriteAnim(gUnknown_203ACEC->unk2DC, 1); - gUnknown_203ACEC->unk2DC->pos1.x = 216; - gUnknown_203ACEC->unk2DC->pos1.y = arg1 * 16 + 112; + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteRight, 1); + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.x = 216; + sEasyChatGraphicsResources->rectCursorSpriteRight->pos1.y = cursorY * 16 + 112; - StartSpriteAnim(gUnknown_203ACEC->unk2E0, 1); - gUnknown_203ACEC->unk2E0->pos1.x = 216; - gUnknown_203ACEC->unk2E0->pos1.y = arg1 * 16 + 112; + StartSpriteAnim(sEasyChatGraphicsResources->rectCursorSpriteLeft, 1); + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.x = 216; + sEasyChatGraphicsResources->rectCursorSpriteLeft->pos1.y = cursorY * 16 + 112; } } -void sub_8101E80(void) +static void CreateSelectWordCursorSprite(void) { - u8 spriteId = CreateSprite(&gUnknown_843F968, 0, 0, 4); - gUnknown_203ACEC->unk2E4 = &gSprites[spriteId]; - gUnknown_203ACEC->unk2E4->callback = sub_8101ED4; - gUnknown_203ACEC->unk2E4->oam.priority = 2; - sub_8101F04(); + u8 spriteId = CreateSprite(&sSpriteTemplate_RightTriangleCursor, 0, 0, 4); + sEasyChatGraphicsResources->selectWordCursorSprite = &gSprites[spriteId]; + sEasyChatGraphicsResources->selectWordCursorSprite->callback = SpriteCB_SelectWordCursorSprite; + sEasyChatGraphicsResources->selectWordCursorSprite->oam.priority = 2; + SetSelectWordCursorSpritePos(); } -void sub_8101ED4(struct Sprite *sprite) +static void SpriteCB_SelectWordCursorSprite(struct Sprite *sprite) { if (++sprite->data[0] > 2) { @@ -2081,71 +2086,71 @@ void sub_8101ED4(struct Sprite *sprite) } } -void sub_8101F04(void) +static void SetSelectWordCursorSpritePos(void) { - s8 var0, var1; + s8 cursorX, cursorY; u8 x, y; - sub_80FFE34(&var0, &var1); - x = var0 * 13 + 3; - y = var1 * 2 + 11; - sub_8101F40(x, y); + GetECSelectWordCursorCoords(&cursorX, &cursorY); + x = cursorX * 13 + 3; + y = cursorY * 2 + 11; + SetSelectWordCursorSpritePosExplicit(x, y); } -void sub_8101F40(u8 x, u8 y) +static void SetSelectWordCursorSpritePosExplicit(u8 x, u8 y) { - if (gUnknown_203ACEC->unk2E4) + if (sEasyChatGraphicsResources->selectWordCursorSprite) { - gUnknown_203ACEC->unk2E4->pos1.x = x * 8 + 4; - gUnknown_203ACEC->unk2E4->pos1.y = (y + 1) * 8 + 1; - gUnknown_203ACEC->unk2E4->pos2.x = 0; - gUnknown_203ACEC->unk2E4->data[0] = 0; + sEasyChatGraphicsResources->selectWordCursorSprite->pos1.x = x * 8 + 4; + sEasyChatGraphicsResources->selectWordCursorSprite->pos1.y = (y + 1) * 8 + 1; + sEasyChatGraphicsResources->selectWordCursorSprite->pos2.x = 0; + sEasyChatGraphicsResources->selectWordCursorSprite->data[0] = 0; } } -void sub_8101F80(void) +static void DestroySelectWordCursorSprite(void) { - if (gUnknown_203ACEC->unk2E4) + if (sEasyChatGraphicsResources->selectWordCursorSprite) { - DestroySprite(gUnknown_203ACEC->unk2E4); - gUnknown_203ACEC->unk2E4 = NULL; + DestroySprite(sEasyChatGraphicsResources->selectWordCursorSprite); + sEasyChatGraphicsResources->selectWordCursorSprite = NULL; } } -void sub_8101FAC(void) +static void CreateSelectGroupHelpSprite(void) { - u8 spriteId = CreateSprite(&gUnknown_843FA40, 208, 128, 6); - gUnknown_203ACEC->unk2E8 = &gSprites[spriteId]; - gUnknown_203ACEC->unk2E8->pos2.x = -64; + u8 spriteId = CreateSprite(&sSpriteTemplate_SelectGroupHelp, 208, 128, 6); + sEasyChatGraphicsResources->selectGroupHelpSprite = &gSprites[spriteId]; + sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x = -64; - spriteId = CreateSprite(&gUnknown_843FA20, 208, 80, 5); - gUnknown_203ACEC->unk2EC = &gSprites[spriteId]; - gUnknown_203ACEC->unk9 = 0; + spriteId = CreateSprite(&sSpriteTemplate_EasyChatModeIcons, 208, 80, 5); + sEasyChatGraphicsResources->modeIconsSprite = &gSprites[spriteId]; + sEasyChatGraphicsResources->modeIconState = 0; } -bool8 sub_8102018(void) +static bool8 AnimateSeletGroupModeAndHelpSpriteEnter(void) { - switch (gUnknown_203ACEC->unk9) + switch (sEasyChatGraphicsResources->modeIconState) { default: return FALSE; case 0: - gUnknown_203ACEC->unk2E8->pos2.x += 8; - if (gUnknown_203ACEC->unk2E8->pos2.x >= 0) + sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x += 8; + if (sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x >= 0) { - gUnknown_203ACEC->unk2E8->pos2.x = 0; - if (!sub_80FFE1C()) - StartSpriteAnim(gUnknown_203ACEC->unk2EC, 1); + sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x = 0; + if (!IsEasyChatAlphaMode()) + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 1); else - StartSpriteAnim(gUnknown_203ACEC->unk2EC, 2); + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 2); - gUnknown_203ACEC->unk9++; + sEasyChatGraphicsResources->modeIconState++; } break; case 1: - if (gUnknown_203ACEC->unk2EC->animEnded) + if (sEasyChatGraphicsResources->modeIconsSprite->animEnded) { - gUnknown_203ACEC->unk9 = 2; + sEasyChatGraphicsResources->modeIconState = 2; return FALSE; } } @@ -2153,31 +2158,31 @@ bool8 sub_8102018(void) return TRUE; } -void sub_81020AC(void) +static void StartModeIconHidingAnimation(void) { - gUnknown_203ACEC->unk9 = 0; - StartSpriteAnim(gUnknown_203ACEC->unk2EC, 3); + sEasyChatGraphicsResources->modeIconState = 0; + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 3); } -bool8 sub_81020D0(void) +static bool8 RunModeIconHidingAnimation(void) { - switch (gUnknown_203ACEC->unk9) + switch (sEasyChatGraphicsResources->modeIconState) { default: return FALSE; case 0: - if (gUnknown_203ACEC->unk2EC->animEnded) - gUnknown_203ACEC->unk9 = 1; + if (sEasyChatGraphicsResources->modeIconsSprite->animEnded) + sEasyChatGraphicsResources->modeIconState = 1; break; case 1: - gUnknown_203ACEC->unk2E8->pos2.x -= 8; - if (gUnknown_203ACEC->unk2E8->pos2.x <= -64) + sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x -= 8; + if (sEasyChatGraphicsResources->selectGroupHelpSprite->pos2.x <= -64) { - DestroySprite(gUnknown_203ACEC->unk2EC); - DestroySprite(gUnknown_203ACEC->unk2E8); - gUnknown_203ACEC->unk2EC = NULL; - gUnknown_203ACEC->unk2E8 = NULL; - gUnknown_203ACEC->unk9++; + DestroySprite(sEasyChatGraphicsResources->modeIconsSprite); + DestroySprite(sEasyChatGraphicsResources->selectGroupHelpSprite); + sEasyChatGraphicsResources->modeIconsSprite = NULL; + sEasyChatGraphicsResources->selectGroupHelpSprite = NULL; + sEasyChatGraphicsResources->modeIconState++; return FALSE; } } @@ -2185,95 +2190,97 @@ bool8 sub_81020D0(void) return TRUE; } -void sub_810215C(void) +static void ShrinkModeIconsSprite(void) { - StartSpriteAnim(gUnknown_203ACEC->unk2EC, 4); + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 4); } -void sub_8102178(void) +static void ShowModeIconsSprite(void) { - if (!sub_80FFE1C()) - StartSpriteAnim(gUnknown_203ACEC->unk2EC, 1); + if (!IsEasyChatAlphaMode()) + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 1); else - StartSpriteAnim(gUnknown_203ACEC->unk2EC, 2); + StartSpriteAnim(sEasyChatGraphicsResources->modeIconsSprite, 2); } -bool8 sub_81021B8(void) +static bool8 ModeIconsSpriteAnimIsEnded(void) { - return !gUnknown_203ACEC->unk2EC->animEnded; + return !sEasyChatGraphicsResources->modeIconsSprite->animEnded; } -void sub_81021D4(void) +static void CreateVerticalScrollArrowSprites(void) { - u8 spriteId = CreateSprite(&gUnknown_843FA98, 96, 80, 0); + u8 spriteId = CreateSprite(&sSpriteTemplate_UpTriangleCursor, 96, 80, 0); if (spriteId != MAX_SPRITES) - gUnknown_203ACEC->unk2F0 = &gSprites[spriteId]; + sEasyChatGraphicsResources->upTriangleCursorSprite = &gSprites[spriteId]; - spriteId = CreateSprite(&gUnknown_843FA98, 96, 156, 0); + spriteId = CreateSprite(&sSpriteTemplate_UpTriangleCursor, 96, 156, 0); if (spriteId != MAX_SPRITES) { - gUnknown_203ACEC->unk2F4 = &gSprites[spriteId]; - gUnknown_203ACEC->unk2F4->vFlip = 1; + sEasyChatGraphicsResources->downTriangleCursorSprite = &gSprites[spriteId]; + sEasyChatGraphicsResources->downTriangleCursorSprite->vFlip = TRUE; } - sub_81022B0(); + HideVerticalScrollArrowSprites(); } -void sub_810224C(void) +static void UpdateVerticalScrollArrowVisibility(void) { - gUnknown_203ACEC->unk2F0->invisible = !sub_80FFE64(); - gUnknown_203ACEC->unk2F4->invisible = !sub_80FFE98(); + sEasyChatGraphicsResources->upTriangleCursorSprite->invisible = !ShouldDrawECUpArrow(); + sEasyChatGraphicsResources->downTriangleCursorSprite->invisible = !ShouldDrawECDownArrow(); } -void sub_81022B0(void) +static void HideVerticalScrollArrowSprites(void) { - gUnknown_203ACEC->unk2F0->invisible = TRUE; - gUnknown_203ACEC->unk2F4->invisible = TRUE; + sEasyChatGraphicsResources->upTriangleCursorSprite->invisible = TRUE; + sEasyChatGraphicsResources->downTriangleCursorSprite->invisible = TRUE; } -void sub_81022E0(int arg0) +static void UpdateVerticalScrollArrowSpriteXPos(int direction) { - if (!arg0) + if (!direction) { - gUnknown_203ACEC->unk2F0->pos1.x = 96; - gUnknown_203ACEC->unk2F4->pos1.x = 96; + // Group select + sEasyChatGraphicsResources->upTriangleCursorSprite->pos1.x = 96; + sEasyChatGraphicsResources->downTriangleCursorSprite->pos1.x = 96; } else { - gUnknown_203ACEC->unk2F0->pos1.x = 120; - gUnknown_203ACEC->unk2F4->pos1.x = 120; + // Word select + sEasyChatGraphicsResources->upTriangleCursorSprite->pos1.x = 120; + sEasyChatGraphicsResources->downTriangleCursorSprite->pos1.x = 120; } } -void sub_8102320(void) +static void CreateStartSelectButtonsSprites(void) { - u8 spriteId = CreateSprite(&gUnknown_843FA80, 220, 84, 1); + u8 spriteId = CreateSprite(&sSpriteTemplate_StartSelectButtons, 220, 84, 1); if (spriteId != MAX_SPRITES) - gUnknown_203ACEC->unk2F8 = &gSprites[spriteId]; + sEasyChatGraphicsResources->startPgUpButtonSprite = &gSprites[spriteId]; - spriteId = CreateSprite(&gUnknown_843FA80, 220, 156, 1); + spriteId = CreateSprite(&sSpriteTemplate_StartSelectButtons, 220, 156, 1); if (spriteId != MAX_SPRITES) { - gUnknown_203ACEC->unk2FC = &gSprites[spriteId]; - StartSpriteAnim(gUnknown_203ACEC->unk2FC, 1); + sEasyChatGraphicsResources->selectPgDnButtonSprite = &gSprites[spriteId]; + StartSpriteAnim(sEasyChatGraphicsResources->selectPgDnButtonSprite, 1); } - sub_81023F8(); + HideStartSelectButtonSprites(); } -void sub_8102394(void) +static void UpdateStartSelectButtonSpriteVisibility(void) { - gUnknown_203ACEC->unk2F8->invisible = !sub_80FFE64(); - gUnknown_203ACEC->unk2FC->invisible = !sub_80FFE98(); + sEasyChatGraphicsResources->startPgUpButtonSprite->invisible = !ShouldDrawECUpArrow(); + sEasyChatGraphicsResources->selectPgDnButtonSprite->invisible = !ShouldDrawECDownArrow(); } -void sub_81023F8(void) +static void HideStartSelectButtonSprites(void) { - gUnknown_203ACEC->unk2F8->invisible = TRUE; - gUnknown_203ACEC->unk2FC->invisible = TRUE; + sEasyChatGraphicsResources->startPgUpButtonSprite->invisible = TRUE; + sEasyChatGraphicsResources->selectPgDnButtonSprite->invisible = TRUE; } -void sub_8102428(void) +static void CreateFooterWindow(void) { u16 windowId; struct WindowTemplate template; @@ -2286,6 +2293,6 @@ void sub_8102428(void) template.baseBlock = 0x030; windowId = AddWindow(&template); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - sub_8100D84(windowId, 1, gUnknown_841EE2B, 0, 0, 0, NULL); + EC_AddTextPrinterParameterized(windowId, 1, gUnknown_841EE2B, 0, 0, 0, NULL); PutWindowTilemap(windowId); } diff --git a/src/graphics.c b/src/graphics.c index 100ddfdf6..cb35568fa 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1220,8 +1220,8 @@ const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz"); const u16 gUnknown_8E99F24[] = INCBIN_U16("graphics/link_rfu/unk_8E9A168.gbapal"); -const u32 gUnknown_8E99F44[] = INCBIN_U32("graphics/link_rfu/unk_8E99F44.4bpp.lz"); -const u32 gUnknown_8E9A168[] = INCBIN_U32("graphics/link_rfu/unk_8E9A168.4bpp.lz"); +const u32 gEasyChatSelectGroupHelp_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E99F44.4bpp.lz"); +const u32 gEasyChatModeIcons_Tiles[] = INCBIN_U32("graphics/link_rfu/unk_8E9A168.4bpp.lz"); const u32 gUnknown_8E9A460[] = INCBIN_U32("graphics/interface/trainer_memo.4bpp.lz"); const u32 gUnknown_8E9B310[] = INCBIN_U32("graphics/interface/trainer_memo_pal1.gbapal"); @@ -1240,7 +1240,7 @@ const u32 gUnknown_8E9BBCC[] = INCBIN_U32("graphics/interface/trainer_memo_5.bin const u16 gUnknown_8E9BD08[] = INCBIN_U16("graphics/unknown/unknown_E9BD08.gbapal"); // might be an alternate unused palette of the link_rfu gfx below. -const u32 gUnknown_8E9BD28[] = INCBIN_U32("graphics/interface/link_rfu_frame.4bpp.lz"); +const u32 gEasyChatRedRectangularCursor_Tiles[] = INCBIN_U32("graphics/interface/link_rfu_frame.4bpp.lz"); const u16 gUnknown_8E9BF28[] = INCBIN_U16("graphics/interface/link_rfu_frame.gbapal"); const u32 gUnknown_8E9BF48[] = INCBIN_U32("graphics/interface/link_rfu_status.4bpp.lz"); -- cgit v1.2.3 From 42c00ee3f3f4083d193aacacff19e1bfc0bf2ac3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 8 Mar 2020 12:33:21 -0400 Subject: Delete unneeded field --- src/easy_chat_2.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 78f8f96f9..38d8d752a 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -49,7 +49,6 @@ struct EasyChatScreen /*0x0F*/ u8 selectWordNumRows; /*0x10*/ s8 selectWordCursorX; /*0x11*/ s8 selectWordCursorY; - /*0x12*/ u8 unk_12; /*0x14*/ u16 *words; /*0x18*/ u16 ecWordBuffer[9]; }; -- cgit v1.2.3 From 7a7aaab5d9ad573186a06ddedbefcd0dd62e8e2c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 8 Mar 2020 13:26:19 -0400 Subject: Address review comments --- src/easy_chat_2.c | 38 +++++++++++++++++++------------------- src/easy_chat_3.c | 4 ++-- 2 files changed, 21 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index 38d8d752a..d099d0e77 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -76,25 +76,25 @@ static u16 Cancel_CreateYesNoMenu(void); static u16 DelAll_CreateYesNoMenu(void); static u16 Confirm_CreateYesNoMenu(void); static u8 GetStateBackup(void); -int OpenSelectedGroup(void); -int BackOutFromGroupToFieldSelect(void); -int ToggleGroupAlphaMode(void); -int DeleteSelectedWord(void); -int PlaceSelectedWord(void); +static int OpenSelectedGroup(void); +static int BackOutFromGroupToFieldSelect(void); +static int ToggleGroupAlphaMode(void); +static int DeleteSelectedWord(void); +static int PlaceSelectedWord(void); static void CommitECWords(void); static void DeleteAllECFields(void); static void SetEasyChatWordToField(u16 word); static bool8 HasECMessageChanged(void); static u16 SelectGroupCursorAction(u32 action); -int UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(u32 action); -int UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(u32 action); -int UpdateSelectGroupCursorPos_InsideBlueBox(u32 action); +static int UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(u32 action); +static int UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(u32 action); +static int UpdateSelectGroupCursorPos_InsideBlueBox(u32 action); static void GroupCursorMoveToBlueBox(void); static void GroupCursorWrapAroundLeft(void); static u16 SelectWordCursorAction(u32 action); static u16 GetSelectedFieldIndex(void); static u16 GetSelectedGroupIndex(void); -int GetSelectedLetter(void); +static int GetSelectedLetter(void); static u16 GetSelectWordCursorPos(void); static u8 GetMaxGroupCursorXinAlphaMode(u8 unkB); static void MoveGroupCursorXToMaxCol(void); @@ -162,7 +162,7 @@ static void Task_RunEasyChat(u8 taskId) { case 0: SetVBlankCallback(VBlankCallback_EasyChatScreen); - BlendPalettes(0xFFFFFFFF, 16, 0); + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); data[EZCHAT_TASK_STATE]++; break; @@ -763,7 +763,7 @@ static u8 GetStateBackup(void) return sEasyChatScreen->stateBackup; } -int OpenSelectedGroup(void) +static int OpenSelectedGroup(void) { u16 numDisplayedWords; @@ -789,13 +789,13 @@ int OpenSelectedGroup(void) return 11; } -int BackOutFromGroupToFieldSelect(void) +static int BackOutFromGroupToFieldSelect(void) { sEasyChatScreen->state = 0; return 10; } -int ToggleGroupAlphaMode(void) +static int ToggleGroupAlphaMode(void) { sEasyChatScreen->selectGroupCursorX = 0; sEasyChatScreen->selectGroupCursorY = 0; @@ -808,13 +808,13 @@ int ToggleGroupAlphaMode(void) return 22; } -int DeleteSelectedWord(void) +static int DeleteSelectedWord(void) { SetEasyChatWordToField(0xFFFF); return 1; } -int PlaceSelectedWord(void) +static int PlaceSelectedWord(void) { u16 easyChatWord = GetDisplayedWordByIndex(GetSelectWordCursorPos()); SetEasyChatWordToField(easyChatWord); @@ -869,7 +869,7 @@ static u16 SelectGroupCursorAction(u32 action) } } -int UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(u32 arg0) +static int UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(u32 arg0) { switch (arg0) { @@ -931,7 +931,7 @@ int UpdateSelectGroupCursorPos_OutsideBlueBox_GroupMode(u32 arg0) return 0; } -int UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(u32 arg0) +static int UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(u32 arg0) { switch (arg0) { @@ -968,7 +968,7 @@ int UpdateSelectGroupCursorPos_OutsideBlueBox_AlphaMode(u32 arg0) return 0; } -int UpdateSelectGroupCursorPos_InsideBlueBox(u32 arg0) +static int UpdateSelectGroupCursorPos_InsideBlueBox(u32 arg0) { switch (arg0) { @@ -1124,7 +1124,7 @@ static const u8 sAlphabetLayout[][7] = { {20, 21, 22, 23, 24, 25, 26} }; -int GetSelectedLetter(void) +static int GetSelectedLetter(void) { int col = sEasyChatScreen->selectGroupCursorX < NELEMS(*sAlphabetLayout) ? sEasyChatScreen->selectGroupCursorX : 0; int row = sEasyChatScreen->selectGroupCursorY < NELEMS(sAlphabetLayout) ? sEasyChatScreen->selectGroupCursorY : 0; diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index f3c7bedd9..a8abb21db 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -1270,7 +1270,7 @@ static bool8 ECInterfaceCmd_20(void) static bool8 InitEasyChatGraphicsWork_Internal(void) { sEasyChatGraphicsResources = Alloc(sizeof(*sEasyChatGraphicsResources)); - if (!sEasyChatGraphicsResources) + if (sEasyChatGraphicsResources == NULL) return FALSE; sEasyChatGraphicsResources->state = 0; @@ -1316,7 +1316,7 @@ static void PrintTitleText(void) { int xOffset; const u8 *titleText = GetTitleText(); - if (!titleText) + if (titleText == NULL) return; xOffset = (128 - GetStringWidth(1, titleText, 0)) / 2u; -- cgit v1.2.3 From ddef816f7d315f7d14b1458da711333dee52bfd7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 8 Mar 2020 13:28:35 -0400 Subject: struct pointer style patch --- src/easy_chat_2.c | 2 +- src/easy_chat_3.c | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index d099d0e77..4b3c70b67 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -53,7 +53,7 @@ struct EasyChatScreen /*0x18*/ u16 ecWordBuffer[9]; }; -static EWRAM_DATA struct EasyChatScreen *sEasyChatScreen = NULL; +static EWRAM_DATA struct EasyChatScreen * sEasyChatScreen = NULL; static void CB2_EasyChatScreen(void); static void Task_InitEasyChat(u8 taskId); diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c index a8abb21db..3d9d6c9f7 100644 --- a/src/easy_chat_3.c +++ b/src/easy_chat_3.c @@ -23,16 +23,16 @@ struct ECWork u16 bg2ScrollRow; int tgtBgY; int deltaBgY; - struct Sprite *selectDestFieldCursorSprite; - struct Sprite *rectCursorSpriteRight; - struct Sprite *rectCursorSpriteLeft; - struct Sprite *selectWordCursorSprite; - struct Sprite *selectGroupHelpSprite; - struct Sprite *modeIconsSprite; - struct Sprite *upTriangleCursorSprite; - struct Sprite *downTriangleCursorSprite; - struct Sprite *startPgUpButtonSprite; - struct Sprite *selectPgDnButtonSprite; + struct Sprite * selectDestFieldCursorSprite; + struct Sprite * rectCursorSpriteRight; + struct Sprite * rectCursorSpriteLeft; + struct Sprite * selectWordCursorSprite; + struct Sprite * selectGroupHelpSprite; + struct Sprite * modeIconsSprite; + struct Sprite * upTriangleCursorSprite; + struct Sprite * downTriangleCursorSprite; + struct Sprite * startPgUpButtonSprite; + struct Sprite * selectPgDnButtonSprite; u16 bg1TilemapBuffer[BG_SCREEN_SIZE / 2]; u16 bg3TilemapBuffer[BG_SCREEN_SIZE / 2]; }; @@ -45,7 +45,7 @@ struct EasyChatPhraseFrameDimensions u8 height; }; -static EWRAM_DATA struct ECWork *sEasyChatGraphicsResources = NULL; +static EWRAM_DATA struct ECWork * sEasyChatGraphicsResources = NULL; static bool8 ECInterfaceCmd_01(void); static bool8 ECInterfaceCmd_02(void); @@ -1933,7 +1933,7 @@ static void CreateSelectDestFieldCursorSprite(void) gSprites[spriteId].data[1] = 1; } -static void SpriteCB_BounceCursor(struct Sprite *sprite) +static void SpriteCB_BounceCursor(struct Sprite * sprite) { if (sprite->data[1]) { @@ -2076,7 +2076,7 @@ static void CreateSelectWordCursorSprite(void) SetSelectWordCursorSpritePos(); } -static void SpriteCB_SelectWordCursorSprite(struct Sprite *sprite) +static void SpriteCB_SelectWordCursorSprite(struct Sprite * sprite) { if (++sprite->data[0] > 2) { -- cgit v1.2.3