summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2020-06-01 14:05:29 -0400
committerGriffinR <griffin.g.richards@gmail.com>2020-06-02 18:35:00 -0400
commit7632404ba5c8ad3c1a282d080f1c65d84b485798 (patch)
tree89e0e3576a918041c59c4817a664d9f4e8b31f11
parentf53e2491bfe41cea6e912bef1692c2961927ef23 (diff)
Document union_room_chat.c
-rw-r--r--gflib/text.h266
-rw-r--r--graphics/union_room_chat/background.bin (renamed from graphics/link/misc.bin)bin1280 -> 1280 bytes
-rw-r--r--graphics/union_room_chat/background.png (renamed from graphics/link/misc.png)bin513 -> 513 bytes
-rw-r--r--graphics/union_room_chat/border.bin (renamed from graphics/link/link_winedge.bin)bin1280 -> 1280 bytes
-rw-r--r--graphics/union_room_chat/border.png (renamed from graphics/link/link_winedge.png)bin189 -> 189 bytes
-rw-r--r--graphics/union_room_chat/interface.pal (renamed from graphics/interface/unk_palette3.pal)0
-rw-r--r--graphics/union_room_chat/keyboard_cursor.png (renamed from graphics/interface/unk_cursor.png)bin307 -> 307 bytes
-rw-r--r--graphics/union_room_chat/r_button.png (renamed from graphics/interface/unk_rbutton.png)bin188 -> 188 bytes
-rw-r--r--graphics/union_room_chat/r_button_labels.png (renamed from graphics/interface/unk_change_case.png)bin247 -> 247 bytes
-rw-r--r--graphics/union_room_chat/text_entry_arrow.png (renamed from graphics/interface/unk_cursor_arrow.png)bin157 -> 157 bytes
-rw-r--r--graphics/union_room_chat/text_entry_cursor.png (renamed from graphics/interface/unk_dash.png)bin146 -> 146 bytes
-rw-r--r--graphics/union_room_chat/unk_palette1.pal (renamed from graphics/interface/unk_palette1.pal)0
-rw-r--r--graphics/union_room_chat/unk_palette2.pal (renamed from graphics/interface/unk_palette2.pal)0
-rw-r--r--graphics/union_room_chat/window_1.pal (renamed from graphics/link/link1.pal)0
-rw-r--r--graphics/union_room_chat/window_2.pal (renamed from graphics/link/link2.pal)0
-rw-r--r--include/constants/global.h1
-rw-r--r--include/global.h2
-rw-r--r--include/graphics.h16
-rw-r--r--include/strings.h8
-rwxr-xr-xinclude/union_room_chat.h13
-rw-r--r--src/graphics.c22
-rw-r--r--src/new_game.c2
-rw-r--r--src/strings.c8
-rwxr-xr-xsrc/union_room_chat.c2586
24 files changed, 1649 insertions, 1275 deletions
diff --git a/gflib/text.h b/gflib/text.h
index 4819eb37b..5b317600e 100644
--- a/gflib/text.h
+++ b/gflib/text.h
@@ -1,95 +1,183 @@
#ifndef GUARD_TEXT_H
#define GUARD_TEXT_H
-#define CHAR_SPACE 0x00
-#define CHAR_PLUS 0x2E
-#define CHAR_0 0xA1
-#define CHAR_1 0xA2
-#define CHAR_2 0xA3
-#define CHAR_3 0xA4
-#define CHAR_4 0xA5
-#define CHAR_5 0xA6
-#define CHAR_6 0xA7
-#define CHAR_7 0xA8
-#define CHAR_8 0xA9
-#define CHAR_9 0xAA
-#define CHAR_EXCL_MARK 0xAB
-#define CHAR_QUESTION_MARK 0xAC
-#define CHAR_PERIOD 0xAD
-#define CHAR_HYPHEN 0xAE
-#define CHAR_ELLIPSIS 0xB0
-#define CHAR_DBL_QUOT_LEFT 0xB1
-#define CHAR_DBL_QUOT_RIGHT 0xB2
-#define CHAR_SGL_QUOT_LEFT 0xB3
-#define CHAR_SGL_QUOT_RIGHT 0xB4
-#define CHAR_MALE 0xB5
-#define CHAR_FEMALE 0xB6
-#define CHAR_CURRENCY 0xB7
-#define CHAR_COMMA 0xB8
-#define CHAR_MULT_SIGN 0xB9
-#define CHAR_SLASH 0xBA
-#define CHAR_A 0xBB
-#define CHAR_B 0xBC
-#define CHAR_C 0xBD
-#define CHAR_D 0xBE
-#define CHAR_E 0xBF
-#define CHAR_F 0xC0
-#define CHAR_G 0xC1
-#define CHAR_H 0xC2
-#define CHAR_I 0xC3
-#define CHAR_J 0xC4
-#define CHAR_K 0xC5
-#define CHAR_L 0xC6
-#define CHAR_M 0xC7
-#define CHAR_N 0xC8
-#define CHAR_O 0xC9
-#define CHAR_P 0xCA
-#define CHAR_Q 0xCB
-#define CHAR_R 0xCC
-#define CHAR_S 0xCD
-#define CHAR_T 0xCE
-#define CHAR_U 0xCF
-#define CHAR_V 0xD0
-#define CHAR_W 0xD1
-#define CHAR_X 0xD2
-#define CHAR_Y 0xD3
-#define CHAR_Z 0xD4
-#define CHAR_a 0xD5
-#define CHAR_b 0xD6
-#define CHAR_c 0xD7
-#define CHAR_d 0xD8
-#define CHAR_e 0xD9
-#define CHAR_f 0xDA
-#define CHAR_g 0xDB
-#define CHAR_h 0xDC
-#define CHAR_i 0xDD
-#define CHAR_j 0xDE
-#define CHAR_k 0xDF
-#define CHAR_l 0xE0
-#define CHAR_m 0xE1
-#define CHAR_n 0xE2
-#define CHAR_o 0xE3
-#define CHAR_p 0xE4
-#define CHAR_q 0xE5
-#define CHAR_r 0xE6
-#define CHAR_s 0xE7
-#define CHAR_t 0xE8
-#define CHAR_u 0xE9
-#define CHAR_v 0xEA
-#define CHAR_w 0xEB
-#define CHAR_x 0xEC
-#define CHAR_y 0xED
-#define CHAR_z 0xEE
-#define CHAR_SPECIAL_F7 0xF7
-#define CHAR_SPECIAL_F8 0xF8
-#define CHAR_SPECIAL_F9 0xF9
-#define CHAR_COLON 0xF0
-#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
-#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog
-#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
-#define PLACEHOLDER_BEGIN 0xFD // string placeholder
-#define CHAR_NEWLINE 0xFE
-#define EOS 0xFF // end of string
+#define CHAR_SPACE 0x00
+#define CHAR_A_GRAVE 0x01
+#define CHAR_A_ACUTE 0x02
+#define CHAR_A_CIRCUMFLEX 0x03
+#define CHAR_C_CEDILLA 0x04
+#define CHAR_E_GRAVE 0x05
+#define CHAR_E_ACUTE 0x06
+#define CHAR_E_CIRCUMFLEX 0x07
+#define CHAR_E_DIAERESIS 0x08
+#define CHAR_I_GRAVE 0x09
+//#define CHAR_I_ACUTE 0x0A // Is 0x5A instead
+#define CHAR_I_CIRCUMFLEX 0x0B
+#define CHAR_I_DIAERESIS 0x0C
+#define CHAR_O_GRAVE 0x0D
+#define CHAR_O_ACUTE 0x0E
+#define CHAR_O_CIRCUMFLEX 0x0F
+#define CHAR_OE 0x10
+#define CHAR_U_GRAVE 0x11
+#define CHAR_U_ACUTE 0x12
+#define CHAR_U_CIRCUMFLEX 0x13
+#define CHAR_N_TILDE 0x14
+#define CHAR_ESZETT 0x15
+#define CHAR_a_GRAVE 0x16
+#define CHAR_a_ACUTE 0x17
+//#define CHAR_a_CIRCUMFLEX 0x18 // Is 0x68 instead
+#define CHAR_c_CEDILLA 0x19
+#define CHAR_e_GRAVE 0x1A
+#define CHAR_e_ACUTE 0x1B
+#define CHAR_e_CIRCUMFLEX 0x1C
+#define CHAR_e_DIAERESIS 0x1D
+#define CHAR_i_GRAVE 0x1E
+//#define CHAR_i_ACUTE 0x1F // Is 0x6F instead
+#define CHAR_i_CIRCUMFLEX 0x20
+#define CHAR_i_DIAERESIS 0x21
+#define CHAR_o_GRAVE 0x22
+#define CHAR_o_ACUTE 0x23
+#define CHAR_o_CIRCUMFLEX 0x24
+#define CHAR_oe 0x25
+#define CHAR_u_GRAVE 0x26
+#define CHAR_u_ACUTE 0x27
+#define CHAR_u_CIRCUMFLEX 0x28
+#define CHAR_n_TILDE 0x29
+#define CHAR_MASCULINE_ORDINAL 0x2A
+#define CHAR_FEMININE_ORDINAL 0x2B
+#define CHAR_SUPER_ER 0x2C
+#define CHAR_AMPERSAND 0x2D
+#define CHAR_PLUS 0x2E
+//
+#define CHAR_LV 0x34
+#define CHAR_EQUALS 0x35
+#define CHAR_SEMICOLON 0x36
+//
+#define CHAR_INV_QUESTION_MARK 0x51
+#define CHAR_INV_EXCL_MARK 0x52
+#define CHAR_PK 0x53
+#define CHAR_MN 0x54
+#define CHAR_PO 0x55
+#define CHAR_KE 0x56
+#define CHAR_BLOCK_1 0x57 // Each of these 3
+#define CHAR_BLOCK_2 0x58 // chars contains 1/3
+#define CHAR_BLOCK_3 0x59 // of the word BLOCK
+#define CHAR_I_ACUTE 0x5A
+#define CHAR_PERCENT 0x5B
+#define CHAR_LEFT_PAREN 0x5C
+#define CHAR_RIGHT_PAREN 0x5D
+//
+#define CHAR_a_CIRCUMFLEX 0x68
+//
+#define CHAR_i_ACUTE 0x6F
+//
+#define CHAR_UNK_SPACER 0x77
+//
+#define CHAR_UP_ARROW 0x79
+#define CHAR_DOWN_ARROW 0x7A
+#define CHAR_LEFT_ARROW 0x7B
+#define CHAR_RIGHT_ARROW 0x7C
+//
+#define CHAR_SUPER_E 0x84
+#define CHAR_LESS_THAN 0x85
+#define CHAR_GREATER_THAN 0x86
+//
+#define CHAR_SUPER_RE 0xA0
+#define CHAR_0 0xA1
+#define CHAR_1 0xA2
+#define CHAR_2 0xA3
+#define CHAR_3 0xA4
+#define CHAR_4 0xA5
+#define CHAR_5 0xA6
+#define CHAR_6 0xA7
+#define CHAR_7 0xA8
+#define CHAR_8 0xA9
+#define CHAR_9 0xAA
+#define CHAR_EXCL_MARK 0xAB
+#define CHAR_QUESTION_MARK 0xAC
+#define CHAR_PERIOD 0xAD
+#define CHAR_HYPHEN 0xAE
+#define CHAR_BULLET 0xAF
+#define CHAR_ELLIPSIS 0xB0
+#define CHAR_DBL_QUOT_LEFT 0xB1
+#define CHAR_DBL_QUOT_RIGHT 0xB2
+#define CHAR_SGL_QUOT_LEFT 0xB3
+#define CHAR_SGL_QUOT_RIGHT 0xB4
+#define CHAR_MALE 0xB5
+#define CHAR_FEMALE 0xB6
+#define CHAR_CURRENCY 0xB7
+#define CHAR_COMMA 0xB8
+#define CHAR_MULT_SIGN 0xB9
+#define CHAR_SLASH 0xBA
+#define CHAR_A 0xBB
+#define CHAR_B 0xBC
+#define CHAR_C 0xBD
+#define CHAR_D 0xBE
+#define CHAR_E 0xBF
+#define CHAR_F 0xC0
+#define CHAR_G 0xC1
+#define CHAR_H 0xC2
+#define CHAR_I 0xC3
+#define CHAR_J 0xC4
+#define CHAR_K 0xC5
+#define CHAR_L 0xC6
+#define CHAR_M 0xC7
+#define CHAR_N 0xC8
+#define CHAR_O 0xC9
+#define CHAR_P 0xCA
+#define CHAR_Q 0xCB
+#define CHAR_R 0xCC
+#define CHAR_S 0xCD
+#define CHAR_T 0xCE
+#define CHAR_U 0xCF
+#define CHAR_V 0xD0
+#define CHAR_W 0xD1
+#define CHAR_X 0xD2
+#define CHAR_Y 0xD3
+#define CHAR_Z 0xD4
+#define CHAR_a 0xD5
+#define CHAR_b 0xD6
+#define CHAR_c 0xD7
+#define CHAR_d 0xD8
+#define CHAR_e 0xD9
+#define CHAR_f 0xDA
+#define CHAR_g 0xDB
+#define CHAR_h 0xDC
+#define CHAR_i 0xDD
+#define CHAR_j 0xDE
+#define CHAR_k 0xDF
+#define CHAR_l 0xE0
+#define CHAR_m 0xE1
+#define CHAR_n 0xE2
+#define CHAR_o 0xE3
+#define CHAR_p 0xE4
+#define CHAR_q 0xE5
+#define CHAR_r 0xE6
+#define CHAR_s 0xE7
+#define CHAR_t 0xE8
+#define CHAR_u 0xE9
+#define CHAR_v 0xEA
+#define CHAR_w 0xEB
+#define CHAR_x 0xEC
+#define CHAR_y 0xED
+#define CHAR_z 0xEE
+#define CHAR_BLACK_TRIANGLE 0xEF
+#define CHAR_COLON 0xF0
+#define CHAR_A_DIAERESIS 0xF1
+#define CHAR_O_DIAERESIS 0xF2
+#define CHAR_U_DIAERESIS 0xF3
+#define CHAR_a_DIAERESIS 0xF4
+#define CHAR_o_DIAERESIS 0xF5
+#define CHAR_u_DIAERESIS 0xF6
+#define CHAR_SPECIAL_F7 0xF7
+#define CHAR_SPECIAL_F8 0xF8
+#define CHAR_SPECIAL_F9 0xF9
+#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
+#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog
+#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
+#define PLACEHOLDER_BEGIN 0xFD // string placeholder
+#define CHAR_NEWLINE 0xFE
+#define EOS 0xFF // end of string
// Special F9 chars
#define CHAR_UP_ARROW_2 0x00
diff --git a/graphics/link/misc.bin b/graphics/union_room_chat/background.bin
index e91b50c8d..e91b50c8d 100644
--- a/graphics/link/misc.bin
+++ b/graphics/union_room_chat/background.bin
Binary files differ
diff --git a/graphics/link/misc.png b/graphics/union_room_chat/background.png
index ae6ba4d02..ae6ba4d02 100644
--- a/graphics/link/misc.png
+++ b/graphics/union_room_chat/background.png
Binary files differ
diff --git a/graphics/link/link_winedge.bin b/graphics/union_room_chat/border.bin
index f3e264d05..f3e264d05 100644
--- a/graphics/link/link_winedge.bin
+++ b/graphics/union_room_chat/border.bin
Binary files differ
diff --git a/graphics/link/link_winedge.png b/graphics/union_room_chat/border.png
index 86ddacc03..86ddacc03 100644
--- a/graphics/link/link_winedge.png
+++ b/graphics/union_room_chat/border.png
Binary files differ
diff --git a/graphics/interface/unk_palette3.pal b/graphics/union_room_chat/interface.pal
index 071f73b42..071f73b42 100644
--- a/graphics/interface/unk_palette3.pal
+++ b/graphics/union_room_chat/interface.pal
diff --git a/graphics/interface/unk_cursor.png b/graphics/union_room_chat/keyboard_cursor.png
index fac4e0a93..fac4e0a93 100644
--- a/graphics/interface/unk_cursor.png
+++ b/graphics/union_room_chat/keyboard_cursor.png
Binary files differ
diff --git a/graphics/interface/unk_rbutton.png b/graphics/union_room_chat/r_button.png
index 168a293f3..168a293f3 100644
--- a/graphics/interface/unk_rbutton.png
+++ b/graphics/union_room_chat/r_button.png
Binary files differ
diff --git a/graphics/interface/unk_change_case.png b/graphics/union_room_chat/r_button_labels.png
index 185c4abf5..185c4abf5 100644
--- a/graphics/interface/unk_change_case.png
+++ b/graphics/union_room_chat/r_button_labels.png
Binary files differ
diff --git a/graphics/interface/unk_cursor_arrow.png b/graphics/union_room_chat/text_entry_arrow.png
index 574758cdf..574758cdf 100644
--- a/graphics/interface/unk_cursor_arrow.png
+++ b/graphics/union_room_chat/text_entry_arrow.png
Binary files differ
diff --git a/graphics/interface/unk_dash.png b/graphics/union_room_chat/text_entry_cursor.png
index 34c3709cf..34c3709cf 100644
--- a/graphics/interface/unk_dash.png
+++ b/graphics/union_room_chat/text_entry_cursor.png
Binary files differ
diff --git a/graphics/interface/unk_palette1.pal b/graphics/union_room_chat/unk_palette1.pal
index 12bc76261..12bc76261 100644
--- a/graphics/interface/unk_palette1.pal
+++ b/graphics/union_room_chat/unk_palette1.pal
diff --git a/graphics/interface/unk_palette2.pal b/graphics/union_room_chat/unk_palette2.pal
index d2a55fec6..d2a55fec6 100644
--- a/graphics/interface/unk_palette2.pal
+++ b/graphics/union_room_chat/unk_palette2.pal
diff --git a/graphics/link/link1.pal b/graphics/union_room_chat/window_1.pal
index a86815b0e..a86815b0e 100644
--- a/graphics/link/link1.pal
+++ b/graphics/union_room_chat/window_1.pal
diff --git a/graphics/link/link2.pal b/graphics/union_room_chat/window_2.pal
index a8c95a3c0..a8c95a3c0 100644
--- a/graphics/link/link2.pal
+++ b/graphics/union_room_chat/window_2.pal
diff --git a/include/constants/global.h b/include/constants/global.h
index c7063d71c..b86e29a29 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -52,6 +52,7 @@
#define APPRENTICE_COUNT 4
#define APPRENTICE_MAX_QUESTIONS 9
#define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used
+#define UNION_ROOM_KB_ROW_COUNT 10
#define PYRAMID_BAG_ITEMS_COUNT 10
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
diff --git a/include/global.h b/include/global.h
index 2b03ebbe1..cc1faa9f2 100644
--- a/include/global.h
+++ b/include/global.h
@@ -974,7 +974,7 @@ struct SaveBlock1
/*0x3B24*/ u8 seen2[DEX_FLAGS_NO];
/*0x3B58*/ LilycoveLady lilycoveLady;
/*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20];
- /*0x3C88*/ u8 unk3C88[10][21];
+ /*0x3C88*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
/*0x3D5A*/ u8 filler3D5A[0xA];
/*0x3D64*/ struct SaveTrainerHill trainerHill;
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
diff --git a/include/graphics.h b/include/graphics.h
index b41a43095..6811b7620 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4986,14 +4986,14 @@ extern const u16 gEasyChatRightWindow_Pal[];
extern const u32 gUsePokeblockCondition_Gfx[];
// Union Room Chat
-extern const u16 gUnknown_08DD4BB0[];
-extern const u16 gUnknown_08DD4BD0[];
-extern const u32 gUnknown_08DD4BF0[];
-extern const u32 gUnknown_08DD4C4C[];
-extern const u32 gUnknown_08DD4CF8[];
-extern const u16 gLinkMiscMenu_Pal[];
-extern const u32 gLinkMiscMenu_Gfx[];
-extern const u32 gLinkMiscMenu_Tilemap[];
+extern const u16 gUnionRoomChat_Background_Pal[];
+extern const u32 gUnionRoomChat_Background_Gfx[];
+extern const u32 gUnionRoomChat_Background_Tilemap[];
+extern const u16 gUnionRoomChat_Window_Pal1[];
+extern const u16 gUnionRoomChat_Window_Pal2[];
+extern const u32 gUnionRoomChat_Border_Gfx[];
+extern const u32 gUnionRoomChat_Border_Tilemap[];
+extern const u32 gUnionRoomChat_RButtonLabels[];
// Use Pokeblock
extern const u8 gPokenavConditionCancel_Gfx[];
diff --git a/include/strings.h b/include/strings.h
index 5720598ad..dc3653163 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -2815,10 +2815,10 @@ extern const u8 gText_RegisterTextHere[];
extern const u8 gText_InputText[];
extern const u8 gText_ExitingChat[];
extern const u8 gText_LeaderLeftEndingChat[];
-extern const u8 gText_RegisteredTextChanged[];
-extern const u8 gText_AlreadySavedFile_Unused[];
-extern const u8 gText_SavingDontTurnOff_Unused[];
-extern const u8 gText_PlayerSavedGame_Unused[];
+extern const u8 gText_RegisteredTextChangedOKToSave[];
+extern const u8 gText_AlreadySavedFile_Chat[];
+extern const u8 gText_SavingDontTurnOff_Chat[];
+extern const u8 gText_PlayerSavedGame_Chat[];
extern const u8 gText_IfLeaderLeavesChatEnds[];
extern const u8 gText_Upper[];
extern const u8 gText_Lower[];
diff --git a/include/union_room_chat.h b/include/union_room_chat.h
index 3dd22743a..dbd45c543 100755
--- a/include/union_room_chat.h
+++ b/include/union_room_chat.h
@@ -1,18 +1,7 @@
#ifndef GUARD_UNION_ROOM_CHAT_H
#define GUARD_UNION_ROOM_CHAT_H
-enum
-{
- UNION_ROOM_KB_PAGE_UPPER,
- UNION_ROOM_KB_PAGE_LOWER,
- UNION_ROOM_KB_PAGE_EMOJI,
- UNION_ROOM_KB_PAGE_COUNT
-};
-
-#define UNION_ROOM_KB_ROW_COUNT 10
-
-
void EnterUnionRoomChat(void);
-void copy_strings_to_sav1(void);
+void InitUnionRoomChatRegisteredTexts(void);
#endif // GUARD_UNION_ROOM_CHAT_H
diff --git a/src/graphics.c b/src/graphics.c
index 7a3a225c2..8e9c472ce 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1447,19 +1447,15 @@ const u32 gUnknown_08DD4620[] = INCBIN_U32("graphics/unknown/unknown_DD4620.bin.
const u32 gUnknown_08DD46E0[] = INCBIN_U32("graphics/unknown/unknown_DD46E0.bin.lz");
const u32 gUnknown_08DD47A0[] = INCBIN_U32("graphics/unknown/unknown_DD47A0.bin.lz");
-// link
-
-const u16 gLinkMiscMenu_Pal[] = INCBIN_U16("graphics/link/misc.gbapal");
-const u32 gLinkMiscMenu_Gfx[] = INCBIN_U32("graphics/link/misc.4bpp.lz");
-const u32 gLinkMiscMenu_Tilemap[] = INCBIN_U32("graphics/link/misc.bin.lz");
-
-const u16 gUnknown_08DD4BB0[] = INCBIN_U16("graphics/link/link1.gbapal");
-const u16 gUnknown_08DD4BD0[] = INCBIN_U16("graphics/link/link2.gbapal");
-
-const u32 gUnknown_08DD4BF0[] = INCBIN_U32("graphics/link/link_winedge.4bpp.lz");
-const u32 gUnknown_08DD4C4C[] = INCBIN_U32("graphics/link/link_winedge.bin.lz");
-
-const u32 gUnknown_08DD4CF8[] = INCBIN_U32("graphics/interface/unk_change_case.4bpp.lz");
+// union room chat
+const u16 gUnionRoomChat_Background_Pal[] = INCBIN_U16("graphics/union_room_chat/background.gbapal");
+const u32 gUnionRoomChat_Background_Gfx[] = INCBIN_U32("graphics/union_room_chat/background.4bpp.lz");
+const u32 gUnionRoomChat_Background_Tilemap[] = INCBIN_U32("graphics/union_room_chat/background.bin.lz");
+const u16 gUnionRoomChat_Window_Pal1[] = INCBIN_U16("graphics/union_room_chat/window_1.gbapal");
+const u16 gUnionRoomChat_Window_Pal2[] = INCBIN_U16("graphics/union_room_chat/window_2.gbapal");
+const u32 gUnionRoomChat_Border_Gfx[] = INCBIN_U32("graphics/union_room_chat/border.4bpp.lz");
+const u32 gUnionRoomChat_Border_Tilemap[] = INCBIN_U32("graphics/union_room_chat/border.bin.lz");
+const u32 gUnionRoomChat_RButtonLabels[] = INCBIN_U32("graphics/union_room_chat/r_button_labels.4bpp.lz");
const u16 gTilesetPalettes_General[][16] =
{
diff --git a/src/new_game.c b/src/new_game.c
index 290c0c2bb..55a568132 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -197,7 +197,7 @@ void NewGameInitData(void)
WarpToTruck();
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
ResetMiniGamesResults();
- copy_strings_to_sav1();
+ InitUnionRoomChatRegisteredTexts();
InitLilycoveLady();
ResetAllApprenticeData();
ClearRankingHallRecords();
diff --git a/src/strings.c b/src/strings.c
index 3ca7f693f..3ba01b0f0 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1261,10 +1261,10 @@ const u8 gJPText_PlayersXPokemon[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひ
const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめは いません"); // Unused
const u8 gText_ExitingChat[] = _("Exiting the chat…");
const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {SPECIAL_F7 0x00}, has\nleft, ending the chat.");
-const u8 gText_RegisteredTextChanged[] = _("The registered text has been changed.\nIs it okay to save the game?");
-const u8 gText_AlreadySavedFile_Unused[] = _("There is already a saved file.\nIs it okay to overwrite it?");
-const u8 gText_SavingDontTurnOff_Unused[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
-const u8 gText_PlayerSavedGame_Unused[] = _("{SPECIAL_F7 0x00} saved the game.");
+const u8 gText_RegisteredTextChangedOKToSave[] = _("The registered text has been changed.\nIs it okay to save the game?");
+const u8 gText_AlreadySavedFile_Chat[] = _("There is already a saved file.\nIs it okay to overwrite it?");
+const u8 gText_SavingDontTurnOff_Chat[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
+const u8 gText_PlayerSavedGame_Chat[] = _("{SPECIAL_F7 0x00} saved the game.");
const u8 gText_IfLeaderLeavesChatEnds[] = _("If the LEADER leaves, the chat\nwill end. Is that okay?");
const u8 gText_Hello[] = _("HELLO");
const u8 gText_Pokemon2[] = _("POKéMON");
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index e50d7f100..3ff5d7f2c 100755
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -27,256 +27,446 @@
#include "constants/rgb.h"
#include "constants/songs.h"
+enum
+{
+ UNION_ROOM_KB_PAGE_UPPER,
+ UNION_ROOM_KB_PAGE_LOWER,
+ UNION_ROOM_KB_PAGE_EMOJI,
+ UNION_ROOM_KB_PAGE_REGISTER,
+ UNION_ROOM_KB_PAGE_COUNT,
+};
+
+#define MAX_MESSAGE_LENGTH 15
+
+enum {
+ CHAT_MESSAGE_NONE,
+ CHAT_MESSAGE_CHAT,
+ CHAT_MESSAGE_JOIN,
+ CHAT_MESSAGE_LEAVE,
+ CHAT_MESSAGE_DROP,
+ CHAT_MESSAGE_DISBAND,
+};
+
+enum {
+ STDMESSAGE_QUIT_CHATTING,
+ STDMESSAGE_REGISTER_WHERE,
+ STDMESSAGE_REGISTER_HERE,
+ STDMESSAGE_INPUT_TEXT,
+ STDMESSAGE_EXITING_CHAT,
+ STDMESSAGE_LEADER_LEFT,
+ STDMESSAGE_ASK_SAVE,
+ STDMESSAGE_ASK_OVERWRITE,
+ STDMESSAGE_SAVING_NO_OFF,
+ STDMESSAGE_SAVED_THE_GAME,
+ STDMESSAGE_WARN_LEADER_LEAVE,
+};
+
+enum {
+ CHAT_FUNC_JOIN,
+ CHAT_FUNC_HANDLE_INPUT,
+ CHAT_FUNC_SWITCH,
+ CHAT_FUNC_ASK_QUIT,
+ CHAT_FUNC_SEND,
+ CHAT_FUNC_REGISTER,
+ CHAT_FUNC_EXIT,
+ CHAT_FUNC_DROP,
+ CHAT_FUNC_DISBANDED,
+ CHAT_FUNC_SAVE_AND_EXIT,
+};
+
+enum {
+ CHATDISPLAY_FUNC_LOAD_GFX,
+ CHATDISPLAY_FUNC_MOVE_KB_CURSOR,
+ CHATDISPLAY_FUNC_CURSOR_BLINK,
+ CHATDISPLAY_FUNC_SHOW_KB_SWAP_MENU,
+ CHATDISPLAY_FUNC_HIDE_KB_SWAP_MENU,
+ CHATDISPLAY_FUNC_SWITCH_PAGES,
+ CHATDISPLAY_FUNC_ASK_QUIT_CHATTING,
+ CHATDISPLAY_FUNC_DESTROY_YESNO,
+ CHATDISPLAY_FUNC_UPDATE_MSG,
+ CHATDISPLAY_FUNC_ASK_REGISTER_TEXT,
+ CHATDISPLAY_FUNC_CANCEL_REGISTER,
+ CHATDISPLAY_FUNC_RETURN_TO_KB,
+ CHATDISPLAY_FUNC_SCROLL_CHAT,
+ CHATDISPLAY_FUNC_PRINT_INPUT_TEXT,
+ CHATDISPLAY_FUNC_ASK_SAVE,
+ CHATDISPLAY_FUNC_ASK_OVERWRITE_SAVE,
+ CHATDISPLAY_FUNC_PRINT_SAVING,
+ CHATDISPLAY_FUNC_PRINT_SAVED_GAME,
+ CHATDISPLAY_FUNC_PRINT_EXITING_CHAT,
+ CHATDISPLAY_FUNC_PRINT_LEADER_LEFT,
+ CHATDISPLAY_FUNC_ASK_CONFIRM_LEADER_LEAVE,
+};
+
+enum {
+ CHAT_EXIT_NONE,
+ CHAT_EXIT_ONLY_LEADER,
+ CHAT_EXIT_DROPPED,
+ CHAT_EXIT_DISBANDED,
+};
+
struct UnionRoomChat
{
- u8 filler0[0x4];
- u16 unk4;
- u16 unk6;
- u8 filler8[0x2];
- u16 unkA;
- u8 fillerC[0x1];
- u8 unkD;
- u8 unkE;
- u8 unkF;
+ u32 filler1;
+ u16 funcId;
+ u16 funcState;
+ u16 filler2;
+ u16 exitDelayTimer;
+ u8 filler3;
+ 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 filler18B[0x5];
- u8 unk190[0x28];
- u16 unk1B8;
+ u8 multiplayerId;
+ u8 lastBufferCursorPos;
+ u8 bufferCursorPos;
+ u8 receivedPlayerIndex;
+ u8 exitType;
+ bool8 changedRegisteredTexts;
+ u8 afterSaveTimer;
+ u8 messageEntryBuffer[2 * MAX_MESSAGE_LENGTH + 1];
+ u8 receivedMessage[64];
+ u8 hostName[64];
+ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
+ u8 filler4[5];
+ u8 sendMessageBuffer[40];
+ u16 tryQuitAgainTimer;
};
-struct UnionRoomChat2_Unk0
+struct UnionRoomChatDisplay_Subtask
{
- bool32 (* unk0)(u8 *);
- u8 unk4;
- u8 unk5;
+ bool32 (* callback)(u8 *);
+ bool8 active;
+ u8 state;
};
-struct UnionRoomChat2
-{
- struct UnionRoomChat2_Unk0 unk0[3];
- u16 unk18;
- u16 unk1A;
- u16 unk1C;
- u16 unk1E;
- s16 unk20;
- u8 unk22[0x106];
- u8 unk128[BG_SCREEN_SIZE];
- u8 unk928[BG_SCREEN_SIZE];
- u8 unk1128[BG_SCREEN_SIZE];
- u8 unk1928[BG_SCREEN_SIZE];
+struct UnionRoomChatDisplay
+{
+ struct UnionRoomChatDisplay_Subtask subtasks[3];
+ u16 yesNoMenuWindowId;
+ u16 currLine;
+ u16 scrollCount;
+ u16 messageWindowId;
+ s16 bg1hofs;
+ u8 expandedPlaceholdersBuffer[0x106];
+ u8 bg0Buffer[BG_SCREEN_SIZE];
+ u8 bg1Buffer[BG_SCREEN_SIZE];
+ u8 bg3Buffer[BG_SCREEN_SIZE];
+ u8 bg2Buffer[BG_SCREEN_SIZE];
u8 unk2128[0x20];
u8 unk2148[0x20];
};
-struct UnionRoomChat3
+struct UnionRoomChatSprites
{
- struct Sprite *unk0;
- struct Sprite *unk4;
- struct Sprite *unk8;
- struct Sprite *unkC;
- struct Sprite *unk10;
- u16 unk14;
+ struct Sprite *keyboardCursor;
+ struct Sprite *textEntryArrow;
+ struct Sprite *textEntryCursor;
+ struct Sprite *rButtonIcon;
+ struct Sprite *rButtonLabel;
+ u16 cursorBlinkTimer;
};
-struct Unk82F2C98
+struct SubtaskInfo
{
- u16 unk0;
- bool32 (* unk4)(u8 *);
+ u16 idx;
+ bool32 (* callback)(u8 *);
};
-struct Unk82F2D40
+struct MessageWindowInfo
{
- const u8 *unk0;
- u8 unk4;
- u8 unk5;
- u8 unk6;
- u8 unk7;
- u8 unk8;
- u8 unk9;
- u8 unkA;
+ const u8 *text;
+ u8 boxType;
+ u8 x;
+ u8 y;
+ u8 letterSpacing;
+ u8 lineSpacing;
+ bool8 hasPlaceholders;
+ bool8 useWiderBox;
};
-static void sub_801DDD0(struct UnionRoomChat *);
-static void c2_081284E0(void);
-static void sub_801DF20(void);
-static void sub_801DF38(void);
-static void sub_801DF54(u8 taskId);
-static void sub_801DFAC(void);
-static void sub_801E030(void);
-static void sub_801E120(void);
-static void sub_801E240(void);
-static void sub_801E460(void);
-static void sub_801E5C4(void);
-static void sub_801E668(void);
-static void sub_801E764(void);
-static void sub_801E838(void);
-static void sub_801E978(void);
-static void sub_801EBD4(u16);
-static bool32 sub_801EBE4(void);
-static void sub_801EC94(void);
-static void sub_801ED68(void);
-static void sub_801ED94(void);
-static bool32 sub_801EDC4(void);
-static void sub_801EDE0(void);
-static void sub_801EE10(void);
-static void sub_801EE2C(void);
-static u8 *sub_801EE84(void);
-static u8 *sub_801EEA8(void);
-static void sub_801EF1C(u8 *);
-static void sub_801EF24(u8 *);
-static void sub_801EF4C(u8 *);
-static void sub_801EF7C(u8 *);
-static void sub_801EFA8(u8 *);
-static void sub_801EFD0(u8 *);
-static u8 *sub_801F114(void);
-static void sub_801F2B4(u8 taskId);
-static bool8 sub_801F4D0(void);
-static bool32 sub_801F534(void);
-static void sub_801F544(void);
-static void sub_801F5B8(void);
-static void sub_801F5EC(u16, u8);
-static bool8 sub_801F644(u8);
-static s8 sub_801FF08(void);
-static bool32 sub_8020890(void);
-static void sub_8020770(void);
-static void sub_801F574(struct UnionRoomChat2 *);
-static void sub_801F580(void);
-static void sub_80208D0(void);
-static bool32 sub_801FDD8(u8 *);
-static void sub_8020480(void);
-static void sub_8020538(void);
-static void sub_8020584(void);
-static void sub_80205B4(void);
-static void sub_8020604(void);
+static void InitUnionRoomChat(struct UnionRoomChat *);
+static void CB2_LoadInterface(void);
+static void VBlankCB_UnionRoomChatMain(void);
+static void CB2_UnionRoomChatMain(void);
+static void Task_HandlePlayerInput(u8 taskId);
+static void Chat_Join(void);
+static void Chat_HandleInput(void);
+static void Chat_Switch(void);
+static void Chat_AskQuitChatting(void);
+static void Chat_Exit(void);
+static void Chat_Drop(void);
+static void Chat_Disbanded(void);
+static void Chat_SendMessage(void);
+static void Chat_Register(void);
+static void Chat_SaveAndExit(void);
+static void SetChatFunction(u16);
+static bool32 HandleDPadInput(void);
+static void AppendTextToMessage(void);
+static void DeleteLastMessageCharacter(void);
+static void SwitchCaseOfLastMessageCharacter(void);
+static bool32 ChatMessageIsNotEmpty(void);
+static void RegisterTextAtRow(void);
+static void ResetMessageEntryBuffer(void);
+static void SaveRegisteredTexts(void);
+static u8 *GetEndOfMessagePtr(void);
+static u8 *GetLastCharOfMessagePtr(void);
+static void PrepareSendBuffer_Null(u8 *);
+static void PrepareSendBuffer_Join(u8 *);
+static void PrepareSendBuffer_Chat(u8 *);
+static void PrepareSendBuffer_Leave(u8 *);
+static void PrepareSendBuffer_Drop(u8 *);
+static void PrepareSendBuffer_Disband(u8 *);
+static u8 *GetLimitedMessageStartPtr(void);
+static void Task_ReceiveChatMessage(u8 taskId);
+static bool8 TryAllocDisplay(void);
+static bool32 IsDisplaySubtask0Active(void);
+static void FreeDisplay(void);
+static void RunDisplaySubtasks(void);
+static void StartDisplaySubtask(u16, u8);
+static bool8 IsDisplaySubtaskActive(u8);
+static s8 ProcessMenuInput(void);
+static bool32 TryAllocSprites(void);
+static void InitScanlineEffect(void);
+static void InitDisplay(struct UnionRoomChatDisplay *);
+static void ResetDisplaySubtasks(void);
+static void FreeSprites(void);
+static void ResetGpuBgState(void);
+static void SetBgTilemapBuffers(void);
+static void ClearBg0(void);
+static void LoadChatWindowBorderGfx(void);
+static void LoadChatWindowGfx(void);
static void sub_8020680(void);
-static void sub_80206A4(void);
-static void sub_80206D0(void);
-static void sub_8020740(void);
-static void sub_80206E8(void);
-static void sub_80208E8(void);
-static void sub_8020A68(void);
-static void sub_8020B20(void);
-static void sub_80203B0(void);
-static void sub_802040C(void);
-static void sub_802091C(bool32);
+static void LoadChatMessagesWindow(void);
+static void LoadKeyboardWindow(void);
+static void LoadKeyboardSwapWindow(void);
+static void LoadTextEntryWindow(void);
+static void CreateKeyboardCursorSprite(void);
+static void CreateTextEntrySprites(void);
+static void CreateRButtonSprites(void);
+static void ShowKeyboardSwapMenu(void);
+static void HideKeyboardSwapMenu(void);
+static void SetKeyboardCursorInvisibility(bool32);
static bool32 sub_8020320(void);
-static void sub_80201A4(void);
+static void PrintCurrentKeyboardPage(void);
static bool32 sub_8020368(void);
-static void sub_802093C(void);
-static void sub_8020B80(void);
-static void sub_801FF18(int, u16);
-static void sub_801FDDC(u8, u8, u8);
-static void sub_8020094(void);
-static void sub_801FEBC(void);
-static void sub_80200C8(void);
-static void sub_801FEE4(void);
-static void sub_80200EC(u16, u16, u8);
-static void sub_8020118(u16, u8 *, u8, u8, u8);
-static void sub_80209AC(int);
-static void sub_8020420(u16, u8 *, u8);
-static void sub_80209E0(void);
-static bool32 sub_8020A1C(void);
+static void MoveKeyboardCursor(void);
+static void UpdateRButtonLabel(void);
+static void AddStdMessageWindow(int, u16);
+static void AddYesNoMenuAt(u8, u8, u8);
+static void HideStdMessageWindow(void);
+static void HideYesNoMenuWindow(void);
+static void DestroyStdMessageWindow(void);
+static void DestroyYesNoMenuWindow(void);
+static void FillTextEntryWindow(u16, u16, u8);
+static void DrawTextEntryMessage(u16, u8 *, u8, u8, u8);
+static void SetRegisteredTextPalette(bool32);
+static void PrintChatMessage(u16, u8 *, u8);
+static void StartKeyboardCursorAnim(void);
+static bool32 TryKeyboardCursorReopen(void);
static void sub_80207C0(s16);
static void sub_8020818(s16);
-static bool32 sub_801F658(u8 *state);
-static bool32 sub_801F6F8(u8 *state);
-static bool32 sub_801F730(u8 *state);
-static bool32 sub_801F768(u8 *state);
-static bool32 sub_801F7D4(u8 *state);
-static bool32 sub_801F7E0(u8 *state);
-static bool32 sub_801F82C(u8 *state);
-static bool32 sub_801F870(u8 *state);
-static bool32 sub_801F8DC(u8 *state);
-static bool32 sub_801F984(u8 *state);
-static bool32 sub_801FA2C(u8 *state);
-static bool32 sub_801FA68(u8 *state);
-static bool32 sub_801FB44(u8 *state);
-static bool32 sub_801FB70(u8 *state);
-static bool32 sub_801FBB4(u8 *state);
-static bool32 sub_801FBF8(u8 *state);
-static bool32 sub_801FC4C(u8 *state);
-static bool32 sub_801FC9C(u8 *state);
-static bool32 sub_801FCEC(u8 *state);
-static bool32 sub_801FD30(u8 *state);
-static bool32 sub_801FD88(u8 *state);
-static void sub_8020ABC(struct Sprite *sprite);
-static void sub_8020AF4(struct Sprite *sprite);
-
-EWRAM_DATA struct UnionRoomChat *gUnknown_02022C84 = NULL;
-EWRAM_DATA struct UnionRoomChat2 *gUnknown_02022C88 = NULL;
-EWRAM_DATA struct UnionRoomChat3 *gUnknown_02022C8C = NULL;
-
-void (*const gUnknown_082F2A7C[])(void) =
- {
- sub_801DFAC,
- sub_801E030,
- sub_801E120,
- sub_801E240,
- sub_801E764,
- sub_801E838,
- sub_801E460,
- sub_801E5C4,
- sub_801E668,
- sub_801E978,
- };
-
-static const u8 sKeyboardPageMaxRow[] =
-{
- [UNION_ROOM_KB_PAGE_UPPER] = 9,
- [UNION_ROOM_KB_PAGE_LOWER] = 9,
- [UNION_ROOM_KB_PAGE_EMOJI] = 9,
- 9
+static bool32 Display_Dummy(u8 *);
+static bool32 Display_LoadGfx(u8 *state);
+static bool32 Display_ShowKeyboardSwapMenu(u8 *state);
+static bool32 Display_HideKeyboardSwapMenu(u8 *state);
+static bool32 Display_SwitchPages(u8 *state);
+static bool32 Display_MoveKeyboardCursor(u8 *state);
+static bool32 Display_AskQuitChatting(u8 *state);
+static bool32 Display_DestroyYesNoDialog(u8 *state);
+static bool32 Display_UpdateMessageBuffer(u8 *state);
+static bool32 Display_AskRegisterText(u8 *state);
+static bool32 Display_CancelRegister(u8 *state);
+static bool32 Display_ReturnToKeyboard(u8 *state);
+static bool32 Display_ScrollChat(u8 *state);
+static bool32 Display_AnimateKeyboardCursor(u8 *state);
+static bool32 Display_PrintInputText(u8 *state);
+static bool32 Display_PrintExitingChat(u8 *state);
+static bool32 Display_PrintLeaderLeft(u8 *state);
+static bool32 Display_AskSave(u8 *state);
+static bool32 Display_AskOverwriteSave(u8 *state);
+static bool32 Display_PrintSavingDontTurnOff(u8 *state);
+static bool32 Display_PrintSavedTheGame(u8 *state);
+static bool32 Display_AskConfirmLeaderLeave(u8 *state);
+static void SpriteCB_TextEntryCursor(struct Sprite *sprite);
+static void SpriteCB_TextEntryArrow(struct Sprite *sprite);
+
+static EWRAM_DATA struct UnionRoomChat *sChat = NULL;
+static EWRAM_DATA struct UnionRoomChatDisplay *sDisplay = NULL;
+static EWRAM_DATA struct UnionRoomChatSprites *sSprites = NULL;
+
+static void (*const sChatMainFunctions[])(void) = {
+ [CHAT_FUNC_JOIN] = Chat_Join,
+ [CHAT_FUNC_HANDLE_INPUT] = Chat_HandleInput,
+ [CHAT_FUNC_SWITCH] = Chat_Switch,
+ [CHAT_FUNC_ASK_QUIT] = Chat_AskQuitChatting,
+ [CHAT_FUNC_SEND] = Chat_SendMessage,
+ [CHAT_FUNC_REGISTER] = Chat_Register,
+ [CHAT_FUNC_EXIT] = Chat_Exit,
+ [CHAT_FUNC_DROP] = Chat_Drop,
+ [CHAT_FUNC_DISBANDED] = Chat_Disbanded,
+ [CHAT_FUNC_SAVE_AND_EXIT] = Chat_SaveAndExit
+};
+
+static const u8 sKeyboardPageMaxRow[UNION_ROOM_KB_PAGE_COUNT] =
+{
+ [UNION_ROOM_KB_PAGE_UPPER] = 9,
+ [UNION_ROOM_KB_PAGE_LOWER] = 9,
+ [UNION_ROOM_KB_PAGE_EMOJI] = 9,
+ [UNION_ROOM_KB_PAGE_REGISTER] = 9
};
-static const u8 gUnknown_082F2AA8[] = {
- CHAR_SPACE, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C,
- 0x1D, 0x1E, CHAR_SPACE, 0x20, 0x21, 0x22, 0x23, 0x24,
- 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02,
- CHAR_SPACE, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, CHAR_SPACE,
- 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
+static const u8 sCaseToggleTable[256] = {
+ [CHAR_A] = CHAR_a,
+ [CHAR_B] = CHAR_b,
+ [CHAR_C] = CHAR_c,
+ [CHAR_D] = CHAR_d,
+ [CHAR_E] = CHAR_e,
+ [CHAR_F] = CHAR_f,
+ [CHAR_G] = CHAR_g,
+ [CHAR_H] = CHAR_h,
+ [CHAR_I] = CHAR_i,
+ [CHAR_J] = CHAR_j,
+ [CHAR_K] = CHAR_k,
+ [CHAR_L] = CHAR_l,
+ [CHAR_M] = CHAR_m,
+ [CHAR_N] = CHAR_n,
+ [CHAR_O] = CHAR_o,
+ [CHAR_P] = CHAR_p,
+ [CHAR_Q] = CHAR_q,
+ [CHAR_R] = CHAR_r,
+ [CHAR_S] = CHAR_s,
+ [CHAR_T] = CHAR_t,
+ [CHAR_U] = CHAR_u,
+ [CHAR_V] = CHAR_v,
+ [CHAR_W] = CHAR_w,
+ [CHAR_X] = CHAR_x,
+ [CHAR_Y] = CHAR_y,
+ [CHAR_Z] = CHAR_z,
+ [CHAR_a] = CHAR_A,
+ [CHAR_b] = CHAR_B,
+ [CHAR_c] = CHAR_C,
+ [CHAR_d] = CHAR_D,
+ [CHAR_e] = CHAR_E,
+ [CHAR_f] = CHAR_F,
+ [CHAR_g] = CHAR_G,
+ [CHAR_h] = CHAR_H,
+ [CHAR_i] = CHAR_I,
+ [CHAR_j] = CHAR_J,
+ [CHAR_k] = CHAR_K,
+ [CHAR_l] = CHAR_L,
+ [CHAR_m] = CHAR_M,
+ [CHAR_n] = CHAR_N,
+ [CHAR_o] = CHAR_O,
+ [CHAR_p] = CHAR_P,
+ [CHAR_q] = CHAR_Q,
+ [CHAR_r] = CHAR_R,
+ [CHAR_s] = CHAR_S,
+ [CHAR_t] = CHAR_T,
+ [CHAR_u] = CHAR_U,
+ [CHAR_v] = CHAR_V,
+ [CHAR_w] = CHAR_W,
+ [CHAR_x] = CHAR_X,
+ [CHAR_y] = CHAR_Y,
+ [CHAR_z] = CHAR_Z,
+ [CHAR_A_GRAVE] = CHAR_a_GRAVE,
+ [CHAR_A_ACUTE] = CHAR_a_ACUTE,
+ [CHAR_A_CIRCUMFLEX] = CHAR_a_CIRCUMFLEX,
+ [CHAR_A_DIAERESIS] = CHAR_a_DIAERESIS,
+ [CHAR_C_CEDILLA] = CHAR_c_CEDILLA,
+ [CHAR_E_GRAVE] = CHAR_e_GRAVE,
+ [CHAR_E_ACUTE] = CHAR_e_ACUTE,
+ [CHAR_E_CIRCUMFLEX] = CHAR_e_CIRCUMFLEX,
+ [CHAR_E_DIAERESIS] = CHAR_e_DIAERESIS,
+ [CHAR_I_GRAVE] = CHAR_i_GRAVE,
+ [CHAR_I_ACUTE] = CHAR_i_ACUTE,
+ [CHAR_I_CIRCUMFLEX] = CHAR_i_CIRCUMFLEX,
+ [CHAR_I_DIAERESIS] = CHAR_i_DIAERESIS,
+ [CHAR_O_GRAVE] = CHAR_o_GRAVE,
+ [CHAR_O_ACUTE] = CHAR_o_ACUTE,
+ [CHAR_O_CIRCUMFLEX] = CHAR_o_CIRCUMFLEX,
+ [CHAR_O_DIAERESIS] = CHAR_o_DIAERESIS,
+ [CHAR_OE] = CHAR_oe,
+ [CHAR_U_GRAVE] = CHAR_u_GRAVE,
+ [CHAR_U_ACUTE] = CHAR_u_ACUTE,
+ [CHAR_U_CIRCUMFLEX] = CHAR_u_CIRCUMFLEX,
+ [CHAR_U_DIAERESIS] = CHAR_u_DIAERESIS,
+ [CHAR_N_TILDE] = CHAR_n_TILDE,
+ [CHAR_ESZETT] = CHAR_ESZETT,
+ [CHAR_a_GRAVE] = CHAR_A_GRAVE,
+ [CHAR_a_ACUTE] = CHAR_A_ACUTE,
+ [CHAR_a_CIRCUMFLEX] = CHAR_A_CIRCUMFLEX,
+ [CHAR_a_DIAERESIS] = CHAR_A_DIAERESIS,
+ [CHAR_c_CEDILLA] = CHAR_C_CEDILLA,
+ [CHAR_e_GRAVE] = CHAR_E_GRAVE,
+ [CHAR_e_ACUTE] = CHAR_E_ACUTE,
+ [CHAR_e_CIRCUMFLEX] = CHAR_E_CIRCUMFLEX,
+ [CHAR_e_DIAERESIS] = CHAR_E_DIAERESIS,
+ [CHAR_i_GRAVE] = CHAR_I_GRAVE,
+ [CHAR_i_ACUTE] = CHAR_I_ACUTE,
+ [CHAR_i_CIRCUMFLEX] = CHAR_I_CIRCUMFLEX,
+ [CHAR_i_DIAERESIS] = CHAR_I_DIAERESIS,
+ [CHAR_o_GRAVE] = CHAR_O_GRAVE,
+ [CHAR_o_ACUTE] = CHAR_O_ACUTE,
+ [CHAR_o_CIRCUMFLEX] = CHAR_O_CIRCUMFLEX,
+ [CHAR_o_DIAERESIS] = CHAR_O_DIAERESIS,
+ [CHAR_oe] = CHAR_OE,
+ [CHAR_u_GRAVE] = CHAR_U_GRAVE,
+ [CHAR_u_ACUTE] = CHAR_U_ACUTE,
+ [CHAR_u_CIRCUMFLEX] = CHAR_U_CIRCUMFLEX,
+ [CHAR_u_DIAERESIS] = CHAR_U_DIAERESIS,
+ [CHAR_n_TILDE] = CHAR_N_TILDE,
+ [CHAR_0] = CHAR_0,
+ [CHAR_1] = CHAR_1,
+ [CHAR_2] = CHAR_2,
+ [CHAR_3] = CHAR_3,
+ [CHAR_4] = CHAR_4,
+ [CHAR_5] = CHAR_5,
+ [CHAR_6] = CHAR_6,
+ [CHAR_7] = CHAR_7,
+ [CHAR_8] = CHAR_8,
+ [CHAR_9] = CHAR_9,
+ [CHAR_PK] = CHAR_PK,
+ [CHAR_MN] = CHAR_MN,
+ [CHAR_PO] = CHAR_PO,
+ [CHAR_KE] = CHAR_KE,
+ [CHAR_SUPER_E] = CHAR_SUPER_E,
+ [CHAR_SUPER_ER] = CHAR_SUPER_ER,
+ [CHAR_SUPER_RE] = CHAR_SUPER_RE,
+ [CHAR_PERIOD] = CHAR_PERIOD,
+ [CHAR_COMMA] = CHAR_COMMA,
+ [CHAR_COLON] = CHAR_COLON,
+ [CHAR_SEMICOLON] = CHAR_SEMICOLON,
+ [CHAR_EXCL_MARK] = CHAR_EXCL_MARK,
+ [CHAR_QUESTION_MARK] = CHAR_QUESTION_MARK,
+ [CHAR_HYPHEN] = CHAR_HYPHEN,
+ [CHAR_SLASH] = CHAR_SLASH,
+ [CHAR_ELLIPSIS] = CHAR_ELLIPSIS,
+ [CHAR_LEFT_PAREN] = CHAR_LEFT_PAREN,
+ [CHAR_RIGHT_PAREN] = CHAR_RIGHT_PAREN,
+ [CHAR_AMPERSAND] = CHAR_AMPERSAND,
+ [CHAR_DBL_QUOT_LEFT] = CHAR_DBL_QUOT_LEFT,
+ [CHAR_DBL_QUOT_RIGHT] = CHAR_DBL_QUOT_RIGHT,
+ [CHAR_SGL_QUOT_LEFT] = CHAR_SGL_QUOT_LEFT,
+ [CHAR_SGL_QUOT_RIGHT] = CHAR_SGL_QUOT_RIGHT,
+ [CHAR_MASCULINE_ORDINAL] = CHAR_MASCULINE_ORDINAL,
+ [CHAR_FEMININE_ORDINAL] = CHAR_FEMININE_ORDINAL,
+ [CHAR_BULLET] = CHAR_BULLET,
+ [CHAR_EQUALS] = CHAR_EQUALS,
+ [CHAR_MULT_SIGN] = CHAR_MULT_SIGN,
+ [CHAR_PERCENT] = CHAR_PERCENT,
+ [CHAR_LESS_THAN] = CHAR_LESS_THAN,
+ [CHAR_GREATER_THAN] = CHAR_GREATER_THAN,
+ [CHAR_MALE] = CHAR_MALE,
+ [CHAR_FEMALE] = CHAR_FEMALE,
+ [CHAR_CURRENCY] = CHAR_CURRENCY,
+ [CHAR_BLACK_TRIANGLE] = CHAR_BLACK_TRIANGLE,
};
-static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] =
+// Excludes UNION_ROOM_KB_PAGE_REGISTER, the text for which is chosen by the player
+static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT - 1][UNION_ROOM_KB_ROW_COUNT] =
{
[UNION_ROOM_KB_PAGE_UPPER] =
{
@@ -319,10 +509,10 @@ static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_RO
}
};
-const u16 gUnknown_082F2C20[] = INCBIN_U16("graphics/interface/unk_palette1.gbapal");
-const u16 gUnknown_082F2C40[] = INCBIN_U16("graphics/interface/unk_palette2.gbapal");
+static const u16 sUnk_Palette1[] = INCBIN_U16("graphics/union_room_chat/unk_palette1.gbapal");
+static const u16 sUnk_Palette2[] = INCBIN_U16("graphics/union_room_chat/unk_palette2.gbapal");
-const struct BgTemplate gUnknown_082F2C60[] = {
+static const struct BgTemplate sBgTemplates[] = {
{
.bg = 0,
.charBaseIndex = 0,
@@ -358,7 +548,7 @@ const struct BgTemplate gUnknown_082F2C60[] = {
}
};
-const struct WindowTemplate gUnknown_082F2C70[] = {
+static const struct WindowTemplate sWinTemplates[] = {
{
.bg = 0x03,
.tilemapLeft = 0x08,
@@ -391,198 +581,297 @@ const struct WindowTemplate gUnknown_082F2C70[] = {
.height = 0x09,
.paletteNum = 0x0e,
.baseBlock = 0x0013,
- }, { 0xFF }
+ }, DUMMY_WIN_TEMPLATE
};
-const struct Unk82F2C98 gUnknown_082F2C98[] = {
- {0x00000000, sub_801F658},
- {0x00000003, sub_801F6F8},
- {0x00000004, sub_801F730},
- {0x00000005, sub_801F768},
- {0x00000001, sub_801F7D4},
- {0x00000006, sub_801F7E0},
- {0x00000007, sub_801F82C},
- {0x00000008, sub_801F870},
- {0x00000009, sub_801F8DC},
- {0x0000000a, sub_801F984},
- {0x0000000b, sub_801FA2C},
- {0x0000000c, sub_801FA68},
- {0x00000002, sub_801FB44},
- {0x0000000d, sub_801FB70},
- {0x00000012, sub_801FBB4},
- {0x00000013, sub_801FBF8},
- {0x0000000e, sub_801FC4C},
- {0x0000000f, sub_801FC9C},
- {0x00000010, sub_801FCEC},
- {0x00000011, sub_801FD30},
- {0x00000014, sub_801FD88}
+static const struct SubtaskInfo sDisplaySubtasks[] = {
+ {CHATDISPLAY_FUNC_LOAD_GFX, Display_LoadGfx},
+ {CHATDISPLAY_FUNC_SHOW_KB_SWAP_MENU, Display_ShowKeyboardSwapMenu},
+ {CHATDISPLAY_FUNC_HIDE_KB_SWAP_MENU, Display_HideKeyboardSwapMenu},
+ {CHATDISPLAY_FUNC_SWITCH_PAGES, Display_SwitchPages},
+ {CHATDISPLAY_FUNC_MOVE_KB_CURSOR, Display_MoveKeyboardCursor},
+ {CHATDISPLAY_FUNC_ASK_QUIT_CHATTING, Display_AskQuitChatting},
+ {CHATDISPLAY_FUNC_DESTROY_YESNO, Display_DestroyYesNoDialog},
+ {CHATDISPLAY_FUNC_UPDATE_MSG, Display_UpdateMessageBuffer},
+ {CHATDISPLAY_FUNC_ASK_REGISTER_TEXT, Display_AskRegisterText},
+ {CHATDISPLAY_FUNC_CANCEL_REGISTER, Display_CancelRegister},
+ {CHATDISPLAY_FUNC_RETURN_TO_KB, Display_ReturnToKeyboard},
+ {CHATDISPLAY_FUNC_SCROLL_CHAT, Display_ScrollChat},
+ {CHATDISPLAY_FUNC_CURSOR_BLINK, Display_AnimateKeyboardCursor},
+ {CHATDISPLAY_FUNC_PRINT_INPUT_TEXT, Display_PrintInputText},
+ {CHATDISPLAY_FUNC_PRINT_EXITING_CHAT, Display_PrintExitingChat},
+ {CHATDISPLAY_FUNC_PRINT_LEADER_LEFT, Display_PrintLeaderLeft},
+ {CHATDISPLAY_FUNC_ASK_SAVE, Display_AskSave},
+ {CHATDISPLAY_FUNC_ASK_OVERWRITE_SAVE, Display_AskOverwriteSave},
+ {CHATDISPLAY_FUNC_PRINT_SAVING, Display_PrintSavingDontTurnOff},
+ {CHATDISPLAY_FUNC_PRINT_SAVED_GAME, Display_PrintSavedTheGame},
+ {CHATDISPLAY_FUNC_ASK_CONFIRM_LEADER_LEAVE, Display_AskConfirmLeaderLeave}
};
-const struct Unk82F2D40 gUnknown_082F2D40[] = {
- {gText_QuitChatting, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_RegisterTextWhere, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_RegisterTextHere, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_InputText, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_ExitingChat, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00},
- {gText_LeaderLeftEndingChat, 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00},
- {gText_RegisteredTextChanged, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01},
- {gText_AlreadySavedFile_Unused, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01},
- {gText_SavingDontTurnOff_Unused, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01},
- {gText_PlayerSavedGame_Unused, 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01},
- {gText_IfLeaderLeavesChatEnds, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01}
+static const struct MessageWindowInfo sDisplayStdMessages[] = {
+ [STDMESSAGE_QUIT_CHATTING] = {
+ .text = gText_QuitChatting,
+ .boxType = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_REGISTER_WHERE] = {
+ .text = gText_RegisterTextWhere,
+ .boxType = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_REGISTER_HERE] = {
+ .text = gText_RegisterTextHere,
+ .boxType = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_INPUT_TEXT] = {
+ .text = gText_InputText,
+ .boxType = 1,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_EXITING_CHAT] = {
+ .text = gText_ExitingChat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_LEADER_LEFT] = {
+ .text = gText_LeaderLeftEndingChat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = TRUE,
+ .useWiderBox = FALSE
+ },
+ [STDMESSAGE_ASK_SAVE] = {
+ .text = gText_RegisteredTextChangedOKToSave,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = TRUE
+ },
+ [STDMESSAGE_ASK_OVERWRITE] = {
+ .text = gText_AlreadySavedFile_Chat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = TRUE
+ },
+ [STDMESSAGE_SAVING_NO_OFF] = {
+ .text = gText_SavingDontTurnOff_Chat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = TRUE
+ },
+ [STDMESSAGE_SAVED_THE_GAME] = {
+ .text = gText_PlayerSavedGame_Chat,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = TRUE,
+ .useWiderBox = TRUE
+ },
+ [STDMESSAGE_WARN_LEADER_LEAVE] = {
+ .text = gText_IfLeaderLeavesChatEnds,
+ .boxType = 2,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .hasPlaceholders = FALSE,
+ .useWiderBox = TRUE
+ }
};
-const u8 gText_Ellipsis[] = _("…");
+static const u8 sText_Ellipsis[] = _("…");
-const struct MenuAction gUnknown_082F2DC8[] = {
- {gText_Upper, NULL},
- {gText_Lower, NULL},
- {gText_Symbols, NULL},
- {gText_Register2, NULL},
- {gText_Exit2, NULL},
+static const struct MenuAction sKeyboardPageTitleTexts[UNION_ROOM_KB_PAGE_COUNT + 1] = {
+ [UNION_ROOM_KB_PAGE_UPPER] = {gText_Upper, NULL},
+ [UNION_ROOM_KB_PAGE_LOWER] = {gText_Lower, NULL},
+ [UNION_ROOM_KB_PAGE_EMOJI] = {gText_Symbols, NULL},
+ [UNION_ROOM_KB_PAGE_REGISTER] = {gText_Register2, NULL},
+ [UNION_ROOM_KB_PAGE_COUNT] = {gText_Exit2, NULL},
};
-const u16 gUnknown_082F2DF0[] = INCBIN_U16("graphics/interface/unk_palette3.gbapal");
-const u32 gUnknown_082F2E10[] = INCBIN_U32("graphics/interface/unk_cursor.4bpp.lz");
-const u32 gUnknown_082F3094[] = INCBIN_U32("graphics/interface/unk_dash.4bpp.lz");
-const u32 gUnknown_082F30B4[] = INCBIN_U32("graphics/interface/unk_cursor_arrow.4bpp.lz");
-const u32 gUnknown_082F30E0[] = INCBIN_U32("graphics/interface/unk_rbutton.4bpp.lz");
-
-const struct CompressedSpriteSheet gUnknown_082F3134[] = {
- {gUnknown_082F2E10, 0x1000, 0x0000},
- {gUnknown_082F30B4, 0x0040, 0x0001},
- {gUnknown_082F3094, 0x0040, 0x0002},
- {gUnknown_082F30E0, 0x0080, 0x0003},
- {gUnknown_08DD4CF8, 0x0400, 0x0004}
+static const u16 sUnionRoomChatInterfacePal[] = INCBIN_U16("graphics/union_room_chat/interface.gbapal");
+static const u32 sKeyboardCursorTiles[] = INCBIN_U32("graphics/union_room_chat/keyboard_cursor.4bpp.lz");
+static const u32 sTextEntryCursorTiles[] = INCBIN_U32("graphics/union_room_chat/text_entry_cursor.4bpp.lz");
+static const u32 sTextEntryArrowTiles[] = INCBIN_U32("graphics/union_room_chat/text_entry_arrow.4bpp.lz");
+static const u32 sRButtonGfxTiles[] = INCBIN_U32("graphics/union_room_chat/r_button.4bpp.lz");
+
+static const struct CompressedSpriteSheet sSpriteSheets[] = {
+ {sKeyboardCursorTiles, 0x1000, 0},
+ {sTextEntryArrowTiles, 0x0040, 1},
+ {sTextEntryCursorTiles, 0x0040, 2},
+ {sRButtonGfxTiles, 0x0080, 3},
+ {gUnionRoomChat_RButtonLabels, 0x0400, 4}
};
-const struct SpritePalette gUnknown_082F315C = {
- gUnknown_082F2DF0, 0x0000
+static const struct SpritePalette sSpritePalette = {
+ sUnionRoomChatInterfacePal, 0
};
-const struct OamData gUnknown_082F3164 = {
+static const struct OamData sOam_KeyboardCursor = {
.shape = SPRITE_SHAPE(64x32),
.size = SPRITE_SIZE(64x32),
.priority = 1
};
-const union AnimCmd gUnknown_082F316C[] = {
+static const union AnimCmd sAnim_KeyboardCursor_Open[] = {
ANIMCMD_FRAME(0x00, 30),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F3174[] = {
+static const union AnimCmd sAnim_KeyboardCursor_Closed[] = {
ANIMCMD_FRAME(0x20, 30),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F317C[] = {
+static const union AnimCmd sAnim_KeyboardCursorWide_Open[] = {
ANIMCMD_FRAME(0x40, 30),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F3184[] = {
+static const union AnimCmd sAnim_KeyboardCursorWide_Closed[] = {
ANIMCMD_FRAME(0x60, 30),
ANIMCMD_END
};
-const union AnimCmd *const gUnknown_082F318C[] = {
- gUnknown_082F316C,
- gUnknown_082F3174,
- gUnknown_082F317C,
- gUnknown_082F3184
+static const union AnimCmd *const sAnims_KeyboardCursor[] = {
+ sAnim_KeyboardCursor_Open,
+ sAnim_KeyboardCursor_Closed,
+ sAnim_KeyboardCursorWide_Open,
+ sAnim_KeyboardCursorWide_Closed
};
-const struct SpriteTemplate gUnknown_082F319C = {
+static const struct SpriteTemplate sSpriteTemplate_KeyboardCursor = {
.tileTag = 0x0000,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F3164,
- .anims = gUnknown_082F318C,
+ .oam = &sOam_KeyboardCursor,
+ .anims = sAnims_KeyboardCursor,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-const struct OamData gUnknown_082F31B4 = {
+static const struct OamData sOam_TextEntrySprite = {
.shape = SPRITE_SHAPE(8x16),
.size = SPRITE_SIZE(8x16),
.priority = 2
};
-const struct SpriteTemplate gUnknown_082F31BC = {
+static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = {
.tileTag = 0x0002,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F31B4,
+ .oam = &sOam_TextEntrySprite,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8020ABC
+ .callback = SpriteCB_TextEntryCursor
};
-const struct SpriteTemplate gUnknown_082F31D4 = {
+static const struct SpriteTemplate sSpriteTemplate_TextEntryArrow = {
.tileTag = 0x0001,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F31B4,
+ .oam = &sOam_TextEntrySprite,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8020AF4
+ .callback = SpriteCB_TextEntryArrow
};
-const struct OamData gUnknown_082F31EC = {
+static const struct OamData sOam_RButtonIcon = {
.shape = SPRITE_SHAPE(16x16),
.size = SPRITE_SIZE(16x16),
.priority = 2
};
-const struct OamData gUnknown_082F31F4 = {
+static const struct OamData sOam_RButtonLabel = {
.shape = SPRITE_SHAPE(32x16),
.size = SPRITE_SIZE(32x16),
.priority = 2
};
-const union AnimCmd gUnknown_082F31FC[] = {
+static const union AnimCmd sAnim_ToggleCaseIcon[] = {
ANIMCMD_FRAME(0x00, 2),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F3204[] = {
+static const union AnimCmd sAnim_ToggleCaseIcon_Duplicate1[] = {
ANIMCMD_FRAME(0x08, 2),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F320C[] = {
+static const union AnimCmd sAnim_ToggleCaseIcon_Duplicate2[] = {
ANIMCMD_FRAME(0x10, 2),
ANIMCMD_END
};
-const union AnimCmd gUnknown_082F3214[] = {
+static const union AnimCmd sAnim_RegisterIcon[] = {
ANIMCMD_FRAME(0x18, 2),
ANIMCMD_END
};
-const union AnimCmd *const gUnknown_082F321C[] = {
- gUnknown_082F31FC,
- gUnknown_082F3204,
- gUnknown_082F320C,
- gUnknown_082F3214
+static const union AnimCmd *const sAnims_RButtonLabels[] = {
+ sAnim_ToggleCaseIcon,
+ sAnim_ToggleCaseIcon_Duplicate1,
+ sAnim_ToggleCaseIcon_Duplicate2,
+ sAnim_RegisterIcon
};
-const struct SpriteTemplate gUnknown_082F322C = {
+static const struct SpriteTemplate sSpriteTemplate_RButtonIcon = {
.tileTag = 0x0003,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F31EC,
+ .oam = &sOam_RButtonIcon,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-const struct SpriteTemplate gUnknown_082F3244 = {
+static const struct SpriteTemplate sSpriteTemplate_RButtonLabels = {
.tileTag = 0x0004,
.paletteTag = 0x0000,
- .oam = &gUnknown_082F31F4,
- .anims = gUnknown_082F321C,
+ .oam = &sOam_RButtonLabel,
+ .anims = sAnims_RButtonLabels,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
@@ -590,43 +879,43 @@ const struct SpriteTemplate gUnknown_082F3244 = {
void EnterUnionRoomChat(void)
{
- gUnknown_02022C84 = Alloc(sizeof(*gUnknown_02022C84));
- sub_801DDD0(gUnknown_02022C84);
+ sChat = Alloc(sizeof(struct UnionRoomChat));
+ InitUnionRoomChat(sChat);
gKeyRepeatStartDelay = 20;
SetVBlankCallback(NULL);
- SetMainCallback2(c2_081284E0);
+ SetMainCallback2(CB2_LoadInterface);
}
-static void sub_801DDD0(struct UnionRoomChat *unionRoomChat)
+static void InitUnionRoomChat(struct UnionRoomChat *chat)
{
int i;
- unionRoomChat->unk4 = 0;
- unionRoomChat->unk6 = 0;
- unionRoomChat->currentPage = 0;
- unionRoomChat->unk11 = 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_801EF1C(unionRoomChat->unk190);
+ chat->funcId = 0;
+ chat->funcState = 0;
+ chat->currentPage = 0;
+ chat->currentCol = 0;
+ chat->currentRow = 0;
+ chat->lastBufferCursorPos = 0;
+ chat->bufferCursorPos = 0;
+ chat->receivedPlayerIndex = 0;
+ chat->messageEntryBuffer[0] = EOS;
+ chat->linkPlayerCount = GetLinkPlayerCount();
+ chat->multiplayerId = GetMultiplayerId();
+ chat->exitType = 0;
+ chat->changedRegisteredTexts = FALSE;
+ PrepareSendBuffer_Null(chat->sendMessageBuffer);
for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
- StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3C88[i]);
+ StringCopy(chat->registeredTexts[i], gSaveBlock1Ptr->registeredTexts[i]);
}
-void sub_801DE30(void)
+static void FreeUnionRoomChat(void)
{
- DestroyTask(gUnknown_02022C84->unkE);
- DestroyTask(gUnknown_02022C84->unkF);
- Free(gUnknown_02022C84);
+ DestroyTask(sChat->handleInputTask);
+ DestroyTask(sChat->receiveMessagesTask);
+ Free(sChat);
}
-static void c2_081284E0(void)
+static void CB2_LoadInterface(void)
{
switch (gMain.state)
{
@@ -634,16 +923,16 @@ static void c2_081284E0(void)
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
- sub_801F4D0();
+ TryAllocDisplay();
gMain.state++;
break;
case 1:
- sub_801F5B8();
- if (!sub_801F534())
+ RunDisplaySubtasks();
+ if (!IsDisplaySubtask0Active())
{
BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
- SetVBlankCallback(sub_801DF20);
+ SetVBlankCallback(VBlankCB_UnionRoomChatMain);
gMain.state++;
}
break;
@@ -651,9 +940,9 @@ static void c2_081284E0(void)
UpdatePaletteFade();
if (!gPaletteFade.active)
{
- SetMainCallback2(sub_801DF38);
- gUnknown_02022C84->unkE = CreateTask(sub_801DF54, 8);
- gUnknown_02022C84->unkF = CreateTask(sub_801F2B4, 7);
+ SetMainCallback2(CB2_UnionRoomChatMain);
+ sChat->handleInputTask = CreateTask(Task_HandlePlayerInput, 8);
+ sChat->receiveMessagesTask = CreateTask(Task_ReceiveChatMessage, 7);
LoadWirelessStatusIndicatorSpriteGfx();
CreateWirelessStatusIndicatorSprite(232, 150);
}
@@ -661,7 +950,7 @@ static void c2_081284E0(void)
}
}
-static void sub_801DF20(void)
+static void VBlankCB_UnionRoomChatMain(void)
{
TransferPlttBuffer();
LoadOam();
@@ -669,146 +958,146 @@ static void sub_801DF20(void)
ScanlineEffect_InitHBlankDmaTransfer();
}
-static void sub_801DF38(void)
+static void CB2_UnionRoomChatMain(void)
{
RunTasks();
- sub_801F5B8();
+ RunDisplaySubtasks();
AnimateSprites();
BuildOamBuffer();
UpdatePaletteFade();
}
-static void sub_801DF54(u8 taskId)
+static void Task_HandlePlayerInput(u8 taskId)
{
- switch (gUnknown_02022C84->unk17)
+ switch (sChat->exitType)
{
- case 1:
- sub_801EBD4(6);
- gUnknown_02022C84->unk17 = 0;
+ case CHAT_EXIT_ONLY_LEADER:
+ SetChatFunction(CHAT_FUNC_EXIT);
+ sChat->exitType = CHAT_EXIT_NONE;
break;
- case 2:
- sub_801EBD4(7);
- gUnknown_02022C84->unk17 = 0;
+ case CHAT_EXIT_DROPPED:
+ SetChatFunction(CHAT_FUNC_DROP);
+ sChat->exitType = CHAT_EXIT_NONE;
break;
- case 3:
- sub_801EBD4(8);
- gUnknown_02022C84->unk17 = 0;
+ case CHAT_EXIT_DISBANDED:
+ SetChatFunction(CHAT_FUNC_DISBANDED);
+ sChat->exitType = CHAT_EXIT_NONE;
break;
}
- gUnknown_082F2A7C[gUnknown_02022C84->unk4]();
+ sChatMainFunctions[sChat->funcId]();
}
-static void sub_801DFAC(void)
+static void Chat_Join(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- sub_801EF24(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6++;
+ PrepareSendBuffer_Join(sChat->sendMessageBuffer);
+ sChat->funcState++;
// fall through
case 1:
if (IsLinkTaskFinished() && !sub_8011A9C())
{
- if (SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190)))
- gUnknown_02022C84->unk6++;
+ if (SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer)))
+ sChat->funcState++;
}
break;
case 2:
if (IsLinkTaskFinished())
- sub_801EBD4(1);
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
}
}
-static void sub_801E030(void)
+static void Chat_HandleInput(void)
{
- bool8 var0, var1;
+ bool8 updateMsgActive, cursorBlinkActive;
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
if (gMain.newKeys & START_BUTTON)
{
- if (gUnknown_02022C84->unk15)
- sub_801EBD4(4);
+ if (sChat->bufferCursorPos)
+ SetChatFunction(CHAT_FUNC_SEND);
}
else if (gMain.newKeys & SELECT_BUTTON)
{
- sub_801EBD4(2);
+ SetChatFunction(CHAT_FUNC_SWITCH);
}
else if (gMain.newAndRepeatedKeys & B_BUTTON)
{
- if (gUnknown_02022C84->unk15)
+ if (sChat->bufferCursorPos)
{
- sub_801ED68();
- sub_801F5EC(8, 0);
- gUnknown_02022C84->unk6 = 1;
+ DeleteLastMessageCharacter();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0);
+ sChat->funcState = 1;
}
else
{
- sub_801EBD4(3);
+ SetChatFunction(CHAT_FUNC_ASK_QUIT);
}
}
else if (gMain.newKeys & A_BUTTON)
{
- sub_801EC94();
- sub_801F5EC(8, 0);
- sub_801F5EC(2, 1);
- gUnknown_02022C84->unk6 = 1;
+ AppendTextToMessage();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0);
+ StartDisplaySubtask(CHATDISPLAY_FUNC_CURSOR_BLINK, 1);
+ sChat->funcState = 1;
}
else if (gMain.newKeys & R_BUTTON)
{
- if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER)
{
- sub_801ED94();
- sub_801F5EC(8, 0);
- gUnknown_02022C84->unk6 = 1;
+ SwitchCaseOfLastMessageCharacter();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0);
+ sChat->funcState = 1;
}
else
{
- sub_801EBD4(5);
+ SetChatFunction(5);
}
}
- else if (sub_801EBE4())
+ else if (HandleDPadInput())
{
- sub_801F5EC(1, 0);
- gUnknown_02022C84->unk6 = 1;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_MOVE_KB_CURSOR, 0);
+ sChat->funcState = 1;
}
break;
case 1:
- var0 = sub_801F644(0);
- var1 = sub_801F644(1);
- if (!var0 && !var1)
- gUnknown_02022C84->unk6 = 0;
+ updateMsgActive = IsDisplaySubtaskActive(0);
+ cursorBlinkActive = IsDisplaySubtaskActive(1);
+ if (!updateMsgActive && !cursorBlinkActive)
+ sChat->funcState = 0;
break;
}
}
-static void sub_801E120(void)
+static void Chat_Switch(void)
{
s16 input;
- int var0;
+ bool32 shouldSwitchPages;
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- sub_801F5EC(3, 0);
- gUnknown_02022C84->unk6++;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_SHOW_KB_SWAP_MENU, 0);
+ sChat->funcState++;
break;
case 1:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6++;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState++;
break;
case 2:
input = Menu_ProcessInput();
switch (input)
{
default:
- sub_801F5EC(4, 0);
- var0 = 1;
- if (gUnknown_02022C84->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT)
- var0 = 0;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_HIDE_KB_SWAP_MENU, 0);
+ shouldSwitchPages = TRUE;
+ if (sChat->currentPage == input || input > UNION_ROOM_KB_PAGE_REGISTER)
+ shouldSwitchPages = FALSE;
break;
case MENU_NOTHING_CHOSEN:
if (gMain.newKeys & SELECT_BUTTON)
@@ -818,538 +1107,532 @@ static void sub_801E120(void)
}
return;
case MENU_B_PRESSED:
- sub_801F5EC(4, 0);
- gUnknown_02022C84->unk6 = 3;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_HIDE_KB_SWAP_MENU, 0);
+ sChat->funcState = 3;
return;
}
- if (!var0)
+ if (!shouldSwitchPages)
{
- gUnknown_02022C84->unk6 = 3;
+ sChat->funcState = 3;
return;
}
- gUnknown_02022C84->unk11 = 0;
- gUnknown_02022C84->currentRow = 0;
- sub_801F5EC(5, 1);
- gUnknown_02022C84->currentPage = input;
- gUnknown_02022C84->unk6 = 4;
+ sChat->currentCol = 0;
+ sChat->currentRow = 0;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_SWITCH_PAGES, 1);
+ sChat->currentPage = input;
+ sChat->funcState = 4;
break;
case 3:
- if (!sub_801F644(0))
- sub_801EBD4(1);
+ if (!IsDisplaySubtaskActive(0))
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
case 4:
- if (!sub_801F644(0) && !sub_801F644(1))
- sub_801EBD4(1);
+ if (!IsDisplaySubtaskActive(0) && !IsDisplaySubtaskActive(1))
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
}
}
-static void sub_801E240(void)
+static void Chat_AskQuitChatting(void)
{
s8 input;
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- sub_801F5EC(6, 0);
- gUnknown_02022C84->unk6 = 1;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_QUIT_CHATTING, 0);
+ sChat->funcState = 1;
break;
case 1:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 2;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 2;
break;
case 2:
- input = sub_801FF08();
+ input = ProcessMenuInput();
switch (input)
{
case -1:
case 1:
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 3;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 3;
break;
case 0:
- if (gUnknown_02022C84->unk13 == 0)
+ if (sChat->multiplayerId == 0)
{
- sub_801EFD0(gUnknown_02022C84->unk190);
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 9;
+ PrepareSendBuffer_Disband(sChat->sendMessageBuffer);
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 9;
}
else
{
- sub_801EF7C(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6 = 4;
+ PrepareSendBuffer_Leave(sChat->sendMessageBuffer);
+ sChat->funcState = 4;
}
break;
}
break;
case 3:
- if (!sub_801F644(0))
- sub_801EBD4(1);
+ if (!IsDisplaySubtaskActive(0))
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
case 9:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(20, 0);
- gUnknown_02022C84->unk6 = 10;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_CONFIRM_LEADER_LEAVE, 0);
+ sChat->funcState = 10;
}
break;
case 10:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 8;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 8;
break;
case 8:
- input = sub_801FF08();
+ input = ProcessMenuInput();
switch (input)
{
case -1:
case 1:
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 3;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 3;
break;
case 0:
sub_80104B0();
- sub_801EFD0(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6 = 4;
- gUnknown_02022C84->unk1B8 = 0;
+ PrepareSendBuffer_Disband(sChat->sendMessageBuffer);
+ sChat->funcState = 4;
+ sChat->tryQuitAgainTimer = 0;
break;
}
break;
case 4:
- if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190)))
+ if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer)))
{
- if (!gUnknown_02022C84->unk13)
- gUnknown_02022C84->unk6 = 6;
+ if (!sChat->multiplayerId)
+ sChat->funcState = 6;
else
- gUnknown_02022C84->unk6 = 5;
+ sChat->funcState = 5;
}
if (!gReceivedRemoteLinkPlayers)
- sub_801EBD4(9);
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
break;
case 5:
if (!gReceivedRemoteLinkPlayers)
{
- sub_801EBD4(9);
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
}
- else if (++gUnknown_02022C84->unk1B8 > 300)
+ else if (++sChat->tryQuitAgainTimer > 300)
{
- gUnknown_02022C84->unk1B8 = 0;
- gUnknown_02022C84->unk6 = 4;
+ sChat->tryQuitAgainTimer = 0;
+ sChat->funcState = 4;
}
break;
}
}
-static void sub_801E460(void)
+static void Chat_Exit(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (!FuncIsActiveTask(sub_801F2B4))
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
{
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6++;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState++;
}
break;
case 1:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(18, 0);
- gUnknown_02022C84->unk6++;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_EXITING_CHAT, 0);
+ sChat->funcState++;
}
break;
case 2:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801EFA8(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6++;
+ PrepareSendBuffer_Drop(sChat->sendMessageBuffer);
+ sChat->funcState++;
}
break;
case 3:
- if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190)))
- gUnknown_02022C84->unk6++;
+ if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer)))
+ sChat->funcState++;
break;
case 4:
if ((GetBlockReceivedStatus() & 1) && !sub_8011A9C())
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
break;
case 5:
if (IsLinkTaskFinished() && !sub_8011A9C())
{
sub_800AC34();
- gUnknown_02022C84->unkA = 0;
- gUnknown_02022C84->unk6++;
+ sChat->exitDelayTimer = 0;
+ sChat->funcState++;
}
break;
case 6:
- if (gUnknown_02022C84->unkA < 150)
- gUnknown_02022C84->unkA++;
+ if (sChat->exitDelayTimer < 150)
+ sChat->exitDelayTimer++;
if (!gReceivedRemoteLinkPlayers)
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
break;
case 7:
- if (gUnknown_02022C84->unkA >= 150)
- sub_801EBD4(9);
+ if (sChat->exitDelayTimer >= 150)
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
else
- gUnknown_02022C84->unkA++;
+ sChat->exitDelayTimer++;
break;
}
}
-static void sub_801E5C4(void)
+static void Chat_Drop(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (!FuncIsActiveTask(sub_801F2B4))
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
{
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6++;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState++;
}
break;
case 1:
- if (!sub_801F644(0) && IsLinkTaskFinished() && !sub_8011A9C())
+ if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !sub_8011A9C())
{
sub_800AC34();
- gUnknown_02022C84->unkA = 0;
- gUnknown_02022C84->unk6++;
+ sChat->exitDelayTimer = 0;
+ sChat->funcState++;
}
break;
case 2:
- if (gUnknown_02022C84->unkA < 150)
- gUnknown_02022C84->unkA++;
+ if (sChat->exitDelayTimer < 150)
+ sChat->exitDelayTimer++;
if (!gReceivedRemoteLinkPlayers)
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
break;
case 3:
- if (gUnknown_02022C84->unkA >= 150)
- sub_801EBD4(9);
+ if (sChat->exitDelayTimer >= 150)
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
else
- gUnknown_02022C84->unkA++;
+ sChat->exitDelayTimer++;
break;
}
}
-static void sub_801E668(void)
+static void Chat_Disbanded(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (!FuncIsActiveTask(sub_801F2B4))
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
{
- if (gUnknown_02022C84->unk13)
- sub_801F5EC(7, 0);
+ if (sChat->multiplayerId)
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
}
break;
case 1:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- if (gUnknown_02022C84->unk13)
- sub_801F5EC(19, 0);
+ if (sChat->multiplayerId)
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_LEADER_LEFT, 0);
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
}
break;
case 2:
- if (sub_801F644(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C())
+ if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C())
{
sub_800AC34();
- gUnknown_02022C84->unkA = 0;
- gUnknown_02022C84->unk6++;
+ sChat->exitDelayTimer = 0;
+ sChat->funcState++;
}
break;
case 3:
- if (gUnknown_02022C84->unkA < 150)
- gUnknown_02022C84->unkA++;
+ if (sChat->exitDelayTimer < 150)
+ sChat->exitDelayTimer++;
if (!gReceivedRemoteLinkPlayers)
- gUnknown_02022C84->unk6++;
+ sChat->funcState++;
break;
case 4:
- if (gUnknown_02022C84->unkA >= 150)
- sub_801EBD4(9);
+ if (sChat->exitDelayTimer >= 150)
+ SetChatFunction(CHAT_FUNC_SAVE_AND_EXIT);
else
- gUnknown_02022C84->unkA++;
+ sChat->exitDelayTimer++;
break;
}
}
-static void sub_801E764(void)
+static void Chat_SendMessage(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
if (!gReceivedRemoteLinkPlayers)
{
- sub_801EBD4(1);
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
}
- sub_801EF4C(gUnknown_02022C84->unk190);
- gUnknown_02022C84->unk6++;
+ PrepareSendBuffer_Chat(sChat->sendMessageBuffer);
+ sChat->funcState++;
// fall through
case 1:
- if (IsLinkTaskFinished() == TRUE && !sub_8011A9C() && SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190)))
- gUnknown_02022C84->unk6++;
+ if (IsLinkTaskFinished() == TRUE && !sub_8011A9C() && SendBlock(0, sChat->sendMessageBuffer, sizeof(sChat->sendMessageBuffer)))
+ sChat->funcState++;
break;
case 2:
- sub_801EE10();
- sub_801F5EC(8, 0);
- gUnknown_02022C84->unk6++;
+ ResetMessageEntryBuffer();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_UPDATE_MSG, 0);
+ sChat->funcState++;
break;
case 3:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6++;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState++;
break;
case 4:
if (IsLinkTaskFinished())
- sub_801EBD4(1);
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
}
}
-static void sub_801E838(void)
+static void Chat_Register(void)
{
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (sub_801EDC4())
+ if (ChatMessageIsNotEmpty())
{
- sub_801F5EC(9, 0);
- gUnknown_02022C84->unk6 = 2;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_REGISTER_TEXT, 0);
+ sChat->funcState = 2;
}
else
{
- sub_801F5EC(13, 0);
- gUnknown_02022C84->unk6 = 5;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_INPUT_TEXT, 0);
+ sChat->funcState = 5;
}
break;
case 1:
if (gMain.newKeys & A_BUTTON)
{
- sub_801EDE0();
- sub_801F5EC(11, 0);
- gUnknown_02022C84->unk6 = 3;
+ RegisterTextAtRow();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_RETURN_TO_KB, 0);
+ sChat->funcState = 3;
}
else if (gMain.newKeys & B_BUTTON)
{
- sub_801F5EC(10, 0);
- gUnknown_02022C84->unk6 = 4;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_CANCEL_REGISTER, 0);
+ sChat->funcState = 4;
}
- else if (sub_801EBE4())
+ else if (HandleDPadInput())
{
- sub_801F5EC(1, 0);
- gUnknown_02022C84->unk6 = 2;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_MOVE_KB_CURSOR, 0);
+ sChat->funcState = 2;
}
break;
case 2:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 1;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 1;
break;
case 3:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(10, 0);
- gUnknown_02022C84->unk6 = 4;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_CANCEL_REGISTER, 0);
+ sChat->funcState = 4;
}
break;
case 4:
- if (!sub_801F644(0))
- sub_801EBD4(1);
+ if (!IsDisplaySubtaskActive(0))
+ SetChatFunction(CHAT_FUNC_HANDLE_INPUT);
break;
case 5:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 6;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 6;
break;
case 6:
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 4;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 4;
}
break;
}
}
-static void sub_801E978(void)
+static void Chat_SaveAndExit(void)
{
s8 input;
- switch (gUnknown_02022C84->unk6)
+ switch (sChat->funcState)
{
case 0:
- if (!gUnknown_02022C84->unk18)
+ if (!sChat->changedRegisteredTexts)
{
- gUnknown_02022C84->unk6 = 12;
+ sChat->funcState = 12;
}
else
{
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 1;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 1;
}
break;
case 1:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(14, 0);
- gUnknown_02022C84->unk6 = 2;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_SAVE, 0);
+ sChat->funcState = 2;
}
break;
case 2:
- input = sub_801FF08();
+ input = ProcessMenuInput();
switch (input)
{
case -1:
case 1:
- gUnknown_02022C84->unk6 = 12;
+ sChat->funcState = 12;
break;
case 0:
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 3;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 3;
break;
}
break;
case 3:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(15, 0);
- gUnknown_02022C84->unk6 = 4;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_ASK_OVERWRITE_SAVE, 0);
+ sChat->funcState = 4;
}
break;
case 4:
- if (!sub_801F644(0))
- gUnknown_02022C84->unk6 = 5;
+ if (!IsDisplaySubtaskActive(0))
+ sChat->funcState = 5;
break;
case 5:
- input = sub_801FF08();
+ input = ProcessMenuInput();
switch (input)
{
case -1:
case 1:
- gUnknown_02022C84->unk6 = 12;
+ sChat->funcState = 12;
break;
case 0:
- sub_801F5EC(7, 0);
- gUnknown_02022C84->unk6 = 6;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_DESTROY_YESNO, 0);
+ sChat->funcState = 6;
break;
}
break;
case 6:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
- sub_801F5EC(16, 0);
- sub_801EE2C();
- gUnknown_02022C84->unk6 = 7;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_SAVING, 0);
+ SaveRegisteredTexts();
+ sChat->funcState = 7;
}
break;
case 7:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
SetContinueGameWarpStatusToDynamicWarp();
TrySavingData(SAVE_NORMAL);
- gUnknown_02022C84->unk6 = 8;
+ sChat->funcState = 8;
}
break;
case 8:
- sub_801F5EC(17, 0);
- gUnknown_02022C84->unk6 = 9;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_PRINT_SAVED_GAME, 0);
+ sChat->funcState = 9;
break;
case 9:
- if (!sub_801F644(0))
+ if (!IsDisplaySubtaskActive(0))
{
PlaySE(SE_SAVE);
ClearContinueGameWarpStatus2();
- gUnknown_02022C84->unk6 = 10;
+ sChat->funcState = 10;
}
break;
case 10:
- gUnknown_02022C84->unk19 = 0;
- gUnknown_02022C84->unk6 = 11;
+ sChat->afterSaveTimer = 0;
+ sChat->funcState = 11;
break;
case 11:
- gUnknown_02022C84->unk19++;
- if (gUnknown_02022C84->unk19 > 120)
- gUnknown_02022C84->unk6 = 12;
+ sChat->afterSaveTimer++;
+ if (sChat->afterSaveTimer > 120)
+ sChat->funcState = 12;
break;
case 12:
BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
- gUnknown_02022C84->unk6 = 13;
+ sChat->funcState = 13;
break;
case 13:
if (!gPaletteFade.active)
{
- sub_801F544();
- sub_801DE30();
+ FreeDisplay();
+ FreeUnionRoomChat();
SetMainCallback2(CB2_ReturnToField);
}
break;
}
}
-static void sub_801EBD4(u16 arg0)
+static void SetChatFunction(u16 funcId)
{
- gUnknown_02022C84->unk4 = arg0;
- gUnknown_02022C84->unk6 = 0;
+ sChat->funcId = funcId;
+ sChat->funcState = 0;
}
-static bool32 sub_801EBE4(void)
+static bool32 HandleDPadInput(void)
{
- if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ do
{
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ if (sChat->currentRow > 0)
+ sChat->currentRow--;
+ else
+ sChat->currentRow = sKeyboardPageMaxRow[sChat->currentPage];
+ break;
+ }
if (gMain.newAndRepeatedKeys & DPAD_DOWN)
{
- if (gUnknown_02022C84->currentRow < sKeyboardPageMaxRow[gUnknown_02022C84->currentPage])
- gUnknown_02022C84->currentRow++;
+ if (sChat->currentRow < sKeyboardPageMaxRow[sChat->currentPage])
+ sChat->currentRow++;
else
- gUnknown_02022C84->currentRow = 0;
-
- return TRUE;
+ sChat->currentRow = 0;
+ break;
}
-
- if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER)
{
if (gMain.newAndRepeatedKeys & DPAD_LEFT)
{
- if (gUnknown_02022C84->unk11)
- gUnknown_02022C84->unk11--;
+ if (sChat->currentCol > 0)
+ sChat->currentCol--;
else
- gUnknown_02022C84->unk11 = 4;
+ sChat->currentCol = 4;
+ break;
}
else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
{
- if (gUnknown_02022C84->unk11 > 3)
- gUnknown_02022C84->unk11 = 0;
+ if (sChat->currentCol < 4)
+ sChat->currentCol++;
else
- gUnknown_02022C84->unk11++;
+ sChat->currentCol = 0;
+ break;
}
- else
- {
- return FALSE;
- }
-
- return TRUE;
}
-
return FALSE;
- }
- else
- {
- if (gUnknown_02022C84->currentRow)
- gUnknown_02022C84->currentRow--;
- else
- gUnknown_02022C84->currentRow = sKeyboardPageMaxRow[gUnknown_02022C84->currentPage];
+ } while (0);
- return TRUE;
- }
+ return TRUE;
}
-static void sub_801EC94(void)
+static void AppendTextToMessage(void)
{
int i;
const u8 *charsStr;
@@ -1357,10 +1640,11 @@ static void sub_801EC94(void)
u8 *str;
u8 buffer[21];
- if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ if (sChat->currentPage != UNION_ROOM_KB_PAGE_REGISTER)
{
- charsStr = sUnionRoomKeyboardText[gUnknown_02022C84->currentPage][gUnknown_02022C84->currentRow];
- for (i = 0; i < gUnknown_02022C84->unk11; i++)
+ // Going to append a single character
+ charsStr = sUnionRoomKeyboardText[sChat->currentPage][sChat->currentRow];
+ for (i = 0; i < sChat->currentCol; i++)
{
if (*charsStr == CHAR_SPECIAL_F9)
charsStr++;
@@ -1371,19 +1655,20 @@ static void sub_801EC94(void)
}
else
{
- u8 *tempStr = StringCopy(buffer, gUnknown_02022C84->unkB9[gUnknown_02022C84->currentRow]);
+ // Going to append registered text string
+ u8 *tempStr = StringCopy(buffer, sChat->registeredTexts[sChat->currentRow]);
tempStr[0] = CHAR_SPACE;
tempStr[1] = EOS;
charsStr = buffer;
strLength = StringLength_Multibyte(buffer);
}
- gUnknown_02022C84->unk14 = gUnknown_02022C84->unk15;
+ sChat->lastBufferCursorPos = sChat->bufferCursorPos;
if (!charsStr)
return;
- str = sub_801EE84();
- while (--strLength != -1 && gUnknown_02022C84->unk15 < 15)
+ str = GetEndOfMessagePtr();
+ while (--strLength != -1 && sChat->bufferCursorPos < MAX_MESSAGE_LENGTH)
{
if (*charsStr == CHAR_SPECIAL_F9)
{
@@ -1396,103 +1681,103 @@ static void sub_801EC94(void)
charsStr++;
str++;
- gUnknown_02022C84->unk15++;
+ sChat->bufferCursorPos++;
}
*str = EOS;
}
-static void sub_801ED68(void)
+static void DeleteLastMessageCharacter(void)
{
- gUnknown_02022C84->unk14 = gUnknown_02022C84->unk15;
- if (gUnknown_02022C84->unk15)
+ sChat->lastBufferCursorPos = sChat->bufferCursorPos;
+ if (sChat->bufferCursorPos)
{
- u8 *str = sub_801EEA8();
+ u8 *str = GetLastCharOfMessagePtr();
*str = EOS;
- gUnknown_02022C84->unk15--;
+ sChat->bufferCursorPos--;
}
}
-static void sub_801ED94(void)
+static void SwitchCaseOfLastMessageCharacter(void)
{
u8 *str;
u8 character;
- gUnknown_02022C84->unk14 = gUnknown_02022C84->unk15 - 1;
- str = sub_801EEA8();
+ sChat->lastBufferCursorPos = sChat->bufferCursorPos - 1;
+ str = GetLastCharOfMessagePtr();
if (*str != CHAR_SPECIAL_F9)
{
- character = gUnknown_082F2AA8[*str];
+ character = sCaseToggleTable[*str];
if (character)
*str = character;
}
}
-static bool32 sub_801EDC4(void)
+static bool32 ChatMessageIsNotEmpty(void)
{
- if (gUnknown_02022C84->unk15)
+ if (sChat->bufferCursorPos)
return TRUE;
else
return FALSE;
}
-static void sub_801EDE0(void)
+static void RegisterTextAtRow(void)
{
- u8 *src = sub_801F114();
- StringCopy(gUnknown_02022C84->unkB9[gUnknown_02022C84->currentRow], src);
- gUnknown_02022C84->unk18 = 1;
+ u8 *src = GetLimitedMessageStartPtr();
+ StringCopy(sChat->registeredTexts[sChat->currentRow], src);
+ sChat->changedRegisteredTexts = TRUE;
}
-static void sub_801EE10(void)
+static void ResetMessageEntryBuffer(void)
{
- gUnknown_02022C84->unk1A[0] = EOS;
- gUnknown_02022C84->unk14 = 15;
- gUnknown_02022C84->unk15 = 0;
+ sChat->messageEntryBuffer[0] = EOS;
+ sChat->lastBufferCursorPos = 15;
+ sChat->bufferCursorPos = 0;
}
-static void sub_801EE2C(void)
+static void SaveRegisteredTexts(void)
{
int i;
for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
- StringCopy(gSaveBlock1Ptr->unk3C88[i], gUnknown_02022C84->unkB9[i]);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[i], sChat->registeredTexts[i]);
}
-static u8 *sub_801EE6C(int arg0)
+static u8 *GetRegisteredTextByRow(int row)
{
- return gUnknown_02022C84->unkB9[arg0];
+ return sChat->registeredTexts[row];
}
-static u8 *sub_801EE84(void)
+static u8 *GetEndOfMessagePtr(void)
{
- u8 *str = gUnknown_02022C84->unk1A;
+ u8 *str = sChat->messageEntryBuffer;
while (*str != EOS)
str++;
return str;
}
-static u8 *sub_801EEA8(void)
+static u8 *GetLastCharOfMessagePtr(void)
{
- u8 *str = gUnknown_02022C84->unk1A;
- u8 *str2 = str;
- while (*str != EOS)
+ u8 *currChar = sChat->messageEntryBuffer;
+ u8 *lastChar = currChar;
+ while (*currChar != EOS)
{
- str2 = str;
- if (*str == CHAR_SPECIAL_F9)
- str++;
- str++;
+ lastChar = currChar;
+ if (*currChar == CHAR_SPECIAL_F9)
+ currChar++;
+ currChar++;
}
- return str2;
+ return lastChar;
}
-static u16 sub_801EED8(void)
+static u16 GetNumOverflowCharsInMessage(void)
{
u8 *str;
u32 i, numChars, strLength;
- strLength = StringLength_Multibyte(gUnknown_02022C84->unk1A);
- str = gUnknown_02022C84->unk1A;
+ strLength = StringLength_Multibyte(sChat->messageEntryBuffer);
+ str = sChat->messageEntryBuffer;
numChars = 0;
if (strLength > 10)
{
@@ -1510,83 +1795,83 @@ static u16 sub_801EED8(void)
return numChars;
}
-static void sub_801EF1C(u8 *arg0)
+static void PrepareSendBuffer_Null(u8 *buffer)
{
- arg0[0] = CHAR_SPACE;
+ buffer[0] = CHAT_MESSAGE_NONE;
}
-static void sub_801EF24(u8 *arg0)
+static void PrepareSendBuffer_Join(u8 *buffer)
{
- arg0[0] = 2;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13;
+ buffer[0] = CHAT_MESSAGE_JOIN;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ buffer[1 + (PLAYER_NAME_LENGTH + 1)] = sChat->multiplayerId;
}
-static void sub_801EF4C(u8 *arg0)
+static void PrepareSendBuffer_Chat(u8 *buffer)
{
- arg0[0] = 1;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], gUnknown_02022C84->unk1A);
+ buffer[0] = CHAT_MESSAGE_CHAT;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ StringCopy(&buffer[1 + (PLAYER_NAME_LENGTH + 1)], sChat->messageEntryBuffer);
}
-static void sub_801EF7C(u8 *arg0)
+static void PrepareSendBuffer_Leave(u8 *buffer)
{
- arg0[0] = 3;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13;
+ buffer[0] = CHAT_MESSAGE_LEAVE;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ buffer[1 + (PLAYER_NAME_LENGTH + 1)] = sChat->multiplayerId;
sub_8011A50();
}
-static void sub_801EFA8(u8 *arg0)
+static void PrepareSendBuffer_Drop(u8 *buffer)
{
- arg0[0] = 4;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13;
+ buffer[0] = CHAT_MESSAGE_DROP;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ buffer[1 + (PLAYER_NAME_LENGTH + 1)] = sChat->multiplayerId;
}
-static void sub_801EFD0(u8 *arg0)
+static void PrepareSendBuffer_Disband(u8 *buffer)
{
- arg0[0] = 5;
- StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
- arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13;
+ buffer[0] = CHAT_MESSAGE_DISBAND;
+ StringCopy(&buffer[1], gSaveBlock2Ptr->playerName);
+ buffer[1 + (PLAYER_NAME_LENGTH + 1)] = sChat->multiplayerId;
}
-static bool32 sub_801EFF8(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_02022C84->unk13 != str[8])
+ case CHAT_MESSAGE_JOIN:
+ if (sChat->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_02022C84->unk79, str);
+ case CHAT_MESSAGE_DISBAND:
+ StringCopy(sChat->hostName, name);
// fall through
- case 3:
- if (gUnknown_02022C84->unk13 != *arg1)
+ case CHAT_MESSAGE_LEAVE:
+ if (sChat->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;
@@ -1597,47 +1882,47 @@ static bool32 sub_801EFF8(u8 *arg0, u8 *arg1)
static u8 GetCurrentKeyboardPage(void)
{
- return gUnknown_02022C84->currentPage;
+ return sChat->currentPage;
}
-static void sub_801F0BC(u8 *arg0, u8 *arg1)
+static void GetCurrentKeyboardColAndRow(u8 *col, u8 *row)
{
- *arg0 = gUnknown_02022C84->unk11;
- *arg1 = gUnknown_02022C84->currentRow;
+ *col = sChat->currentCol;
+ *row = sChat->currentRow;
}
-static u8 *sub_801F0D0(void)
+static u8 *GetMessageEntryBuffer(void)
{
- return gUnknown_02022C84->unk1A;
+ return sChat->messageEntryBuffer;
}
-static int sub_801F0DC(void)
+static int GetLengthOfMessageEntry(void)
{
- u8 *str = sub_801F0D0();
+ u8 *str = GetMessageEntryBuffer();
return StringLength_Multibyte(str);
}
-static void sub_801F0EC(u32 *arg0, u32 *arg1)
+static void GetBufferSelectionRegion(u32 *x, u32 *width)
{
- int diff = gUnknown_02022C84->unk15 - gUnknown_02022C84->unk14;
+ int diff = sChat->bufferCursorPos - sChat->lastBufferCursorPos;
if (diff < 0)
{
diff *= -1;
- *arg0 = gUnknown_02022C84->unk15;
+ *x = sChat->bufferCursorPos;
}
else
{
- *arg0 = gUnknown_02022C84->unk14;
+ *x = sChat->lastBufferCursorPos;
}
- *arg1 = diff;
+ *width = diff;
}
-static u8 *sub_801F114(void)
+static u8 *GetLimitedMessageStartPtr(void)
{
int i;
- u16 numChars = sub_801EED8();
- u8 *str = gUnknown_02022C84->unk1A;
+ u16 numChars = GetNumOverflowCharsInMessage();
+ u8 *str = sChat->messageEntryBuffer;
for (i = 0; i < numChars; i++)
{
if (*str == CHAR_SPECIAL_F9)
@@ -1649,12 +1934,12 @@ static u8 *sub_801F114(void)
return str;
}
-static u16 sub_801F144(void)
+static u16 GetLimitedMessageStartPos(void)
{
u16 count;
u32 i;
- u16 numChars = sub_801EED8();
- u8 *str = gUnknown_02022C84->unk1A;
+ u16 numChars = GetNumOverflowCharsInMessage();
+ u8 *str = sChat->messageEntryBuffer;
for (count = 0, i = 0; i < numChars; count++, i++)
{
if (*str == CHAR_SPECIAL_F9)
@@ -1666,56 +1951,63 @@ static u16 sub_801F144(void)
return count;
}
-static u8 *sub_801F180(void)
+static u8 *GetLastReceivedMessage(void)
{
- return gUnknown_02022C84->unk39;
+ return sChat->receivedMessage;
}
-static u8 sub_801F18C(void)
+static u8 GetReceivedPlayerIndex(void)
{
- return gUnknown_02022C84->unk16;
+ return sChat->receivedPlayerIndex;
}
-static int sub_801F198(void)
+static int GetTextEntryCursorPosition(void)
{
- return gUnknown_02022C84->unk15;
+ return sChat->bufferCursorPos;
}
-static int sub_801F1A4(void)
+static int GetShouldShowCaseToggleIcon(void)
{
- u8 *str = sub_801EEA8();
+ u8 *str = GetLastCharOfMessagePtr();
u32 character = *str;
- if (character > 0xFF || gUnknown_082F2AA8[character] == character || gUnknown_082F2AA8[character] == 0)
+ if (character > 0xFF || sCaseToggleTable[character] == character || sCaseToggleTable[character] == 0)
return 3;
else
return 0;
}
-static u8 *sub_801F1D0(void)
+static u8 *GetChatHostName(void)
{
- return gUnknown_02022C84->unk79;
+ return sChat->hostName;
}
-void copy_strings_to_sav1(void)
+void InitUnionRoomChatRegisteredTexts(void)
{
- StringCopy(gSaveBlock1Ptr->unk3C88[0], gText_Hello);
- StringCopy(gSaveBlock1Ptr->unk3C88[1], gText_Pokemon2);
- StringCopy(gSaveBlock1Ptr->unk3C88[2], gText_Trade);
- StringCopy(gSaveBlock1Ptr->unk3C88[3], gText_Battle);
- StringCopy(gSaveBlock1Ptr->unk3C88[4], gText_Lets);
- StringCopy(gSaveBlock1Ptr->unk3C88[5], gText_Ok);
- StringCopy(gSaveBlock1Ptr->unk3C88[6], gText_Sorry);
- StringCopy(gSaveBlock1Ptr->unk3C88[7], gText_YaySmileEmoji);
- StringCopy(gSaveBlock1Ptr->unk3C88[8], gText_ThankYou);
- StringCopy(gSaveBlock1Ptr->unk3C88[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_801F2B4(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)
@@ -1724,115 +2016,122 @@ static void sub_801F2B4(u8 taskId)
return;
}
- data[0] = 1;
+ tState = 1;
// fall through
case 1:
- data[4] = GetLinkPlayerCount();
- if (gUnknown_02022C84->unkD != data[4])
+ tLinkPlayerCount = GetLinkPlayerCount();
+ if (sChat->linkPlayerCount != tLinkPlayerCount)
{
- data[0] = 2;
- gUnknown_02022C84->unkD = data[4];
+ tState = 2;
+ sChat->linkPlayerCount = tLinkPlayerCount;
return;
}
- data[3] = GetBlockReceivedStatus();
- if (!data[3] && sub_8011A9C())
+ tBlockReceivedStatus = GetBlockReceivedStatus();
+ if (!tBlockReceivedStatus && sub_8011A9C())
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]++)
+ 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_801EFF8(gUnknown_02022C84->unk39, (u8 *)gBlockRecvBuffer[data[1]]))
+ if (ProcessReceivedChatMessage(sChat->receivedMessage, (u8 *)gBlockRecvBuffer[tI]))
{
- gUnknown_02022C84->unk16 = data[1];
- sub_801F5EC(12, 2);
- data[0] = 7;
+ sChat->receivedPlayerIndex = tI;
+ StartDisplaySubtask(CHATDISPLAY_FUNC_SCROLL_CHAT, 2);
+ tState = 7;
}
else
{
- data[0] = data[5];
+ tState = tNextState;
}
- data[1]++;
+ tI++;
break;
case 7:
- if (!sub_801F644(2))
- data[0] = data[5];
+ if (!IsDisplaySubtaskActive(2))
+ tState = tNextState;
break;
case 4:
- if (!gUnknown_02022C84->unk13 && data[2])
+ if (!sChat->multiplayerId && tCurrLinkPlayer)
{
if (GetLinkPlayerCount() == 2)
{
sub_80104B0();
- gUnknown_02022C84->unk17 = 1;
+ sChat->exitType = 1;
DestroyTask(taskId);
return;
}
- sub_8011DE0(data[2]);
+ sub_8011DE0(tCurrLinkPlayer);
}
- data[0] = 3;
+ tState = 3;
break;
case 5:
- if (gUnknown_02022C84->unk13)
- gUnknown_02022C84->unk17 = 2;
+ if (sChat->multiplayerId)
+ sChat->exitType = 2;
DestroyTask(taskId);
break;
case 6:
- gUnknown_02022C84->unk17 = 3;
+ sChat->exitType = 3;
DestroyTask(taskId);
break;
case 2:
if (!sub_8011A9C())
{
- if (!gUnknown_02022C84->unk13)
- sub_80110B8(gUnknown_02022C84->unkD);
+ if (!sChat->multiplayerId)
+ sub_80110B8(sChat->linkPlayerCount);
- data[0] = 1;
+ tState = 1;
}
break;
}
}
-static bool8 sub_801F4D0(void)
+#undef tNextState
+#undef tLinkPlayerCount
+#undef tBlockReceivedStatus
+#undef tCurrLinkPlayer
+#undef tI
+#undef tState
+
+static bool8 TryAllocDisplay(void)
{
- gUnknown_02022C88 = Alloc(sizeof(*gUnknown_02022C88));
- if (gUnknown_02022C88 && sub_8020890())
+ sDisplay = Alloc(sizeof(*sDisplay));
+ if (sDisplay && TryAllocSprites())
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_082F2C60, ARRAY_COUNT(gUnknown_082F2C60));
- InitWindows(gUnknown_082F2C70);
+ InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
+ InitWindows(sWinTemplates);
reset_temp_tile_data_buffers();
- sub_8020770();
- sub_801F574(gUnknown_02022C88);
- sub_801F580();
- sub_801F5EC(0, 0);
+ InitScanlineEffect();
+ InitDisplay(sDisplay);
+ ResetDisplaySubtasks();
+ StartDisplaySubtask(CHATDISPLAY_FUNC_LOAD_GFX, 0);
return TRUE;
}
else
@@ -1841,80 +2140,80 @@ static bool8 sub_801F4D0(void)
}
}
-static bool32 sub_801F534(void)
+static bool32 IsDisplaySubtask0Active(void)
{
- return sub_801F644(0);
+ return IsDisplaySubtaskActive(0);
}
-static void sub_801F544(void)
+static void FreeDisplay(void)
{
- sub_80208D0();
- if (gUnknown_02022C88)
- FREE_AND_SET_NULL(gUnknown_02022C88);
+ FreeSprites();
+ if (sDisplay)
+ FREE_AND_SET_NULL(sDisplay);
FreeAllWindowBuffers();
gScanlineEffect.state = 3;
}
-static void sub_801F574(struct UnionRoomChat2 *arg0)
+static void InitDisplay(struct UnionRoomChatDisplay *display)
{
- arg0->unk18 = 0xFF;
- arg0->unk1E = 0xFF;
- arg0->unk1A = 0;
+ display->yesNoMenuWindowId = 0xFF;
+ display->messageWindowId = 0xFF;
+ display->currLine = 0;
}
-static void sub_801F580(void)
+static void ResetDisplaySubtasks(void)
{
int i;
- if (!gUnknown_02022C88)
+ if (!sDisplay)
return;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sDisplay->subtasks); i++)
{
- gUnknown_02022C88->unk0[i].unk0 = sub_801FDD8;
- gUnknown_02022C88->unk0[i].unk4 = 0;
- gUnknown_02022C88->unk0[i].unk5 = 0;
+ sDisplay->subtasks[i].callback = Display_Dummy;
+ sDisplay->subtasks[i].active = FALSE;
+ sDisplay->subtasks[i].state = 0;
}
}
-static void sub_801F5B8(void)
+static void RunDisplaySubtasks(void)
{
int i;
- if (!gUnknown_02022C88)
+ if (!sDisplay)
return;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sDisplay->subtasks); i++)
{
- gUnknown_02022C88->unk0[i].unk4 =
- gUnknown_02022C88->unk0[i].unk0(&gUnknown_02022C88->unk0[i].unk5);
+ sDisplay->subtasks[i].active =
+ sDisplay->subtasks[i].callback(&sDisplay->subtasks[i].state);
}
}
-static void sub_801F5EC(u16 arg0, u8 arg1)
+static void StartDisplaySubtask(u16 subtaskId, u8 assignId)
{
u32 i;
- gUnknown_02022C88->unk0[arg1].unk0 = sub_801FDD8;
- for (i = 0; i < 21; i++)
+ sDisplay->subtasks[assignId].callback = Display_Dummy;
+ for (i = 0; i < ARRAY_COUNT(sDisplaySubtasks); i++)
{
- if (gUnknown_082F2C98[i].unk0 == arg0)
+ if (sDisplaySubtasks[i].idx == subtaskId)
{
- gUnknown_02022C88->unk0[arg1].unk0 = gUnknown_082F2C98[i].unk4;
- gUnknown_02022C88->unk0[arg1].unk4 = 1;
- gUnknown_02022C88->unk0[arg1].unk5 = 0;
+ sDisplay->subtasks[assignId].callback = sDisplaySubtasks[i].callback;
+ sDisplay->subtasks[assignId].active = TRUE;
+ sDisplay->subtasks[assignId].state = 0;
break;
}
}
}
-static bool8 sub_801F644(u8 arg0)
+static bool8 IsDisplaySubtaskActive(u8 id)
{
- return gUnknown_02022C88->unk0[arg0].unk4;
+ return sDisplay->subtasks[id].active;
}
-bool32 sub_801F658(u8 *state)
+static bool32 Display_LoadGfx(u8 *state)
{
if (free_temp_tile_data_buffers_if_possible() == TRUE)
return TRUE;
@@ -1922,33 +2221,33 @@ bool32 sub_801F658(u8 *state)
switch (*state)
{
case 0:
- sub_8020480();
- sub_8020538();
+ ResetGpuBgState();
+ SetBgTilemapBuffers();
break;
case 1:
- sub_8020584();
+ ClearBg0();
break;
case 2:
- sub_80205B4();
+ LoadChatWindowBorderGfx();
break;
case 3:
- sub_8020604();
+ LoadChatWindowGfx();
break;
case 4:
sub_8020680();
break;
case 5:
- sub_80206A4();
- sub_80206D0();
- sub_8020740();
- sub_80206E8();
+ LoadChatMessagesWindow();
+ LoadKeyboardWindow();
+ LoadKeyboardSwapWindow();
+ LoadTextEntryWindow();
break;
case 6:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_80208E8();
- sub_8020A68();
- sub_8020B20();
+ CreateKeyboardCursorSprite();
+ CreateTextEntrySprites();
+ CreateRButtonSprites();
}
break;
default:
@@ -1959,12 +2258,12 @@ bool32 sub_801F658(u8 *state)
return TRUE;
}
-bool32 sub_801F6F8(u8 *state)
+static bool32 Display_ShowKeyboardSwapMenu(u8 *state)
{
switch (*state)
{
case 0:
- sub_80203B0();
+ ShowKeyboardSwapMenu();
CopyWindowToVram(3, 3);
break;
case 1:
@@ -1975,12 +2274,12 @@ bool32 sub_801F6F8(u8 *state)
return TRUE;
}
-bool32 sub_801F730(u8 *state)
+static bool32 Display_HideKeyboardSwapMenu(u8 *state)
{
switch (*state)
{
case 0:
- sub_802040C();
+ HideKeyboardSwapMenu();
CopyWindowToVram(3, 3);
break;
case 1:
@@ -1991,16 +2290,16 @@ bool32 sub_801F730(u8 *state)
return TRUE;
}
-bool32 sub_801F768(u8 *state)
+static bool32 Display_SwitchPages(u8 *state)
{
switch (*state)
{
case 0:
- sub_802091C(TRUE);
+ SetKeyboardCursorInvisibility(TRUE);
if (sub_8020320())
return TRUE;
- sub_80201A4();
+ PrintCurrentKeyboardPage();
CopyWindowToVram(2, 2);
break;
case 1:
@@ -2011,9 +2310,9 @@ bool32 sub_801F768(u8 *state)
if (sub_8020368())
return TRUE;
- sub_802093C();
- sub_802091C(FALSE);
- sub_8020B80();
+ MoveKeyboardCursor();
+ SetKeyboardCursorInvisibility(FALSE);
+ UpdateRButtonLabel();
return FALSE;
}
@@ -2021,20 +2320,20 @@ bool32 sub_801F768(u8 *state)
return TRUE;
}
-bool32 sub_801F7D4(u8 *state)
+static bool32 Display_MoveKeyboardCursor(u8 *state)
{
- sub_802093C();
+ MoveKeyboardCursor();
return FALSE;
}
-bool32 sub_801F7E0(u8 *state)
+static bool32 Display_AskQuitChatting(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(0, 0);
- sub_801FDDC(23, 11, 1);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_QUIT_CHATTING, 0);
+ AddYesNoMenuAt(23, 11, 1);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
break;
case 1:
return IsDma3ManagerBusyWithBgCopy();
@@ -2044,21 +2343,21 @@ bool32 sub_801F7E0(u8 *state)
return TRUE;
}
-bool32 sub_801F82C(u8 *state)
+static bool32 Display_DestroyYesNoDialog(u8 *state)
{
switch (*state)
{
case 0:
- sub_8020094();
- sub_801FEBC();
+ HideStdMessageWindow();
+ HideYesNoMenuWindow();
CopyBgTilemapBufferToVram(0);
break;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
- sub_80200C8();
- sub_801FEE4();
+ DestroyStdMessageWindow();
+ DestroyYesNoMenuWindow();
return FALSE;
}
@@ -2066,24 +2365,24 @@ bool32 sub_801F82C(u8 *state)
return TRUE;
}
-bool32 sub_801F870(u8 *state)
+static bool32 Display_UpdateMessageBuffer(u8 *state)
{
- u32 var0, var1;
+ u32 x, width;
u8 *str;
switch (*state)
{
case 0:
- sub_801F0EC(&var0, &var1);
- sub_80200EC(var0, var1, 0);
- str = sub_801F0D0();
- sub_8020118(0, str, 3, 1, 2);
+ GetBufferSelectionRegion(&x, &width);
+ FillTextEntryWindow(x, width, 0);
+ str = GetMessageEntryBuffer();
+ DrawTextEntryMessage(0, str, 3, 1, 2);
CopyWindowToVram(1, 2);
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_8020B80();
+ UpdateRButtonLabel();
return FALSE;
}
return TRUE;
@@ -2093,27 +2392,27 @@ bool32 sub_801F870(u8 *state)
return TRUE;
}
-bool32 sub_801F8DC(u8 *state)
+static bool32 Display_AskRegisterText(u8 *state)
{
- u16 var0;
+ u16 x;
u8 *str;
u16 length;
switch (*state)
{
case 0:
- var0 = sub_801F144();
- str = sub_801F114();
+ x = GetLimitedMessageStartPos();
+ str = GetLimitedMessageStartPtr();
length = StringLength_Multibyte(str);
- sub_80200EC(var0, length, PIXEL_FILL(6));
- sub_8020118(var0, str, 0, 4, 5);
+ FillTextEntryWindow(x, length, PIXEL_FILL(6));
+ DrawTextEntryMessage(x, str, 0, 4, 5);
CopyWindowToVram(1, 2);
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_801FF18(1, 16);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_REGISTER_WHERE, 16);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
}
else
{
@@ -2122,7 +2421,7 @@ bool32 sub_801F8DC(u8 *state)
break;
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
- sub_80209AC(1);
+ SetRegisteredTextPalette(TRUE);
else
return TRUE;
break;
@@ -2134,27 +2433,27 @@ bool32 sub_801F8DC(u8 *state)
return TRUE;
}
-bool32 sub_801F984(u8 *state)
+static bool32 Display_CancelRegister(u8 *state)
{
- u16 var0;
+ u16 x;
u8 *str;
u16 length;
switch (*state)
{
case 0:
- var0 = sub_801F144();
- str = sub_801F114();
+ x = GetLimitedMessageStartPos();
+ str = GetLimitedMessageStartPtr();
length = StringLength_Multibyte(str);
- sub_80200EC(var0, length, PIXEL_FILL(0));
- sub_8020118(var0, str, 3, 1, 2);
+ FillTextEntryWindow(x, length, PIXEL_FILL(0));
+ DrawTextEntryMessage(x, str, 3, 1, 2);
CopyWindowToVram(1, 2);
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_8020094();
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ HideStdMessageWindow();
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
}
else
{
@@ -2164,8 +2463,8 @@ bool32 sub_801F984(u8 *state)
case 2:
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_80209AC(0);
- sub_80200C8();
+ SetRegisteredTextPalette(FALSE);
+ DestroyStdMessageWindow();
}
else
{
@@ -2180,12 +2479,12 @@ bool32 sub_801F984(u8 *state)
return TRUE;
}
-bool32 sub_801FA2C(u8 *state)
+static bool32 Display_ReturnToKeyboard(u8 *state)
{
switch (*state)
{
case 0:
- sub_80201A4();
+ PrintCurrentKeyboardPage();
CopyWindowToVram(2, 2);
(*state)++;
break;
@@ -2199,48 +2498,48 @@ bool32 sub_801FA2C(u8 *state)
return TRUE;
}
-bool32 sub_801FA68(u8 *state)
+static bool32 Display_ScrollChat(u8 *state)
{
- u16 var0;
+ u16 row;
u8 *str;
- u8 var1;
+ u8 colorIdx;
switch (*state)
{
case 0:
- var0 = gUnknown_02022C88->unk1A;
- str = sub_801F180();
- var1 = sub_801F18C();
- sub_8020420(var0, str, var1);
+ row = sDisplay->currLine;
+ str = GetLastReceivedMessage();
+ colorIdx = GetReceivedPlayerIndex();
+ PrintChatMessage(row, str, colorIdx);
CopyWindowToVram(0, 2);
break;
case 1:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
- if (gUnknown_02022C88->unk1A < 9)
+ if (sDisplay->currLine < 9)
{
- gUnknown_02022C88->unk1A++;
+ sDisplay->currLine++;
*state = 4;
return FALSE;
}
else
{
- gUnknown_02022C88->unk1C = 0;
+ sDisplay->scrollCount = 0;
(*state)++;
}
// fall through
case 2:
ScrollWindow(0, 0, 5, PIXEL_FILL(1));
CopyWindowToVram(0, 2);
- gUnknown_02022C88->unk1C++;
+ sDisplay->scrollCount++;
(*state)++;
// fall through
case 3:
if (IsDma3ManagerBusyWithBgCopy())
return TRUE;
- if (gUnknown_02022C88->unk1C < 3)
+ if (sDisplay->scrollCount < 3)
{
(*state)--;
return TRUE;
@@ -2256,28 +2555,28 @@ bool32 sub_801FA68(u8 *state)
return TRUE;
}
-bool32 sub_801FB44(u8 *state)
+static bool32 Display_AnimateKeyboardCursor(u8 *state)
{
switch (*state)
{
case 0:
- sub_80209E0();
+ StartKeyboardCursorAnim();
(*state)++;
break;
case 1:
- return sub_8020A1C();
+ return TryKeyboardCursorReopen();
}
return TRUE;
}
-bool32 sub_801FB70(u8 *state)
+static bool32 Display_PrintInputText(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(3, 16);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_INPUT_TEXT, 16);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2287,13 +2586,13 @@ bool32 sub_801FB70(u8 *state)
return TRUE;
}
-bool32 sub_801FBB4(u8 *state)
+static bool32 Display_PrintExitingChat(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(4, 0);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_EXITING_CHAT, 0);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2303,7 +2602,7 @@ bool32 sub_801FBB4(u8 *state)
return TRUE;
}
-bool32 sub_801FBF8(u8 *state)
+static bool32 Display_PrintLeaderLeft(u8 *state)
{
u8 *str;
@@ -2311,10 +2610,10 @@ bool32 sub_801FBF8(u8 *state)
{
case 0:
DynamicPlaceholderTextUtil_Reset();
- str = sub_801F1D0();
+ str = GetChatHostName();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
- sub_801FF18(5, 0);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_LEADER_LEFT, 0);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2324,14 +2623,14 @@ bool32 sub_801FBF8(u8 *state)
return TRUE;
}
-bool32 sub_801FC4C(u8 *state)
+static bool32 Display_AskSave(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(6, 0);
- sub_801FDDC(23, 10, 1);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_ASK_SAVE, 0);
+ AddYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2341,14 +2640,14 @@ bool32 sub_801FC4C(u8 *state)
return TRUE;
}
-bool32 sub_801FC9C(u8 *state)
+static bool32 Display_AskOverwriteSave(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(7, 0);
- sub_801FDDC(23, 10, 1);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_ASK_OVERWRITE, 0);
+ AddYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2358,13 +2657,13 @@ bool32 sub_801FC9C(u8 *state)
return TRUE;
}
-bool32 sub_801FCEC(u8 *state)
+static bool32 Display_PrintSavingDontTurnOff(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(8, 0);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_SAVING_NO_OFF, 0);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2374,15 +2673,15 @@ bool32 sub_801FCEC(u8 *state)
return TRUE;
}
-bool32 sub_801FD30(u8 *state)
+static bool32 Display_PrintSavedTheGame(u8 *state)
{
switch (*state)
{
case 0:
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
- sub_801FF18(9, 0);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_SAVED_THE_GAME, 0);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2392,14 +2691,14 @@ bool32 sub_801FD30(u8 *state)
return TRUE;
}
-bool32 sub_801FD88(u8 *state)
+static bool32 Display_AskConfirmLeaderLeave(u8 *state)
{
switch (*state)
{
case 0:
- sub_801FF18(10, 0);
- sub_801FDDC(23, 10, 1);
- CopyWindowToVram(gUnknown_02022C88->unk1E, 3);
+ AddStdMessageWindow(STDMESSAGE_WARN_LEADER_LEAVE, 0);
+ AddYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sDisplay->messageWindowId, 3);
(*state)++;
break;
case 1:
@@ -2409,12 +2708,12 @@ bool32 sub_801FD88(u8 *state)
return TRUE;
}
-static bool32 sub_801FDD8(u8 *arg0)
+static bool32 Display_Dummy(u8 *state)
{
return FALSE;
}
-static void sub_801FDDC(u8 left, u8 top, u8 initialCursorPos)
+static void AddYesNoMenuAt(u8 left, u8 top, u8 initialCursorPos)
{
struct WindowTemplate template;
template.bg = 0;
@@ -2424,42 +2723,42 @@ static void sub_801FDDC(u8 left, u8 top, u8 initialCursorPos)
template.height = 4;
template.paletteNum = 14;
template.baseBlock = 0x52;
- gUnknown_02022C88->unk18 = AddWindow(&template);
- if (gUnknown_02022C88->unk18 != 0xFF)
+ sDisplay->yesNoMenuWindowId = AddWindow(&template);
+ if (sDisplay->yesNoMenuWindowId != 0xFF)
{
- FillWindowPixelBuffer(gUnknown_02022C88->unk18, PIXEL_FILL(1));
- PutWindowTilemap(gUnknown_02022C88->unk18);
- AddTextPrinterParameterized(gUnknown_02022C88->unk18, 1, gText_Yes, 8, 1, TEXT_SPEED_FF, NULL);
- AddTextPrinterParameterized(gUnknown_02022C88->unk18, 1, gText_No, 8, 17, TEXT_SPEED_FF, NULL);
- DrawTextBorderOuter(gUnknown_02022C88->unk18, 1, 13);
- InitMenuInUpperLeftCornerPlaySoundWhenAPressed(gUnknown_02022C88->unk18, 2, initialCursorPos);
+ FillWindowPixelBuffer(sDisplay->yesNoMenuWindowId, PIXEL_FILL(1));
+ PutWindowTilemap(sDisplay->yesNoMenuWindowId);
+ AddTextPrinterParameterized(sDisplay->yesNoMenuWindowId, 1, gText_Yes, 8, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(sDisplay->yesNoMenuWindowId, 1, gText_No, 8, 17, TEXT_SPEED_FF, NULL);
+ DrawTextBorderOuter(sDisplay->yesNoMenuWindowId, 1, 13);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sDisplay->yesNoMenuWindowId, 2, initialCursorPos);
}
}
-static void sub_801FEBC(void)
+static void HideYesNoMenuWindow(void)
{
- if (gUnknown_02022C88->unk18 != 0xFF)
+ if (sDisplay->yesNoMenuWindowId != 0xFF)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_02022C88->unk18, FALSE);
- ClearWindowTilemap(gUnknown_02022C88->unk18);
+ ClearStdWindowAndFrameToTransparent(sDisplay->yesNoMenuWindowId, FALSE);
+ ClearWindowTilemap(sDisplay->yesNoMenuWindowId);
}
}
-static void sub_801FEE4(void)
+static void DestroyYesNoMenuWindow(void)
{
- if (gUnknown_02022C88->unk18 != 0xFF)
+ if (sDisplay->yesNoMenuWindowId != 0xFF)
{
- RemoveWindow(gUnknown_02022C88->unk18);
- gUnknown_02022C88->unk18 = 0xFF;
+ RemoveWindow(sDisplay->yesNoMenuWindowId);
+ sDisplay->yesNoMenuWindowId = 0xFF;
}
}
-static s8 sub_801FF08(void)
+static s8 ProcessMenuInput(void)
{
return Menu_ProcessInput();
}
-static void sub_801FF18(int arg0, u16 arg1)
+static void AddStdMessageWindow(int msgId, u16 bg0vofs)
{
const u8 *str;
int windowId;
@@ -2471,43 +2770,43 @@ static void sub_801FF18(int arg0, u16 arg1)
template.height = 4;
template.paletteNum = 14;
template.baseBlock = 0x6A;
- if (gUnknown_082F2D40[arg0].unkA)
+ if (sDisplayStdMessages[msgId].useWiderBox)
{
template.tilemapLeft -= 7;
template.width += 7;
}
- gUnknown_02022C88->unk1E = AddWindow(&template);
- windowId = gUnknown_02022C88->unk1E;
- if (gUnknown_02022C88->unk1E == 0xFF)
+ sDisplay->messageWindowId = AddWindow(&template);
+ windowId = sDisplay->messageWindowId;
+ if (sDisplay->messageWindowId == 0xFF)
return;
- if (gUnknown_082F2D40[arg0].unk9)
+ if (sDisplayStdMessages[msgId].hasPlaceholders)
{
- DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022C88->unk22, gUnknown_082F2D40[arg0].unk0);
- str = gUnknown_02022C88->unk22;
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(sDisplay->expandedPlaceholdersBuffer, sDisplayStdMessages[msgId].text);
+ str = sDisplay->expandedPlaceholdersBuffer;
}
else
{
- str = gUnknown_082F2D40[arg0].unk0;
+ str = sDisplayStdMessages[msgId].text;
}
- ChangeBgY(0, arg1 * 256, 0);
+ ChangeBgY(0, bg0vofs * 256, 0);
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
PutWindowTilemap(windowId);
- if (gUnknown_082F2D40[arg0].unk4 == 1)
+ if (sDisplayStdMessages[msgId].boxType == 1)
{
DrawTextBorderInner(windowId, 0xA, 2);
AddTextPrinterParameterized5(
windowId,
1,
str,
- gUnknown_082F2D40[arg0].unk5 + 8,
- gUnknown_082F2D40[arg0].unk6 + 8,
+ sDisplayStdMessages[msgId].x + 8,
+ sDisplayStdMessages[msgId].y + 8,
TEXT_SPEED_FF,
NULL,
- gUnknown_082F2D40[arg0].unk7,
- gUnknown_082F2D40[arg0].unk8);
+ sDisplayStdMessages[msgId].letterSpacing,
+ sDisplayStdMessages[msgId].lineSpacing);
}
else
{
@@ -2516,105 +2815,103 @@ static void sub_801FF18(int arg0, u16 arg1)
windowId,
1,
str,
- gUnknown_082F2D40[arg0].unk5,
- gUnknown_082F2D40[arg0].unk6,
+ sDisplayStdMessages[msgId].x,
+ sDisplayStdMessages[msgId].y,
TEXT_SPEED_FF,
NULL,
- gUnknown_082F2D40[arg0].unk7,
- gUnknown_082F2D40[arg0].unk8);
+ sDisplayStdMessages[msgId].letterSpacing,
+ sDisplayStdMessages[msgId].lineSpacing);
}
- gUnknown_02022C88->unk1E = windowId;
+ sDisplay->messageWindowId = windowId;
}
-static void sub_8020094(void)
+static void HideStdMessageWindow(void)
{
- if (gUnknown_02022C88->unk1E != 0xFF)
+ if (sDisplay->messageWindowId != 0xFF)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_02022C88->unk1E, FALSE);
- ClearWindowTilemap(gUnknown_02022C88->unk1E);
+ ClearStdWindowAndFrameToTransparent(sDisplay->messageWindowId, FALSE);
+ ClearWindowTilemap(sDisplay->messageWindowId);
}
ChangeBgY(0, 0, 0);
}
-static void sub_80200C8(void)
+static void DestroyStdMessageWindow(void)
{
- if (gUnknown_02022C88->unk1E != 0xFF)
+ if (sDisplay->messageWindowId != 0xFF)
{
- RemoveWindow(gUnknown_02022C88->unk1E);
- gUnknown_02022C88->unk1E = 0xFF;
+ RemoveWindow(sDisplay->messageWindowId);
+ sDisplay->messageWindowId = 0xFF;
}
}
-static void sub_80200EC(u16 x, u16 width, u8 fillValue)
+static void FillTextEntryWindow(u16 x, u16 width, u8 fillValue)
{
FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14);
}
-static void sub_8020118(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4)
+static void DrawTextEntryMessage(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor)
{
- u8 *str2;
- u8 sp[38];
- if (fillValue)
- sub_80200EC(x, sub_801F198() - x, fillValue);
+ u8 color[3];
+ u8 strBuffer[35];
+ if (bgColor != TEXT_COLOR_TRANSPARENT)
+ FillTextEntryWindow(x, GetTextEntryCursorPosition() - x, bgColor);
- 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);
+ color[0] = bgColor;
+ color[1] = fgColor;
+ color[2] = shadowColor;
+ strBuffer[0] = EXT_CTRL_CODE_BEGIN;
+ strBuffer[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ strBuffer[2] = 8;
+ StringCopy(&strBuffer[3], str);
+ AddTextPrinterParameterized3(1, 2, x * 8, 1, color, TEXT_SPEED_FF, strBuffer);
}
-static void sub_80201A4(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] = TEXT_COLOR_TRANSPARENT;
- sp[1] = TEXT_DYNAMIC_COLOR_5;
- sp[2] = TEXT_DYNAMIC_COLOR_4;
- if (page != UNION_ROOM_KB_PAGE_COUNT)
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_DYNAMIC_COLOR_5;
+ color[2] = TEXT_DYNAMIC_COLOR_4;
+ if (page != UNION_ROOM_KB_PAGE_REGISTER)
{
- 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 (!sUnionRoomKeyboardText[page][i])
return;
- StringCopy(&sp[7], sUnionRoomKeyboardText[page][i]);
- AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]);
+ StringCopy(&str[3], sUnionRoomKeyboardText[page][i]);
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str);
}
}
else
{
left = 4;
- for (i = 0, top = 0; i < 10; i++, top += 12)
+ for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12)
{
- str2 = sub_801EE6C(i);
+ str2 = GetRegisteredTextByRow(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
{
@@ -2622,11 +2919,11 @@ static void sub_80201A4(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, sText_Ellipsis);
}
}
}
@@ -2634,68 +2931,69 @@ static void sub_80201A4(void)
static bool32 sub_8020320(void)
{
- if (gUnknown_02022C88->unk20 < 56)
+ if (sDisplay->bg1hofs < 56)
{
- gUnknown_02022C88->unk20 += 12;
- if (gUnknown_02022C88->unk20 >= 56)
- gUnknown_02022C88->unk20 = 56;
+ sDisplay->bg1hofs += 12;
+ if (sDisplay->bg1hofs >= 56)
+ sDisplay->bg1hofs = 56;
- if (gUnknown_02022C88->unk20 < 56)
+ if (sDisplay->bg1hofs < 56)
{
- sub_80207C0(gUnknown_02022C88->unk20);
+ sub_80207C0(sDisplay->bg1hofs);
return TRUE;
}
}
- sub_8020818(gUnknown_02022C88->unk20);
+ sub_8020818(sDisplay->bg1hofs);
return FALSE;
}
static bool32 sub_8020368(void)
{
- if (gUnknown_02022C88->unk20 > 0)
+ if (sDisplay->bg1hofs > 0)
{
- gUnknown_02022C88->unk20 -= 12;
- if (gUnknown_02022C88->unk20 <= 0)
- gUnknown_02022C88->unk20 = 0;
+ sDisplay->bg1hofs -= 12;
+ if (sDisplay->bg1hofs <= 0)
+ sDisplay->bg1hofs = 0;
- if (gUnknown_02022C88->unk20 > 0)
+ if (sDisplay->bg1hofs > 0)
{
- sub_80207C0(gUnknown_02022C88->unk20);
+ sub_80207C0(sDisplay->bg1hofs);
return TRUE;
}
}
- sub_8020818(gUnknown_02022C88->unk20);
+ sub_8020818(sDisplay->bg1hofs);
return FALSE;
}
-static void sub_80203B0(void)
+static void ShowKeyboardSwapMenu(void)
{
FillWindowPixelBuffer(3, PIXEL_FILL(1));
DrawTextBorderOuter(3, 1, 13);
- PrintTextArray(3, 2, 8, 1, 14, 5, gUnknown_082F2DC8);
+ PrintTextArray(3, 2, 8, 1, 14, 5, sKeyboardPageTitleTexts);
sub_81983AC(3, 2, 0, 1, 14, 5, GetCurrentKeyboardPage());
PutWindowTilemap(3);
}
-static void sub_802040C(void)
+static void HideKeyboardSwapMenu(void)
{
ClearStdWindowAndFrameToTransparent(3, FALSE);
ClearWindowTilemap(3);
}
-static void sub_8020420(u16 row, u8 *str, u8 arg2)
+static void PrintChatMessage(u16 row, u8 *str, u8 colorIdx)
{
+ // colorIdx: 0 = grey, 1 = red, 2 = green, 3 = blue
u8 color[3];
color[0] = TEXT_COLOR_WHITE;
- 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 + 1, color, TEXT_SPEED_FF, str);
}
-static void sub_8020480(void)
+static void ResetGpuBgState(void)
{
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
@@ -2720,83 +3018,83 @@ static void sub_8020480(void)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
}
-static void sub_8020538(void)
+static void SetBgTilemapBuffers(void)
{
- SetBgTilemapBuffer(0, gUnknown_02022C88->unk128);
- SetBgTilemapBuffer(1, gUnknown_02022C88->unk928);
- SetBgTilemapBuffer(3, gUnknown_02022C88->unk1128);
- SetBgTilemapBuffer(2, gUnknown_02022C88->unk1928);
+ SetBgTilemapBuffer(0, sDisplay->bg0Buffer);
+ SetBgTilemapBuffer(1, sDisplay->bg1Buffer);
+ SetBgTilemapBuffer(3, sDisplay->bg3Buffer);
+ SetBgTilemapBuffer(2, sDisplay->bg2Buffer);
}
-static void sub_8020584(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_80205B4(void)
+static void LoadChatWindowBorderGfx(void)
{
- LoadPalette(gUnknown_08DD4BD0, 0x70, 0x20);
- LoadPalette(gUnknown_08DD4BB0, 0xC0, 0x20);
- decompress_and_copy_tile_data_to_vram(1, gUnknown_08DD4BF0, 0, 0, 0);
- CopyToBgTilemapBuffer(1, gUnknown_08DD4C4C, 0, 0);
+ LoadPalette(gUnionRoomChat_Window_Pal2, 0x70, 0x20);
+ LoadPalette(gUnionRoomChat_Window_Pal1, 0xC0, 0x20);
+ decompress_and_copy_tile_data_to_vram(1, gUnionRoomChat_Border_Gfx, 0, 0, 0);
+ CopyToBgTilemapBuffer(1, gUnionRoomChat_Border_Tilemap, 0, 0);
CopyBgTilemapBufferToVram(1);
}
-static void sub_8020604(void)
+static void LoadChatWindowGfx(void)
{
u8 *ptr;
- LoadPalette(gLinkMiscMenu_Pal, 0, 0x20);
- ptr = decompress_and_copy_tile_data_to_vram(2, gLinkMiscMenu_Gfx, 0, 0, 0);
+ LoadPalette(gUnionRoomChat_Background_Pal, 0, 0x20);
+ ptr = decompress_and_copy_tile_data_to_vram(2, gUnionRoomChat_Background_Gfx, 0, 0, 0);
if (ptr)
{
- CpuFastCopy(&ptr[0x220], gUnknown_02022C88->unk2128, 0x20);
- CpuFastCopy(&ptr[0x420], gUnknown_02022C88->unk2148, 0x20);
+ CpuFastCopy(&ptr[0x220], sDisplay->unk2128, 0x20);
+ CpuFastCopy(&ptr[0x420], sDisplay->unk2148, 0x20);
}
- CopyToBgTilemapBuffer(2, gLinkMiscMenu_Tilemap, 0, 0);
+ CopyToBgTilemapBuffer(2, gUnionRoomChat_Background_Tilemap, 0, 0);
CopyBgTilemapBufferToVram(2);
}
static void sub_8020680(void)
{
- LoadPalette(gUnknown_082F2C20, 0x80, 0x20);
+ LoadPalette(sUnk_Palette1, 0x80, 0x20);
RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1);
}
-static void sub_80206A4(void)
+static void LoadChatMessagesWindow(void)
{
- LoadPalette(gUnknown_082F2C40, 0xF0, 0x20);
+ LoadPalette(sUnk_Palette2, 0xF0, 0x20);
PutWindowTilemap(0);
FillWindowPixelBuffer(0, PIXEL_FILL(1));
CopyWindowToVram(0, 3);
}
-static void sub_80206D0(void)
+static void LoadKeyboardWindow(void)
{
PutWindowTilemap(2);
- sub_80201A4();
+ PrintCurrentKeyboardPage();
CopyWindowToVram(2, 3);
}
-static void sub_80206E8(void)
+static void LoadTextEntryWindow(void)
{
int i;
- u8 var0[2];
- var0[0] = 0;
- var0[1] = 0xFF;
+ u8 unused[2];
+ unused[0] = 0;
+ unused[1] = 0xFF;
- for (i = 0; i < 15; i++)
- BlitBitmapToWindow(1, gUnknown_02022C88->unk2128, i * 8, 0, 8, 16);
+ for (i = 0; i < MAX_MESSAGE_LENGTH; i++)
+ BlitBitmapToWindow(1, sDisplay->unk2128, i * 8, 0, 8, 16);
FillWindowPixelBuffer(1, PIXEL_FILL(0));
PutWindowTilemap(1);
CopyWindowToVram(1, 3);
}
-static void sub_8020740(void)
+static void LoadKeyboardSwapWindow(void)
{
FillWindowPixelBuffer(3, PIXEL_FILL(1));
LoadUserWindowBorderGfx(3, 1, 0xD0);
@@ -2804,110 +3102,110 @@ static void sub_8020740(void)
LoadPalette(gUnknown_0860F074, 0xE0, 0x20);
}
-static void sub_8020770(void)
+static void InitScanlineEffect(void)
{
struct ScanlineEffectParams params;
params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
params.dmaDest = &REG_BG1HOFS;
params.initState = 1;
params.unused9 = 0;
- gUnknown_02022C88->unk20 = 0;
+ sDisplay->bg1hofs = 0;
CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers));
ScanlineEffect_SetParams(params);
}
-static void sub_80207C0(s16 arg0)
+static void sub_80207C0(s16 bg1hofs)
{
- CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120);
- CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20);
+ CpuFill16(bg1hofs, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20);
}
-static void sub_8020818(s16 arg0)
+static void sub_8020818(s16 bg1hofs)
{
- CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120);
- CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20);
- CpuFill16(arg0, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120);
- CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20);
+ CpuFill16(bg1hofs, gScanlineEffectRegBuffers[0], 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20);
+ CpuFill16(bg1hofs, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20);
}
-static bool32 sub_8020890(void)
+static bool32 TryAllocSprites(void)
{
u32 i;
- for (i = 0; i < 5; i++)
- LoadCompressedSpriteSheet(&gUnknown_082F3134[i]);
+ for (i = 0; i < ARRAY_COUNT(sSpriteSheets); i++)
+ LoadCompressedSpriteSheet(&sSpriteSheets[i]);
- LoadSpritePalette(&gUnknown_082F315C);
- gUnknown_02022C8C = Alloc(0x18);
- if (!gUnknown_02022C8C)
+ LoadSpritePalette(&sSpritePalette);
+ sSprites = Alloc(sizeof(struct UnionRoomChatSprites));
+ if (!sSprites)
return FALSE;
return TRUE;
}
-static void sub_80208D0(void)
+static void FreeSprites(void)
{
- if (gUnknown_02022C8C)
- Free(gUnknown_02022C8C);
+ if (sSprites)
+ Free(sSprites);
}
-static void sub_80208E8(void)
+static void CreateKeyboardCursorSprite(void)
{
- u8 spriteId = CreateSprite(&gUnknown_082F319C, 10, 24, 0);
- gUnknown_02022C8C->unk0 = &gSprites[spriteId];
+ u8 spriteId = CreateSprite(&sSpriteTemplate_KeyboardCursor, 10, 24, 0);
+ sSprites->keyboardCursor = &gSprites[spriteId];
}
-static void sub_802091C(bool32 invisible)
+static void SetKeyboardCursorInvisibility(bool32 invisible)
{
- gUnknown_02022C8C->unk0->invisible = invisible;
+ sSprites->keyboardCursor->invisible = invisible;
}
-static void sub_802093C(void)
+static void MoveKeyboardCursor(void)
{
u8 x, y;
u8 page = GetCurrentKeyboardPage();
- sub_801F0BC(&x, &y);
- if (page != UNION_ROOM_KB_PAGE_COUNT)
+ GetCurrentKeyboardColAndRow(&x, &y);
+ if (page != UNION_ROOM_KB_PAGE_REGISTER)
{
- StartSpriteAnim(gUnknown_02022C8C->unk0, 0);
- gUnknown_02022C8C->unk0->pos1.x = x * 8 + 10;
- gUnknown_02022C8C->unk0->pos1.y = y * 12 + 24;
+ StartSpriteAnim(sSprites->keyboardCursor, 0);
+ sSprites->keyboardCursor->pos1.x = x * 8 + 10;
+ sSprites->keyboardCursor->pos1.y = y * 12 + 24;
}
else
{
- StartSpriteAnim(gUnknown_02022C8C->unk0, 2);
- gUnknown_02022C8C->unk0->pos1.x = 24;
- gUnknown_02022C8C->unk0->pos1.y = y * 12 + 24;
+ StartSpriteAnim(sSprites->keyboardCursor, 2);
+ sSprites->keyboardCursor->pos1.x = 24;
+ sSprites->keyboardCursor->pos1.y = y * 12 + 24;
}
}
-static void sub_80209AC(int arg0)
+static void SetRegisteredTextPalette(bool32 registering)
{
- const u16 *palette = &gUnknown_082F2DF0[arg0 * 2 + 1];
+ const u16 *palette = &sUnionRoomChatInterfacePal[registering * 2 + 1];
u8 index = IndexOfSpritePaletteTag(0);
LoadPalette(palette, index * 16 + 0x101, 4);
}
-static void sub_80209E0(void)
+static void StartKeyboardCursorAnim(void)
{
- if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
- StartSpriteAnim(gUnknown_02022C8C->unk0, 1);
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_REGISTER)
+ StartSpriteAnim(sSprites->keyboardCursor, 1);
else
- StartSpriteAnim(gUnknown_02022C8C->unk0, 3);
+ StartSpriteAnim(sSprites->keyboardCursor, 3);
- gUnknown_02022C8C->unk14 = 0;
+ sSprites->cursorBlinkTimer = 0;
}
-static bool32 sub_8020A1C(void)
+static bool32 TryKeyboardCursorReopen(void)
{
- if (gUnknown_02022C8C->unk14 > 3)
+ if (sSprites->cursorBlinkTimer > 3)
return FALSE;
- if (++gUnknown_02022C8C->unk14 > 3)
+ if (++sSprites->cursorBlinkTimer > 3)
{
- if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
- StartSpriteAnim(gUnknown_02022C8C->unk0, 0);
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_REGISTER)
+ StartSpriteAnim(sSprites->keyboardCursor, 0);
else
- StartSpriteAnim(gUnknown_02022C8C->unk0, 2);
+ StartSpriteAnim(sSprites->keyboardCursor, 2);
return FALSE;
}
@@ -2915,29 +3213,29 @@ static bool32 sub_8020A1C(void)
return TRUE;
}
-static void sub_8020A68(void)
+static void CreateTextEntrySprites(void)
{
- u8 spriteId = CreateSprite(&gUnknown_082F31BC, 76, 152, 2);
- gUnknown_02022C8C->unk8 = &gSprites[spriteId];
- spriteId = CreateSprite(&gUnknown_082F31D4, 64, 152, 1);
- gUnknown_02022C8C->unk4 = &gSprites[spriteId];
+ u8 spriteId = CreateSprite(&sSpriteTemplate_TextEntryCursor, 76, 152, 2);
+ sSprites->textEntryCursor = &gSprites[spriteId];
+ spriteId = CreateSprite(&sSpriteTemplate_TextEntryArrow, 64, 152, 1);
+ sSprites->textEntryArrow = &gSprites[spriteId];
}
-static void sub_8020ABC(struct Sprite *sprite)
+static void SpriteCB_TextEntryCursor(struct Sprite *sprite)
{
- int var0 = sub_801F198();
- if (var0 == 15)
+ int pos = GetTextEntryCursorPosition();
+ if (pos == MAX_MESSAGE_LENGTH)
{
- sprite->invisible = 1;
+ sprite->invisible = TRUE;
}
else
{
- sprite->invisible = 0;
- sprite->pos1.x = var0 * 8 + 76;
+ sprite->invisible = FALSE;
+ sprite->pos1.x = pos * 8 + 76;
}
}
-static void sub_8020AF4(struct Sprite *sprite)
+static void SpriteCB_TextEntryArrow(struct Sprite *sprite)
{
if (++sprite->data[0] > 4)
{
@@ -2947,40 +3245,42 @@ static void sub_8020AF4(struct Sprite *sprite)
}
}
-static void sub_8020B20(void)
+static void CreateRButtonSprites(void)
{
- u8 spriteId = CreateSprite(&gUnknown_082F322C, 8, 152, 3);
- gUnknown_02022C8C->unkC = &gSprites[spriteId];
- spriteId = CreateSprite(&gUnknown_082F3244, 32, 152, 4);
- gUnknown_02022C8C->unk10 = &gSprites[spriteId];
- gUnknown_02022C8C->unk10->invisible = 1;
+ u8 spriteId = CreateSprite(&sSpriteTemplate_RButtonIcon, 8, 152, 3);
+ sSprites->rButtonIcon = &gSprites[spriteId];
+ spriteId = CreateSprite(&sSpriteTemplate_RButtonLabels, 32, 152, 4);
+ sSprites->rButtonLabel = &gSprites[spriteId];
+ sSprites->rButtonLabel->invisible = TRUE;
}
-static void sub_8020B80(void)
+static void UpdateRButtonLabel(void)
{
- if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT)
+ if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_REGISTER)
{
- if (sub_801F0DC() != 0)
+ if (GetLengthOfMessageEntry() != 0)
{
- gUnknown_02022C8C->unk10->invisible = 0;
- StartSpriteAnim(gUnknown_02022C8C->unk10, 3);
+ // REGISTER
+ sSprites->rButtonLabel->invisible = FALSE;
+ StartSpriteAnim(sSprites->rButtonLabel, 3);
}
else
{
- gUnknown_02022C8C->unk10->invisible = 1;
+ sSprites->rButtonLabel->invisible = TRUE;
}
}
else
{
- int anim = sub_801F1A4();
+ int anim = GetShouldShowCaseToggleIcon();
if (anim == 3)
{
- gUnknown_02022C8C->unk10->invisible = 1;
+ sSprites->rButtonLabel->invisible = TRUE;
}
else
{
- gUnknown_02022C8C->unk10->invisible = 0;
- StartSpriteAnim(gUnknown_02022C8C->unk10, anim);
+ // A <--> a (toggle case)
+ sSprites->rButtonLabel->invisible = FALSE;
+ StartSpriteAnim(sSprites->rButtonLabel, anim);
}
}