diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-25 19:58:39 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-01-25 19:58:39 -0500 |
commit | 0ebdbcfd5b1d352d37f5806943b124e915cbfe8b (patch) | |
tree | 872a2951cc274a2e40656c4f99462b4327c363d7 /src | |
parent | 52c0e05abbd0b58c943d045a8457c45c72caac38 (diff) |
Document union room chat
Diffstat (limited to 'src')
-rw-r--r-- | src/link_rfu_2.c | 29 | ||||
-rw-r--r-- | src/new_game.c | 2 | ||||
-rw-r--r-- | src/union_room.c | 2 | ||||
-rw-r--r-- | src/union_room_chat.c | 1136 | ||||
-rw-r--r-- | src/union_room_chat_display.c | 751 | ||||
-rw-r--r-- | src/union_room_chat_objects.c | 228 |
6 files changed, 1109 insertions, 1039 deletions
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 4d1917789..a27948650 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -448,7 +448,7 @@ static void sub_80F8B34(u8 taskId) gTasks[taskId].data[1] = 8; Rfu.unk_0c = 1; CreateTask(sub_80FA834, 5); - Rfu.unk_ce8 = 1; + Rfu.unk_ce8 = TRUE; DestroyTask(taskId); break; } @@ -1337,7 +1337,7 @@ static void sub_80FA1C4(void) static void sub_80FA224(void) { - if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + if (gSendCmd[0] == 0 && !Rfu.unk_ce8) { sub_80F9D04(0x5f00); Rfu.RfuFunc = sub_80FA1C4; @@ -1620,7 +1620,7 @@ static void sub_80FA834(u8 taskId) if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2) { - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; DestroyTask(taskId); } switch (gTasks[taskId].data[0]) @@ -1681,7 +1681,7 @@ static void sub_80FA834(u8 taskId) case 6: DestroyTask(taskId); gReceivedRemoteLinkPlayers = 1; - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; sub_80FEA34(1, 0x258); if (Rfu.unk_ce6) { @@ -1740,7 +1740,7 @@ static void sub_80FAA94(u8 taskId) u8 r4 = Rfu.unk_cde[gUnknown_843EC38[Rfu.unk_ce9]]; if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2) { - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; DestroyTask(taskId); } switch (gTasks[taskId].data[0]) @@ -1790,7 +1790,7 @@ static void sub_80FAA94(u8 taskId) { CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14)); ResetBlockReceivedFlag(0); - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; if (Rfu.unk_ce6) { for (i = 0; i < RFU_CHILD_MAX; i++) @@ -1799,7 +1799,7 @@ static void sub_80FAA94(u8 taskId) { Rfu.unk_ce5 = 1 << i; Rfu.unk_ce6 ^= (1 << i); - Rfu.unk_ce8 = 1; + Rfu.unk_ce8 = TRUE; break; } } @@ -1948,7 +1948,7 @@ void sub_80FB008(u8 a0, u32 a1, u32 a2) rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); } -void sub_80FB030(u32 a0) +void sub_80FB030(u32 linkPlayerCount) { s32 i; u32 r5; @@ -1964,9 +1964,10 @@ void sub_80FB030(u32 a0) { if ((r8 >> i) & 1) { - r7 |= ((0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3)); + r7 |= (( + 0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3)); r5++; - if (r5 == a0 - 1) + if (r5 == linkPlayerCount - 1) break; } } @@ -2214,11 +2215,11 @@ static void sub_80FB5EC(u8 a0, u8 unused1) if (idx != 0) { r1 = 1 << sub_80F886C(idx); - if (Rfu.unk_ce6 == 0 && Rfu.unk_ce8 == 0) + if (Rfu.unk_ce6 == 0 && !Rfu.unk_ce8) { Rfu.unk_ce5 = r1; Rfu.unk_ce6 |= (r1 ^ idx); - Rfu.unk_ce8 = 1; + Rfu.unk_ce8 = TRUE; } else { @@ -2360,7 +2361,7 @@ bool32 sub_80FBA00(void) return FALSE; } -bool32 sub_80FBA1C(void) +bool32 GetRfuUnkCE8(void) { return Rfu.unk_ce8; } @@ -2534,7 +2535,7 @@ void sub_80FBD6C(u32 a0) static void sub_80FBDB8(u8 taskId) { - if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + if (gSendCmd[0] == 0 && !Rfu.unk_ce8) { sub_80F9D04(0xED00); gSendCmd[1] = gTasks[taskId].data[0]; diff --git a/src/new_game.c b/src/new_game.c index 7428563de..05fb9c83e 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -143,7 +143,7 @@ void NewGameInitData(void) sub_809C794(); InitEasyChatPhrases(); ResetTrainerFanClub(); - copy_strings_to_sav1(); + UnionRoomChat_InitializeRegisteredTexts(); ResetMiniGamesResults(); sub_8143D24(); SetAllRenewableItemFlags(); diff --git a/src/union_room.c b/src/union_room.c index 6be88e2dd..f942fb7d3 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1852,7 +1852,7 @@ static void sub_81175BC(u8 taskId) sub_80F8D14(); SetHostRFUtgtGname(69, 0, 1); } - sub_8128420(); + EnterUnionRoomChat(); break; case 8: case 72: diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 751e5c865..f4a192b35 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -18,82 +18,107 @@ #include "data_8479668.h" #include "constants/songs.h" +#define MESSAGE_BUFFER_NCHAR 15 + +#define CHAT_MESSAGE_0 0 +#define CHAT_MESSAGE_CHAT 1 +#define CHAT_MESSAGE_JOIN 2 +#define CHAT_MESSAGE_LEAVE 3 +#define CHAT_MESSAGE_DROP 4 +#define CHAT_MESSAGE_DISBAND 5 + +#define CHATENTRYROUTINE_JOIN 0 +#define CHATNETRYROUTINE_HANDLE_INPUT 1 +#define CHATENTRYROUTINE_SWITCH 2 +#define CHATENTRYROUTINE_ASKQUITCHATTING 3 +#define CHATENTRYROUTINE_SEND 4 +#define CHATENTRYROUTINE_REGISTER 5 +#define CHATENTRYROUTINE_EXITCHAT 6 +#define CHATENTRYROUTINE_DROP 7 +#define CHATENTRYROUTINE_DISBANDED 8 +#define CHATENTRYROUTINE_SAVEANDEXIT 9 + +#define CHATEXIT_NONE 0 +#define CHATEXIT_LEADER_LAST 1 +#define CHATEXIT_DROPPED 2 +#define CHATEXIT_DISBANDED 3 + struct UnionRoomChat { u8 filler0[0x4]; - u16 unk4; - u16 unk6; + u16 routineNo; + u16 routineState; u8 filler8[0x2]; - u16 unkA; + u16 exitDelayTimer; u8 fillerC[0x1]; - u8 unkD; - u8 unkE; - u8 unkF; + u8 linkPlayerCount; + u8 handleInputTask; + u8 receiveMessagesTask; u8 currentPage; - u8 unk11; + u8 currentCol; u8 currentRow; - u8 unk13; - u8 unk14; - u8 unk15; - u8 unk16; - u8 unk17; - u8 unk18; - u8 unk19; - u8 unk1A[0x1F]; - u8 unk39[0x40]; - u8 unk79[0x40]; - u8 unkB9[UNION_ROOM_KB_ROW_COUNT][21]; + u8 multiplayerId; + u8 lastBufferCursorPos; + u8 bufferCursorPos; + u8 receivedPlayerIndex; + u8 exitType; + bool8 changedRegisteredTexts; + u8 afterSaveTimer; + u8 messageEntryBuffer[2 * MESSAGE_BUFFER_NCHAR + 1]; + u8 receivedMessage[0x40]; + u8 hostName[0x40]; + u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21]; u8 filler18B[0x5]; - u8 unk190[0x28]; + u8 sendMessageBuffer[0x28]; }; -static EWRAM_DATA struct UnionRoomChat * gUnknown_203B0E0 = NULL; - -static void sub_812845C(struct UnionRoomChat * unionRoomChat); -static void c2_081284E0(void); -static void sub_81285B4(void); -static void sub_81285CC(void); -static void sub_81285E8(u8 taskId); -static void sub_8128640(void); -static void sub_81286C4(void); -static void sub_81287B4(void); -static void sub_81288D4(void); -static void sub_8128AA0(void); -static void sub_8128C04(void); -static void sub_8128CA8(void); -static void sub_8128DA4(void); -static void sub_8128E78(void); -static void sub_8128FB8(void); -static void sub_8129218(u16 a0); -static bool32 sub_8129228(void); -static void sub_81292D8(void); -static void sub_81293AC(void); -static void sub_81293D8(void); -static bool32 sub_8129408(void); -static void sub_8129424(void); -static void sub_8129454(void); -static void sub_8129470(void); -static u8 *sub_81294C8(void); -static u8 *sub_81294EC(void); -static void sub_8129560(u8 *ptr); -static void sub_8129568(u8 *ptr); -static void sub_8129590(u8 *ptr); -static void sub_81295C0(u8 *ptr); -static void sub_81295EC(u8 *ptr); -static void sub_8129614(u8 *ptr); -static void sub_81298F8(u8 taskId); - -static void (*const gUnknown_845A880[])(void) = { - sub_8128640, - sub_81286C4, - sub_81287B4, - sub_81288D4, - sub_8128DA4, - sub_8128E78, - sub_8128AA0, - sub_8128C04, - sub_8128CA8, - sub_8128FB8 +static EWRAM_DATA struct UnionRoomChat * sWork = NULL; + +static void InitChatWork(struct UnionRoomChat * unionRoomChat); +static void CB2_LoadInterface(void); +static void VBlankCB_UnionRoomChatMain(void); +static void CB2_UnionRoomChatMain(void); +static void Task_HandlePlayerInput(u8 taskId); +static void ChatEntryRoutine_Join(void); +static void ChatEntryRoutine_HandleInput(void); +static void ChatEntryRoutine_Switch(void); +static void ChatEntryRoutine_AskQuitChatting(void); +static void ChatEntryRoutine_ExitChat(void); +static void ChatEntryRoutine_Drop(void); +static void ChatEntryRoutine_Disbanded(void); +static void ChatEntryRoutine_SendMessage(void); +static void ChatEntryRoutine_Register(void); +static void ChatEntryRoutine_SaveAndExit(void); +static void GoToRoutine(u16 routineNo); +static bool32 TypeChatMessage_HandleDPad(void); +static void AppendCharacterToChatMessageBuffer(void); +static void DeleteLastCharacterOfChatMessageBuffer(void); +static void ToggleCaseOfLastCharacterInChatMessageBuffer(void); +static bool32 ChatMsgHasAtLeastOneCharcter(void); +static void RegisterTextAtRow(void); +static void ResetMessageEntryBuffer(void); +static void SaveRegisteredTextsToSB1(void); +static u8 *GetEndOfUnk1A(void); +static u8 *GetPtrToLastCharOfUnk1A(void); +static void PrepareSendBuffer_Null(u8 *ptr); +static void PrepareSendBuffer_Join(u8 *ptr); +static void PrepareSendBuffer_Chat(u8 *ptr); +static void PrepareSendBuffer_Leave(u8 *ptr); +static void PrepareSendBuffer_Drop(u8 *ptr); +static void PrepareSendBuffer_Disband(u8 *ptr); +static void Task_ReceiveChatMessage(u8 taskId); + +static void (*const sChatEntryRoutines[])(void) = { + [CHATENTRYROUTINE_JOIN] = ChatEntryRoutine_Join, + [CHATNETRYROUTINE_HANDLE_INPUT] = ChatEntryRoutine_HandleInput, + [CHATENTRYROUTINE_SWITCH] = ChatEntryRoutine_Switch, + [CHATENTRYROUTINE_ASKQUITCHATTING] = ChatEntryRoutine_AskQuitChatting, + [CHATENTRYROUTINE_SEND] = ChatEntryRoutine_SendMessage, + [CHATENTRYROUTINE_REGISTER] = ChatEntryRoutine_Register, + [CHATENTRYROUTINE_EXITCHAT] = ChatEntryRoutine_ExitChat, + [CHATENTRYROUTINE_DROP] = ChatEntryRoutine_Drop, + [CHATENTRYROUTINE_DISBANDED] = ChatEntryRoutine_Disbanded, + [CHATENTRYROUTINE_SAVEANDEXIT] = ChatEntryRoutine_SaveAndExit }; static const u8 sKeyboardPageMaxRow[] = @@ -104,39 +129,39 @@ static const u8 sKeyboardPageMaxRow[] = 9 }; -static const u8 gUnknown_845A8AC[] = { - CHAR_SPACE, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, - 0x1D, 0x1E, CHAR_SPACE, 0x20, 0x21, 0x22, 0x23, 0x24, +static const u8 sCaseToggleTable[] = { + 0x00, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, + 0x1D, 0x1E, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02, - CHAR_SPACE, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, CHAR_SPACE, + 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, - 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x35, 0x36, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x53, 0x54, 0x55, 0x56, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, 0x6F, 0x5B, 0x5C, 0x5D, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - 0x03, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x5A, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x84, 0x85, 0x86, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, - 0xA0, CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, - CHAR_7, CHAR_8, CHAR_9, CHAR_EXCL_MARK, CHAR_QUESTION_MARK, CHAR_PERIOD, CHAR_HYPHEN, 0xAF, - CHAR_ELLIPSIS, CHAR_DBL_QUOT_LEFT, CHAR_DBL_QUOT_RIGHT, CHAR_SGL_QUOT_LEFT, CHAR_SGL_QUOT_RIGHT, CHAR_MALE, CHAR_FEMALE, CHAR_CURRENCY, - CHAR_COMMA, CHAR_MULT_SIGN, CHAR_SLASH, CHAR_a, CHAR_b, CHAR_c, CHAR_d, CHAR_e, - CHAR_f, CHAR_g, CHAR_h, CHAR_i, CHAR_j, CHAR_k, CHAR_l, CHAR_m, - CHAR_n, CHAR_o, CHAR_p, CHAR_q, CHAR_r, CHAR_s, CHAR_t, CHAR_u, - CHAR_v, CHAR_w, CHAR_x, CHAR_y, CHAR_z, CHAR_A, CHAR_B, CHAR_C, - CHAR_D, CHAR_E, CHAR_F, CHAR_G, CHAR_H, CHAR_I, CHAR_J, CHAR_K, - CHAR_L, CHAR_M, CHAR_N, CHAR_O, CHAR_P, CHAR_Q, CHAR_R, CHAR_S, - CHAR_T, CHAR_U, CHAR_V, CHAR_W, CHAR_X, CHAR_Y, CHAR_Z, 0xEF, - CHAR_COLON, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, CHAR_SPACE, - CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE + 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00, + 0x00, 0x00, 0x6F, 0x5B, 0x5C, 0x5D, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, + 0xB8, 0xB9, 0xBA, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, + 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, + 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, + 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xBB, 0xBC, 0xBD, + 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, + 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, + 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xEF, + 0xF0, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = { @@ -178,46 +203,46 @@ const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_R } }; -void sub_8128420(void) +void EnterUnionRoomChat(void) { - gUnknown_203B0E0 = Alloc(sizeof(struct UnionRoomChat)); - sub_812845C(gUnknown_203B0E0); + sWork = Alloc(sizeof(struct UnionRoomChat)); + InitChatWork(sWork); gKeyRepeatStartDelay = 20; sub_812B4AC(); SetVBlankCallback(NULL); - SetMainCallback2(c2_081284E0); + SetMainCallback2(CB2_LoadInterface); } -static void sub_812845C(struct UnionRoomChat * unionRoomChat) +static void InitChatWork(struct UnionRoomChat * unionRoomChat) { int i; - unionRoomChat->unk4 = 0; - unionRoomChat->unk6 = 0; - unionRoomChat->currentPage = 0; - unionRoomChat->unk11 = 0; + unionRoomChat->routineNo = CHATENTRYROUTINE_JOIN; + unionRoomChat->routineState = 0; + unionRoomChat->currentPage = UNION_ROOM_KB_PAGE_UPPER; + unionRoomChat->currentCol = 0; unionRoomChat->currentRow = 0; - unionRoomChat->unk14 = 0; - unionRoomChat->unk15 = 0; - unionRoomChat->unk16 = 0; - unionRoomChat->unk1A[0] = EOS; - unionRoomChat->unkD = GetLinkPlayerCount(); - unionRoomChat->unk13 = GetMultiplayerId(); - unionRoomChat->unk17 = 0; - unionRoomChat->unk18 = 0; - sub_8129560(unionRoomChat->unk190); + unionRoomChat->lastBufferCursorPos = 0; + unionRoomChat->bufferCursorPos = 0; + unionRoomChat->receivedPlayerIndex = 0; + unionRoomChat->messageEntryBuffer[0] = EOS; + unionRoomChat->linkPlayerCount = GetLinkPlayerCount(); + unionRoomChat->multiplayerId = GetMultiplayerId(); + unionRoomChat->exitType = 0; + unionRoomChat->changedRegisteredTexts = FALSE; + PrepareSendBuffer_Null(unionRoomChat->sendMessageBuffer); for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) - StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3AD4[i]); + StringCopy(unionRoomChat->registeredTexts[i], gSaveBlock1Ptr->registeredTexts[i]); } -static void sub_81284BC(void) +static void FreeChatWork(void) { - DestroyTask(gUnknown_203B0E0->unkE); - DestroyTask(gUnknown_203B0E0->unkF); - Free(gUnknown_203B0E0); + DestroyTask(sWork->handleInputTask); + DestroyTask(sWork->receiveMessagesTask); + Free(sWork); } -static void c2_081284E0(void) +static void CB2_LoadInterface(void) { switch (gMain.state) { @@ -225,16 +250,16 @@ static void c2_081284E0(void) ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); - sub_8129B14(); + UnionRoomChat_TryAllocGraphicsWork(); gMain.state++; break; case 1: - sub_8129BFC(); - if (!sub_8129B78()) + UnionRoomChat_RunDisplaySubtasks(); + if (!UnionRoomChat_RunDisplaySubtask0()) { BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - SetVBlankCallback(sub_81285B4); + SetVBlankCallback(VBlankCB_UnionRoomChatMain); gMain.state++; } break; @@ -242,10 +267,10 @@ static void c2_081284E0(void) UpdatePaletteFade(); if (!gPaletteFade.active) { - SetMainCallback2(sub_81285CC); + SetMainCallback2(CB2_UnionRoomChatMain); SetQuestLogEvent(QL_EVENT_USED_UNION_ROOM_CHAT, NULL); - gUnknown_203B0E0->unkE = CreateTask(sub_81285E8, 8); - gUnknown_203B0E0->unkF = CreateTask(sub_81298F8, 7); + sWork->handleInputTask = CreateTask(Task_HandlePlayerInput, 8); + sWork->receiveMessagesTask = CreateTask(Task_ReceiveChatMessage, 7); LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(232, 150); } @@ -253,7 +278,7 @@ static void c2_081284E0(void) } } -static void sub_81285B4(void) +static void VBlankCB_UnionRoomChatMain(void) { TransferPlttBuffer(); LoadOam(); @@ -261,146 +286,146 @@ static void sub_81285B4(void) ScanlineEffect_InitHBlankDmaTransfer(); } -static void sub_81285CC(void) +static void CB2_UnionRoomChatMain(void) { RunTasks(); - sub_8129BFC(); + UnionRoomChat_RunDisplaySubtasks(); AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); } -static void sub_81285E8(u8 taskId) +static void Task_HandlePlayerInput(u8 taskId) { - switch (gUnknown_203B0E0->unk17) + switch (sWork->exitType) { - case 1: - sub_8129218(6); - gUnknown_203B0E0->unk17 = 0; + case CHATEXIT_LEADER_LAST: + GoToRoutine(CHATENTRYROUTINE_EXITCHAT); + sWork->exitType = CHATEXIT_NONE; break; - case 2: - sub_8129218(7); - gUnknown_203B0E0->unk17 = 0; + case CHATEXIT_DROPPED: + GoToRoutine(CHATENTRYROUTINE_DROP); + sWork->exitType = CHATEXIT_NONE; break; - case 3: - sub_8129218(8); - gUnknown_203B0E0->unk17 = 0; + case CHATEXIT_DISBANDED: + GoToRoutine(CHATENTRYROUTINE_DISBANDED); + sWork->exitType = CHATEXIT_NONE; break; } - gUnknown_845A880[gUnknown_203B0E0->unk4](); + sChatEntryRoutines[sWork->routineNo](); } -static void sub_8128640(void) +static void ChatEntryRoutine_Join(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - sub_8129568(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6++; + PrepareSendBuffer_Join(sWork->sendMessageBuffer); + sWork->routineState++; // fall through case 1: - if (IsLinkTaskFinished() && !sub_80FBA1C()) + if (IsLinkTaskFinished() && !GetRfuUnkCE8()) { - if (SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) - gUnknown_203B0E0->unk6++; + if (SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + sWork->routineState++; } break; case 2: if (IsLinkTaskFinished()) - sub_8129218(1); + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; } } -static void sub_81286C4(void) +static void ChatEntryRoutine_HandleInput(void) { bool8 var0, var1; - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: if (JOY_NEW(START_BUTTON)) { - if (gUnknown_203B0E0->unk15) - sub_8129218(4); + if (sWork->bufferCursorPos) + GoToRoutine(CHATENTRYROUTINE_SEND); } else if (JOY_NEW(SELECT_BUTTON)) { - sub_8129218(2); + GoToRoutine(CHATENTRYROUTINE_SWITCH); } else if (JOY_REPT(B_BUTTON)) { - if (gUnknown_203B0E0->unk15) + if (sWork->bufferCursorPos) { - sub_81293AC(); - sub_8129C34(8, 0); - gUnknown_203B0E0->unk6 = 1; + DeleteLastCharacterOfChatMessageBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + sWork->routineState = 1; } else { - sub_8129218(3); + GoToRoutine(CHATENTRYROUTINE_ASKQUITCHATTING); } } else if (JOY_NEW(A_BUTTON)) { - sub_81292D8(); - sub_8129C34(8, 0); - sub_8129C34(2, 1); - gUnknown_203B0E0->unk6 = 1; + AppendCharacterToChatMessageBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CURSORBLINK, 1); + sWork->routineState = 1; } else if (JOY_NEW(R_BUTTON)) { - if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) + if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT) { - sub_81293D8(); - sub_8129C34(8, 0); - gUnknown_203B0E0->unk6 = 1; + ToggleCaseOfLastCharacterInChatMessageBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + sWork->routineState = 1; } else { - sub_8129218(5); + GoToRoutine(CHATENTRYROUTINE_REGISTER); } } - else if (sub_8129228()) + else if (TypeChatMessage_HandleDPad()) { - sub_8129C34(1, 0); - gUnknown_203B0E0->unk6 = 1; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0); + sWork->routineState = 1; } break; case 1: - var0 = sub_8129C8C(0); - var1 = sub_8129C8C(1); + var0 = RunDisplaySubtask(0); + var1 = RunDisplaySubtask(1); if (!var0 && !var1) - gUnknown_203B0E0->unk6 = 0; + sWork->routineState = 0; break; } } -static void sub_81287B4(void) +static void ChatEntryRoutine_Switch(void) { s16 input; - int var0; + int shouldSwitchPages; - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - sub_8129C34(3, 0); - gUnknown_203B0E0->unk6++; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWKBSWAPMENU, 0); + sWork->routineState++; break; case 1: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6++; + if (!RunDisplaySubtask(0)) + sWork->routineState++; break; case 2: input = Menu_ProcessInput(); switch (input) { default: - sub_8129C34(4, 0); - var0 = 1; - if (gUnknown_203B0E0->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT) - var0 = 0; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0); + shouldSwitchPages = 1; + if (sWork->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT) + shouldSwitchPages = 0; break; case MENU_NOTHING_CHOSEN: if (JOY_NEW(SELECT_BUTTON)) @@ -410,507 +435,509 @@ static void sub_81287B4(void) } return; case MENU_B_PRESSED: - sub_8129C34(4, 0); - gUnknown_203B0E0->unk6 = 3; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0); + sWork->routineState = 3; return; } - if (!var0) + if (!shouldSwitchPages) { - gUnknown_203B0E0->unk6 = 3; + sWork->routineState = 3; return; } - gUnknown_203B0E0->unk11 = 0; - gUnknown_203B0E0->currentRow = 0; - sub_8129C34(5, 1); - gUnknown_203B0E0->currentPage = input; - gUnknown_203B0E0->unk6 = 4; + sWork->currentCol = 0; + sWork->currentRow = 0; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SWITCHPAGES, 1); + sWork->currentPage = input; + sWork->routineState = 4; break; case 3: - if (!sub_8129C8C(0)) - sub_8129218(1); + // Wait Return To Prev Page + if (!RunDisplaySubtask(0)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; case 4: - if (!sub_8129C8C(0) && !sub_8129C8C(1)) - sub_8129218(1); + // Wait Page Switch + if (!RunDisplaySubtask(0) && !RunDisplaySubtask(1)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; } } -static void sub_81288D4(void) +static void ChatEntryRoutine_AskQuitChatting(void) { s8 input; - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - sub_8129C34(6, 0); - gUnknown_203B0E0->unk6 = 1; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, 0); + sWork->routineState = 1; break; case 1: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 2; + if (!RunDisplaySubtask(0)) + sWork->routineState = 2; break; case 2: - input = sub_812A568(); + input = UnionRoomChat_ProcessInput(); switch (input) { case -1: case 1: - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 3; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 3; break; case 0: - if (gUnknown_203B0E0->unk13 == 0) + if (sWork->multiplayerId == 0) { - sub_8129614(gUnknown_203B0E0->unk190); - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 9; + PrepareSendBuffer_Disband(sWork->sendMessageBuffer); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 9; } else { - sub_81295C0(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6 = 4; + PrepareSendBuffer_Leave(sWork->sendMessageBuffer); + sWork->routineState = 4; } break; } break; case 3: - if (!sub_8129C8C(0)) - sub_8129218(1); + if (!RunDisplaySubtask(0)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; case 9: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(20, 0); - gUnknown_203B0E0->unk6 = 10; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, 0); + sWork->routineState = 10; } break; case 10: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 8; + if (!RunDisplaySubtask(0)) + sWork->routineState = 8; break; case 8: - input = sub_812A568(); + input = UnionRoomChat_ProcessInput(); switch (input) { case -1: case 1: - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 3; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 3; break; case 0: sub_80FA4A8(); - sub_8129614(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6 = 4; + PrepareSendBuffer_Disband(sWork->sendMessageBuffer); + sWork->routineState = 4; break; } break; case 4: - if (IsLinkTaskFinished() && !sub_80FBA1C() && SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) + if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) { - if (!gUnknown_203B0E0->unk13) - gUnknown_203B0E0->unk6 = 6; + if (sWork->multiplayerId == 0) + sWork->routineState = 6; else - gUnknown_203B0E0->unk6 = 5; + sWork->routineState = 5; } break; case 5: - if (!gReceivedRemoteLinkPlayers) + if (gReceivedRemoteLinkPlayers == 0) { - sub_8129218(9); + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); } break; } } -static void sub_8128AA0(void) +static void ChatEntryRoutine_ExitChat(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (!FuncIsActiveTask(sub_81298F8)) + if (!FuncIsActiveTask(Task_ReceiveChatMessage)) { - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6++; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState++; } break; case 1: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(18, 0); - gUnknown_203B0E0->unk6++; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTEXITINGCHAT, 0); + sWork->routineState++; } break; case 2: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_81295EC(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6++; + PrepareSendBuffer_Drop(sWork->sendMessageBuffer); + sWork->routineState++; } break; case 3: - if (IsLinkTaskFinished() && !sub_80FBA1C() && SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) - gUnknown_203B0E0->unk6++; + if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + sWork->routineState++; break; case 4: - if ((GetBlockReceivedStatus() & 1) && !sub_80FBA1C()) - gUnknown_203B0E0->unk6++; + if ((GetBlockReceivedStatus() & 1) && !GetRfuUnkCE8()) + sWork->routineState++; break; case 5: - if (IsLinkTaskFinished() && !sub_80FBA1C()) + if (IsLinkTaskFinished() && !GetRfuUnkCE8()) { sub_800AAC0(); - gUnknown_203B0E0->unkA = 0; - gUnknown_203B0E0->unk6++; + sWork->exitDelayTimer = 0; + sWork->routineState++; } break; case 6: - if (gUnknown_203B0E0->unkA < 150) - gUnknown_203B0E0->unkA++; + if (sWork->exitDelayTimer < 150) + sWork->exitDelayTimer++; if (!gReceivedRemoteLinkPlayers) - gUnknown_203B0E0->unk6++; + sWork->routineState++; break; case 7: - if (gUnknown_203B0E0->unkA >= 150) - sub_8129218(9); + if (sWork->exitDelayTimer >= 150) + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); else - gUnknown_203B0E0->unkA++; + sWork->exitDelayTimer++; break; } } -static void sub_8128C04(void) +static void ChatEntryRoutine_Drop(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (!FuncIsActiveTask(sub_81298F8)) + if (!FuncIsActiveTask(Task_ReceiveChatMessage)) { - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6++; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState++; } break; case 1: - if (!sub_8129C8C(0) && IsLinkTaskFinished() && !sub_80FBA1C()) + if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !GetRfuUnkCE8()) { sub_800AAC0(); - gUnknown_203B0E0->unkA = 0; - gUnknown_203B0E0->unk6++; + sWork->exitDelayTimer = 0; + sWork->routineState++; } break; case 2: - if (gUnknown_203B0E0->unkA < 150) - gUnknown_203B0E0->unkA++; + if (sWork->exitDelayTimer < 150) + sWork->exitDelayTimer++; if (!gReceivedRemoteLinkPlayers) - gUnknown_203B0E0->unk6++; + sWork->routineState++; break; case 3: - if (gUnknown_203B0E0->unkA >= 150) - sub_8129218(9); + if (sWork->exitDelayTimer >= 150) + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); else - gUnknown_203B0E0->unkA++; + sWork->exitDelayTimer++; break; } } -static void sub_8128CA8(void) +static void ChatEntryRoutine_Disbanded(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (!FuncIsActiveTask(sub_81298F8)) + if (!FuncIsActiveTask(Task_ReceiveChatMessage)) { - if (gUnknown_203B0E0->unk13) - sub_8129C34(7, 0); + if (sWork->multiplayerId) + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); - gUnknown_203B0E0->unk6++; + sWork->routineState++; } break; case 1: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - if (gUnknown_203B0E0->unk13) - sub_8129C34(19, 0); + if (sWork->multiplayerId != 0) + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTLEADERLEFT, 0); - gUnknown_203B0E0->unk6++; + sWork->routineState++; } break; case 2: - if (sub_8129C8C(0) != TRUE && IsLinkTaskFinished() && !sub_80FBA1C()) + if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !GetRfuUnkCE8()) { sub_800AAC0(); - gUnknown_203B0E0->unkA = 0; - gUnknown_203B0E0->unk6++; + sWork->exitDelayTimer = 0; + sWork->routineState++; } break; case 3: - if (gUnknown_203B0E0->unkA < 150) - gUnknown_203B0E0->unkA++; + if (sWork->exitDelayTimer < 150) + sWork->exitDelayTimer++; if (!gReceivedRemoteLinkPlayers) - gUnknown_203B0E0->unk6++; + sWork->routineState++; break; case 4: - if (gUnknown_203B0E0->unkA >= 150) - sub_8129218(9); + if (sWork->exitDelayTimer >= 150) + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); else - gUnknown_203B0E0->unkA++; + sWork->exitDelayTimer++; break; } } -static void sub_8128DA4(void) +static void ChatEntryRoutine_SendMessage(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: if (!gReceivedRemoteLinkPlayers) { - sub_8129218(1); + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; } - sub_8129590(gUnknown_203B0E0->unk190); - gUnknown_203B0E0->unk6++; + PrepareSendBuffer_Chat(sWork->sendMessageBuffer); + sWork->routineState++; // fall through case 1: - if (IsLinkTaskFinished() == TRUE && !sub_80FBA1C() && SendBlock(0, gUnknown_203B0E0->unk190, sizeof(gUnknown_203B0E0->unk190))) - gUnknown_203B0E0->unk6++; + if (IsLinkTaskFinished() == TRUE && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + sWork->routineState++; break; case 2: - sub_8129454(); - sub_8129C34(8, 0); - gUnknown_203B0E0->unk6++; + ResetMessageEntryBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + sWork->routineState++; break; case 3: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6++; + if (!RunDisplaySubtask(0)) + sWork->routineState++; break; case 4: if (IsLinkTaskFinished()) - sub_8129218(1); + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; } } -static void sub_8128E78(void) +static void ChatEntryRoutine_Register(void) { - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (sub_8129408()) + if (ChatMsgHasAtLeastOneCharcter()) { - sub_8129C34(9, 0); - gUnknown_203B0E0->unk6 = 2; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTREGISTERWHERE, 0); + sWork->routineState = 2; } else { - sub_8129C34(13, 0); - gUnknown_203B0E0->unk6 = 5; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTINPUTTEXT, 0); + sWork->routineState = 5; } break; case 1: if (JOY_NEW(A_BUTTON)) { - sub_8129424(); - sub_8129C34(11, 0); - gUnknown_203B0E0->unk6 = 3; + RegisterTextAtRow(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_RETURNTOKB, 0); + sWork->routineState = 3; } else if (JOY_NEW(B_BUTTON)) { - sub_8129C34(10, 0); - gUnknown_203B0E0->unk6 = 4; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0); + sWork->routineState = 4; } - else if (sub_8129228()) + else if (TypeChatMessage_HandleDPad()) { - sub_8129C34(1, 0); - gUnknown_203B0E0->unk6 = 2; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0); + sWork->routineState = 2; } break; case 2: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 1; + if (!RunDisplaySubtask(0)) + sWork->routineState = 1; break; case 3: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(10, 0); - gUnknown_203B0E0->unk6 = 4; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0); + sWork->routineState = 4; } break; case 4: - if (!sub_8129C8C(0)) - sub_8129218(1); + if (!RunDisplaySubtask(0)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); break; case 5: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 6; + if (!RunDisplaySubtask(0)) + sWork->routineState = 6; break; case 6: if (JOY_NEW(A_BUTTON | B_BUTTON)) { - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 4; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 4; } break; } } -static void sub_8128FB8(void) +static void ChatEntryRoutine_SaveAndExit(void) { s8 input; - switch (gUnknown_203B0E0->unk6) + switch (sWork->routineState) { case 0: - if (!gUnknown_203B0E0->unk18) + if (!sWork->changedRegisteredTexts) { - gUnknown_203B0E0->unk6 = 12; + sWork->routineState = 12; } else { - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 1; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 1; } break; case 1: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(14, 0); - gUnknown_203B0E0->unk6 = 2; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKSAVE, 0); + sWork->routineState = 2; } break; case 2: - input = sub_812A568(); + input = UnionRoomChat_ProcessInput(); switch (input) { case -1: case 1: - gUnknown_203B0E0->unk6 = 12; + sWork->routineState = 12; break; case 0: - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 3; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 3; break; } break; case 3: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(15, 0); - gUnknown_203B0E0->unk6 = 4; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKOVERWRITESAVE, 0); + sWork->routineState = 4; } break; case 4: - if (!sub_8129C8C(0)) - gUnknown_203B0E0->unk6 = 5; + if (!RunDisplaySubtask(0)) + sWork->routineState = 5; break; case 5: - input = sub_812A568(); + input = UnionRoomChat_ProcessInput(); switch (input) { case -1: case 1: - gUnknown_203B0E0->unk6 = 12; + sWork->routineState = 12; break; case 0: - sub_8129C34(7, 0); - gUnknown_203B0E0->unk6 = 6; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 6; break; } break; case 6: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { - sub_8129C34(16, 0); - sub_8129470(); - gUnknown_203B0E0->unk6 = 7; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVING, 0); + SaveRegisteredTextsToSB1(); + sWork->routineState = 7; } break; case 7: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { SetContinueGameWarpStatusToDynamicWarp(); TrySavingData(SAVE_NORMAL); - gUnknown_203B0E0->unk6 = 8; + sWork->routineState = 8; } break; case 8: - sub_8129C34(17, 0); - gUnknown_203B0E0->unk6 = 9; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, 0); + sWork->routineState = 9; break; case 9: - if (!sub_8129C8C(0)) + if (!RunDisplaySubtask(0)) { PlaySE(SE_SAVE); ClearContinueGameWarpStatus2(); - gUnknown_203B0E0->unk6 = 10; + sWork->routineState = 10; } break; case 10: - gUnknown_203B0E0->unk19 = 0; - gUnknown_203B0E0->unk6 = 11; + sWork->afterSaveTimer = 0; + sWork->routineState = 11; break; case 11: - gUnknown_203B0E0->unk19++; - if (gUnknown_203B0E0->unk19 > 120) - gUnknown_203B0E0->unk6 = 12; + sWork->afterSaveTimer++; + if (sWork->afterSaveTimer > 120) + sWork->routineState = 12; break; case 12: BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - gUnknown_203B0E0->unk6 = 13; + sWork->routineState = 13; break; case 13: if (!gPaletteFade.active) { sub_812B4B8(); - sub_8129B88(); - sub_81284BC(); + UnionRoomChat_FreeGraphicsWork(); + FreeChatWork(); SetMainCallback2(CB2_ReturnToField); } break; } } -static void sub_8129218(u16 arg0) +static void GoToRoutine(u16 routineNo) { - gUnknown_203B0E0->unk4 = arg0; - gUnknown_203B0E0->unk6 = 0; + sWork->routineNo = routineNo; + sWork->routineState = 0; } -static bool32 sub_8129228(void) +static bool32 TypeChatMessage_HandleDPad(void) { if (!(gMain.newAndRepeatedKeys & DPAD_UP)) { if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - if (gUnknown_203B0E0->currentRow < sKeyboardPageMaxRow[gUnknown_203B0E0->currentPage]) - gUnknown_203B0E0->currentRow++; + if (sWork->currentRow < sKeyboardPageMaxRow[sWork->currentPage]) + sWork->currentRow++; else - gUnknown_203B0E0->currentRow = 0; + sWork->currentRow = 0; return TRUE; } - if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) + if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT) { if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - if (gUnknown_203B0E0->unk11) - gUnknown_203B0E0->unk11--; + if (sWork->currentCol) + sWork->currentCol--; else - gUnknown_203B0E0->unk11 = 4; + sWork->currentCol = 4; } else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { - if (gUnknown_203B0E0->unk11 > 3) - gUnknown_203B0E0->unk11 = 0; + if (sWork->currentCol > 3) + sWork->currentCol = 0; else - gUnknown_203B0E0->unk11++; + sWork->currentCol++; } else { @@ -924,16 +951,16 @@ static bool32 sub_8129228(void) } else { - if (gUnknown_203B0E0->currentRow) - gUnknown_203B0E0->currentRow--; + if (sWork->currentRow) + sWork->currentRow--; else - gUnknown_203B0E0->currentRow = sKeyboardPageMaxRow[gUnknown_203B0E0->currentPage]; + sWork->currentRow = sKeyboardPageMaxRow[sWork->currentPage]; return TRUE; } } -static void sub_81292D8(void) +static void AppendCharacterToChatMessageBuffer(void) { int i; const u8 *charsStr; @@ -941,10 +968,10 @@ static void sub_81292D8(void) u8 *str; u8 buffer[21]; - if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT) + if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT) { - charsStr = gUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow]; - for (i = 0; i < gUnknown_203B0E0->unk11; i++) + charsStr = gUnionRoomKeyboardText[sWork->currentPage][sWork->currentRow]; + for (i = 0; i < sWork->currentCol; i++) { if (*charsStr == CHAR_EXTRA_EMOJI) charsStr++; @@ -955,19 +982,19 @@ static void sub_81292D8(void) } else { - u8 *tempStr = StringCopy(buffer, gUnknown_203B0E0->unkB9[gUnknown_203B0E0->currentRow]); + u8 *tempStr = StringCopy(buffer, sWork->registeredTexts[sWork->currentRow]); tempStr[0] = CHAR_SPACE; tempStr[1] = EOS; charsStr = buffer; strLength = StringLength_Multibyte(buffer); } - gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15; + sWork->lastBufferCursorPos = sWork->bufferCursorPos; if (!charsStr) return; - str = sub_81294C8(); - while (--strLength != -1 && gUnknown_203B0E0->unk15 < 15) + str = GetEndOfUnk1A(); + while (--strLength != -1 && sWork->bufferCursorPos < MESSAGE_BUFFER_NCHAR) { if (*charsStr == CHAR_EXTRA_EMOJI) { @@ -980,86 +1007,84 @@ static void sub_81292D8(void) charsStr++; str++; - gUnknown_203B0E0->unk15++; + sWork->bufferCursorPos++; } *str = EOS; } -static void sub_81293AC(void) +static void DeleteLastCharacterOfChatMessageBuffer(void) { - gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15; - if (gUnknown_203B0E0->unk15) + sWork->lastBufferCursorPos = sWork->bufferCursorPos; + if (sWork->bufferCursorPos) { - u8 *str = sub_81294EC(); + u8 *str = GetPtrToLastCharOfUnk1A(); *str = EOS; - gUnknown_203B0E0->unk15--; + sWork->bufferCursorPos--; } } -static void sub_81293D8(void) +static void ToggleCaseOfLastCharacterInChatMessageBuffer(void) { u8 *str; u8 character; - gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15 - 1; - str = sub_81294EC(); + sWork->lastBufferCursorPos = sWork->bufferCursorPos - 1; + str = GetPtrToLastCharOfUnk1A(); if (*str != CHAR_EXTRA_EMOJI) { - character = gUnknown_845A8AC[*str]; + character = sCaseToggleTable[*str]; if (character) *str = character; } } -static bool32 sub_8129408(void) +static bool32 ChatMsgHasAtLeastOneCharcter(void) { - if (gUnknown_203B0E0->unk15) + if (sWork->bufferCursorPos) return TRUE; else return FALSE; } -static void sub_8129424(void) +static void RegisterTextAtRow(void) { - u8 *src = sub_8129758(); - StringCopy(gUnknown_203B0E0->unkB9[gUnknown_203B0E0->currentRow], src); - gUnknown_203B0E0->unk18 = 1; + u8 *src = UnionRoomChat_GetEndOfMessageEntryBuffer(); + StringCopy(sWork->registeredTexts[sWork->currentRow], src); + sWork->changedRegisteredTexts = TRUE; } -static void sub_8129454(void) +static void ResetMessageEntryBuffer(void) { - gUnknown_203B0E0->unk1A[0] = EOS; - gUnknown_203B0E0->unk14 = 15; - gUnknown_203B0E0->unk15 = 0; + sWork->messageEntryBuffer[0] = EOS; + sWork->lastBufferCursorPos = MESSAGE_BUFFER_NCHAR; + sWork->bufferCursorPos = 0; } -static void sub_8129470(void) +static void SaveRegisteredTextsToSB1(void) { int i; for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) - StringCopy(gSaveBlock1Ptr->unk3AD4[i], gUnknown_203B0E0->unkB9[i]); + StringCopy(gSaveBlock1Ptr->registeredTexts[i], sWork->registeredTexts[i]); } -u8 *sub_81294B0(int arg0) +u8 *UnionRoomChat_GetWorkRegisteredText(int arg0) { - return gUnknown_203B0E0->unkB9[arg0]; + return sWork->registeredTexts[arg0]; } -// GetEndOfUnk1A -static u8 *sub_81294C8(void) +static u8 *GetEndOfUnk1A(void) { - u8 *str = gUnknown_203B0E0->unk1A; + u8 *str = sWork->messageEntryBuffer; while (*str != EOS) str++; return str; } -// GetPtrToLastCharOfUnk1A -static u8 *sub_81294EC(void) +static u8 *GetPtrToLastCharOfUnk1A(void) { - u8 *str = gUnknown_203B0E0->unk1A; + u8 *str = sWork->messageEntryBuffer; u8 *str2 = str; while (*str != EOS) { @@ -1072,13 +1097,13 @@ static u8 *sub_81294EC(void) return str2; } -static u16 sub_812951C(void) +static u16 GetNumCharsInMessageEntryBuffer(void) { u8 *str; u32 i, numChars, strLength; - strLength = StringLength_Multibyte(gUnknown_203B0E0->unk1A); - str = gUnknown_203B0E0->unk1A; + strLength = StringLength_Multibyte(sWork->messageEntryBuffer); + str = sWork->messageEntryBuffer; numChars = 0; if (strLength > 10) { @@ -1096,83 +1121,83 @@ static u16 sub_812951C(void) return numChars; } -static void sub_8129560(u8 *arg0) +static void PrepareSendBuffer_Null(u8 *arg0) { - arg0[0] = 0; + arg0[0] = CHAT_MESSAGE_0; } -static void sub_8129568(u8 *arg0) +static void PrepareSendBuffer_Join(u8 *arg0) { - arg0[0] = 2; + arg0[0] = CHAT_MESSAGE_JOIN; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; } -static void sub_8129590(u8 *arg0) +static void PrepareSendBuffer_Chat(u8 *arg0) { - arg0[0] = 1; + arg0[0] = CHAT_MESSAGE_CHAT; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], gUnknown_203B0E0->unk1A); + StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], sWork->messageEntryBuffer); } -static void sub_81295C0(u8 *arg0) +static void PrepareSendBuffer_Leave(u8 *arg0) { - arg0[0] = 3; + arg0[0] = CHAT_MESSAGE_LEAVE; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; sub_80FB9D0(); } -static void sub_81295EC(u8 *arg0) +static void PrepareSendBuffer_Drop(u8 *arg0) { - arg0[0] = 4; + arg0[0] = CHAT_MESSAGE_DROP; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; } -static void sub_8129614(u8 *arg0) +static void PrepareSendBuffer_Disband(u8 *arg0) { - arg0[0] = 5; + arg0[0] = CHAT_MESSAGE_DISBAND; StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); - arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13; + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; } -static bool32 sub_812963C(u8 *arg0, u8 *arg1) +static bool32 ProcessReceivedChatMessage(u8 *dest, u8 *recvMessage) { u8 *tempStr; - u8 var0 = *arg1; - u8 *str = arg1 + 1; - arg1 = str; - arg1 += 8; + u8 cmd = *recvMessage; + u8 *name = recvMessage + 1; + recvMessage = name; + recvMessage += PLAYER_NAME_LENGTH + 1; - switch (var0) + switch (cmd) { - case 2: - if (gUnknown_203B0E0->unk13 != str[8]) + case CHAT_MESSAGE_JOIN: + if (sWork->multiplayerId != name[PLAYER_NAME_LENGTH + 1]) { DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); - DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700JoinedChat); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name); + DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700JoinedChat); return TRUE; } break; - case 1: - tempStr = StringCopy(arg0, str); + case CHAT_MESSAGE_CHAT: + tempStr = StringCopy(dest, name); *(tempStr++) = EXT_CTRL_CODE_BEGIN; *(tempStr++) = EXT_CTRL_CODE_CLEAR_TO; *(tempStr++) = 42; *(tempStr++) = CHAR_COLON; - StringCopy(tempStr, arg1); + StringCopy(tempStr, recvMessage); return TRUE; - case 5: - StringCopy(gUnknown_203B0E0->unk79, str); + case CHAT_MESSAGE_DISBAND: + StringCopy(sWork->hostName, name); // fall through - case 3: - if (gUnknown_203B0E0->unk13 != *arg1) + case CHAT_MESSAGE_LEAVE: + if (sWork->multiplayerId != *recvMessage) { DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); - DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700LeftChat); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name); + DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700LeftChat); return TRUE; } break; @@ -1183,47 +1208,47 @@ static bool32 sub_812963C(u8 *arg0, u8 *arg1) u8 GetCurrentKeyboardPage(void) { - return gUnknown_203B0E0->currentPage; + return sWork->currentPage; } -void sub_8129700(u8 *arg0, u8 *arg1) +void UnionRoomChat_GetCursorColAndRow(u8 *colp, u8 *rowp) { - *arg0 = gUnknown_203B0E0->unk11; - *arg1 = gUnknown_203B0E0->currentRow; + *colp = sWork->currentCol; + *rowp = sWork->currentRow; } -u8 *sub_8129714(void) +u8 *UnionRoomChat_GetMessageEntryBuffer(void) { - return gUnknown_203B0E0->unk1A; + return sWork->messageEntryBuffer; } -int sub_8129720(void) +int UnionRoomChat_LenMessageEntryBuffer(void) { - u8 *str = sub_8129714(); + u8 *str = UnionRoomChat_GetMessageEntryBuffer(); return StringLength_Multibyte(str); } -void sub_8129730(u32 *arg0, u32 *arg1) +void UnionRoomChat_GetBufferSelectionRegion(u32 *startp, u32 *diffp) { - int diff = gUnknown_203B0E0->unk15 - gUnknown_203B0E0->unk14; + int diff = sWork->bufferCursorPos - sWork->lastBufferCursorPos; if (diff < 0) { diff *= -1; - *arg0 = gUnknown_203B0E0->unk15; + *startp = sWork->bufferCursorPos; } else { - *arg0 = gUnknown_203B0E0->unk14; + *startp = sWork->lastBufferCursorPos; } - *arg1 = diff; + *diffp = diff; } -u8 *sub_8129758(void) +u8 *UnionRoomChat_GetEndOfMessageEntryBuffer(void) { int i; - u16 numChars = sub_812951C(); - u8 *str = gUnknown_203B0E0->unk1A; + u16 numChars = GetNumCharsInMessageEntryBuffer(); + u8 *str = sWork->messageEntryBuffer; for (i = 0; i < numChars; i++) { if (*str == CHAR_EXTRA_EMOJI) @@ -1235,12 +1260,13 @@ u8 *sub_8129758(void) return str; } -u16 sub_8129788(void) +// Useless overhead +u16 UnionRoomChat_GetNumCharsInMessageEntryBuffer(void) { u16 count; u32 i; - u16 numChars = sub_812951C(); - u8 *str = gUnknown_203B0E0->unk1A; + u16 numChars = GetNumCharsInMessageEntryBuffer(); + u8 *str = sWork->messageEntryBuffer; for (count = 0, i = 0; i < numChars; count++, i++) { if (*str == CHAR_EXTRA_EMOJI) @@ -1252,56 +1278,64 @@ u16 sub_8129788(void) return count; } -u8 *sub_81297C4(void) +u8 *UnionRoomChat_GetLastReceivedMessage(void) { - return gUnknown_203B0E0->unk39; + return sWork->receivedMessage; } -u16 sub_81297D0(void) +u16 UnionRoomChat_GetReceivedPlayerIndex(void) { - return gUnknown_203B0E0->unk16; + return sWork->receivedPlayerIndex; } -int sub_81297DC(void) +int UnionRoomChat_GetMessageEntryCursorPosition(void) { - return gUnknown_203B0E0->unk15; + return sWork->bufferCursorPos; } -int sub_81297E8(void) +// This probably does more in the Japanese titles. +int UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(void) { - u8 *str = sub_81294EC(); + u8 *str = GetPtrToLastCharOfUnk1A(); u32 character = *str; - if (character > 0xFF || gUnknown_845A8AC[character] == character || gUnknown_845A8AC[character] == 0) + if (character > 0xFF || sCaseToggleTable[character] == character || sCaseToggleTable[character] == 0) return 3; else return 0; } -u8 *sub_8129814(void) +u8 *UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(void) { - return gUnknown_203B0E0->unk79; + return sWork->hostName; } -void copy_strings_to_sav1(void) +void UnionRoomChat_InitializeRegisteredTexts(void) { - StringCopy(gSaveBlock1Ptr->unk3AD4[0], gText_Hello); - StringCopy(gSaveBlock1Ptr->unk3AD4[1], gText_Pokemon2); - StringCopy(gSaveBlock1Ptr->unk3AD4[2], gText_Trade); - StringCopy(gSaveBlock1Ptr->unk3AD4[3], gText_Battle); - StringCopy(gSaveBlock1Ptr->unk3AD4[4], gText_Lets); - StringCopy(gSaveBlock1Ptr->unk3AD4[5], gText_Ok); - StringCopy(gSaveBlock1Ptr->unk3AD4[6], gText_Sorry); - StringCopy(gSaveBlock1Ptr->unk3AD4[7], gText_YaySmileEmoji); - StringCopy(gSaveBlock1Ptr->unk3AD4[8], gText_ThankYou); - StringCopy(gSaveBlock1Ptr->unk3AD4[9], gText_ByeBye); + StringCopy(gSaveBlock1Ptr->registeredTexts[0], gText_Hello); + StringCopy(gSaveBlock1Ptr->registeredTexts[1], gText_Pokemon2); + StringCopy(gSaveBlock1Ptr->registeredTexts[2], gText_Trade); + StringCopy(gSaveBlock1Ptr->registeredTexts[3], gText_Battle); + StringCopy(gSaveBlock1Ptr->registeredTexts[4], gText_Lets); + StringCopy(gSaveBlock1Ptr->registeredTexts[5], gText_Ok); + StringCopy(gSaveBlock1Ptr->registeredTexts[6], gText_Sorry); + StringCopy(gSaveBlock1Ptr->registeredTexts[7], gText_YaySmileEmoji); + StringCopy(gSaveBlock1Ptr->registeredTexts[8], gText_ThankYou); + StringCopy(gSaveBlock1Ptr->registeredTexts[9], gText_ByeBye); } -static void sub_81298F8(u8 taskId) +#define tState data[0] +#define tI data[1] +#define tCurrLinkPlayer data[2] +#define tBlockReceivedStatus data[3] +#define tLinkPlayerCount data[4] +#define tNextState data[5] + +static void Task_ReceiveChatMessage(u8 taskId) { u8 *buffer; s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: if (!gReceivedRemoteLinkPlayers) @@ -1310,98 +1344,110 @@ static void sub_81298F8(u8 taskId) return; } - data[0] = 1; + tState = 1; // fall through case 1: - data[4] = GetLinkPlayerCount(); - if (gUnknown_203B0E0->unkD != data[4]) + tLinkPlayerCount = GetLinkPlayerCount(); + if (sWork->linkPlayerCount != tLinkPlayerCount) { - data[0] = 2; - gUnknown_203B0E0->unkD = data[4]; + tState = 2; + sWork->linkPlayerCount = tLinkPlayerCount; return; } - data[3] = GetBlockReceivedStatus(); - if (!data[3] && sub_80FBA1C()) + tBlockReceivedStatus = GetBlockReceivedStatus(); + if (!tBlockReceivedStatus && GetRfuUnkCE8()) return; - data[1] = 0; - data[0] = 3; + tI = 0; + tState = 3; // fall through case 3: - for (; data[1] < 5 && ((data[3] >> data[1]) & 1) == 0; data[1]++) + // Idle listen + for (; tI < 5 && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++) ; - if (data[1] == 5) + if (tI == 5) { - data[0] = 1; + tState = 1; return; } - data[2] = data[1]; - ResetBlockReceivedFlag(data[2]); - buffer = (u8 *)gBlockRecvBuffer[data[1]]; + tCurrLinkPlayer = tI; + ResetBlockReceivedFlag(tCurrLinkPlayer); + buffer = (u8 *)gBlockRecvBuffer[tI]; switch (buffer[0]) { default: - case 1: data[5] = 3; break; - case 2: data[5] = 3; break; - case 3: data[5] = 4; break; - case 4: data[5] = 5; break; - case 5: data[5] = 6; break; + case CHAT_MESSAGE_CHAT: tNextState = 3; break; + case CHAT_MESSAGE_JOIN: tNextState = 3; break; + case CHAT_MESSAGE_LEAVE: tNextState = 4; break; + case CHAT_MESSAGE_DROP: tNextState = 5; break; + case CHAT_MESSAGE_DISBAND: tNextState = 6; break; } - if (sub_812963C(gUnknown_203B0E0->unk39, (u8 *)gBlockRecvBuffer[data[1]])) + if (ProcessReceivedChatMessage(sWork->receivedMessage, (u8 *)gBlockRecvBuffer[tI])) { - gUnknown_203B0E0->unk16 = data[1]; - sub_8129C34(12, 2); - data[0] = 7; + sWork->receivedPlayerIndex = tI; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SCROLLCHAT, 2); + tState = 7; } else { - data[0] = data[5]; + tState = tNextState; } - data[1]++; + tI++; break; case 7: - if (!sub_8129C8C(2)) - data[0] = data[5]; + if (!RunDisplaySubtask(2)) + tState = tNextState; break; case 4: - if (!gUnknown_203B0E0->unk13 && data[2]) + // Someone is leaving + if (sWork->multiplayerId == 0 && tCurrLinkPlayer != 0) { + // You're the leader, and the person who left is not you if (GetLinkPlayerCount() == 2) { sub_80FA4A8(); - gUnknown_203B0E0->unk17 = 1; + sWork->exitType = CHATEXIT_LEADER_LAST; DestroyTask(taskId); return; } - sub_80FBD6C(data[2]); + sub_80FBD6C(tCurrLinkPlayer); } - data[0] = 3; + tState = 3; break; case 5: - if (gUnknown_203B0E0->unk13) - gUnknown_203B0E0->unk17 = 2; + // Person left + if (sWork->multiplayerId != 0) + sWork->exitType = CHATEXIT_DROPPED; DestroyTask(taskId); break; case 6: - gUnknown_203B0E0->unk17 = 3; + // The leader disbanded the chat + sWork->exitType = CHATEXIT_DISBANDED; DestroyTask(taskId); break; case 2: - if (!sub_80FBA1C()) + if (!GetRfuUnkCE8()) { - if (!gUnknown_203B0E0->unk13) - sub_80FB030(gUnknown_203B0E0->unkD); + if (sWork->multiplayerId == 0) + sub_80FB030(sWork->linkPlayerCount); - data[0] = 1; + tState = 1; } break; } } + +#undef tNextState +#undef tLinkPlayerCount +#undef tBlockReceivedStatus +#undef tCurrLinkPlayer +#undef tI +#undef tState diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c index 4bd4be8fe..f43e40368 100644 --- a/src/union_room_chat_display.c +++ b/src/union_room_chat_display.c @@ -11,6 +11,18 @@ #include "union_room_chat_display.h" #include "union_room_chat_objects.h" +#define STDMESSAGE_QUIT_CHATTING 0 +#define STDMESSAGE_REGISTER_WHERE 1 +#define STDMESSAGE_REGISTER_HERE 2 +#define STDMESSAGE_INPUT_TEXT 3 +#define STDMESSAGE_EXITING_CHAT 4 +#define STDMESSAGE_LEADER_LEFT 5 +#define STDMESSAGE_ASK_SAVE 6 +#define STDMESSAGE_ASK_OVERWRITE 7 +#define STDMESSAGE_SAVING_NO_OFF 8 +#define STDMESSAGE_SAVED_THE_GAME 9 +#define STDMESSAGE_WARN_LEADER_LEAVE 10 + struct UnionRoomChat2Subtask { bool32 (*callback)(u8 *); @@ -21,9 +33,9 @@ struct UnionRoomChat2Subtask struct UnionRoomChat2 { struct UnionRoomChat2Subtask subtasks[3]; - u16 unk18; - u16 unk1A; - u16 unk1C; + u16 yesNoMenuWinId; + u16 curLine; + u16 scrollCount; u16 messageWindowId; s16 bg1hofs; u8 expandedPlaceholdersBuffer[0x106]; @@ -35,13 +47,13 @@ struct UnionRoomChat2 u8 unk2148[0x20]; }; -struct Unk845AABC +struct SubtaskInfo { u16 idx; bool32 (*callback)(u8 *); }; -struct Unk845AB64 +struct MessageWindowInfo { const u8 *text; bool8 boxType; @@ -53,63 +65,63 @@ struct Unk845AB64 bool8 widerBox; }; -static EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL; - -static void sub_8129BB8(struct UnionRoomChat2 * ptr); -static void sub_8129BC4(void); -static bool32 sub_8129CA0(u8 *state); -static bool32 sub_8129D40(u8 *state); -static bool32 sub_8129D78(u8 *state); -static bool32 sub_8129DB0(u8 *state); -static bool32 sub_8129E1C(u8 *state); -static bool32 sub_8129E28(u8 *state); -static bool32 sub_8129E74(u8 *state); -static bool32 sub_8129EB8(u8 *state); -static bool32 sub_8129F24(u8 *state); -static bool32 sub_8129FCC(u8 *state); -static bool32 sub_812A074(u8 *state); -static bool32 sub_812A0B0(u8 *state); -static bool32 sub_812A18C(u8 *state); -static bool32 sub_812A1B8(u8 *state); -static bool32 sub_812A1FC(u8 *state); -static bool32 sub_812A240(u8 *state); -static bool32 sub_812A294(u8 *state); -static bool32 sub_812A2E4(u8 *state); -static bool32 sub_812A334(u8 *state); -static bool32 sub_812A378(u8 *state); -static bool32 sub_812A3D0(u8 *state); -static bool32 sub_812A420(u8 *state); -static void sub_812A424(u8 a0, u8 a1, u8 a2); -static void sub_812A51C(void); -static void sub_812A544(void); -static void sub_812A578(int a0, u16 a1); -static void sub_812A6F4(void); -static void sub_812A728(void); -static void sub_812A74C(u16 a0, u16 a1, u8 a2); -static void sub_812A778(u16 a0, u8 *a1, u8 a2, u8 a3, u8 a4); -static void sub_812A804(void); -static bool32 sub_812A980(void); -static bool32 sub_812A9C8(void); -static void sub_812AA10(void); -static void sub_812AA64(void); -static void sub_812AA78(u16 a0, u8 *a1, u8 a2); -static void sub_812AAD4(void); -static void sub_812AB8C(void); -static void sub_812ABD8(void); -static void sub_812AC08(void); -static void sub_812AC58(void); -static void sub_812AC9C(void); -static void sub_812ACC0(void); -static void sub_812ACEC(void); -static void sub_812AD04(void); -static void sub_812AD20(void); +static EWRAM_DATA struct UnionRoomChat2 * sWork = NULL; + +static void InitWork(struct UnionRoomChat2 * ptr); +static void UnionRoomChat_ResetDisplaySubtasks(void); +static bool32 DisplaySubtask_LoadGfx(u8 *state); +static bool32 DisplaySubtask_PrintWin3(u8 *state); +static bool32 DisplaySubtask_HideWin3(u8 *state); +static bool32 DisplaySubtask_SwitchPages(u8 *state); +static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state); +static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state); +static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state); +static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state); +static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state); +static bool32 DisplaySubtask_CancelRegister(u8 *state); +static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state); +static bool32 DisplaySubtask_ScrollChat(u8 *state); +static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state); +static bool32 DisplaySubtask_PrintInputText(u8 *state); +static bool32 DisplaySubtask_PrintExitingChat(u8 *state); +static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state); +static bool32 DisplaySubtask_AskSave(u8 *state); +static bool32 DisplaySubtask_AskOverwriteSave(u8 *state); +static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state); +static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state); +static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state); +static bool32 DisplaySubtaskDummy(u8 *state); +static void PlaceYesNoMenuAt(u8 a0, u8 a1, u8 a2); +static void HideYesNoMenuWindow(void); +static void DestroyYesNoMenuWindow(void); +static void PlaceStdMessageWindow(int id, u16 bg0vofs); +static void HideStdMessageWindow(void); +static void DestroyStdMessageWindow(void); +static void FillWin1Rect(u16 x, u16 width, u8 fillValue); +static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor); +static void PrintCurrentKeyboardPage(void); +static bool32 AnimateMoveBg1Right(void); +static bool32 AnimateMoveBg1Left(void); +static void PrintKeyboardSwapTextsOnWin3(void); +static void ClearWin3(void); +static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx); +static void ResetGpuBgState(void); +static void SetBgTilemapWorkBuffers(void); +static void ClearBg0(void); +static void LoadUnionRoomChatPanelGfx(void); +static void LoadLinkMiscMenuGfx(void); +static void LoadBg1Pal8(void); +static void LoadWin0(void); +static void LoadWin2(void); +static void LoadWin1(void); +static void LoadWin3(void); static void sub_812AD50(void); -static void sub_812ADA0(s16 a0); -static void sub_812ADF8(s16 a0); +static void FillScanlineEffectWithValue1col(s16 a0); +static void FillScanlineEffectWithValue2col(s16 a0); -static const u16 gUnknown_845AA24[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal"); -static const u16 gUnknown_845AA44[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal"); -static const u16 gUnknown_845AA64[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal"); +static const u16 sUnionRoomChatPanelBgPal_C[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal"); +static const u16 sBg1Pal8[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal"); +static const u16 sWin0PalF[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal"); static const struct BgTemplate gUnknown_845AA84[] = { { @@ -183,32 +195,33 @@ static const struct WindowTemplate gUnknown_845AA94[] = { }, DUMMY_WIN_TEMPLATE }; -static const struct Unk845AABC gUnknown_845AABC[] = { - { 0, sub_8129CA0}, - { 3, sub_8129D40}, - { 4, sub_8129D78}, - { 5, sub_8129DB0}, - { 1, sub_8129E1C}, - { 6, sub_8129E28}, - { 7, sub_8129E74}, - { 8, sub_8129EB8}, - { 9, sub_8129F24}, - {10, sub_8129FCC}, - {11, sub_812A074}, - {12, sub_812A0B0}, - { 2, sub_812A18C}, - {13, sub_812A1B8}, - {18, sub_812A1FC}, - {19, sub_812A240}, - {14, sub_812A294}, - {15, sub_812A2E4}, - {16, sub_812A334}, - {17, sub_812A378}, - {20, sub_812A3D0} +static const struct SubtaskInfo sSubtaskInfo[] = { + {CHATDISPLAYROUTINE_LOADGFX, DisplaySubtask_LoadGfx}, + {CHATDISPLAYROUTINE_SHOWKBSWAPMENU, DisplaySubtask_PrintWin3}, + {CHATDISPLAYROUTINE_HIDEKBSWAPMENU, DisplaySubtask_HideWin3}, + {CHATDISPLAYROUTINE_SWITCHPAGES, DisplaySubtask_SwitchPages}, + {CHATDISPLAYROUTINE_MOVEKBCURSOR, DisplaySubtask_MoveSelectorCursorObj}, + {CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, DisplaySubtask_ShowQuitChattingDialog}, + {CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, DisplaySubtask_HideQuitChattingDialog}, + {CHATDISPLAYROUTINE_PRINTMSG, DisplaySubtask_UpdateMessageBuffer}, + {CHATDISPLAYROUTINE_PRINTREGISTERWHERE, DisplaySubtask_PrintRegisterWhere}, + {CHATDISPLAYROUTINE_CANCELREGISTER, DisplaySubtask_CancelRegister}, + {CHATDISPLAYROUTINE_RETURNTOKB, DisplaySubtask_ReturnToKeyboard}, + {CHATDISPLAYROUTINE_SCROLLCHAT, DisplaySubtask_ScrollChat}, + {CHATDISPLAYROUTINE_CURSORBLINK, DisplaySubtask_AnimateSelectorCursorBlink}, + {CHATDISPLAYROUTINE_PRINTINPUTTEXT, DisplaySubtask_PrintInputText}, + {CHATDISPLAYROUTINE_PRINTEXITINGCHAT, DisplaySubtask_PrintExitingChat}, + {CHATDISPLAYROUTINE_PRINTLEADERLEFT, DisplaySubtask_PrintLeaderLeft}, + {CHATDISPLAYROUTINE_ASKSAVE, DisplaySubtask_AskSave}, + {CHATDISPLAYROUTINE_ASKOVERWRITESAVE, DisplaySubtask_AskOverwriteSave}, + {CHATDISPLAYROUTINE_PRINTSAVING, DisplaySubtask_PrintSavingDontTurnOffPower}, + {CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, DisplaySubtask_PrintSavedTheGame}, + {CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, DisplaySubtask_ShowConfirmLeaderLeaveDialog} }; -static const struct Unk845AB64 gUnknown_845AB64[] = { - { +static const struct MessageWindowInfo sMessageWindowInfo[] = { + + [STDMESSAGE_QUIT_CHATTING] = { .text = gText_QuitChatting, .boxType = 1, .x = 0, @@ -217,7 +230,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_REGISTER_WHERE] = { .text = gText_RegisterTextWhere, .boxType = 1, .x = 0, @@ -226,7 +240,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_REGISTER_HERE] = { .text = gText_RegisterTextHere, .boxType = 1, .x = 0, @@ -235,7 +250,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_INPUT_TEXT] = { .text = gText_InputText, .boxType = 1, .x = 0, @@ -244,7 +260,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_EXITING_CHAT] = { .text = gText_ExitingTheChat, .boxType = 2, .x = 0, @@ -253,7 +270,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_LEADER_LEFT] = { .text = gText_LeaderHasLeftEndingChat, .boxType = 2, .x = 0, @@ -262,7 +280,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = TRUE, .widerBox = FALSE - }, { + }, + [STDMESSAGE_ASK_SAVE] = { .text = gText_RegisteredTextChanged_OKtoSave, .boxType = 2, .x = 0, @@ -271,7 +290,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = TRUE - }, { + }, + [STDMESSAGE_ASK_OVERWRITE] = { .text = gText_RegisteredTextChanged_AlreadySavedFile, .boxType = 2, .x = 0, @@ -280,7 +300,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = TRUE - }, { + }, + [STDMESSAGE_SAVING_NO_OFF] = { .text = gText_RegisteredTextChanged_SavingDontTurnOff, .boxType = 2, .x = 0, @@ -289,7 +310,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = FALSE, .widerBox = TRUE - }, { + }, + [STDMESSAGE_SAVED_THE_GAME] = { .text = gText_RegisteredTextChanged_SavedTheGame, .boxType = 2, .x = 0, @@ -298,7 +320,8 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { .lineSpacing = 2, .expandPlaceholders = TRUE, .widerBox = TRUE - }, { + }, + [STDMESSAGE_WARN_LEADER_LEAVE] = { .text = gText_IfLeaderLeavesChatWillEnd, .boxType = 2, .x = 0, @@ -312,7 +335,7 @@ static const struct Unk845AB64 gUnknown_845AB64[] = { static const u8 gText_Ellipsis[] = _("…"); -static const struct MenuAction gUnknown_845ABEC[] = { +static const struct MenuAction sKeyboardSwapTexts[] = { {gText_Upper}, {gText_Lower}, {gText_Symbols}, @@ -320,19 +343,19 @@ static const struct MenuAction gUnknown_845ABEC[] = { {gText_Exit} }; -bool8 sub_8129B14(void) +bool8 UnionRoomChat_TryAllocGraphicsWork(void) { - gUnknown_203B0E4 = Alloc(sizeof(*gUnknown_203B0E4)); - if (gUnknown_203B0E4 && sub_812AE70()) + sWork = Alloc(sizeof(*sWork)); + if (sWork && UnionRoomChat_TryAllocSpriteWork()) { ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_845AA84, NELEMS(gUnknown_845AA84)); InitWindows(gUnknown_845AA94); ResetTempTileDataBuffers(); sub_812AD50(); - sub_8129BB8(gUnknown_203B0E4); - sub_8129BC4(); - sub_8129C34(0, 0); + InitWork(sWork); + UnionRoomChat_ResetDisplaySubtasks(); + UnionRoomChat_StartDisplaySubtask(0, 0); return TRUE; } else @@ -341,80 +364,80 @@ bool8 sub_8129B14(void) } } -bool32 sub_8129B78(void) +bool32 UnionRoomChat_RunDisplaySubtask0(void) { - return sub_8129C8C(0); + return RunDisplaySubtask(0); } -void sub_8129B88(void) +void UnionRoomChat_FreeGraphicsWork(void) { - sub_812AEB0(); - if (gUnknown_203B0E4) - FREE_AND_SET_NULL(gUnknown_203B0E4); + UnionRoomChat_FreeSpriteWork(); + if (sWork != NULL) + FREE_AND_SET_NULL(sWork); FreeAllWindowBuffers(); gScanlineEffect.state = 3; } -static void sub_8129BB8(struct UnionRoomChat2 *arg0) +static void InitWork(struct UnionRoomChat2 *arg0) { - arg0->unk18 = 0xFF; + arg0->yesNoMenuWinId = 0xFF; arg0->messageWindowId = 0xFF; - arg0->unk1A = 0; + arg0->curLine = 0; } -void sub_8129BC4(void) +void UnionRoomChat_ResetDisplaySubtasks(void) { int i; - if (gUnknown_203B0E4 == NULL) + if (sWork == NULL) return; for (i = 0; i < 3; i++) { - gUnknown_203B0E4->subtasks[i].callback = sub_812A420; - gUnknown_203B0E4->subtasks[i].active = FALSE; - gUnknown_203B0E4->subtasks[i].state = 0; + sWork->subtasks[i].callback = DisplaySubtaskDummy; + sWork->subtasks[i].active = FALSE; + sWork->subtasks[i].state = 0; } } -void sub_8129BFC(void) +void UnionRoomChat_RunDisplaySubtasks(void) { int i; - if (gUnknown_203B0E4 == NULL) + if (sWork == NULL) return; for (i = 0; i < 3; i++) { - if (gUnknown_203B0E4->subtasks[i].active) - gUnknown_203B0E4->subtasks[i].active = gUnknown_203B0E4->subtasks[i].callback(&gUnknown_203B0E4->subtasks[i].state); + if (sWork->subtasks[i].active) + sWork->subtasks[i].active = sWork->subtasks[i].callback(&sWork->subtasks[i].state); } } -void sub_8129C34(u16 arg0, u8 arg1) +void UnionRoomChat_StartDisplaySubtask(u16 arg0, u8 arg1) { int i; - gUnknown_203B0E4->subtasks[arg1].callback = sub_812A420; - for (i = 0; i < NELEMS(gUnknown_845AABC); i++) + sWork->subtasks[arg1].callback = DisplaySubtaskDummy; + for (i = 0; i < NELEMS(sSubtaskInfo); i++) { - if (gUnknown_845AABC[i].idx == arg0) + if (sSubtaskInfo[i].idx == arg0) { - gUnknown_203B0E4->subtasks[arg1].callback = gUnknown_845AABC[i].callback; - gUnknown_203B0E4->subtasks[arg1].active = TRUE; - gUnknown_203B0E4->subtasks[arg1].state = 0; + sWork->subtasks[arg1].callback = sSubtaskInfo[i].callback; + sWork->subtasks[arg1].active = TRUE; + sWork->subtasks[arg1].state = 0; break; } } } -bool8 sub_8129C8C(u8 arg0) +bool8 RunDisplaySubtask(u8 arg0) { - return gUnknown_203B0E4->subtasks[arg0].active; + return sWork->subtasks[arg0].active; } -static bool32 sub_8129CA0(u8 *state) +static bool32 DisplaySubtask_LoadGfx(u8 *state) { if (FreeTempTileDataBuffersIfPossible() == TRUE) return TRUE; @@ -422,33 +445,33 @@ static bool32 sub_8129CA0(u8 *state) switch (*state) { case 0: - sub_812AAD4(); - sub_812AB8C(); + ResetGpuBgState(); + SetBgTilemapWorkBuffers(); break; case 1: - sub_812ABD8(); + ClearBg0(); break; case 2: - sub_812AC08(); + LoadUnionRoomChatPanelGfx(); break; case 3: - sub_812AC58(); + LoadLinkMiscMenuGfx(); break; case 4: - sub_812AC9C(); + LoadBg1Pal8(); break; case 5: - sub_812ACC0(); - sub_812ACEC(); - sub_812AD20(); - sub_812AD04(); + LoadWin0(); + LoadWin2(); + LoadWin3(); + LoadWin1(); break; case 6: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812AEC8(); - sub_812B048(); - sub_812B100(); + UnionRoomChat_CreateSelectorCursorObj(); + UnionRoomChat_SpawnTextEntryPointerSprites(); + CreatePageSwitchUISprites(); } break; default: @@ -459,12 +482,12 @@ static bool32 sub_8129CA0(u8 *state) return TRUE; } -static bool32 sub_8129D40(u8 *state) +static bool32 DisplaySubtask_PrintWin3(u8 *state) { switch (*state) { case 0: - sub_812AA10(); + PrintKeyboardSwapTextsOnWin3(); CopyWindowToVram(3, 3); break; case 1: @@ -475,12 +498,12 @@ static bool32 sub_8129D40(u8 *state) return TRUE; } -static bool32 sub_8129D78(u8 *state) +static bool32 DisplaySubtask_HideWin3(u8 *state) { switch (*state) { case 0: - sub_812AA64(); + ClearWin3(); CopyWindowToVram(3, 3); break; case 1: @@ -491,16 +514,16 @@ static bool32 sub_8129D78(u8 *state) return TRUE; } -static bool32 sub_8129DB0(u8 *state) +static bool32 DisplaySubtask_SwitchPages(u8 *state) { switch (*state) { case 0: - sub_812AEFC(TRUE); - if (sub_812A980()) + UnionRoomChat_ToggleSelectorCursorObjVisibility(TRUE); + if (AnimateMoveBg1Right()) return TRUE; - sub_812A804(); + PrintCurrentKeyboardPage(); CopyWindowToVram(2, 2); break; case 1: @@ -508,12 +531,12 @@ static bool32 sub_8129DB0(u8 *state) return TRUE; break; case 2: - if (sub_812A9C8()) + if (AnimateMoveBg1Left()) return TRUE; - sub_812AF1C(); - sub_812AEFC(FALSE); - sub_812B160(); + UnionRoomChat_MoveSelectorCursorObj(); + UnionRoomChat_ToggleSelectorCursorObjVisibility(FALSE); + UpdateVisibleUnionRoomChatIcon(); return FALSE; } @@ -521,20 +544,20 @@ static bool32 sub_8129DB0(u8 *state) return TRUE; } -static bool32 sub_8129E1C(u8 *state) +static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state) { - sub_812AF1C(); + UnionRoomChat_MoveSelectorCursorObj(); return FALSE; } -static bool32 sub_8129E28(u8 *state) +static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state) { switch (*state) { case 0: - sub_812A578(0, 0); - sub_812A424(23, 11, 1); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_QUIT_CHATTING, 0); + PlaceYesNoMenuAt(23, 11, 1); + CopyWindowToVram(sWork->messageWindowId, 3); break; case 1: return IsDma3ManagerBusyWithBgCopy(); @@ -544,21 +567,21 @@ static bool32 sub_8129E28(u8 *state) return TRUE; } -static bool32 sub_8129E74(u8 *state) +static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state) { switch (*state) { case 0: - sub_812A6F4(); - sub_812A51C(); + HideStdMessageWindow(); + HideYesNoMenuWindow(); CopyBgTilemapBufferToVram(0); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) return TRUE; - sub_812A728(); - sub_812A544(); + DestroyStdMessageWindow(); + DestroyYesNoMenuWindow(); return FALSE; } @@ -566,24 +589,24 @@ static bool32 sub_8129E74(u8 *state) return TRUE; } -static bool32 sub_8129EB8(u8 *state) +static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state) { - u32 var0, var1; + u32 start, length; u8 *str; switch (*state) { case 0: - sub_8129730(&var0, &var1); - sub_812A74C(var0, var1, 0); - str = sub_8129714(); - sub_812A778(0, str, 3, 1, 2); + UnionRoomChat_GetBufferSelectionRegion(&start, &length); + FillWin1Rect(start, length, PIXEL_FILL(0)); + str = UnionRoomChat_GetMessageEntryBuffer(); + PrintOnWin1Parameterized(0, str, 3, 1, 2); CopyWindowToVram(1, 2); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812B160(); + UpdateVisibleUnionRoomChatIcon(); return FALSE; } return TRUE; @@ -593,7 +616,7 @@ static bool32 sub_8129EB8(u8 *state) return TRUE; } -static bool32 sub_8129F24(u8 *state) +static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state) { u16 var0; u8 *str; @@ -602,18 +625,18 @@ static bool32 sub_8129F24(u8 *state) switch (*state) { case 0: - var0 = sub_8129788(); - str = sub_8129758(); + var0 = UnionRoomChat_GetNumCharsInMessageEntryBuffer(); + str = UnionRoomChat_GetEndOfMessageEntryBuffer(); length = StringLength_Multibyte(str); - sub_812A74C(var0, length, PIXEL_FILL(6)); - sub_812A778(var0, str, 0, 4, 5); + FillWin1Rect(var0, length, PIXEL_FILL(6)); + PrintOnWin1Parameterized(var0, str, 0, 4, 5); CopyWindowToVram(1, 2); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812A578(1, 16); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_REGISTER_WHERE, 16); + CopyWindowToVram(sWork->messageWindowId, 3); } else { @@ -622,7 +645,7 @@ static bool32 sub_8129F24(u8 *state) break; case 2: if (!IsDma3ManagerBusyWithBgCopy()) - sub_812AF8C(1); + UnionRoomChat_UpdateObjPalCycle(1); else return TRUE; break; @@ -634,27 +657,27 @@ static bool32 sub_8129F24(u8 *state) return TRUE; } -static bool32 sub_8129FCC(u8 *state) +static bool32 DisplaySubtask_CancelRegister(u8 *state) { - u16 var0; + u16 x; u8 *str; u16 length; switch (*state) { case 0: - var0 = sub_8129788(); - str = sub_8129758(); + x = UnionRoomChat_GetNumCharsInMessageEntryBuffer(); + str = UnionRoomChat_GetEndOfMessageEntryBuffer(); length = StringLength_Multibyte(str); - sub_812A74C(var0, length, PIXEL_FILL(0)); - sub_812A778(var0, str, 3, 1, 2); + FillWin1Rect(x, length, PIXEL_FILL(0)); + PrintOnWin1Parameterized(x, str, 3, 1, 2); CopyWindowToVram(1, 2); break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812A6F4(); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + HideStdMessageWindow(); + CopyWindowToVram(sWork->messageWindowId, 3); } else { @@ -664,8 +687,8 @@ static bool32 sub_8129FCC(u8 *state) case 2: if (!IsDma3ManagerBusyWithBgCopy()) { - sub_812AF8C(0); - sub_812A728(); + UnionRoomChat_UpdateObjPalCycle(0); + DestroyStdMessageWindow(); } else { @@ -680,12 +703,12 @@ static bool32 sub_8129FCC(u8 *state) return TRUE; } -static bool32 sub_812A074(u8 *state) +static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state) { switch (*state) { case 0: - sub_812A804(); + PrintCurrentKeyboardPage(); CopyWindowToVram(2, 2); (*state)++; break; @@ -699,48 +722,48 @@ static bool32 sub_812A074(u8 *state) return TRUE; } -static bool32 sub_812A0B0(u8 *state) +static bool32 DisplaySubtask_ScrollChat(u8 *state) { - u16 var0; + u16 row; u8 *str; - u8 var1; + u8 colorIdx; switch (*state) { case 0: - var0 = gUnknown_203B0E4->unk1A; - str = sub_81297C4(); - var1 = sub_81297D0(); - sub_812AA78(var0, str, var1); + row = sWork->curLine; + str = UnionRoomChat_GetLastReceivedMessage(); + colorIdx = UnionRoomChat_GetReceivedPlayerIndex(); + PrintTextOnWin0Colorized(row, str, colorIdx); CopyWindowToVram(0, 2); break; case 1: if (IsDma3ManagerBusyWithBgCopy()) return TRUE; - if (gUnknown_203B0E4->unk1A < 9) + if (sWork->curLine < 9) { - gUnknown_203B0E4->unk1A++; + sWork->curLine++; *state = 4; return FALSE; } else { - gUnknown_203B0E4->unk1C = 0; + sWork->scrollCount = 0; (*state)++; } // fall through case 2: ScrollWindow(0, 0, 5, PIXEL_FILL(1)); CopyWindowToVram(0, 2); - gUnknown_203B0E4->unk1C++; + sWork->scrollCount++; (*state)++; // fall through case 3: if (IsDma3ManagerBusyWithBgCopy()) return TRUE; - if (gUnknown_203B0E4->unk1C < 3) + if (sWork->scrollCount < 3) { (*state)--; return TRUE; @@ -756,28 +779,28 @@ static bool32 sub_812A0B0(u8 *state) return TRUE; } -static bool32 sub_812A18C(u8 *state) +static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state) { switch (*state) { case 0: - sub_812AFC0(); + UnionRoomChat_SetSelectorCursorClosedImage(); (*state)++; break; case 1: - return sub_812AFFC(); + return UnionRoomChat_AnimateSelectorCursorReopen(); } return TRUE; } -static bool32 sub_812A1B8(u8 *state) +static bool32 DisplaySubtask_PrintInputText(u8 *state) { switch (*state) { case 0: - sub_812A578(3, 16); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_INPUT_TEXT, 16); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -787,13 +810,13 @@ static bool32 sub_812A1B8(u8 *state) return TRUE; } -static bool32 sub_812A1FC(u8 *state) +static bool32 DisplaySubtask_PrintExitingChat(u8 *state) { switch (*state) { case 0: - sub_812A578(4, 0); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_EXITING_CHAT, 0); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -803,7 +826,7 @@ static bool32 sub_812A1FC(u8 *state) return TRUE; } -static bool32 sub_812A240(u8 *state) +static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state) { u8 *str; @@ -811,10 +834,10 @@ static bool32 sub_812A240(u8 *state) { case 0: DynamicPlaceholderTextUtil_Reset(); - str = sub_8129814(); + str = UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); - sub_812A578(5, 0); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_LEADER_LEFT, 0); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -824,14 +847,14 @@ static bool32 sub_812A240(u8 *state) return TRUE; } -static bool32 sub_812A294(u8 *state) +static bool32 DisplaySubtask_AskSave(u8 *state) { switch (*state) { case 0: - sub_812A578(6, 0); - sub_812A424(23, 10, 1); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_ASK_SAVE, 0); + PlaceYesNoMenuAt(23, 10, 1); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -841,14 +864,14 @@ static bool32 sub_812A294(u8 *state) return TRUE; } -static bool32 sub_812A2E4(u8 *state) +static bool32 DisplaySubtask_AskOverwriteSave(u8 *state) { switch (*state) { case 0: - sub_812A578(7, 0); - sub_812A424(23, 10, 1); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_ASK_OVERWRITE, 0); + PlaceYesNoMenuAt(23, 10, 1); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -858,13 +881,13 @@ static bool32 sub_812A2E4(u8 *state) return TRUE; } -static bool32 sub_812A334(u8 *state) +static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state) { switch (*state) { case 0: - sub_812A578(8, 0); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_SAVING_NO_OFF, 0); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -874,15 +897,15 @@ static bool32 sub_812A334(u8 *state) return TRUE; } -static bool32 sub_812A378(u8 *state) +static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state) { switch (*state) { case 0: DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); - sub_812A578(9, 0); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_SAVED_THE_GAME, 0); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -892,14 +915,14 @@ static bool32 sub_812A378(u8 *state) return TRUE; } -static bool32 sub_812A3D0(u8 *state) +static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state) { switch (*state) { case 0: - sub_812A578(10, 0); - sub_812A424(23, 10, 1); - CopyWindowToVram(gUnknown_203B0E4->messageWindowId, 3); + PlaceStdMessageWindow(STDMESSAGE_WARN_LEADER_LEAVE, 0); + PlaceYesNoMenuAt(23, 10, 1); + CopyWindowToVram(sWork->messageWindowId, 3); (*state)++; break; case 1: @@ -909,12 +932,12 @@ static bool32 sub_812A3D0(u8 *state) return TRUE; } -static bool32 sub_812A420(u8 *arg0) +static bool32 DisplaySubtaskDummy(u8 *arg0) { return FALSE; } -static void sub_812A424(u8 left, u8 top, u8 initialCursorPos) +static void PlaceYesNoMenuAt(u8 left, u8 top, u8 initialCursorPos) { struct WindowTemplate template; template.bg = 0; @@ -923,43 +946,43 @@ static void sub_812A424(u8 left, u8 top, u8 initialCursorPos) template.width = 6; template.height = 4; template.paletteNum = 14; - template.baseBlock = 0x52; - gUnknown_203B0E4->unk18 = AddWindow(&template); - if (gUnknown_203B0E4->unk18 != 0xFF) + template.baseBlock = 0x052; + sWork->yesNoMenuWinId = AddWindow(&template); + if (sWork->yesNoMenuWinId != 0xFF) { - FillWindowPixelBuffer(gUnknown_203B0E4->unk18, PIXEL_FILL(1)); - PutWindowTilemap(gUnknown_203B0E4->unk18); - AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL); - DrawTextBorderOuter(gUnknown_203B0E4->unk18, 1, 13); - Menu_InitCursor(gUnknown_203B0E4->unk18, 2, 0, 2, 14, 2, initialCursorPos); + FillWindowPixelBuffer(sWork->yesNoMenuWinId, PIXEL_FILL(1)); + PutWindowTilemap(sWork->yesNoMenuWinId); + AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL); + DrawTextBorderOuter(sWork->yesNoMenuWinId, 1, 13); + Menu_InitCursor(sWork->yesNoMenuWinId, 2, 0, 2, 14, 2, initialCursorPos); } } -static void sub_812A51C(void) +static void HideYesNoMenuWindow(void) { - if (gUnknown_203B0E4->unk18 != 0xFF) + if (sWork->yesNoMenuWinId != 0xFF) { - ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->unk18, FALSE); - ClearWindowTilemap(gUnknown_203B0E4->unk18); + ClearStdWindowAndFrameToTransparent(sWork->yesNoMenuWinId, FALSE); + ClearWindowTilemap(sWork->yesNoMenuWinId); } } -static void sub_812A544(void) +static void DestroyYesNoMenuWindow(void) { - if (gUnknown_203B0E4->unk18 != 0xFF) + if (sWork->yesNoMenuWinId != 0xFF) { - RemoveWindow(gUnknown_203B0E4->unk18); - gUnknown_203B0E4->unk18 = 0xFF; + RemoveWindow(sWork->yesNoMenuWinId); + sWork->yesNoMenuWinId = 0xFF; } } -s8 sub_812A568(void) +s8 UnionRoomChat_ProcessInput(void) { return Menu_ProcessInput(); } -static void sub_812A578(int arg0, u16 arg1) +static void PlaceStdMessageWindow(int id, u16 bg0vofs) { const u8 *str; int windowId; @@ -971,43 +994,43 @@ static void sub_812A578(int arg0, u16 arg1) template.height = 4; template.paletteNum = 14; template.baseBlock = 0x06A; - if (gUnknown_845AB64[arg0].widerBox) + if (sMessageWindowInfo[id].widerBox) { template.tilemapLeft -= 7; template.width += 7; } - gUnknown_203B0E4->messageWindowId = AddWindow(&template); - windowId = gUnknown_203B0E4->messageWindowId; - if (gUnknown_203B0E4->messageWindowId == 0xFF) + sWork->messageWindowId = AddWindow(&template); + windowId = sWork->messageWindowId; + if (sWork->messageWindowId == 0xFF) return; - if (gUnknown_845AB64[arg0].expandPlaceholders) + if (sMessageWindowInfo[id].expandPlaceholders) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_203B0E4->expandedPlaceholdersBuffer, gUnknown_845AB64[arg0].text); - str = gUnknown_203B0E4->expandedPlaceholdersBuffer; + DynamicPlaceholderTextUtil_ExpandPlaceholders(sWork->expandedPlaceholdersBuffer, sMessageWindowInfo[id].text); + str = sWork->expandedPlaceholdersBuffer; } else { - str = gUnknown_845AB64[arg0].text; + str = sMessageWindowInfo[id].text; } - ChangeBgY(0, arg1 * 256, 0); + ChangeBgY(0, bg0vofs * 256, 0); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); - if (gUnknown_845AB64[arg0].boxType == 1) + if (sMessageWindowInfo[id].boxType == 1) { DrawTextBorderInner(windowId, 0xA, 2); AddTextPrinterParameterized5( windowId, 2, str, - gUnknown_845AB64[arg0].x + 8, - gUnknown_845AB64[arg0].y + 8, + sMessageWindowInfo[id].x + 8, + sMessageWindowInfo[id].y + 8, TEXT_SPEED_FF, NULL, - gUnknown_845AB64[arg0].letterSpacing, - gUnknown_845AB64[arg0].lineSpacing); + sMessageWindowInfo[id].letterSpacing, + sMessageWindowInfo[id].lineSpacing); } else { @@ -1016,94 +1039,92 @@ static void sub_812A578(int arg0, u16 arg1) windowId, 2, str, - gUnknown_845AB64[arg0].x, - gUnknown_845AB64[arg0].y, + sMessageWindowInfo[id].x, + sMessageWindowInfo[id].y, TEXT_SPEED_FF, NULL, - gUnknown_845AB64[arg0].letterSpacing, - gUnknown_845AB64[arg0].lineSpacing); + sMessageWindowInfo[id].letterSpacing, + sMessageWindowInfo[id].lineSpacing); } - gUnknown_203B0E4->messageWindowId = windowId; + sWork->messageWindowId = windowId; } -static void sub_812A6F4(void) +static void HideStdMessageWindow(void) { - if (gUnknown_203B0E4->messageWindowId != 0xFF) + if (sWork->messageWindowId != 0xFF) { - ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->messageWindowId, FALSE); - ClearWindowTilemap(gUnknown_203B0E4->messageWindowId); + ClearStdWindowAndFrameToTransparent(sWork->messageWindowId, FALSE); + ClearWindowTilemap(sWork->messageWindowId); } ChangeBgY(0, 0, 0); } -static void sub_812A728(void) +static void DestroyStdMessageWindow(void) { - if (gUnknown_203B0E4->messageWindowId != 0xFF) + if (sWork->messageWindowId != 0xFF) { - RemoveWindow(gUnknown_203B0E4->messageWindowId); - gUnknown_203B0E4->messageWindowId = 0xFF; + RemoveWindow(sWork->messageWindowId); + sWork->messageWindowId = 0xFF; } } -static void sub_812A74C(u16 x, u16 width, u8 fillValue) +static void FillWin1Rect(u16 x, u16 width, u8 fillValue) { FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); } -static void sub_812A778(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4) +static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor) { - u8 *str2; - u8 sp[38]; - if (fillValue) - sub_812A74C(x, sub_81297DC() - x, fillValue); - - sp[0] = fillValue; - sp[1] = arg3; - sp[2] = arg4; - str2 = &sp[4]; - str2[0] = EXT_CTRL_CODE_BEGIN; - str2[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; - str2[2] = 8; - StringCopy(&str2[3], str); - AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2); + u8 color[3]; + u8 strbuf[35]; + + if (bgColor != 0) + FillWin1Rect(x, UnionRoomChat_GetMessageEntryCursorPosition() - x, bgColor); + + color[0] = bgColor; + color[1] = fgColor; + color[2] = shadowColor; + strbuf[0] = EXT_CTRL_CODE_BEGIN; + strbuf[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; + strbuf[2] = 8; + StringCopy(&strbuf[3], str); + AddTextPrinterParameterized3(1, 2, x * 8, 1, color, TEXT_SPEED_FF, strbuf); } -static void sub_812A804(void) +static void PrintCurrentKeyboardPage(void) { u8 page; int i; - int var1; u16 left; u16 top; - u8 sp[52]; - u8 *str; + u8 color[3]; + u8 str[45]; u8 *str2; FillWindowPixelBuffer(2, PIXEL_FILL(15)); page = GetCurrentKeyboardPage(); - sp[0] = 0; - sp[1] = 14; - sp[2] = 13; + color[0] = 0; + color[1] = 14; + color[2] = 13; if (page != UNION_ROOM_KB_PAGE_COUNT) { - str = &sp[4]; str[0] = EXT_CTRL_CODE_BEGIN; str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; - var1 = 8; - str[2] = var1; - left = var1; + str[2] = 8; + if (page == UNION_ROOM_KB_PAGE_EMOJI) left = 6; - + else + left = 8; for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12) { if (!gUnionRoomKeyboardText[page][i]) return; - StringCopy(&sp[7], gUnionRoomKeyboardText[page][i]); - AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]); + StringCopy(&str[3], gUnionRoomKeyboardText[page][i]); + AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str); } } else @@ -1111,10 +1132,10 @@ static void sub_812A804(void) left = 4; for (i = 0, top = 0; i < 10; i++, top += 12) { - str2 = sub_81294B0(i); + str2 = UnionRoomChat_GetWorkRegisteredText(i); if (GetStringWidth(0, str2, 0) <= 40) { - AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, str2); + AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str2); } else { @@ -1122,80 +1143,80 @@ static void sub_812A804(void) do { length--; - StringCopyN_Multibyte(&sp[4], str2, length); - } while (GetStringWidth(0, &sp[4], 0) > 35); + StringCopyN_Multibyte(str, str2, length); + } while (GetStringWidth(0, str, 0) > 35); - AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]); - AddTextPrinterParameterized3(2, 0, left + 35, top, sp, TEXT_SPEED_FF, gText_Ellipsis); + AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str); + AddTextPrinterParameterized3(2, 0, left + 35, top, color, TEXT_SPEED_FF, gText_Ellipsis); } } } } -static bool32 sub_812A980(void) +static bool32 AnimateMoveBg1Right(void) { - if (gUnknown_203B0E4->bg1hofs < 56) + if (sWork->bg1hofs < 56) { - gUnknown_203B0E4->bg1hofs += 12; - if (gUnknown_203B0E4->bg1hofs >= 56) - gUnknown_203B0E4->bg1hofs = 56; + sWork->bg1hofs += 12; + if (sWork->bg1hofs >= 56) + sWork->bg1hofs = 56; - if (gUnknown_203B0E4->bg1hofs < 56) + if (sWork->bg1hofs < 56) { - sub_812ADA0(gUnknown_203B0E4->bg1hofs); + FillScanlineEffectWithValue1col(sWork->bg1hofs); return TRUE; } } - sub_812ADF8(gUnknown_203B0E4->bg1hofs); + FillScanlineEffectWithValue2col(sWork->bg1hofs); return FALSE; } -static bool32 sub_812A9C8(void) +static bool32 AnimateMoveBg1Left(void) { - if (gUnknown_203B0E4->bg1hofs > 0) + if (sWork->bg1hofs > 0) { - gUnknown_203B0E4->bg1hofs -= 12; - if (gUnknown_203B0E4->bg1hofs <= 0) - gUnknown_203B0E4->bg1hofs = 0; + sWork->bg1hofs -= 12; + if (sWork->bg1hofs <= 0) + sWork->bg1hofs = 0; - if (gUnknown_203B0E4->bg1hofs > 0) + if (sWork->bg1hofs > 0) { - sub_812ADA0(gUnknown_203B0E4->bg1hofs); + FillScanlineEffectWithValue1col(sWork->bg1hofs); return TRUE; } } - sub_812ADF8(gUnknown_203B0E4->bg1hofs); + FillScanlineEffectWithValue2col(sWork->bg1hofs); return FALSE; } -static void sub_812AA10(void) +static void PrintKeyboardSwapTextsOnWin3(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); DrawTextBorderOuter(3, 1, 13); - UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, gUnknown_845ABEC); + UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, sKeyboardSwapTexts); Menu_InitCursor(3, 2, 0, 0, 14, 5, GetCurrentKeyboardPage()); PutWindowTilemap(3); } -static void sub_812AA64(void) +static void ClearWin3(void) { ClearStdWindowAndFrameToTransparent(3, FALSE); ClearWindowTilemap(3); } -static void sub_812AA78(u16 row, u8 *str, u8 arg2) +static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx) { u8 color[3]; color[0] = 1; - color[1] = arg2 * 2 + 2; - color[2] = arg2 * 2 + 3; + color[1] = colorIdx * 2 + 2; + color[2] = colorIdx * 2 + 3; FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); AddTextPrinterParameterized3(0, 2, 0, row * 15, color, TEXT_SPEED_FF, str); } -static void sub_812AAD4(void) +static void ResetGpuBgState(void) { ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -1220,31 +1241,31 @@ static void sub_812AAD4(void) SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); } -static void sub_812AB8C(void) +static void SetBgTilemapWorkBuffers(void) { - SetBgTilemapBuffer(0, gUnknown_203B0E4->bg0Buffer); - SetBgTilemapBuffer(1, gUnknown_203B0E4->bg1Buffer); - SetBgTilemapBuffer(3, gUnknown_203B0E4->bg3Buffer); - SetBgTilemapBuffer(2, gUnknown_203B0E4->bg2Buffer); + SetBgTilemapBuffer(0, sWork->bg0Buffer); + SetBgTilemapBuffer(1, sWork->bg1Buffer); + SetBgTilemapBuffer(3, sWork->bg3Buffer); + SetBgTilemapBuffer(2, sWork->bg2Buffer); } -static void sub_812ABD8(void) +static void ClearBg0(void) { RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); CopyBgTilemapBufferToVram(0); } -static void sub_812AC08(void) +static void LoadUnionRoomChatPanelGfx(void) { - LoadPalette(gUnknown_8EAA9F0, 0x70, 0x20); - LoadPalette(gUnknown_845AA24, 0xC0, 0x20); - DecompressAndCopyTileDataToVram(1, gUnknown_8EAAA10, 0, 0, 0); - CopyToBgTilemapBuffer(1, gUnknown_8EAAA6C, 0, 0); + LoadPalette(gUnionRoomChatPanelBgPal_7, 0x70, 0x20); + LoadPalette(sUnionRoomChatPanelBgPal_C, 0xC0, 0x20); + DecompressAndCopyTileDataToVram(1, gUnionRoomChatPanelBgTiles, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnionRoomChatPanelBgMap, 0, 0); CopyBgTilemapBufferToVram(1); } -static void sub_812AC58(void) +static void LoadLinkMiscMenuGfx(void) { u8 *ptr; @@ -1254,35 +1275,35 @@ static void sub_812AC58(void) CopyBgTilemapBufferToVram(2); } -static void sub_812AC9C(void) +static void LoadBg1Pal8(void) { - LoadPalette(gUnknown_845AA44, 0x80, 0x20); + LoadPalette(sBg1Pal8, 0x80, 0x20); RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); } -static void sub_812ACC0(void) +static void LoadWin0(void) { - LoadPalette(gUnknown_845AA64, 0xF0, 0x20); + LoadPalette(sWin0PalF, 0xF0, 0x20); PutWindowTilemap(0); FillWindowPixelBuffer(0, PIXEL_FILL(1)); CopyWindowToVram(0, 3); } -static void sub_812ACEC(void) +static void LoadWin2(void) { PutWindowTilemap(2); - sub_812A804(); + PrintCurrentKeyboardPage(); CopyWindowToVram(2, 3); } -static void sub_812AD04(void) +static void LoadWin1(void) { FillWindowPixelBuffer(1, PIXEL_FILL(0)); PutWindowTilemap(1); CopyWindowToVram(1, 3); } -static void sub_812AD20(void) +static void LoadWin3(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); TextWindow_SetUserSelectedFrame(3, 1, 0xD0); @@ -1297,18 +1318,18 @@ static void sub_812AD50(void) params.dmaDest = ®_BG1HOFS; params.initState = 1; params.unused9 = 0; - gUnknown_203B0E4->bg1hofs = 0; + sWork->bg1hofs = 0; CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers)); ScanlineEffect_SetParams(params); } -static void sub_812ADA0(s16 arg0) +static void FillScanlineEffectWithValue1col(s16 arg0) { CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120); CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20); } -static void sub_812ADF8(s16 arg0) +static void FillScanlineEffectWithValue2col(s16 arg0) { CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120); CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20); diff --git a/src/union_room_chat_objects.c b/src/union_room_chat_objects.c index 70f9f48ff..e5b739675 100644 --- a/src/union_room_chat_objects.c +++ b/src/union_room_chat_objects.c @@ -6,238 +6,238 @@ struct UnionRoomChat3 { - struct Sprite *unk0; - struct Sprite *unk4; - struct Sprite *unk8; - struct Sprite *unkC; - struct Sprite *unk10; - u16 unk14; + struct Sprite *selectorCursorSprite; + struct Sprite *characterSelectCursorSprite; + struct Sprite *textEntryCursorSprite; + struct Sprite *rButtonSprite; + struct Sprite *chatIconsSprite; + u16 cursorBlinkTimer; }; -static EWRAM_DATA struct UnionRoomChat3 *gUnknown_203B0E8 = NULL; +static EWRAM_DATA struct UnionRoomChat3 *sWork = NULL; -static void sub_812B09C(struct Sprite * sprite); -static void sub_812B0D4(struct Sprite * sprite); +static void SpriteCB_TextEntryCursor(struct Sprite * sprite); +static void SpriteCB_CharacterSelectCursor(struct Sprite * sprite); -static const u16 gUnknown_845AC14[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal"); -static const u32 gUnknown_845AC34[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz"); -static const u32 gUnknown_845AEB8[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz"); -static const u32 gUnknown_845AED8[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz"); -static const u32 gUnknown_845AF04[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz"); +static const u16 sUnionRoomChatInterfacePal[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal"); +static const u32 sSelectorCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz"); +static const u32 sHorizontalBarGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz"); +static const u32 sMenuCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz"); +static const u32 sRButtonGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz"); -static const struct CompressedSpriteSheet gUnknown_845AF58[] = { - {gUnknown_845AC34, 0x1000, 0}, - {gUnknown_845AED8, 0x0040, 1}, - {gUnknown_845AEB8, 0x0040, 2}, - {gUnknown_845AF04, 0x0080, 3}, - {gUnknown_8EA1A50, 0x0400, 4} +static const struct CompressedSpriteSheet sSpriteSheets[] = { + {sSelectorCursorGfxTiles, 0x1000, 0}, + {sMenuCursorGfxTiles, 0x0040, 1}, + {sHorizontalBarGfxTiles, 0x0040, 2}, + {sRButtonGfxTiles, 0x0080, 3}, + {gUnionRoomChatIcons, 0x0400, 4} }; -static const struct SpritePalette gUnknown_845AF80 = { - gUnknown_845AC14, 0 +static const struct SpritePalette sSpritePalette = { + sUnionRoomChatInterfacePal, 0 }; -static const struct OamData gOamData_845AF88 = { +static const struct OamData sOamData_64x32_1 = { .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), .priority = 1 }; -static const union AnimCmd gAnimCmd_845AF90[] = { +static const union AnimCmd sAnim_CursorSmallOpen[] = { ANIMCMD_FRAME(0x00, 30), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845AF98[] = { +static const union AnimCmd sAnim_CursorSmallClosed[] = { ANIMCMD_FRAME(0x20, 30), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845AFA0[] = { +static const union AnimCmd sAnim_CursorLargeOpen[] = { ANIMCMD_FRAME(0x40, 30), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845AFA8[] = { +static const union AnimCmd sAnim_CursorLargeClosed[] = { ANIMCMD_FRAME(0x60, 30), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_845AFB0[] = { - gAnimCmd_845AF90, - gAnimCmd_845AF98, - gAnimCmd_845AFA0, - gAnimCmd_845AFA8 +static const union AnimCmd *const sSpriteAnims_SelectorCursor[] = { + sAnim_CursorSmallOpen, + sAnim_CursorSmallClosed, + sAnim_CursorLargeOpen, + sAnim_CursorLargeClosed }; -static const struct SpriteTemplate gUnknown_845AFC0 = { +static const struct SpriteTemplate sSpriteTemplate_SelectorCursor = { .tileTag = 0, .paletteTag = 0, - .oam = &gOamData_845AF88, - .anims = gSpriteAnimTable_845AFB0, + .oam = &sOamData_64x32_1, + .anims = sSpriteAnims_SelectorCursor, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct OamData gOamData_845AFD8 = { +static const struct OamData sOamData_8x16_2 = { .shape = SPRITE_SHAPE(8x16), .size = SPRITE_SIZE(8x16), .priority = 2 }; -static const struct SpriteTemplate gUnknown_845AFE0 = { +static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = { .tileTag = 2, .paletteTag = 0, - .oam = &gOamData_845AFD8, + .oam = &sOamData_8x16_2, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_812B09C + .callback = SpriteCB_TextEntryCursor }; -static const struct SpriteTemplate gUnknown_845AFF8 = { +static const struct SpriteTemplate sSpriteTemplate_CharacterSelectCursor = { .tileTag = 1, .paletteTag = 0, - .oam = &gOamData_845AFD8, + .oam = &sOamData_8x16_2, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_812B0D4 + .callback = SpriteCB_CharacterSelectCursor }; -static const struct OamData gOamData_845B010 = { +static const struct OamData sOamData_16x16_2 = { .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), .priority = 2 }; -static const struct OamData gOamData_845B018 = { +static const struct OamData sOamData_32x16_2 = { .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .priority = 2 }; -static const union AnimCmd gAnimCmd_845B020[] = { +static const union AnimCmd sAnim_UnionRoomChatIcons_ToggleCase[] = { ANIMCMD_FRAME(0x00, 2), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845B028[] = { +static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy1[] = { ANIMCMD_FRAME(0x08, 2), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845B030[] = { +static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy2[] = { ANIMCMD_FRAME(0x10, 2), ANIMCMD_END }; -static const union AnimCmd gAnimCmd_845B038[] = { +static const union AnimCmd sAnim_UnionRoomChatIcons_Register[] = { ANIMCMD_FRAME(0x18, 2), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_845B040[] = { - gAnimCmd_845B020, - gAnimCmd_845B028, - gAnimCmd_845B030, - gAnimCmd_845B038 +static const union AnimCmd *const sSpriteAnimTable_UnionRoomChatIcons[] = { + sAnim_UnionRoomChatIcons_ToggleCase, + sAnim_UnionRoomChatIcons_Dummy1, + sAnim_UnionRoomChatIcons_Dummy2, + sAnim_UnionRoomChatIcons_Register }; -static const struct SpriteTemplate gUnknown_845B050 = { +static const struct SpriteTemplate sSpriteTemplate_RButton = { .tileTag = 3, .paletteTag = 0, - .oam = &gOamData_845B010, + .oam = &sOamData_16x16_2, .anims = gDummySpriteAnimTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -static const struct SpriteTemplate gUnknown_845B068 = { +static const struct SpriteTemplate sSpriteTemplate_UnionRoomChatIcons = { .tileTag = 4, .paletteTag = 0, - .oam = &gOamData_845B018, - .anims = gSpriteAnimTable_845B040, + .oam = &sOamData_32x16_2, + .anims = sSpriteAnimTable_UnionRoomChatIcons, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy }; -bool32 sub_812AE70(void) +bool32 UnionRoomChat_TryAllocSpriteWork(void) { u32 i; for (i = 0; i < 5; i++) - LoadCompressedSpriteSheet(&gUnknown_845AF58[i]); + LoadCompressedSpriteSheet(&sSpriteSheets[i]); - LoadSpritePalette(&gUnknown_845AF80); - gUnknown_203B0E8 = Alloc(0x18); - if (!gUnknown_203B0E8) + LoadSpritePalette(&sSpritePalette); + sWork = Alloc(0x18); + if (!sWork) return FALSE; return TRUE; } -void sub_812AEB0(void) +void UnionRoomChat_FreeSpriteWork(void) { - if (gUnknown_203B0E8) - Free(gUnknown_203B0E8); + if (sWork) + Free(sWork); } -void sub_812AEC8(void) +void UnionRoomChat_CreateSelectorCursorObj(void) { - u8 spriteId = CreateSprite(&gUnknown_845AFC0, 10, 24, 0); - gUnknown_203B0E8->unk0 = &gSprites[spriteId]; + u8 spriteId = CreateSprite(&sSpriteTemplate_SelectorCursor, 10, 24, 0); + sWork->selectorCursorSprite = &gSprites[spriteId]; } -void sub_812AEFC(bool32 invisible) +void UnionRoomChat_ToggleSelectorCursorObjVisibility(bool32 invisible) { - gUnknown_203B0E8->unk0->invisible = invisible; + sWork->selectorCursorSprite->invisible = invisible; } -void sub_812AF1C(void) +void UnionRoomChat_MoveSelectorCursorObj(void) { u8 x, y; u8 page = GetCurrentKeyboardPage(); - sub_8129700(&x, &y); + UnionRoomChat_GetCursorColAndRow(&x, &y); if (page != UNION_ROOM_KB_PAGE_COUNT) { - StartSpriteAnim(gUnknown_203B0E8->unk0, 0); - gUnknown_203B0E8->unk0->pos1.x = x * 8 + 10; - gUnknown_203B0E8->unk0->pos1.y = y * 12 + 24; + StartSpriteAnim(sWork->selectorCursorSprite, 0); + sWork->selectorCursorSprite->pos1.x = x * 8 + 10; + sWork->selectorCursorSprite->pos1.y = y * 12 + 24; } else { - StartSpriteAnim(gUnknown_203B0E8->unk0, 2); - gUnknown_203B0E8->unk0->pos1.x = 24; - gUnknown_203B0E8->unk0->pos1.y = y * 12 + 24; + StartSpriteAnim(sWork->selectorCursorSprite, 2); + sWork->selectorCursorSprite->pos1.x = 24; + sWork->selectorCursorSprite->pos1.y = y * 12 + 24; } } -void sub_812AF8C(int arg0) +void UnionRoomChat_UpdateObjPalCycle(int arg0) { - const u16 *palette = &gUnknown_845AC14[arg0 * 2 + 1]; + const u16 *palette = &sUnionRoomChatInterfacePal[arg0 * 2 + 1]; u8 index = IndexOfSpritePaletteTag(0); LoadPalette(palette, index * 16 + 0x101, 4); } -void sub_812AFC0(void) +void UnionRoomChat_SetSelectorCursorClosedImage(void) { if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) - StartSpriteAnim(gUnknown_203B0E8->unk0, 1); + StartSpriteAnim(sWork->selectorCursorSprite, 1); else - StartSpriteAnim(gUnknown_203B0E8->unk0, 3); + StartSpriteAnim(sWork->selectorCursorSprite, 3); - gUnknown_203B0E8->unk14 = 0; + sWork->cursorBlinkTimer = 0; } -bool32 sub_812AFFC(void) +bool32 UnionRoomChat_AnimateSelectorCursorReopen(void) { - if (gUnknown_203B0E8->unk14 > 3) + if (sWork->cursorBlinkTimer > 3) return FALSE; - if (++gUnknown_203B0E8->unk14 > 3) + if (++sWork->cursorBlinkTimer > 3) { if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) - StartSpriteAnim(gUnknown_203B0E8->unk0, 0); + StartSpriteAnim(sWork->selectorCursorSprite, 0); else - StartSpriteAnim(gUnknown_203B0E8->unk0, 2); + StartSpriteAnim(sWork->selectorCursorSprite, 2); return FALSE; } @@ -245,17 +245,17 @@ bool32 sub_812AFFC(void) return TRUE; } -void sub_812B048(void) +void UnionRoomChat_SpawnTextEntryPointerSprites(void) { - u8 spriteId = CreateSprite(&gUnknown_845AFE0, 76, 152, 2); - gUnknown_203B0E8->unk8 = &gSprites[spriteId]; - spriteId = CreateSprite(&gUnknown_845AFF8, 64, 152, 1); - gUnknown_203B0E8->unk4 = &gSprites[spriteId]; + u8 spriteId = CreateSprite(&sSpriteTemplate_TextEntryCursor, 76, 152, 2); + sWork->textEntryCursorSprite = &gSprites[spriteId]; + spriteId = CreateSprite(&sSpriteTemplate_CharacterSelectCursor, 64, 152, 1); + sWork->characterSelectCursorSprite = &gSprites[spriteId]; } -static void sub_812B09C(struct Sprite *sprite) +static void SpriteCB_TextEntryCursor(struct Sprite *sprite) { - int var0 = sub_81297DC(); + int var0 = UnionRoomChat_GetMessageEntryCursorPosition(); if (var0 == 15) { sprite->invisible = TRUE; @@ -267,7 +267,7 @@ static void sub_812B09C(struct Sprite *sprite) } } -static void sub_812B0D4(struct Sprite *sprite) +static void SpriteCB_CharacterSelectCursor(struct Sprite *sprite) { if (++sprite->data[0] > 4) { @@ -277,40 +277,42 @@ static void sub_812B0D4(struct Sprite *sprite) } } -void sub_812B100(void) +void CreatePageSwitchUISprites(void) { - u8 spriteId = CreateSprite(&gUnknown_845B050, 8, 152, 3); - gUnknown_203B0E8->unkC = &gSprites[spriteId]; - spriteId = CreateSprite(&gUnknown_845B068, 32, 152, 4); - gUnknown_203B0E8->unk10 = &gSprites[spriteId]; - gUnknown_203B0E8->unk10->invisible = 1; + u8 spriteId = CreateSprite(&sSpriteTemplate_RButton, 8, 152, 3); + sWork->rButtonSprite = &gSprites[spriteId]; + spriteId = CreateSprite(&sSpriteTemplate_UnionRoomChatIcons, 32, 152, 4); + sWork->chatIconsSprite = &gSprites[spriteId]; + sWork->chatIconsSprite->invisible = TRUE; } -void sub_812B160(void) +void UpdateVisibleUnionRoomChatIcon(void) { if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT) { - if (sub_8129720() != 0) + if (UnionRoomChat_LenMessageEntryBuffer() != 0) { - gUnknown_203B0E8->unk10->invisible = 0; - StartSpriteAnim(gUnknown_203B0E8->unk10, 3); + // REGISTER + sWork->chatIconsSprite->invisible = FALSE; + StartSpriteAnim(sWork->chatIconsSprite, 3); } else { - gUnknown_203B0E8->unk10->invisible = 1; + sWork->chatIconsSprite->invisible = TRUE; } } else { - int anim = sub_81297E8(); + int anim = UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(); if (anim == 3) { - gUnknown_203B0E8->unk10->invisible = 1; + sWork->chatIconsSprite->invisible = TRUE; } else { - gUnknown_203B0E8->unk10->invisible = 0; - StartSpriteAnim(gUnknown_203B0E8->unk10, anim); + // A <--> a + sWork->chatIconsSprite->invisible = FALSE; + StartSpriteAnim(sWork->chatIconsSprite, anim); } } } |