summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/link_rfu_2.c29
-rw-r--r--src/new_game.c2
-rw-r--r--src/union_room.c2
-rw-r--r--src/union_room_chat.c1136
-rw-r--r--src/union_room_chat_display.c751
-rw-r--r--src/union_room_chat_objects.c228
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 = &REG_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);
}
}
}