summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-03-07 18:05:54 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2020-03-07 18:05:54 -0500
commitab1d075682a34164ed82810108f909e1f9b46390 (patch)
treebbf4391d137a1ea2249aa3720a735a9b4c2f28fa
parent6ce70985ebcb78267290e35e65aadb6a433c1cba (diff)
through sub_8101558
-rw-r--r--asm/easy_chat_2.s1266
-rw-r--r--data/data_8479668.s6
-rw-r--r--data/easy_chat_2.s7
-rw-r--r--include/data_8479668.h5
-rw-r--r--include/graphics.h1
-rw-r--r--src/easy_chat_3.c446
-rw-r--r--src/graphics.c2
7 files changed, 453 insertions, 1280 deletions
diff --git a/asm/easy_chat_2.s b/asm/easy_chat_2.s
index 1c5bb0fdc..e21664561 100644
--- a/asm/easy_chat_2.s
+++ b/asm/easy_chat_2.s
@@ -5,1272 +5,6 @@
.text
- thumb_func_start sub_8100BF4
-sub_8100BF4: @ 8100BF4
- push {r4,lr}
- ldr r4, _08100C50 @ =gUnknown_203ACEC
- movs r0, 0x98
- lsls r0, 5
- bl Alloc
- adds r2, r0, 0
- str r2, [r4]
- cmp r2, 0
- beq _08100C54
- movs r1, 0
- strh r1, [r2]
- movs r3, 0xB6
- lsls r3, 2
- adds r0, r2, r3
- str r1, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- str r1, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- str r1, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- str r1, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- str r1, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- str r1, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- str r1, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- str r1, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- str r1, [r0]
- adds r3, 0x4
- adds r0, r2, r3
- str r1, [r0]
- movs r0, 0x1
- b _08100C56
- .align 2, 0
-_08100C50: .4byte gUnknown_203ACEC
-_08100C54:
- movs r0, 0
-_08100C56:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8100BF4
-
- thumb_func_start sub_8100C5C
-sub_8100C5C: @ 8100C5C
- push {lr}
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r1, 0xC1
- lsls r1, 6
- movs r0, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- thumb_func_end sub_8100C5C
-
- thumb_func_start sub_8100CBC
-sub_8100CBC: @ 8100CBC
- push {r4,lr}
- bl ResetPaletteFade
- ldr r0, _08100D10 @ =gUnknown_8E99D8C
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _08100D14 @ =gUnknown_843F76C
- movs r1, 0x10
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _08100D18 @ =gUnknown_843F78C
- movs r1, 0x40
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _08100D1C @ =gUnknown_843F874
- movs r1, 0xA0
- movs r2, 0x8
- bl LoadPalette
- ldr r4, _08100D20 @ =gUnknown_843F87C
- adds r0, r4, 0
- movs r1, 0xB0
- movs r2, 0xA
- bl LoadPalette
- adds r0, r4, 0
- movs r1, 0xF0
- movs r2, 0xA
- bl LoadPalette
- adds r0, r4, 0
- movs r1, 0x30
- movs r2, 0xA
- bl LoadPalette
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08100D10: .4byte gUnknown_8E99D8C
-_08100D14: .4byte gUnknown_843F76C
-_08100D18: .4byte gUnknown_843F78C
-_08100D1C: .4byte gUnknown_843F874
-_08100D20: .4byte gUnknown_843F87C
- thumb_func_end sub_8100CBC
-
- thumb_func_start sub_8100D24
-sub_8100D24: @ 8100D24
- push {r4,r5,lr}
- sub sp, 0x14
- bl GetTitleText
- adds r5, r0, 0
- cmp r5, 0
- beq _08100D7A
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0
- bl GetStringWidth
- movs r4, 0x80
- subs r4, r0
- lsrs r4, 1
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- lsls r4, 24
- lsrs r4, 24
- movs r1, 0
- str r1, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r0, 0x2
- str r0, [sp, 0xC]
- movs r0, 0x3
- str r0, [sp, 0x10]
- movs r0, 0
- movs r1, 0x1
- adds r2, r5, 0
- adds r3, r4, 0
- bl sub_8100DC4
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
-_08100D7A:
- add sp, 0x14
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8100D24
-
- thumb_func_start sub_8100D84
-sub_8100D84: @ 8100D84
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r2, 0
- ldr r2, [sp, 0x1C]
- ldr r4, [sp, 0x20]
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r2, 24
- lsrs r0, r2, 24
- lsls r4, 24
- lsrs r4, 24
- cmp r1, 0x1
- bne _08100DAC
- adds r0, 0x2
- lsls r0, 24
- lsrs r0, 24
-_08100DAC:
- str r0, [sp]
- str r4, [sp, 0x4]
- ldr r0, [sp, 0x24]
- str r0, [sp, 0x8]
- adds r0, r5, 0
- adds r2, r6, 0
- bl AddTextPrinterParameterized
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8100D84
-
- thumb_func_start sub_8100DC4
-sub_8100DC4: @ 8100DC4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- mov r9, r2
- ldr r2, [sp, 0x2C]
- ldr r4, [sp, 0x30]
- ldr r5, [sp, 0x34]
- ldr r6, [sp, 0x38]
- ldr r7, [sp, 0x3C]
- mov r8, r7
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- lsls r1, 24
- lsrs r1, 24
- lsls r3, 24
- lsrs r7, r3, 24
- lsls r2, 24
- lsrs r3, r2, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- mov r0, r8
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r1, 0x1
- bne _08100E0A
- adds r0, r3, 0x2
- lsls r0, 24
- lsrs r3, r0, 24
-_08100E0A:
- add r0, sp, 0xC
- strb r5, [r0]
- strb r6, [r0, 0x1]
- strb r2, [r0, 0x2]
- str r0, [sp]
- lsls r0, r4, 24
- asrs r0, 24
- str r0, [sp, 0x4]
- mov r0, r9
- str r0, [sp, 0x8]
- mov r0, r12
- adds r2, r7, 0
- bl AddTextPrinterParameterized3
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8100DC4
-
- thumb_func_start sub_8100E34
-sub_8100E34: @ 8100E34
- push {lr}
- sub sp, 0xC
- movs r0, 0x20
- str r0, [sp]
- movs r0, 0x14
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0xE0
- bl TextWindow_SetUserSelectedFrame
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0xE
- bl DrawTextBorderOuter
- movs r0, 0
- bl sub_8100E7C
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0xC
- pop {r0}
- bx r0
- thumb_func_end sub_8100E34
-
- thumb_func_start sub_8100E7C
-sub_8100E7C: @ 8100E7C
- push {lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- movs r0, 0
- str r0, [sp, 0x10]
- str r0, [sp, 0xC]
- cmp r1, 0x1
- beq _08100EC2
- cmp r1, 0x1
- bgt _08100E9A
- cmp r1, 0
- beq _08100EA4
- b _08100ECA
-_08100E9A:
- cmp r2, 0x2
- beq _08100EAE
- cmp r2, 0x3
- beq _08100EB8
- b _08100ECA
-_08100EA4:
- add r1, sp, 0x10
- add r0, sp, 0xC
- bl GetEasyChatInstructionsText
- b _08100ECA
-_08100EAE:
- add r1, sp, 0x10
- add r0, sp, 0xC
- bl sub_80FFDC8
- b _08100ECA
-_08100EB8:
- add r1, sp, 0x10
- add r0, sp, 0xC
- bl GetEasyChatConfirmText
- b _08100ECA
-_08100EC2:
- add r1, sp, 0x10
- add r0, sp, 0xC
- bl GetEasyChatConfirmDeletionText
-_08100ECA:
- movs r0, 0x1
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, [sp, 0xC]
- cmp r2, 0
- beq _08100EEC
- movs r1, 0
- str r1, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x1
- movs r3, 0
- bl sub_8100D84
-_08100EEC:
- ldr r2, [sp, 0x10]
- cmp r2, 0
- beq _08100F08
- movs r0, 0x10
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x1
- movs r3, 0
- bl sub_8100D84
-_08100F08:
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0x14
- pop {r0}
- bx r0
- thumb_func_end sub_8100E7C
-
- thumb_func_start sub_8100F18
-sub_8100F18: @ 8100F18
- push {lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08100F40 @ =gUnknown_843F8D0
- movs r1, 0x1
- str r1, [sp]
- movs r1, 0xE
- str r1, [sp, 0x4]
- str r0, [sp, 0x8]
- adds r0, r2, 0
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x2
- bl CreateYesNoMenu
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_08100F40: .4byte gUnknown_843F8D0
- thumb_func_end sub_8100F18
-
- thumb_func_start sub_8100F44
-sub_8100F44: @ 8100F44
- push {r4,r5,lr}
- sub sp, 0x8
- bl GetEasyChatScreenFrameId
- lsls r0, 24
- ldr r5, _08100FC0 @ =0xffffff00
- ldr r3, [sp]
- ands r3, r5
- movs r1, 0x3
- orrs r3, r1
- str r3, [sp]
- ldr r1, _08100FC4 @ =sPhraseFrameDimensions
- lsrs r0, 22
- adds r0, r1
- ldrb r2, [r0]
- lsls r2, 8
- ldr r4, _08100FC8 @ =0xffff00ff
- adds r1, r4, 0
- ands r1, r3
- orrs r1, r2
- str r1, [sp]
- ldrb r2, [r0, 0x1]
- lsls r2, 16
- ldr r3, _08100FCC @ =0xff00ffff
- ands r3, r1
- orrs r3, r2
- str r3, [sp]
- ldrb r2, [r0, 0x2]
- lsls r2, 24
- ldr r1, _08100FD0 @ =0x00ffffff
- ands r1, r3
- orrs r1, r2
- str r1, [sp]
- ldrb r1, [r0, 0x3]
- ldr r0, [sp, 0x4]
- ands r0, r5
- orrs r0, r1
- ands r0, r4
- movs r1, 0xB0
- lsls r1, 4
- orrs r0, r1
- ldr r1, _08100FD4 @ =0x0000ffff
- ands r0, r1
- movs r1, 0xC0
- lsls r1, 15
- orrs r0, r1
- str r0, [sp, 0x4]
- mov r0, sp
- bl AddWindow
- ldr r1, _08100FD8 @ =gUnknown_203ACEC
- ldr r1, [r1]
- strh r0, [r1, 0x2]
- lsls r0, 24
- lsrs r0, 24
- bl PutWindowTilemap
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08100FC0: .4byte 0xffffff00
-_08100FC4: .4byte sPhraseFrameDimensions
-_08100FC8: .4byte 0xffff00ff
-_08100FCC: .4byte 0xff00ffff
-_08100FD0: .4byte 0x00ffffff
-_08100FD4: .4byte 0x0000ffff
-_08100FD8: .4byte gUnknown_203ACEC
- thumb_func_end sub_8100F44
-
- thumb_func_start sub_8100FDC
-sub_8100FDC: @ 8100FDC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- bl GetEasyChatWordBuffer
- adds r4, r0, 0
- bl GetNumColumns
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- bl GetNumRows
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0xC]
- bl GetEasyChatScreenFrameId
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x10]
- ldr r0, _0810101C @ =gUnknown_203ACEC
- ldr r0, [r0]
- ldrb r0, [r0, 0x2]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r6, 0
- b _081010D6
- .align 2, 0
-_0810101C: .4byte gUnknown_203ACEC
-_08101020:
- ldr r0, _0810105C @ =gUnknown_203ACEC
- ldr r1, [r0]
- adds r2, r1, 0
- adds r2, 0xA
- movs r0, 0xFF
- strb r0, [r1, 0xA]
- adds r0, r2, 0
- ldr r1, _08101060 @ =gUnknown_843F8DB
- bl StringAppend
- adds r2, r0, 0
- movs r5, 0
- lsls r7, r6, 28
- adds r0, r6, 0x1
- mov r9, r0
- cmp r5, r8
- bge _081010B4
- ldr r0, _08101064 @ =0x0000ffff
- mov r10, r0
-_08101046:
- ldrh r0, [r4]
- cmp r0, r10
- beq _08101068
- adds r1, r0, 0
- adds r0, r2, 0
- bl CopyEasyChatWord
- adds r2, r0, 0
- adds r4, 0x2
- b _08101096
- .align 2, 0
-_0810105C: .4byte gUnknown_203ACEC
-_08101060: .4byte gUnknown_843F8DB
-_08101064: .4byte 0x0000ffff
-_08101068:
- adds r0, r2, 0
- movs r1, 0
- movs r2, 0x4
- bl WriteColorChangeControlCode
- adds r2, r0, 0
- adds r4, 0x2
- movs r3, 0xF9
- movs r1, 0x9
- movs r0, 0x6
-_0810107C:
- strb r3, [r2]
- adds r2, 0x1
- strb r1, [r2]
- adds r2, 0x1
- subs r0, 0x1
- cmp r0, 0
- bge _0810107C
- adds r0, r2, 0
- movs r1, 0
- movs r2, 0x2
- bl WriteColorChangeControlCode
- adds r2, r0, 0
-_08101096:
- adds r0, r2, 0
- ldr r1, _081010F8 @ =gUnknown_843F8DB
- bl StringAppend
- adds r2, r0, 0
- ldr r0, [sp, 0x10]
- cmp r0, 0x2
- bne _081010AE
- cmp r5, 0
- bne _081010AE
- cmp r6, 0x4
- beq _081010B4
-_081010AE:
- adds r5, 0x1
- cmp r5, r8
- blt _08101046
-_081010B4:
- movs r0, 0xFF
- strb r0, [r2]
- ldr r0, _081010FC @ =gUnknown_203ACEC
- ldr r2, [r0]
- ldrb r0, [r2, 0x2]
- adds r2, 0xA
- lsrs r1, r7, 24
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0
- bl sub_8100D84
- mov r6, r9
-_081010D6:
- ldr r0, [sp, 0xC]
- cmp r6, r0
- blt _08101020
- ldr r0, _081010FC @ =gUnknown_203ACEC
- ldr r0, [r0]
- ldrb r0, [r0, 0x2]
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081010F8: .4byte gUnknown_843F8DB
-_081010FC: .4byte gUnknown_203ACEC
- thumb_func_end sub_8100FDC
-
- thumb_func_start sub_8101100
-sub_8101100: @ 8101100
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r0
- bl GetEasyChatScreenFrameId
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0
- str r0, [sp]
- ldr r2, _08101194 @ =0x01000200
- mov r0, sp
- mov r1, r8
- bl CpuFastSet
- cmp r5, 0x2
- bne _081011A4
- ldr r0, _08101198 @ =sPhraseFrameDimensions
- adds r1, r0, 0
- adds r1, 0x8
- ldrb r5, [r0, 0x8]
- ldrb r0, [r1, 0x2]
- adds r4, r5, r0
- ldrb r2, [r1, 0x1]
- ldrb r0, [r1, 0x3]
- adds r0, r2
- mov r12, r0
- adds r7, r2, 0
- cmp r7, r12
- blt _08101144
- b _08101296
-_08101144:
- adds r3, r5, 0
- lsls r0, r3, 1
- mov r9, r0
-_0810114A:
- subs r6, r3, 0x1
- lsls r0, r7, 5
- adds r1, r0, r6
- lsls r1, 1
- add r1, r8
- ldr r5, _0810119C @ =0x00001005
- adds r2, r5, 0
- strh r2, [r1]
- adds r6, r3, 0
- adds r5, r0, 0
- adds r2, r7, 0x1
- cmp r6, r4
- bge _0810117E
- movs r0, 0x80
- lsls r0, 5
- adds r1, r0, 0
- lsls r0, r7, 6
- add r0, r8
- add r0, r9
- subs r6, r4, r6
-_08101172:
- strh r1, [r0]
- adds r0, 0x2
- subs r6, 0x1
- cmp r6, 0
- bne _08101172
- adds r6, r4, 0
-_0810117E:
- adds r0, r5, r6
- lsls r0, 1
- add r0, r8
- ldr r5, _081011A0 @ =0x00001007
- adds r1, r5, 0
- strh r1, [r0]
- adds r7, r2, 0
- cmp r7, r12
- blt _0810114A
- b _08101296
- .align 2, 0
-_08101194: .4byte 0x01000200
-_08101198: .4byte sPhraseFrameDimensions
-_0810119C: .4byte 0x00001005
-_081011A0: .4byte 0x00001007
-_081011A4:
- ldr r6, _081012A8 @ =sPhraseFrameDimensions
- mov r9, r6
- lsls r5, 2
- adds r1, r5, r6
- ldrb r3, [r1, 0x1]
- subs r7, r3, 0x1
- ldrb r2, [r1]
- subs r6, r2, 0x1
- ldrb r0, [r1, 0x2]
- adds r4, r2, r0
- ldrb r0, [r1, 0x3]
- adds r3, r0
- mov r12, r3
- lsls r0, r7, 5
- adds r0, r6
- lsls r0, 1
- add r0, r8
- ldr r3, _081012AC @ =0x00001001
- adds r1, r3, 0
- strh r1, [r0]
- adds r6, r2, 0
- mov r10, r9
- mov r9, r5
- cmp r6, r4
- bge _081011F0
- ldr r5, _081012B0 @ =0x00001002
- adds r2, r5, 0
- lsls r1, r6, 1
- lsls r0, r7, 6
- add r0, r8
- adds r1, r0
- subs r6, r4, r6
-_081011E4:
- strh r2, [r1]
- adds r1, 0x2
- subs r6, 0x1
- cmp r6, 0
- bne _081011E4
- adds r6, r4, 0
-_081011F0:
- lsls r0, r7, 5
- adds r0, r6
- lsls r0, 1
- add r0, r8
- ldr r6, _081012B4 @ =0x00001003
- adds r1, r6, 0
- strh r1, [r0]
- adds r7, 0x1
- cmp r7, r12
- bge _08101252
- ldr r0, _081012A8 @ =sPhraseFrameDimensions
- add r0, r9
- ldrb r3, [r0]
- lsls r5, r3, 1
-_0810120C:
- subs r6, r3, 0x1
- lsls r0, r7, 5
- adds r0, r6
- lsls r0, 1
- add r0, r8
- ldr r2, _081012B8 @ =0x00001005
- adds r1, r2, 0
- strh r1, [r0]
- adds r6, r3, 0
- adds r2, r7, 0x1
- cmp r6, r4
- bge _0810123E
- movs r0, 0x80
- lsls r0, 5
- adds r1, r0, 0
- lsls r0, r7, 6
- add r0, r8
- adds r0, r5, r0
- subs r6, r4, r6
-_08101232:
- strh r1, [r0]
- adds r0, 0x2
- subs r6, 0x1
- cmp r6, 0
- bne _08101232
- adds r6, r4, 0
-_0810123E:
- lsls r0, r7, 5
- adds r0, r6
- lsls r0, 1
- add r0, r8
- ldr r6, _081012BC @ =0x00001007
- adds r1, r6, 0
- strh r1, [r0]
- adds r7, r2, 0
- cmp r7, r12
- blt _0810120C
-_08101252:
- mov r0, r9
- add r0, r10
- ldrb r3, [r0]
- subs r6, r3, 0x1
- lsls r2, r7, 5
- adds r0, r2, r6
- lsls r0, 1
- add r0, r8
- ldr r5, _081012C0 @ =0x00001009
- adds r1, r5, 0
- strh r1, [r0]
- adds r6, r3, 0
- adds r5, r2, 0
- cmp r6, r4
- bge _0810128A
- ldr r0, _081012C4 @ =0x0000100a
- adds r2, r0, 0
- lsls r1, r6, 1
- lsls r0, r7, 6
- add r0, r8
- adds r0, r1, r0
- subs r6, r4, r6
-_0810127E:
- strh r2, [r0]
- adds r0, 0x2
- subs r6, 0x1
- cmp r6, 0
- bne _0810127E
- adds r6, r4, 0
-_0810128A:
- adds r0, r5, r6
- lsls r0, 1
- add r0, r8
- ldr r2, _081012C8 @ =0x0000100b
- adds r1, r2, 0
- strh r1, [r0]
-_08101296:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081012A8: .4byte sPhraseFrameDimensions
-_081012AC: .4byte 0x00001001
-_081012B0: .4byte 0x00001002
-_081012B4: .4byte 0x00001003
-_081012B8: .4byte 0x00001005
-_081012BC: .4byte 0x00001007
-_081012C0: .4byte 0x00001009
-_081012C4: .4byte 0x0000100a
-_081012C8: .4byte 0x0000100b
- thumb_func_end sub_8101100
-
- thumb_func_start sub_81012CC
-sub_81012CC: @ 81012CC
- push {lr}
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- pop {r0}
- bx r0
- thumb_func_end sub_81012CC
-
- thumb_func_start sub_81012E0
-sub_81012E0: @ 81012E0
- push {r4,lr}
- adds r4, r0, 0
- bl sub_810198C
- movs r0, 0x2
- movs r1, 0x11
- bl FillWindowPixelBuffer
- cmp r4, 0x1
- beq _08101304
- cmp r4, 0x1
- bcc _081012FE
- cmp r4, 0x2
- beq _0810130A
- b _0810130E
-_081012FE:
- bl sub_810133C
- b _0810130E
-_08101304:
- bl sub_81013A0
- b _0810130E
-_0810130A:
- bl sub_81013DC
-_0810130E:
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81012E0
-
- thumb_func_start sub_810131C
-sub_810131C: @ 810131C
- push {lr}
- bl sub_80FFE1C
- lsls r0, 24
- cmp r0, 0
- bne _08101330
- movs r0, 0
- bl sub_81012E0
- b _08101336
-_08101330:
- movs r0, 0x1
- bl sub_81012E0
-_08101336:
- pop {r0}
- bx r0
- thumb_func_end sub_810131C
-
- thumb_func_start sub_810133C
-sub_810133C: @ 810133C
- push {r4-r7,lr}
- sub sp, 0xC
- movs r5, 0
- movs r7, 0x60
-_08101344:
- movs r4, 0
- lsls r0, r7, 24
- lsrs r6, r0, 24
-_0810134A:
- lsls r0, r5, 24
- lsrs r0, 24
- adds r5, 0x1
- bl GetSelectedGroupByIndex
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x16
- beq _0810138A
- bl GetEasyChatWordGroupName
- adds r2, r0, 0
- movs r0, 0x54
- adds r3, r4, 0
- muls r3, r0
- adds r3, 0xA
- lsls r3, 24
- lsrs r3, 24
- str r6, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- bl sub_8100D84
- adds r4, 0x1
- cmp r4, 0x1
- ble _0810134A
- adds r7, 0x10
- b _08101344
-_0810138A:
- bl sub_80FFE28
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_81019B0
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_810133C
-
- thumb_func_start sub_81013A0
-sub_81013A0: @ 81013A0
- push {r4-r6,lr}
- sub sp, 0xC
- movs r5, 0
- movs r4, 0xC0
- lsls r4, 23
- ldr r6, _081013D8 @ =gUnknown_843F8E0
-_081013AC:
- ldm r6!, {r2}
- lsrs r0, r4, 24
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r3, 0xA
- bl sub_8100D84
- movs r0, 0x80
- lsls r0, 21
- adds r4, r0
- adds r5, 0x1
- cmp r5, 0x3
- bls _081013AC
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081013D8: .4byte gUnknown_843F8E0
- thumb_func_end sub_81013A0
-
- thumb_func_start sub_81013DC
-sub_81013DC: @ 81013DC
- push {lr}
- movs r0, 0
- movs r1, 0x4
- bl sub_81014AC
- pop {r0}
- bx r0
- thumb_func_end sub_81013DC
-
- thumb_func_start sub_81013EC
-sub_81013EC: @ 81013EC
- push {r4,lr}
- bl sub_80FFE48
- adds r4, r0, 0
- adds r4, 0x3
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_8101558
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81014AC
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81013EC
-
- thumb_func_start sub_8101410
-sub_8101410: @ 8101410
- push {r4,lr}
- bl sub_80FFE48
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_8101558
- adds r0, r4, 0
- movs r1, 0x1
- bl sub_81014AC
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8101410
-
- thumb_func_start sub_8101434
-sub_8101434: @ 8101434
- push {r4,r5,lr}
- bl sub_80FFE48
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- adds r0, r5, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_80FFE54
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bls _08101456
- adds r4, r0, 0
-_08101456:
- cmp r5, r4
- bcs _08101470
- subs r4, r5
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_8101558
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_81014AC
-_08101470:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8101434
-
- thumb_func_start sub_8101478
-sub_8101478: @ 8101478
- push {r4,r5,lr}
- bl sub_80FFE48
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_8101A48
- lsls r0, 24
- lsrs r0, 24
- cmp r5, r0
- bcs _081014A4
- subs r4, r0, r5
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_8101558
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_81014AC
-_081014A4:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8101478
-
- thumb_func_start sub_81014AC
-sub_81014AC: @ 81014AC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r4, r0, 1
- lsls r0, 4
- adds r1, r0, 0
- adds r1, 0x60
- movs r0, 0xFF
- ands r1, r0
- movs r0, 0
- cmp r0, r10
- bge _08101538
- ldr r2, _08101550 @ =gUnknown_203ACEC
- mov r9, r2
-_081014D8:
- movs r5, 0
- movs r2, 0x10
- adds r2, r1
- mov r8, r2
- adds r7, r0, 0x1
- lsls r0, r1, 24
- lsrs r6, r0, 24
-_081014E6:
- lsls r0, r4, 16
- lsrs r0, 16
- adds r4, 0x1
- bl GetDisplayedWordByIndex
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, _08101554 @ =0x0000ffff
- cmp r1, r0
- beq _0810152A
- mov r2, r9
- ldr r0, [r2]
- adds r0, 0xCB
- movs r2, 0
- bl CopyEasyChatWordPadded
- mov r0, r9
- ldr r2, [r0]
- adds r2, 0xCB
- movs r0, 0xD
- adds r3, r5, 0
- muls r3, r0
- adds r3, 0x3
- lsls r3, 27
- lsrs r3, 24
- str r6, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- bl sub_8100D84
-_0810152A:
- adds r5, 0x1
- cmp r5, 0x1
- ble _081014E6
- mov r1, r8
- adds r0, r7, 0
- cmp r0, r10
- blt _081014D8
-_08101538:
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08101550: .4byte gUnknown_203ACEC
-_08101554: .4byte 0x0000ffff
- thumb_func_end sub_81014AC
-
- thumb_func_start sub_8101558
-sub_8101558: @ 8101558
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsls r1, 24
- lsrs r0, 20
- adds r3, r0, 0
- adds r3, 0x60
- movs r0, 0xFF
- ands r3, r0
- lsrs r0, r1, 20
- adds r1, r3, r0
- cmp r1, 0xFF
- ble _08101584
- ldr r0, _08101580 @ =0xffffff00
- adds r4, r1, r0
- movs r0, 0x80
- lsls r0, 1
- subs r0, r3
- b _08101586
- .align 2, 0
-_08101580: .4byte 0xffffff00
-_08101584:
- movs r4, 0
-_08101586:
- movs r5, 0xE0
- str r5, [sp]
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x4]
- movs r0, 0x2
- movs r1, 0x11
- movs r2, 0
- bl FillWindowPixelRect
- cmp r4, 0
- beq _081015B2
- str r5, [sp]
- lsls r0, r4, 16
- lsrs r0, 16
- str r0, [sp, 0x4]
- movs r0, 0x2
- movs r1, 0x11
- movs r2, 0
- movs r3, 0
- bl FillWindowPixelRect
-_081015B2:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8101558
-
thumb_func_start sub_81015BC
sub_81015BC: @ 81015BC
push {lr}
diff --git a/data/data_8479668.s b/data/data_8479668.s
index 0ddecfe58..50ce06127 100644
--- a/data/data_8479668.s
+++ b/data/data_8479668.s
@@ -13,7 +13,7 @@
.section .rodata
- // berry_fix_program
+ // easy_chat_2
gUnknown_847A8D8::
.string "{CLEAR 11}A{CLEAR 6}B{CLEAR 6}C{CLEAR 26}D{CLEAR 6}E{CLEAR 6}F{CLEAR 26}others$"
@@ -27,6 +27,8 @@ gUnknown_847A913::
gUnknown_847A934::
.string "{CLEAR 11}T{CLEAR 6}U{CLEAR 6}V{CLEAR 26}W{CLEAR 6}X{CLEAR 6}Y{CLEAR 6}Z{CLEAR 26} $"
+ // naming_screen
+
gUnknown_847A955::
.string "{CLEAR 11}a{CLEAR 6}b{CLEAR 6}c{CLEAR 26}d{CLEAR 6}e{CLEAR 6}f{CLEAR 6} {CLEAR 26}.$"
@@ -63,6 +65,8 @@ gUnknown_847AA8F::
gUnknown_847AAA8::
.string "{CLEAR 11}…{CLEAR 16}“{CLEAR 16}”{CLEAR 18}‘{CLEAR 18}'{CLEAR 18} $"
+ // union_room_chat
+
gText_UnionRoomChatKeyboard_ABCDE::
.string "ABCDE$"
diff --git a/data/easy_chat_2.s b/data/easy_chat_2.s
index 04270adac..2eca1d8b0 100644
--- a/data/easy_chat_2.s
+++ b/data/easy_chat_2.s
@@ -7,13 +7,6 @@
.section .rodata
.align 2
- .align 2
-gUnknown_843F8E0:: @ 843F8E0
- .4byte gUnknown_847A8D8
- .4byte gUnknown_847A8FA
- .4byte gUnknown_847A913
- .4byte gUnknown_847A934
-
gUnknown_843F8F0:: @ 843F8F0 sprite_sheet
obj_tiles gUnknown_843F3F8, 0x0020, 0
obj_tiles gUnknown_843F418, 0x0100, 2
diff --git a/include/data_8479668.h b/include/data_8479668.h
index 1a1f44267..aba3721c8 100644
--- a/include/data_8479668.h
+++ b/include/data_8479668.h
@@ -32,4 +32,9 @@ extern const u8 gText_UnionRoomChatKeyboard_Emoji8[];
extern const u8 gText_UnionRoomChatKeyboard_Emoji9[];
extern const u8 gText_UnionRoomChatKeyboard_Emoji10[];
+extern const u8 gUnknown_847A8D8[];
+extern const u8 gUnknown_847A8FA[];
+extern const u8 gUnknown_847A913[];
+extern const u8 gUnknown_847A934[];
+
#endif //GUARD_DATA_8479668_H
diff --git a/include/graphics.h b/include/graphics.h
index 5bac692a4..2b449ea94 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4889,5 +4889,6 @@ extern const u32 gUnknown_8EB0ADC[];
// easy_chat_3
extern const u32 gEasyChatWindow_Gfx[];
extern const u32 gEasyChatWindow_Tilemap[];
+extern const u32 gEasyChatMode_Pal[];
#endif //GUARD_GRAPHICS_H
diff --git a/src/easy_chat_3.c b/src/easy_chat_3.c
index d01203dcc..84a53aa1a 100644
--- a/src/easy_chat_3.c
+++ b/src/easy_chat_3.c
@@ -1,8 +1,11 @@
#include "global.h"
#include "gflib.h"
+#include "data_8479668.h"
#include "easy_chat.h"
#include "graphics.h"
+#include "menu.h"
#include "new_menu_helpers.h"
+#include "text_window.h"
struct Unk203A11C
{
@@ -13,8 +16,7 @@ struct Unk203A11C
u8 unk7;
s8 unk8;
u8 unk9;
- u8 unkA;
- u8 unkB[0xC1];
+ u8 unkA[0xC1];
u8 unkCC[0x202];
u16 unk2CE;
int unk2D0;
@@ -69,6 +71,7 @@ bool8 sub_8100BF4(void);
void sub_8100C5C(void);
void sub_8100CBC(void);
void sub_8100D24(void);
+void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow);
void sub_8100E34(void);
void sub_8100E7C(u8 a0);
void sub_8100F18(u8 initialCursorPos);
@@ -76,15 +79,21 @@ void sub_8100F44(void);
void sub_8100FDC(void);
void sub_8101100(u16 *buffer);
void sub_81012CC(void);
-void sub_81012E0(u8 a0);
+void sub_81012E0(u32 a0);
void sub_810131C(void);
+void sub_810133C(void);
+void PrintEasyChatKeyboardText(void);
+void sub_81013DC(void);
void sub_81013EC(void);
void sub_8101410(void);
void sub_8101434(void);
void sub_8101478(void);
+void sub_81014AC(u8 a0, u8 a1);
+void sub_8101558(u8 a0, u8 a1);
void sub_81015BC(void);
void sub_81015D4(u8 a0);
bool8 sub_81016AC(void);
+void sub_810198C(void);
void sub_81019B0(s16 a0, u8 a1);
bool8 sub_8101A10(void);
s32 sub_8101A48(void);
@@ -243,7 +252,7 @@ const struct WindowTemplate sEasyChatWindowTemplates[] = {
DUMMY_WIN_TEMPLATE,
};
-const struct WindowTemplate gUnknown_843F8D0 = {
+const struct WindowTemplate sEasyChatYesNoWindowTemplate = {
.bg = 0,
.tilemapLeft = 22,
.tilemapTop = 9,
@@ -254,7 +263,14 @@ const struct WindowTemplate gUnknown_843F8D0 = {
};
const u8 gUnknown_843F8D8[] = _("{UNDERSCORE}");
-const u8 gUnknown_843F8DB[] = _("{CLEAR 17}");
+const u8 sText_Clear17[] = _("{CLEAR 17}");
+
+const u8 *const sEasyChatKeyboardText[] = {
+ gUnknown_847A8D8,
+ gUnknown_847A8FA,
+ gUnknown_847A913,
+ gUnknown_847A934
+};
bool8 sub_80FFF80(void)
{
@@ -981,3 +997,423 @@ bool8 sub_8100B70(void)
return TRUE;
}
+
+bool8 sub_8100BF4(void)
+{
+ gUnknown_203ACEC = Alloc(sizeof(*gUnknown_203ACEC));
+ if (!gUnknown_203ACEC)
+ return FALSE;
+
+ gUnknown_203ACEC->unk0 = 0;
+ gUnknown_203ACEC->unk2D8 = NULL;
+ gUnknown_203ACEC->unk2DC = NULL;
+ gUnknown_203ACEC->unk2E0 = NULL;
+ gUnknown_203ACEC->unk2E4 = NULL;
+ gUnknown_203ACEC->unk2E8 = NULL;
+ gUnknown_203ACEC->unk2EC = NULL;
+ gUnknown_203ACEC->unk2F0 = NULL;
+ gUnknown_203ACEC->unk2F4 = NULL;
+ gUnknown_203ACEC->unk2F8 = NULL;
+ gUnknown_203ACEC->unk2FC = NULL;
+ return TRUE;
+}
+
+void sub_8100C5C(void)
+{
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON);
+}
+
+void sub_8100CBC(void)
+{
+ ResetPaletteFade();
+ LoadPalette(gEasyChatMode_Pal, 0, 32);
+ LoadPalette(gUnknown_843F76C, 1 * 16, 32);
+ LoadPalette(gUnknown_843F78C, 4 * 16, 32);
+ LoadPalette(gUnknown_843F874, 10 * 16, 8);
+ LoadPalette(gUnknown_843F87C, 11 * 16, 10);
+ LoadPalette(gUnknown_843F87C, 15 * 16, 10);
+ LoadPalette(gUnknown_843F87C, 3 * 16, 10);
+}
+
+void sub_8100D24(void)
+{
+ int xOffset;
+ const u8 *titleText = GetTitleText();
+ if (!titleText)
+ return;
+
+ xOffset = (128 - GetStringWidth(1, titleText, 0)) / 2u;
+ FillWindowPixelBuffer(0, PIXEL_FILL(0));
+ sub_8100DC4(0, 1, titleText, xOffset, 0, TEXT_SPEED_FF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+}
+
+void sub_8100D84(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
+{
+ if (fontId == 1) y += 2;
+ AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback);
+}
+
+void sub_8100DC4(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, u8 bg, u8 fg, u8 shadow)
+{
+ u8 color[3];
+ if (fontId == 1) y += 2;
+ color[0] = bg;
+ color[1] = fg;
+ color[2] = shadow;
+ AddTextPrinterParameterized3(windowId, fontId, x, y, color, speed, str);
+}
+
+void sub_8100E34(void)
+{
+ FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17);
+ TextWindow_SetUserSelectedFrame(1, 1, 0xE0);
+ DrawTextBorderOuter(1, 1, 14);
+ sub_8100E7C(0);
+ PutWindowTilemap(1);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void sub_8100E7C(u8 arg0)
+{
+ const u8 *text2 = NULL;
+ const u8 *text1 = NULL;
+ switch (arg0)
+ {
+ case 0:
+ GetEasyChatInstructionsText(&text1, &text2);
+ break;
+ case 2:
+ sub_80FFDC8(&text1, &text2);
+ break;
+ case 3:
+ GetEasyChatConfirmText(&text1, &text2);
+ break;
+ case 1:
+ GetEasyChatConfirmDeletionText(&text1, &text2);
+ break;
+ }
+
+ FillWindowPixelBuffer(1, PIXEL_FILL(1));
+ if (text1)
+ sub_8100D84(1, 1, text1, 0, 0, TEXT_SPEED_FF, NULL);
+
+ if (text2)
+ sub_8100D84(1, 1, text2, 0, 16, TEXT_SPEED_FF, NULL);
+
+ CopyWindowToVram(1, 3);
+}
+
+void sub_8100F18(u8 initialCursorPos)
+{
+ CreateYesNoMenu(&sEasyChatYesNoWindowTemplate, 1, 0, 2, 0x001, 14, initialCursorPos);
+}
+
+void sub_8100F44(void)
+{
+ u8 frameId;
+ struct WindowTemplate template;
+
+ frameId = GetEasyChatScreenFrameId();
+ template.bg = 3;
+ template.tilemapLeft = sPhraseFrameDimensions[frameId].left;
+ template.tilemapTop = sPhraseFrameDimensions[frameId].top;
+ template.width = sPhraseFrameDimensions[frameId].width;
+ template.height = sPhraseFrameDimensions[frameId].height;
+ template.paletteNum = 11;
+ template.baseBlock = 0x060;
+ gUnknown_203ACEC->windowId = AddWindow(&template);
+ PutWindowTilemap(gUnknown_203ACEC->windowId);
+}
+
+void sub_8100FDC(void)
+{
+ u16 *ecWord;
+ u8 numColumns, numRows;
+ u8 *str;
+ u8 frameId;
+ int i, j, k;
+
+ ecWord = GetEasyChatWordBuffer();
+ numColumns = GetNumColumns();
+ numRows = GetNumRows();
+ frameId = GetEasyChatScreenFrameId();
+ FillWindowPixelBuffer(gUnknown_203ACEC->windowId, PIXEL_FILL(1));
+ for (i = 0; i < numRows; i++)
+ {
+ str = gUnknown_203ACEC->unkA;
+ str[0] = EOS;
+ str = StringAppend(str, sText_Clear17);
+ for (j = 0; j < numColumns; j++)
+ {
+ if (*ecWord != 0xFFFF)
+ {
+ str = CopyEasyChatWord(str, *ecWord);
+ ecWord++;
+ }
+ else
+ {
+ str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_RED);
+ ecWord++;
+ for (k = 0; k < 7; k++)
+ {
+ *str++ = CHAR_EXTRA_EMOJI;
+ *str++ = 9;
+ }
+
+ str = WriteColorChangeControlCode(str, 0, TEXT_COLOR_DARK_GREY);
+ }
+
+ str = StringAppend(str, sText_Clear17);
+ if (frameId == 2)
+ {
+ if (j == 0 && i == 4)
+ break;
+ }
+ }
+
+ *str = EOS;
+ sub_8100D84(gUnknown_203ACEC->windowId, 1, gUnknown_203ACEC->unkA, 0, i * 16, TEXT_SPEED_FF, NULL);
+ }
+
+ CopyWindowToVram(gUnknown_203ACEC->windowId, 3);
+}
+
+void sub_8101100(u16 *tilemap)
+{
+ u8 frameId;
+ int right, bottom;
+ int x, y;
+
+ frameId = GetEasyChatScreenFrameId();
+ CpuFastFill(0, tilemap, BG_SCREEN_SIZE);
+ if (frameId == 2)
+ {
+ right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width;
+ bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height;
+ for (y = sPhraseFrameDimensions[frameId].top; y < bottom; y++)
+ {
+ x = sPhraseFrameDimensions[frameId].left - 1;
+ tilemap[y * 32 + x] = 0x1005;
+ x++;
+ for (; x < right; x++)
+ tilemap[y * 32 + x] = 0x1000;
+
+ tilemap[y* 32 + x] = 0x1007;
+ }
+ }
+ else
+ {
+ y = sPhraseFrameDimensions[frameId].top - 1;
+ x = sPhraseFrameDimensions[frameId].left - 1;
+ right = sPhraseFrameDimensions[frameId].left + sPhraseFrameDimensions[frameId].width;
+ bottom = sPhraseFrameDimensions[frameId].top + sPhraseFrameDimensions[frameId].height;
+ tilemap[y * 32 + x] = 0x1001;
+ x++;
+ for (; x < right; x++)
+ tilemap[y * 32 + x] = 0x1002;
+
+ tilemap[y * 32 + x] = 0x1003;
+ y++;
+ for (; y < bottom; y++)
+ {
+ x = sPhraseFrameDimensions[frameId].left - 1;
+ tilemap[y * 32 + x] = 0x1005;
+ x++;
+ for (; x < right; x++)
+ tilemap[y * 32 + x] = 0x1000;
+
+ tilemap[y* 32 + x] = 0x1007;
+ }
+
+ x = sPhraseFrameDimensions[frameId].left - 1;
+ tilemap[y * 32 + x] = 0x1009;
+ x++;
+ for (; x < right; x++)
+ tilemap[y * 32 + x] = 0x100A;
+
+ tilemap[y * 32 + x] = 0x100B;
+ }
+}
+
+void sub_81012CC(void)
+{
+ PutWindowTilemap(2);
+ CopyBgTilemapBufferToVram(2);
+}
+
+void sub_81012E0(u32 arg0)
+{
+ sub_810198C();
+ FillWindowPixelBuffer(2, PIXEL_FILL(1));
+ switch (arg0)
+ {
+ case 0:
+ sub_810133C();
+ break;
+ case 1:
+ PrintEasyChatKeyboardText();
+ break;
+ case 2:
+ sub_81013DC();
+ break;
+ }
+
+ CopyWindowToVram(2, 2);
+}
+
+void sub_810131C(void)
+{
+ if (!sub_80FFE1C())
+ sub_81012E0(0);
+ else
+ sub_81012E0(1);
+}
+
+void sub_810133C(void)
+{
+ int i;
+ int x, y;
+
+ i = 0;
+ y = 96;
+ while (1)
+ {
+ for (x = 0; x < 2; x++)
+ {
+ u8 groupId = GetSelectedGroupByIndex(i++);
+ if (groupId == EC_NUM_GROUPS)
+ {
+ sub_81019B0(sub_80FFE28(), 0);
+ return;
+ }
+
+ sub_8100D84(2, 1, GetEasyChatWordGroupName(groupId), x * 84 + 10, y, TEXT_SPEED_FF, NULL);
+ }
+
+ y += 16;
+ }
+}
+
+void PrintEasyChatKeyboardText(void)
+{
+ u32 i;
+
+ for (i = 0; i < NELEMS(sEasyChatKeyboardText); i++)
+ sub_8100D84(2, 1, sEasyChatKeyboardText[i], 10, 96 + i * 16, TEXT_SPEED_FF, NULL);
+}
+
+void sub_81013DC(void)
+{
+ sub_81014AC(0, 4);
+}
+
+void sub_81013EC(void)
+{
+ u8 var0 = sub_80FFE48() + 3;
+ sub_8101558(var0, 1);
+ sub_81014AC(var0, 1);
+}
+
+void sub_8101410(void)
+{
+ u8 var0 = sub_80FFE48();
+ sub_8101558(var0, 1);
+ sub_81014AC(var0, 1);
+}
+
+void sub_8101434(void)
+{
+ u8 var0 = sub_80FFE48();
+ u8 var1 = var0 + 4;
+ u8 var2 = sub_80FFE54() + 1;
+ if (var1 > var2)
+ var1 = var2;
+
+ if (var0 < var1)
+ {
+ u8 var3 = var1 - var0;
+ sub_8101558(var0, var3);
+ sub_81014AC(var0, var3);
+ }
+}
+
+void sub_8101478(void)
+{
+ u8 var0 = sub_80FFE48();
+ u8 var1 = sub_8101A48();
+ if (var0 < var1)
+ {
+ u8 var2 = var1 - var0;
+ sub_8101558(var0, var2);
+ sub_81014AC(var0, var2);
+ }
+}
+
+void sub_81014AC(u8 arg0, u8 arg1)
+{
+ int i, j;
+ u16 easyChatWord;
+ u8 *str;
+ int y;
+ u8 y_;
+ int var0;
+
+ var0 = arg0 * 2;
+ y = (arg0 * 16 + 96) & 0xFF;
+
+ for (i = 0; i < arg1; i++)
+ {
+ for (j = 0; j < 2; j++)
+ {
+ // FIXME: Dumb trick needed to match
+ y_ = y << 18 >> 18;
+ easyChatWord = GetDisplayedWordByIndex(var0++);
+ if (easyChatWord != 0xFFFF)
+ {
+
+ CopyEasyChatWordPadded(gUnknown_203ACEC->unkCC, easyChatWord, 0);
+
+ sub_8100D84(2, 1, gUnknown_203ACEC->unkCC, (j * 13 + 3) * 8, y_, TEXT_SPEED_FF, NULL);
+ }
+ }
+ y += 16;
+
+ }
+
+ CopyWindowToVram(2, 2);
+}
+
+void sub_8101558(u8 arg0, u8 arg1)
+{
+ int y;
+ int var0;
+ int var1;
+ int var2;
+
+ y = (arg0 * 16 + 96) & 0xFF;
+ var2 = arg1 * 16;
+ var0 = y + var2;
+ if (var0 > 255)
+ {
+ var1 = var0 - 256;
+ var2 = 256 - y;
+ }
+ else
+ {
+ var1 = 0;
+ }
+
+ FillWindowPixelRect(2, PIXEL_FILL(1), 0, y, 224, var2);
+ if (var1)
+ FillWindowPixelRect(2, PIXEL_FILL(1), 0, 0, 224, var1);
+}
diff --git a/src/graphics.c b/src/graphics.c
index b0712ca8a..100ddfdf6 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1215,7 +1215,7 @@ const u32 gKantoTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card.4bpp.
const u16 gHoennTrainerCard_Pal[] = INCBIN_U16("graphics/trainer_card/0star_em.gbapal");
const u32 gHoennTrainerCard_Gfx[] = INCBIN_U32("graphics/trainer_card/card_em.4bpp.lz");
-const u16 gUnknown_8E99D8C[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal");
+const u16 gEasyChatMode_Pal[] = INCBIN_U16("graphics/link_rfu/unk_8E99DAC.gbapal");
const u32 gEasyChatWindow_Gfx[] = INCBIN_U32("graphics/link_rfu/unk_8E99DAC.4bpp.lz");
const u32 gEasyChatWindow_Tilemap[] = INCBIN_U32("graphics/link_rfu/unk_8E99E74.bin.lz");