summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/union_room_chat.s491
-rw-r--r--data/union_room_chat.s69
-rw-r--r--include/text.h14
-rw-r--r--src/union_room_chat.c311
4 files changed, 327 insertions, 558 deletions
diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s
index 47512f4c2..24e341f0d 100644
--- a/asm/union_room_chat.s
+++ b/asm/union_room_chat.s
@@ -5,493 +5,6 @@
.text
- thumb_func_start sub_8129218
-sub_8129218: @ 8129218
- ldr r1, _08129224 @ =gUnknown_203B0E0
- ldr r1, [r1]
- movs r2, 0
- strh r0, [r1, 0x4]
- strh r2, [r1, 0x6]
- bx lr
- .align 2, 0
-_08129224: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129218
-
- thumb_func_start sub_8129228
-sub_8129228: @ 8129228
- push {lr}
- ldr r0, _08129258 @ =gMain
- ldrh r2, [r0, 0x30]
- movs r0, 0x40
- ands r0, r2
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- bne _081292B2
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _08129268
- ldr r0, _0812925C @ =gUnknown_203B0E0
- ldr r2, [r0]
- ldr r1, _08129260 @ =gUnknown_845A8A8
- ldrb r0, [r2, 0x10]
- adds r0, r1
- ldrb r1, [r2, 0x12]
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08129264
- adds r0, r1, 0x1
- b _081292CC
- .align 2, 0
-_08129258: .4byte gMain
-_0812925C: .4byte gUnknown_203B0E0
-_08129260: .4byte gUnknown_845A8A8
-_08129264:
- strb r3, [r2, 0x12]
- b _081292CE
-_08129268:
- ldr r0, _0812928C @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x10]
- cmp r0, 0x3
- beq _081292AE
- movs r0, 0x20
- ands r0, r2
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- beq _08129296
- ldrb r0, [r1, 0x11]
- cmp r0, 0
- beq _08129290
- subs r0, 0x1
- strb r0, [r1, 0x11]
- b _081292CE
- .align 2, 0
-_0812928C: .4byte gUnknown_203B0E0
-_08129290:
- movs r0, 0x4
- strb r0, [r1, 0x11]
- b _081292CE
-_08129296:
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- beq _081292AE
- ldrb r0, [r1, 0x11]
- cmp r0, 0x3
- bhi _081292AA
- adds r0, 0x1
- strb r0, [r1, 0x11]
- b _081292CE
-_081292AA:
- strb r3, [r1, 0x11]
- b _081292CE
-_081292AE:
- movs r0, 0
- b _081292D0
-_081292B2:
- ldr r0, _081292C0 @ =gUnknown_203B0E0
- ldr r2, [r0]
- ldrb r0, [r2, 0x12]
- cmp r0, 0
- beq _081292C4
- subs r0, 0x1
- b _081292CC
- .align 2, 0
-_081292C0: .4byte gUnknown_203B0E0
-_081292C4:
- ldr r0, _081292D4 @ =gUnknown_845A8A8
- ldrb r1, [r2, 0x10]
- adds r1, r0
- ldrb r0, [r1]
-_081292CC:
- strb r0, [r2, 0x12]
-_081292CE:
- movs r0, 0x1
-_081292D0:
- pop {r1}
- bx r1
- .align 2, 0
-_081292D4: .4byte gUnknown_845A8A8
- thumb_func_end sub_8129228
-
- thumb_func_start sub_81292D8
-sub_81292D8: @ 81292D8
- push {r4-r6,lr}
- sub sp, 0x18
- ldr r0, _08129318 @ =gUnknown_203B0E0
- ldr r5, [r0]
- ldrb r0, [r5, 0x10]
- cmp r0, 0x3
- beq _08129320
- ldr r3, _0812931C @ =gUnknown_845A9AC
- ldrb r1, [r5, 0x12]
- lsls r1, 2
- adds r2, r0, 0
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0
- adds r1, r3
- ldr r4, [r1]
- ldrb r0, [r5, 0x11]
- cmp r0, 0
- beq _08129312
- adds r1, r0, 0
-_08129302:
- ldrb r0, [r4]
- cmp r0, 0xF9
- bne _0812930A
- adds r4, 0x1
-_0812930A:
- adds r4, 0x1
- subs r1, 0x1
- cmp r1, 0
- bne _08129302
-_08129312:
- movs r5, 0x1
- b _08129346
- .align 2, 0
-_08129318: .4byte gUnknown_203B0E0
-_0812931C: .4byte gUnknown_845A9AC
-_08129320:
- ldrb r0, [r5, 0x12]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r0
- adds r1, 0xB9
- adds r1, r5, r1
- mov r0, sp
- bl StringCopy
- movs r1, 0
- strb r1, [r0]
- movs r1, 0xFF
- strb r1, [r0, 0x1]
- mov r4, sp
- mov r0, sp
- bl StringLength_Multibyte
- adds r5, r0, 0
-_08129346:
- ldr r6, _081293A8 @ =gUnknown_203B0E0
- ldr r1, [r6]
- ldrb r0, [r1, 0x15]
- strb r0, [r1, 0x14]
- cmp r4, 0
- beq _0812939E
- bl sub_81294C8
- adds r2, r0, 0
- subs r5, 0x1
- movs r0, 0x1
- negs r0, r0
- cmp r5, r0
- beq _0812939A
- ldr r0, [r6]
- ldrb r0, [r0, 0x15]
- cmp r0, 0xE
- bhi _0812939A
- adds r3, r6, 0
-_0812936C:
- ldrb r0, [r4]
- cmp r0, 0xF9
- bne _08129378
- strb r0, [r2]
- adds r4, 0x1
- adds r2, 0x1
-_08129378:
- ldrb r0, [r4]
- strb r0, [r2]
- adds r4, 0x1
- adds r2, 0x1
- ldr r1, [r3]
- ldrb r0, [r1, 0x15]
- adds r0, 0x1
- strb r0, [r1, 0x15]
- subs r5, 0x1
- movs r0, 0x1
- negs r0, r0
- cmp r5, r0
- beq _0812939A
- ldr r0, [r3]
- ldrb r0, [r0, 0x15]
- cmp r0, 0xE
- bls _0812936C
-_0812939A:
- movs r0, 0xFF
- strb r0, [r2]
-_0812939E:
- add sp, 0x18
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081293A8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81292D8
-
- thumb_func_start sub_81293AC
-sub_81293AC: @ 81293AC
- push {r4,lr}
- ldr r4, _081293D4 @ =gUnknown_203B0E0
- ldr r1, [r4]
- ldrb r0, [r1, 0x15]
- strb r0, [r1, 0x14]
- ldr r0, [r4]
- ldrb r0, [r0, 0x15]
- cmp r0, 0
- beq _081293CE
- bl sub_81294EC
- movs r1, 0xFF
- strb r1, [r0]
- ldr r1, [r4]
- ldrb r0, [r1, 0x15]
- subs r0, 0x1
- strb r0, [r1, 0x15]
-_081293CE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081293D4: .4byte gUnknown_203B0E0
- thumb_func_end sub_81293AC
-
- thumb_func_start sub_81293D8
-sub_81293D8: @ 81293D8
- push {lr}
- ldr r0, _08129400 @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x15]
- subs r0, 0x1
- strb r0, [r1, 0x14]
- bl sub_81294EC
- adds r2, r0, 0
- ldrb r0, [r2]
- cmp r0, 0xF9
- beq _081293FC
- ldr r1, _08129404 @ =gUnknown_845A8AC
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _081293FC
- strb r0, [r2]
-_081293FC:
- pop {r0}
- bx r0
- .align 2, 0
-_08129400: .4byte gUnknown_203B0E0
-_08129404: .4byte gUnknown_845A8AC
- thumb_func_end sub_81293D8
-
- thumb_func_start sub_8129408
-sub_8129408: @ 8129408
- push {lr}
- ldr r0, _08129418 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x15]
- cmp r0, 0
- bne _0812941C
- movs r0, 0
- b _0812941E
- .align 2, 0
-_08129418: .4byte gUnknown_203B0E0
-_0812941C:
- movs r0, 0x1
-_0812941E:
- pop {r1}
- bx r1
- thumb_func_end sub_8129408
-
- thumb_func_start sub_8129424
-sub_8129424: @ 8129424
- push {r4,lr}
- bl sub_8129758
- adds r1, r0, 0
- ldr r4, _08129450 @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r3, [r0, 0x12]
- lsls r2, r3, 2
- adds r2, r3
- lsls r2, 2
- adds r2, r3
- adds r2, 0xB9
- adds r0, r2
- bl StringCopy
- ldr r1, [r4]
- movs r0, 0x1
- strb r0, [r1, 0x18]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129450: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129424
-
- thumb_func_start sub_8129454
-sub_8129454: @ 8129454
- ldr r1, _0812946C @ =gUnknown_203B0E0
- ldr r2, [r1]
- movs r0, 0xFF
- strb r0, [r2, 0x1A]
- ldr r2, [r1]
- movs r3, 0
- movs r0, 0xF
- strb r0, [r2, 0x14]
- ldr r0, [r1]
- strb r3, [r0, 0x15]
- bx lr
- .align 2, 0
-_0812946C: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129454
-
- thumb_func_start sub_8129470
-sub_8129470: @ 8129470
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _081294A4 @ =gSaveBlock1Ptr
- mov r8, r0
- ldr r7, _081294A8 @ =gUnknown_203B0E0
- movs r6, 0xB9
- ldr r5, _081294AC @ =0x00003ad4
- movs r4, 0x9
-_08129482:
- mov r1, r8
- ldr r0, [r1]
- adds r0, r5
- ldr r1, [r7]
- adds r1, r6
- bl StringCopy
- adds r6, 0x15
- adds r5, 0x15
- subs r4, 0x1
- cmp r4, 0
- bge _08129482
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081294A4: .4byte gSaveBlock1Ptr
-_081294A8: .4byte gUnknown_203B0E0
-_081294AC: .4byte 0x00003ad4
- thumb_func_end sub_8129470
-
- thumb_func_start sub_81294B0
-sub_81294B0: @ 81294B0
- ldr r2, _081294C4 @ =gUnknown_203B0E0
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r0
- adds r1, 0xB9
- ldr r0, [r2]
- adds r0, r1
- bx lr
- .align 2, 0
-_081294C4: .4byte gUnknown_203B0E0
- thumb_func_end sub_81294B0
-
- thumb_func_start sub_81294C8
-sub_81294C8: @ 81294C8
- push {lr}
- ldr r0, _081294E8 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x1A
- ldrb r0, [r0, 0x1A]
- cmp r0, 0xFF
- beq _081294E0
-_081294D8:
- adds r1, 0x1
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _081294D8
-_081294E0:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_081294E8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81294C8
-
- thumb_func_start sub_81294EC
-sub_81294EC: @ 81294EC
- push {lr}
- ldr r0, _08129518 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r2, r0, 0
- adds r2, 0x1A
- adds r1, r2, 0
- ldrb r0, [r0, 0x1A]
- cmp r0, 0xFF
- beq _08129510
-_081294FE:
- adds r2, r1, 0
- ldrb r0, [r2]
- cmp r0, 0xF9
- bne _08129508
- adds r1, r2, 0x1
-_08129508:
- adds r1, 0x1
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _081294FE
-_08129510:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08129518: .4byte gUnknown_203B0E0
- thumb_func_end sub_81294EC
-
- thumb_func_start sub_812951C
-sub_812951C: @ 812951C
- push {r4,lr}
- ldr r4, _0812955C @ =gUnknown_203B0E0
- ldr r0, [r4]
- adds r0, 0x1A
- bl StringLength_Multibyte
- adds r2, r0, 0
- ldr r0, [r4]
- adds r1, r0, 0
- adds r1, 0x1A
- movs r4, 0
- cmp r2, 0xA
- bls _08129550
- subs r2, 0xA
- movs r3, 0
- cmp r4, r2
- bcs _08129550
-_0812953E:
- ldrb r0, [r1]
- cmp r0, 0xF9
- bne _08129546
- adds r1, 0x1
-_08129546:
- adds r1, 0x1
- adds r4, 0x1
- adds r3, 0x1
- cmp r3, r2
- bcc _0812953E
-_08129550:
- lsls r0, r4, 16
- lsrs r0, 16
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0812955C: .4byte gUnknown_203B0E0
- thumb_func_end sub_812951C
-
- thumb_func_start sub_8129560
-sub_8129560: @ 8129560
- movs r1, 0
- strb r1, [r0]
- bx lr
- thumb_func_end sub_8129560
-
thumb_func_start sub_8129568
sub_8129568: @ 8129568
push {r4,lr}
@@ -3013,7 +2526,7 @@ _0812A84C:
movs r7, 0
movs r6, 0
lsls r0, r2, 2
- ldr r1, _0812A89C @ =gUnknown_845A9AC
+ ldr r1, _0812A89C @ =sUnionRoomKeyboardText
adds r0, r2
lsls r0, 3
adds r4, r0, r1
@@ -3051,7 +2564,7 @@ _0812A866:
ble _0812A85E
b _0812A96C
.align 2, 0
-_0812A89C: .4byte gUnknown_845A9AC
+_0812A89C: .4byte sUnionRoomKeyboardText
_0812A8A0:
movs r1, 0x4
str r1, [sp, 0x40]
diff --git a/data/union_room_chat.s b/data/union_room_chat.s
index 9c23697ee..0a51e90a4 100644
--- a/data/union_room_chat.s
+++ b/data/union_room_chat.s
@@ -6,75 +6,6 @@
.section .rodata
.align 2
-gUnknown_845A8A8:: @ 845A8A8
- .byte 0x09, 0x09, 0x09, 0x09
-
-gUnknown_845A8AC:: @ 845A8AC
- .byte 0x00, 0x16, 0x17, 0x68, 0x19, 0x1a, 0x1b, 0x1c
- .byte 0x1d, 0x1e, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24
- .byte 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02
- .byte 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00
- .byte 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12
- .byte 0x13, 0x14, 0x2a, 0x2b, 0x2c, 0x2d, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00
- .byte 0x00, 0x00, 0x6f, 0x5b, 0x5c, 0x5d, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7
- .byte 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf
- .byte 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7
- .byte 0xb8, 0xb9, 0xba, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9
- .byte 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1
- .byte 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9
- .byte 0xea, 0xeb, 0xec, 0xed, 0xee, 0xbb, 0xbc, 0xbd
- .byte 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5
- .byte 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd
- .byte 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xef
- .byte 0xf0, 0xf4, 0xf5, 0xf6, 0xf1, 0xf2, 0xf3, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
-gUnknown_845A9AC:: @ 845A9AC
- .4byte gText_UnionRoomChatKeyboard_ABCDE
- .4byte gText_UnionRoomChatKeyboard_FGHIJ
- .4byte gText_UnionRoomChatKeyboard_KLMNO
- .4byte gText_UnionRoomChatKeyboard_PQRST
- .4byte gText_UnionRoomChatKeyboard_UVWXY
- .4byte gText_UnionRoomChatKeyboard_Z
- .4byte gText_UnionRoomChatKeyboard_01234Upper
- .4byte gText_UnionRoomChatKeyboard_56789Upper
- .4byte gText_UnionRoomChatKeyboard_PunctuationUpper
- .4byte gText_UnionRoomChatKeyboard_SymbolsUpper
- .4byte gText_UnionRoomChatKeyboard_abcde
- .4byte gText_UnionRoomChatKeyboard_fghij
- .4byte gText_UnionRoomChatKeyboard_klmno
- .4byte gText_UnionRoomChatKeyboard_pqrst
- .4byte gText_UnionRoomChatKeyboard_uvwxy
- .4byte gText_UnionRoomChatKeyboard_z
- .4byte gText_UnionRoomChatKeyboard_01234Lower
- .4byte gText_UnionRoomChatKeyboard_56789Lower
- .4byte gText_UnionRoomChatKeyboard_PunctuationLower
- .4byte gText_UnionRoomChatKeyboard_SymbolsLower
- .4byte gText_UnionRoomChatKeyboard_Emoji1
- .4byte gText_UnionRoomChatKeyboard_Emoji2
- .4byte gText_UnionRoomChatKeyboard_Emoji3
- .4byte gText_UnionRoomChatKeyboard_Emoji4
- .4byte gText_UnionRoomChatKeyboard_Emoji5
- .4byte gText_UnionRoomChatKeyboard_Emoji6
- .4byte gText_UnionRoomChatKeyboard_Emoji7
- .4byte gText_UnionRoomChatKeyboard_Emoji8
- .4byte gText_UnionRoomChatKeyboard_Emoji9
- .4byte gText_UnionRoomChatKeyboard_Emoji10
-
gUnknown_845AA24:: @ 845AA24
.incbin "graphics/union_room_chat/unk_845AA24.gbapal"
diff --git a/include/text.h b/include/text.h
index cd059e0e5..ff8b033e9 100644
--- a/include/text.h
+++ b/include/text.h
@@ -5,10 +5,24 @@
#define CHAR_SPACE 0x00
#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
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index cd285267a..c171731c2 100644
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -11,6 +11,7 @@
#include "save.h"
#include "scanline_effect.h"
#include "task.h"
+#include "data_8479668.h"
#include "constants/songs.h"
enum
@@ -76,12 +77,15 @@ bool32 sub_8129408(void);
void sub_8129424(void);
void sub_8129454(void);
void sub_8129470(void);
+u8 *sub_81294C8(void);
+u8 *sub_81294EC(void);
void sub_8129560(u8 *ptr);
void sub_8129568(u8 *ptr);
void sub_8129590(u8 *ptr);
void sub_81295C0(u8 *ptr);
void sub_81295EC(u8 *ptr);
void sub_8129614(u8 *ptr);
+u8 *sub_8129758(void);
void sub_81298F8(u8 taskId);
void sub_8129B14(void);
bool32 sub_8129B78(void);
@@ -104,6 +108,88 @@ static void (*const gUnknown_845A880[])(void) = {
sub_8128FB8
};
+static const u8 sKeyboardPageMaxRow[] =
+{
+ [UNION_ROOM_KB_PAGE_UPPER] = 9,
+ [UNION_ROOM_KB_PAGE_LOWER] = 9,
+ [UNION_ROOM_KB_PAGE_EMOJI] = 9,
+ 9
+};
+
+const u8 gUnknown_845A8AC[] = {
+ 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
+};
+
+const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = {
+ [UNION_ROOM_KB_PAGE_UPPER] = {
+ gText_UnionRoomChatKeyboard_ABCDE,
+ gText_UnionRoomChatKeyboard_FGHIJ,
+ gText_UnionRoomChatKeyboard_KLMNO,
+ gText_UnionRoomChatKeyboard_PQRST,
+ gText_UnionRoomChatKeyboard_UVWXY,
+ gText_UnionRoomChatKeyboard_Z,
+ gText_UnionRoomChatKeyboard_01234Upper,
+ gText_UnionRoomChatKeyboard_56789Upper,
+ gText_UnionRoomChatKeyboard_PunctuationUpper,
+ gText_UnionRoomChatKeyboard_SymbolsUpper
+ },
+ [UNION_ROOM_KB_PAGE_LOWER] = {
+ gText_UnionRoomChatKeyboard_abcde,
+ gText_UnionRoomChatKeyboard_fghij,
+ gText_UnionRoomChatKeyboard_klmno,
+ gText_UnionRoomChatKeyboard_pqrst,
+ gText_UnionRoomChatKeyboard_uvwxy,
+ gText_UnionRoomChatKeyboard_z,
+ gText_UnionRoomChatKeyboard_01234Lower,
+ gText_UnionRoomChatKeyboard_56789Lower,
+ gText_UnionRoomChatKeyboard_PunctuationLower,
+ gText_UnionRoomChatKeyboard_SymbolsLower
+ },
+ [UNION_ROOM_KB_PAGE_EMOJI] = {
+ gText_UnionRoomChatKeyboard_Emoji1,
+ gText_UnionRoomChatKeyboard_Emoji2,
+ gText_UnionRoomChatKeyboard_Emoji3,
+ gText_UnionRoomChatKeyboard_Emoji4,
+ gText_UnionRoomChatKeyboard_Emoji5,
+ gText_UnionRoomChatKeyboard_Emoji6,
+ gText_UnionRoomChatKeyboard_Emoji7,
+ gText_UnionRoomChatKeyboard_Emoji8,
+ gText_UnionRoomChatKeyboard_Emoji9,
+ gText_UnionRoomChatKeyboard_Emoji10
+ }
+};
+
void sub_8128420(void)
{
gUnknown_203B0E0 = Alloc(sizeof(struct UnionRoomChat));
@@ -801,3 +887,228 @@ void sub_8128FB8(void)
break;
}
}
+
+void sub_8129218(u16 arg0)
+{
+ gUnknown_203B0E0->unk4 = arg0;
+ gUnknown_203B0E0->unk6 = 0;
+}
+
+bool32 sub_8129228(void)
+{
+ if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ {
+ if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ if (gUnknown_203B0E0->currentRow < sKeyboardPageMaxRow[gUnknown_203B0E0->currentPage])
+ gUnknown_203B0E0->currentRow++;
+ else
+ gUnknown_203B0E0->currentRow = 0;
+
+ return TRUE;
+ }
+
+ if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ {
+ if (gUnknown_203B0E0->unk11)
+ gUnknown_203B0E0->unk11--;
+ else
+ gUnknown_203B0E0->unk11 = 4;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ {
+ if (gUnknown_203B0E0->unk11 > 3)
+ gUnknown_203B0E0->unk11 = 0;
+ else
+ gUnknown_203B0E0->unk11++;
+ }
+ else
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+ else
+ {
+ if (gUnknown_203B0E0->currentRow)
+ gUnknown_203B0E0->currentRow--;
+ else
+ gUnknown_203B0E0->currentRow = sKeyboardPageMaxRow[gUnknown_203B0E0->currentPage];
+
+ return TRUE;
+ }
+}
+
+void sub_81292D8(void)
+{
+ int i;
+ const u8 *charsStr;
+ int strLength;
+ u8 *str;
+ u8 buffer[21];
+
+ if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ charsStr = sUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow];
+ for (i = 0; i < gUnknown_203B0E0->unk11; i++)
+ {
+ if (*charsStr == CHAR_EXTRA_EMOJI)
+ charsStr++;
+ charsStr++;
+ }
+
+ strLength = 1;
+ }
+ else
+ {
+ u8 *tempStr = StringCopy(buffer, gUnknown_203B0E0->unkB9[gUnknown_203B0E0->currentRow]);
+ tempStr[0] = CHAR_SPACE;
+ tempStr[1] = EOS;
+ charsStr = buffer;
+ strLength = StringLength_Multibyte(buffer);
+ }
+
+ gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15;
+ if (!charsStr)
+ return;
+
+ str = sub_81294C8();
+ while (--strLength != -1 && gUnknown_203B0E0->unk15 < 15)
+ {
+ if (*charsStr == CHAR_EXTRA_EMOJI)
+ {
+ *str = *charsStr;
+ charsStr++;
+ str++;
+ }
+
+ *str = *charsStr;
+ charsStr++;
+ str++;
+
+ gUnknown_203B0E0->unk15++;
+ }
+
+ *str = EOS;
+}
+
+void sub_81293AC(void)
+{
+ gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15;
+ if (gUnknown_203B0E0->unk15)
+ {
+ u8 *str = sub_81294EC();
+ *str = EOS;
+ gUnknown_203B0E0->unk15--;
+ }
+}
+
+void sub_81293D8(void)
+{
+ u8 *str;
+ u8 character;
+
+ gUnknown_203B0E0->unk14 = gUnknown_203B0E0->unk15 - 1;
+ str = sub_81294EC();
+ if (*str != CHAR_EXTRA_EMOJI)
+ {
+ character = gUnknown_845A8AC[*str];
+ if (character)
+ *str = character;
+ }
+}
+
+bool32 sub_8129408(void)
+{
+ if (gUnknown_203B0E0->unk15)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_8129424(void)
+{
+ u8 *src = sub_8129758();
+ StringCopy(gUnknown_203B0E0->unkB9[gUnknown_203B0E0->currentRow], src);
+ gUnknown_203B0E0->unk18 = 1;
+}
+
+void sub_8129454(void)
+{
+ gUnknown_203B0E0->unk1A[0] = EOS;
+ gUnknown_203B0E0->unk14 = 15;
+ gUnknown_203B0E0->unk15 = 0;
+}
+
+void sub_8129470(void)
+{
+ int i;
+ for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
+ StringCopy(gSaveBlock1Ptr->unk3AD4[i], gUnknown_203B0E0->unkB9[i]);
+}
+
+u8 *sub_81294B0(int arg0)
+{
+ return gUnknown_203B0E0->unkB9[arg0];
+}
+
+// GetEndOfUnk1A
+u8 *sub_81294C8(void)
+{
+ u8 *str = gUnknown_203B0E0->unk1A;
+ while (*str != EOS)
+ str++;
+
+ return str;
+}
+
+// GetPtrToLastCharOfUnk1A
+u8 *sub_81294EC(void)
+{
+ u8 *str = gUnknown_203B0E0->unk1A;
+ u8 *str2 = str;
+ while (*str != EOS)
+ {
+ str2 = str;
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+ str++;
+ }
+
+ return str2;
+}
+
+u16 sub_812951C(void)
+{
+ u8 *str;
+ u32 i, numChars, strLength;
+
+ strLength = StringLength_Multibyte(gUnknown_203B0E0->unk1A);
+ str = gUnknown_203B0E0->unk1A;
+ numChars = 0;
+ if (strLength > 10)
+ {
+ strLength -= 10;
+ for (i = 0; i < strLength; i++)
+ {
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+
+ str++;
+ numChars++;
+ }
+ }
+
+ return numChars;
+}
+
+void sub_8129560(u8 *arg0)
+{
+ arg0[0] = CHAR_SPACE;
+}