summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/union_room_chat.s1595
-rw-r--r--data/graphics.s6
-rw-r--r--data/strings.s34
-rw-r--r--data/union_room_chat.s46
-rw-r--r--include/graphics.h8
-rw-r--r--include/strings.h35
-rw-r--r--include/text_window.h1
-rw-r--r--include/trade.h4
-rw-r--r--include/union_room_chat.h14
-rw-r--r--src/daycare.c28
-rw-r--r--src/trade.c25
-rw-r--r--src/union_room_chat.c15
-rw-r--r--src/union_room_chat_display.c572
13 files changed, 654 insertions, 1729 deletions
diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s
index 7a9d41ef3..1045cea43 100644
--- a/asm/union_room_chat.s
+++ b/asm/union_room_chat.s
@@ -5,1601 +5,6 @@
.text
- thumb_func_start sub_812A1FC
-sub_812A1FC: @ 812A1FC
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A20C
- cmp r0, 0x1
- beq _0812A22C
- b _0812A236
-_0812A20C:
- movs r0, 0x4
- movs r1, 0
- bl sub_812A578
- ldr r0, _0812A228 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A236
- .align 2, 0
-_0812A228: .4byte gUnknown_203B0E4
-_0812A22C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A238
-_0812A236:
- movs r0, 0x1
-_0812A238:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A1FC
-
- thumb_func_start sub_812A240
-sub_812A240: @ 812A240
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A250
- cmp r0, 0x1
- beq _0812A280
- b _0812A28A
-_0812A250:
- bl DynamicPlaceholderTextUtil_Reset
- bl sub_8129814
- adds r1, r0, 0
- movs r0, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- movs r0, 0x5
- movs r1, 0
- bl sub_812A578
- ldr r0, _0812A27C @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A28A
- .align 2, 0
-_0812A27C: .4byte gUnknown_203B0E4
-_0812A280:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A28C
-_0812A28A:
- movs r0, 0x1
-_0812A28C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A240
-
- thumb_func_start sub_812A294
-sub_812A294: @ 812A294
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A2A4
- cmp r0, 0x1
- beq _0812A2D0
- b _0812A2DA
-_0812A2A4:
- movs r0, 0x6
- movs r1, 0
- bl sub_812A578
- movs r0, 0x17
- movs r1, 0xA
- movs r2, 0x1
- bl sub_812A424
- ldr r0, _0812A2CC @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A2DA
- .align 2, 0
-_0812A2CC: .4byte gUnknown_203B0E4
-_0812A2D0:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A2DC
-_0812A2DA:
- movs r0, 0x1
-_0812A2DC:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A294
-
- thumb_func_start sub_812A2E4
-sub_812A2E4: @ 812A2E4
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A2F4
- cmp r0, 0x1
- beq _0812A320
- b _0812A32A
-_0812A2F4:
- movs r0, 0x7
- movs r1, 0
- bl sub_812A578
- movs r0, 0x17
- movs r1, 0xA
- movs r2, 0x1
- bl sub_812A424
- ldr r0, _0812A31C @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A32A
- .align 2, 0
-_0812A31C: .4byte gUnknown_203B0E4
-_0812A320:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A32C
-_0812A32A:
- movs r0, 0x1
-_0812A32C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A2E4
-
- thumb_func_start sub_812A334
-sub_812A334: @ 812A334
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A344
- cmp r0, 0x1
- beq _0812A364
- b _0812A36E
-_0812A344:
- movs r0, 0x8
- movs r1, 0
- bl sub_812A578
- ldr r0, _0812A360 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A36E
- .align 2, 0
-_0812A360: .4byte gUnknown_203B0E4
-_0812A364:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A370
-_0812A36E:
- movs r0, 0x1
-_0812A370:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A334
-
- thumb_func_start sub_812A378
-sub_812A378: @ 812A378
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A388
- cmp r0, 0x1
- beq _0812A3BC
- b _0812A3C6
-_0812A388:
- bl DynamicPlaceholderTextUtil_Reset
- ldr r0, _0812A3B4 @ =gSaveBlock2Ptr
- ldr r1, [r0]
- movs r0, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- movs r0, 0x9
- movs r1, 0
- bl sub_812A578
- ldr r0, _0812A3B8 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A3C6
- .align 2, 0
-_0812A3B4: .4byte gSaveBlock2Ptr
-_0812A3B8: .4byte gUnknown_203B0E4
-_0812A3BC:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A3C8
-_0812A3C6:
- movs r0, 0x1
-_0812A3C8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A378
-
- thumb_func_start sub_812A3D0
-sub_812A3D0: @ 812A3D0
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A3E0
- cmp r0, 0x1
- beq _0812A40C
- b _0812A416
-_0812A3E0:
- movs r0, 0xA
- movs r1, 0
- bl sub_812A578
- movs r0, 0x17
- movs r1, 0xA
- movs r2, 0x1
- bl sub_812A424
- ldr r0, _0812A408 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A416
- .align 2, 0
-_0812A408: .4byte gUnknown_203B0E4
-_0812A40C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A418
-_0812A416:
- movs r0, 0x1
-_0812A418:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A3D0
-
- thumb_func_start sub_812A420
-sub_812A420: @ 812A420
- movs r0, 0
- bx lr
- thumb_func_end sub_812A420
-
- thumb_func_start sub_812A424
-sub_812A424: @ 812A424
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- lsls r0, 24
- lsls r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldr r4, _0812A4FC @ =0xffffff00
- ldr r2, [sp, 0xC]
- ands r2, r4
- lsrs r0, 16
- ldr r3, _0812A500 @ =0xffff00ff
- ands r2, r3
- orrs r2, r0
- lsrs r1, 8
- ldr r0, _0812A504 @ =0xff00ffff
- ands r2, r0
- orrs r2, r1
- ldr r0, _0812A508 @ =0x00ffffff
- ands r2, r0
- movs r0, 0xC0
- lsls r0, 19
- orrs r2, r0
- str r2, [sp, 0xC]
- ldr r0, [sp, 0x10]
- ands r0, r4
- movs r1, 0x4
- orrs r0, r1
- ands r0, r3
- movs r1, 0xE0
- lsls r1, 4
- orrs r0, r1
- ldr r1, _0812A50C @ =0x0000ffff
- ands r0, r1
- movs r1, 0xA4
- lsls r1, 15
- orrs r0, r1
- str r0, [sp, 0x10]
- add r0, sp, 0xC
- bl AddWindow
- adds r1, r0, 0
- ldr r6, _0812A510 @ =gUnknown_203B0E4
- ldr r0, [r6]
- movs r7, 0
- strh r1, [r0, 0x18]
- lsls r0, r1, 16
- lsrs r0, 16
- cmp r0, 0xFF
- beq _0812A4F0
- lsls r0, r1, 24
- lsrs r0, 24
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- bl PutWindowTilemap
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- ldr r2, _0812A514 @ =gText_Yes
- movs r5, 0x2
- str r5, [sp]
- movs r4, 0xFF
- str r4, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x2
- movs r3, 0x8
- bl AddTextPrinterParameterized
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- ldr r2, _0812A518 @ =gText_No
- movs r1, 0x10
- str r1, [sp]
- str r4, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x2
- movs r3, 0x8
- bl AddTextPrinterParameterized
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- movs r1, 0x1
- movs r2, 0xD
- bl DrawTextBorderOuter
- ldr r0, [r6]
- ldrb r0, [r0, 0x18]
- movs r1, 0xE
- str r1, [sp]
- str r5, [sp, 0x4]
- mov r1, r8
- str r1, [sp, 0x8]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl Menu_InitCursor
-_0812A4F0:
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A4FC: .4byte 0xffffff00
-_0812A500: .4byte 0xffff00ff
-_0812A504: .4byte 0xff00ffff
-_0812A508: .4byte 0x00ffffff
-_0812A50C: .4byte 0x0000ffff
-_0812A510: .4byte gUnknown_203B0E4
-_0812A514: .4byte gText_Yes
-_0812A518: .4byte gText_No
- thumb_func_end sub_812A424
-
- thumb_func_start sub_812A51C
-sub_812A51C: @ 812A51C
- push {r4,lr}
- ldr r4, _0812A540 @ =gUnknown_203B0E4
- ldr r0, [r4]
- ldrh r0, [r0, 0x18]
- cmp r0, 0xFF
- beq _0812A53A
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- ldr r0, [r4]
- ldrb r0, [r0, 0x18]
- bl ClearWindowTilemap
-_0812A53A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A540: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A51C
-
- thumb_func_start sub_812A544
-sub_812A544: @ 812A544
- push {r4,lr}
- ldr r4, _0812A564 @ =gUnknown_203B0E4
- ldr r0, [r4]
- ldrh r0, [r0, 0x18]
- cmp r0, 0xFF
- beq _0812A55E
- lsls r0, 24
- lsrs r0, 24
- bl RemoveWindow
- ldr r1, [r4]
- movs r0, 0xFF
- strh r0, [r1, 0x18]
-_0812A55E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A564: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A544
-
- thumb_func_start sub_812A568
-sub_812A568: @ 812A568
- push {lr}
- bl Menu_ProcessInput
- lsls r0, 24
- asrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_812A568
-
- thumb_func_start sub_812A578
-sub_812A578: @ 812A578
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x1C
- adds r7, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- ldr r1, _0812A624 @ =0xffffff00
- ldr r3, [sp, 0x14]
- ands r3, r1
- ldr r2, _0812A628 @ =0xffff00ff
- ands r3, r2
- movs r0, 0x80
- lsls r0, 4
- orrs r3, r0
- ldr r0, _0812A62C @ =0xff00ffff
- ands r3, r0
- movs r0, 0x80
- lsls r0, 13
- orrs r3, r0
- ldr r5, _0812A630 @ =0x00ffffff
- ands r3, r5
- movs r0, 0xA8
- lsls r0, 21
- orrs r3, r0
- str r3, [sp, 0x14]
- ldr r0, [sp, 0x18]
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- ands r0, r2
- movs r1, 0xE0
- lsls r1, 4
- orrs r0, r1
- ldr r1, _0812A634 @ =0x0000ffff
- ands r0, r1
- movs r1, 0xD4
- lsls r1, 15
- orrs r0, r1
- str r0, [sp, 0x18]
- ldr r1, _0812A638 @ =gUnknown_845AB64
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 2
- adds r4, r0, r1
- ldrb r0, [r4, 0xA]
- cmp r0, 0
- beq _0812A5F8
- lsls r0, r3, 16
- movs r1, 0xF9
- lsls r1, 24
- adds r0, r1
- lsrs r0, 16
- ands r2, r3
- orrs r2, r0
- lsrs r1, r2, 24
- adds r1, 0x7
- lsls r1, 24
- adds r0, r5, 0
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x14]
-_0812A5F8:
- add r0, sp, 0x14
- bl AddWindow
- ldr r5, _0812A63C @ =gUnknown_203B0E4
- ldr r1, [r5]
- strh r0, [r1, 0x1E]
- ldrh r0, [r1, 0x1E]
- mov r8, r0
- cmp r0, 0xFF
- beq _0812A6E2
- ldrb r0, [r4, 0x9]
- cmp r0, 0
- beq _0812A640
- adds r0, r1, 0
- adds r0, 0x22
- ldr r1, [r4]
- bl DynamicPlaceholderTextUtil_ExpandPlaceholders
- ldr r0, [r5]
- adds r6, r0, 0
- adds r6, 0x22
- b _0812A642
- .align 2, 0
-_0812A624: .4byte 0xffffff00
-_0812A628: .4byte 0xffff00ff
-_0812A62C: .4byte 0xff00ffff
-_0812A630: .4byte 0x00ffffff
-_0812A634: .4byte 0x0000ffff
-_0812A638: .4byte gUnknown_845AB64
-_0812A63C: .4byte gUnknown_203B0E4
-_0812A640:
- ldr r6, [r4]
-_0812A642:
- mov r0, r9
- lsls r1, r0, 8
- movs r0, 0
- movs r2, 0
- bl ChangeBgY
- mov r1, r8
- lsls r0, r1, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- adds r0, r5, 0
- bl PutWindowTilemap
- ldr r1, _0812A6AC @ =gUnknown_845AB64
- lsls r0, r7, 1
- adds r0, r7
- lsls r0, 2
- adds r4, r0, r1
- ldrb r0, [r4, 0x4]
- cmp r0, 0x1
- bne _0812A6B0
- adds r0, r5, 0
- movs r1, 0xA
- movs r2, 0x2
- bl DrawTextBorderInner
- ldrb r3, [r4, 0x5]
- adds r3, 0x8
- lsls r3, 24
- lsrs r3, 24
- ldrb r0, [r4, 0x6]
- adds r0, 0x8
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- ldrb r0, [r4, 0x7]
- str r0, [sp, 0xC]
- ldrb r0, [r4, 0x8]
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0x2
- adds r2, r6, 0
- bl AddTextPrinterParameterized5
- b _0812A6DA
- .align 2, 0
-_0812A6AC: .4byte gUnknown_845AB64
-_0812A6B0:
- adds r0, r5, 0
- movs r1, 0xA
- movs r2, 0x2
- bl DrawTextBorderOuter
- ldrb r3, [r4, 0x5]
- ldrb r0, [r4, 0x6]
- str r0, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- ldrb r0, [r4, 0x7]
- str r0, [sp, 0xC]
- ldrb r0, [r4, 0x8]
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0x2
- adds r2, r6, 0
- bl AddTextPrinterParameterized5
-_0812A6DA:
- ldr r0, _0812A6F0 @ =gUnknown_203B0E4
- ldr r0, [r0]
- mov r1, r8
- strh r1, [r0, 0x1E]
-_0812A6E2:
- add sp, 0x1C
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A6F0: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A578
-
- thumb_func_start sub_812A6F4
-sub_812A6F4: @ 812A6F4
- push {r4,lr}
- ldr r4, _0812A724 @ =gUnknown_203B0E4
- ldr r0, [r4]
- ldrh r0, [r0, 0x1E]
- cmp r0, 0xFF
- beq _0812A712
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- ldr r0, [r4]
- ldrb r0, [r0, 0x1E]
- bl ClearWindowTilemap
-_0812A712:
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A724: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A6F4
-
- thumb_func_start sub_812A728
-sub_812A728: @ 812A728
- push {r4,lr}
- ldr r4, _0812A748 @ =gUnknown_203B0E4
- ldr r0, [r4]
- ldrh r0, [r0, 0x1E]
- cmp r0, 0xFF
- beq _0812A742
- lsls r0, 24
- lsrs r0, 24
- bl RemoveWindow
- ldr r1, [r4]
- movs r0, 0xFF
- strh r0, [r1, 0x1E]
-_0812A742:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A748: .4byte gUnknown_203B0E4
- thumb_func_end sub_812A728
-
- thumb_func_start sub_812A74C
-sub_812A74C: @ 812A74C
- push {lr}
- sub sp, 0x8
- adds r3, r0, 0
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 19
- lsrs r3, 16
- lsls r1, 19
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0xE
- str r0, [sp, 0x4]
- movs r0, 0x1
- adds r1, r2, 0
- adds r2, r3, 0
- movs r3, 0x1
- bl FillWindowPixelRect
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_812A74C
-
- thumb_func_start sub_812A778
-sub_812A778: @ 812A778
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x34
- mov r10, r1
- ldr r1, [sp, 0x54]
- lsls r0, 16
- lsrs r5, r0, 16
- mov r9, r5
- lsls r2, 24
- lsrs r4, r2, 24
- mov r8, r4
- lsls r3, 24
- lsrs r7, r3, 24
- lsls r1, 24
- lsrs r6, r1, 24
- cmp r4, 0
- beq _0812A7B4
- bl sub_81297DC
- adds r1, r0, 0
- subs r1, r5
- lsls r1, 16
- lsrs r1, 16
- adds r0, r5, 0
- adds r2, r4, 0
- bl sub_812A74C
-_0812A7B4:
- add r0, sp, 0xC
- mov r1, r8
- strb r1, [r0]
- strb r7, [r0, 0x1]
- strb r6, [r0, 0x2]
- add r4, sp, 0x10
- movs r0, 0xFC
- strb r0, [r4]
- movs r0, 0x14
- strb r0, [r4, 0x1]
- movs r0, 0x8
- strb r0, [r4, 0x2]
- mov r0, sp
- adds r0, 0x13
- mov r1, r10
- bl StringCopy
- mov r0, r9
- lsls r2, r0, 27
- lsrs r2, 24
- add r1, sp, 0xC
- str r1, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x2
- movs r3, 0x1
- bl AddTextPrinterParameterized3
- add sp, 0x34
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_812A778
-
- thumb_func_start sub_812A804
-sub_812A804: @ 812A804
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4C
- movs r0, 0x2
- movs r1, 0xFF
- bl FillWindowPixelBuffer
- bl GetCurrentKeyboardPage
- lsls r0, 24
- lsrs r2, r0, 24
- add r1, sp, 0xC
- movs r0, 0
- strb r0, [r1]
- movs r0, 0xE
- strb r0, [r1, 0x1]
- movs r0, 0xD
- strb r0, [r1, 0x2]
- cmp r2, 0x3
- beq _0812A8A0
- add r1, sp, 0x10
- movs r0, 0xFC
- strb r0, [r1]
- movs r0, 0x14
- strb r0, [r1, 0x1]
- movs r0, 0x8
- strb r0, [r1, 0x2]
- str r0, [sp, 0x40]
- str r1, [sp, 0x44]
- cmp r2, 0x2
- bne _0812A84C
- movs r1, 0x6
- str r1, [sp, 0x40]
-_0812A84C:
- movs r7, 0
- movs r6, 0
- lsls r0, r2, 2
- ldr r1, _0812A89C @ =sUnionRoomKeyboardText
- adds r0, r2
- lsls r0, 3
- adds r4, r0, r1
- ldr r0, [sp, 0x40]
- lsls r5, r0, 24
-_0812A85E:
- ldr r1, [r4]
- cmp r1, 0
- bne _0812A866
- b _0812A96C
-_0812A866:
- mov r0, sp
- adds r0, 0x13
- bl StringCopy
- lsls r3, r6, 24
- lsrs r3, 24
- add r1, sp, 0xC
- str r1, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r0, [sp, 0x44]
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- lsrs r2, r5, 24
- bl AddTextPrinterParameterized3
- adds r4, 0x4
- adds r7, 0x1
- adds r0, r6, 0
- adds r0, 0xC
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r7, 0x9
- ble _0812A85E
- b _0812A96C
- .align 2, 0
-_0812A89C: .4byte sUnionRoomKeyboardText
-_0812A8A0:
- movs r1, 0x4
- str r1, [sp, 0x40]
- movs r7, 0
- movs r6, 0
-_0812A8A8:
- adds r0, r7, 0
- bl sub_81294B0
- adds r5, r0, 0
- movs r0, 0
- adds r1, r5, 0
- movs r2, 0
- bl GetStringWidth
- cmp r0, 0x28
- bgt _0812A8E6
- lsls r3, r6, 24
- lsrs r3, 24
- add r4, sp, 0xC
- str r4, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- movs r4, 0x80
- lsls r4, 19
- lsrs r2, r4, 24
- bl AddTextPrinterParameterized3
- adds r0, r7, 0x1
- str r0, [sp, 0x48]
- adds r6, 0xC
- mov r10, r6
- b _0812A960
-_0812A8E6:
- adds r0, r5, 0
- bl StringLength_Multibyte
- adds r4, r0, 0
- mov r1, sp
- adds r1, 0x10
- str r1, [sp, 0x44]
- ldr r0, [sp, 0x40]
- lsls r0, 24
- mov r8, r0
- lsls r1, r6, 24
- mov r9, r1
- adds r0, r7, 0x1
- str r0, [sp, 0x48]
- adds r6, 0xC
- mov r10, r6
- ldr r7, [sp, 0x40]
- adds r7, 0x23
- ldr r6, [sp, 0x44]
-_0812A90C:
- subs r4, 0x1
- adds r0, r6, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl StringCopyN_Multibyte
- movs r0, 0
- adds r1, r6, 0
- movs r2, 0
- bl GetStringWidth
- cmp r0, 0x23
- bgt _0812A90C
- mov r1, r8
- lsrs r2, r1, 24
- mov r0, r9
- lsrs r4, r0, 24
- add r1, sp, 0xC
- str r1, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- ldr r1, [sp, 0x44]
- str r1, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- adds r3, r4, 0
- bl AddTextPrinterParameterized3
- adds r2, r7, 0
- add r0, sp, 0xC
- str r0, [sp]
- movs r1, 0x1
- negs r1, r1
- str r1, [sp, 0x4]
- ldr r0, _0812A97C @ =gUnknown_845ABE8
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0
- adds r3, r4, 0
- bl AddTextPrinterParameterized3
-_0812A960:
- ldr r7, [sp, 0x48]
- mov r4, r10
- lsls r0, r4, 16
- lsrs r6, r0, 16
- cmp r7, 0x9
- ble _0812A8A8
-_0812A96C:
- add sp, 0x4C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812A97C: .4byte gUnknown_845ABE8
- thumb_func_end sub_812A804
-
- thumb_func_start sub_812A980
-sub_812A980: @ 812A980
- push {r4,lr}
- ldr r1, _0812A9A4 @ =gUnknown_203B0E4
- ldr r2, [r1]
- ldrh r3, [r2, 0x20]
- movs r4, 0x20
- ldrsh r0, [r2, r4]
- cmp r0, 0x37
- bgt _0812A9B4
- adds r0, r3, 0
- adds r0, 0xC
- strh r0, [r2, 0x20]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x37
- ble _0812A9A8
- movs r0, 0x38
- strh r0, [r2, 0x20]
- b _0812A9B4
- .align 2, 0
-_0812A9A4: .4byte gUnknown_203B0E4
-_0812A9A8:
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- bl sub_812ADA0
- movs r0, 0x1
- b _0812A9C0
-_0812A9B4:
- ldr r0, [r1]
- movs r4, 0x20
- ldrsh r0, [r0, r4]
- bl sub_812ADF8
- movs r0, 0
-_0812A9C0:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A980
-
- thumb_func_start sub_812A9C8
-sub_812A9C8: @ 812A9C8
- push {r4,lr}
- ldr r1, _0812A9EC @ =gUnknown_203B0E4
- ldr r2, [r1]
- ldrh r3, [r2, 0x20]
- movs r4, 0x20
- ldrsh r0, [r2, r4]
- cmp r0, 0
- ble _0812A9FC
- adds r0, r3, 0
- subs r0, 0xC
- strh r0, [r2, 0x20]
- lsls r0, 16
- cmp r0, 0
- bgt _0812A9F0
- movs r0, 0
- strh r0, [r2, 0x20]
- b _0812A9FC
- .align 2, 0
-_0812A9EC: .4byte gUnknown_203B0E4
-_0812A9F0:
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- bl sub_812ADA0
- movs r0, 0x1
- b _0812AA08
-_0812A9FC:
- ldr r0, [r1]
- movs r4, 0x20
- ldrsh r0, [r0, r4]
- bl sub_812ADF8
- movs r0, 0
-_0812AA08:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A9C8
-
- thumb_func_start sub_812AA10
-sub_812AA10: @ 812AA10
- push {lr}
- sub sp, 0xC
- movs r0, 0x3
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0x3
- movs r1, 0x1
- movs r2, 0xD
- bl DrawTextBorderOuter
- ldr r0, _0812AA60 @ =gUnknown_845ABEC
- str r0, [sp]
- movs r0, 0x3
- movs r1, 0x2
- movs r2, 0xE
- movs r3, 0x5
- bl UnionRoomAndTradeMenuPrintOptions
- bl GetCurrentKeyboardPage
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xE
- str r1, [sp]
- movs r1, 0x5
- str r1, [sp, 0x4]
- str r0, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x2
- movs r2, 0
- movs r3, 0
- bl Menu_InitCursor
- movs r0, 0x3
- bl PutWindowTilemap
- add sp, 0xC
- pop {r0}
- bx r0
- .align 2, 0
-_0812AA60: .4byte gUnknown_845ABEC
- thumb_func_end sub_812AA10
-
- thumb_func_start sub_812AA64
-sub_812AA64: @ 812AA64
- push {lr}
- movs r0, 0x3
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x3
- bl ClearWindowTilemap
- pop {r0}
- bx r0
- thumb_func_end sub_812AA64
-
- thumb_func_start sub_812AA78
-sub_812AA78: @ 812AA78
- push {r4,r5,lr}
- sub sp, 0x10
- adds r5, r1, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r2, 24
- add r3, sp, 0xC
- movs r1, 0x1
- strb r1, [r3]
- lsrs r2, 23
- adds r1, r2, 0x2
- strb r1, [r3, 0x1]
- adds r1, r3, 0
- adds r2, 0x3
- strb r2, [r1, 0x2]
- lsls r4, r0, 4
- subs r4, r0
- lsls r3, r4, 16
- lsrs r3, 16
- movs r0, 0xA8
- str r0, [sp]
- movs r0, 0xF
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x11
- movs r2, 0
- bl FillWindowPixelRect
- lsls r4, 24
- lsrs r4, 24
- add r0, sp, 0xC
- str r0, [sp]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r0, 0
- movs r1, 0x2
- movs r2, 0
- adds r3, r4, 0
- bl AddTextPrinterParameterized3
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_812AA78
-
- thumb_func_start sub_812AAD4
-sub_812AAD4: @ 812AAD4
- push {lr}
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- 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, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuRegBits
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r1, 0xE0
- lsls r1, 8
- movs r0, 0
- bl ClearGpuRegBits
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- bl SetGpuRegBits
- ldr r1, _0812AB88 @ =0x000040f0
- movs r0, 0x40
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0x90
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x3D
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x3F
- bl SetGpuReg
- pop {r0}
- bx r0
- .align 2, 0
-_0812AB88: .4byte 0x000040f0
- thumb_func_end sub_812AAD4
-
- thumb_func_start sub_812AB8C
-sub_812AB8C: @ 812AB8C
- push {r4,lr}
- ldr r4, _0812ABC8 @ =gUnknown_203B0E4
- ldr r1, [r4]
- movs r0, 0x94
- lsls r0, 1
- adds r1, r0
- movs r0, 0
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r0, _0812ABCC @ =0x00000928
- adds r1, r0
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r0, _0812ABD0 @ =0x00001128
- adds r1, r0
- movs r0, 0x3
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r0, _0812ABD4 @ =0x00001928
- adds r1, r0
- movs r0, 0x2
- bl SetBgTilemapBuffer
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812ABC8: .4byte gUnknown_203B0E4
-_0812ABCC: .4byte 0x00000928
-_0812ABD0: .4byte 0x00001128
-_0812ABD4: .4byte 0x00001928
- thumb_func_end sub_812AB8C
-
- thumb_func_start sub_812ABD8
-sub_812ABD8: @ 812ABD8
- push {lr}
- sub sp, 0x8
- movs r1, 0xC0
- lsls r1, 19
- movs r0, 0
- movs r2, 0x20
- movs r3, 0x1
- bl RequestDma3Fill
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_812ABD8
-
- thumb_func_start sub_812AC08
-sub_812AC08: @ 812AC08
- push {lr}
- sub sp, 0x4
- ldr r0, _0812AC48 @ =gUnknown_8EAA9F0
- movs r1, 0x70
- movs r2, 0x20
- bl LoadPalette
- ldr r0, _0812AC4C @ =gUnknown_845AA24
- movs r1, 0xC0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _0812AC50 @ =gUnknown_8EAAA10
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _0812AC54 @ =gUnknown_8EAAA6C
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0812AC48: .4byte gUnknown_8EAA9F0
-_0812AC4C: .4byte gUnknown_845AA24
-_0812AC50: .4byte gUnknown_8EAAA10
-_0812AC54: .4byte gUnknown_8EAAA6C
- thumb_func_end sub_812AC08
-
- thumb_func_start sub_812AC58
-sub_812AC58: @ 812AC58
- push {lr}
- sub sp, 0x4
- ldr r0, _0812AC90 @ =gUnknown_8EA1700
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _0812AC94 @ =gUnknown_8EA1720
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl DecompressAndCopyTileDataToVram
- ldr r1, _0812AC98 @ =gUnknown_8EA1958
- movs r0, 0x2
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0812AC90: .4byte gUnknown_8EA1700
-_0812AC94: .4byte gUnknown_8EA1720
-_0812AC98: .4byte gUnknown_8EA1958
- thumb_func_end sub_812AC58
-
- thumb_func_start sub_812AC9C
-sub_812AC9C: @ 812AC9C
- push {lr}
- ldr r0, _0812ACB8 @ =gUnknown_845AA44
- movs r1, 0x80
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _0812ACBC @ =0x06004020
- movs r0, 0
- movs r2, 0x20
- movs r3, 0x1
- bl RequestDma3Fill
- pop {r0}
- bx r0
- .align 2, 0
-_0812ACB8: .4byte gUnknown_845AA44
-_0812ACBC: .4byte 0x06004020
- thumb_func_end sub_812AC9C
-
- thumb_func_start sub_812ACC0
-sub_812ACC0: @ 812ACC0
- push {lr}
- ldr r0, _0812ACE8 @ =gUnknown_845AA64
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- pop {r0}
- bx r0
- .align 2, 0
-_0812ACE8: .4byte gUnknown_845AA64
- thumb_func_end sub_812ACC0
-
- thumb_func_start sub_812ACEC
-sub_812ACEC: @ 812ACEC
- push {lr}
- movs r0, 0x2
- bl PutWindowTilemap
- bl sub_812A804
- movs r0, 0x2
- movs r1, 0x3
- bl CopyWindowToVram
- pop {r0}
- bx r0
- thumb_func_end sub_812ACEC
-
- thumb_func_start sub_812AD04
-sub_812AD04: @ 812AD04
- push {lr}
- movs r0, 0x1
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
- pop {r0}
- bx r0
- thumb_func_end sub_812AD04
-
- thumb_func_start sub_812AD20
-sub_812AD20: @ 812AD20
- push {lr}
- movs r0, 0x3
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0x3
- movs r1, 0x1
- movs r2, 0xD0
- bl TextWindow_SetUserSelectedFrame
- movs r0, 0x3
- movs r1, 0xA
- movs r2, 0x20
- bl TextWindow_SetStdFrame0_WithPal
- ldr r0, _0812AD4C @ =gTMCaseMainWindowPalette
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- pop {r0}
- bx r0
- .align 2, 0
-_0812AD4C: .4byte gTMCaseMainWindowPalette
- thumb_func_end sub_812AD20
-
- thumb_func_start sub_812AD50
-sub_812AD50: @ 812AD50
- push {lr}
- sub sp, 0x10
- ldr r0, _0812AD8C @ =0xa2600001
- str r0, [sp, 0x4]
- ldr r0, _0812AD90 @ =0x04000014
- str r0, [sp]
- mov r2, sp
- movs r1, 0
- movs r0, 0x1
- strb r0, [r2, 0x8]
- mov r0, sp
- strb r1, [r0, 0x9]
- ldr r0, _0812AD94 @ =gUnknown_203B0E4
- ldr r0, [r0]
- strh r1, [r0, 0x20]
- str r1, [sp, 0xC]
- add r0, sp, 0xC
- ldr r1, _0812AD98 @ =gScanlineEffectRegBuffers
- ldr r2, _0812AD9C @ =0x010003c0
- bl CpuFastSet
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- ldr r2, [sp, 0x8]
- bl ScanlineEffect_SetParams
- add sp, 0x10
- pop {r0}
- bx r0
- .align 2, 0
-_0812AD8C: .4byte 0xa2600001
-_0812AD90: .4byte 0x04000014
-_0812AD94: .4byte gUnknown_203B0E4
-_0812AD98: .4byte gScanlineEffectRegBuffers
-_0812AD9C: .4byte 0x010003c0
- thumb_func_end sub_812AD50
-
- thumb_func_start sub_812ADA0
-sub_812ADA0: @ 812ADA0
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r0, 16
- mov r1, sp
- strh r0, [r1]
- ldr r5, _0812ADE8 @ =gScanlineEffect
- ldrb r0, [r5, 0x14]
- lsls r1, r0, 4
- subs r1, r0
- lsls r1, 7
- ldr r4, _0812ADEC @ =gScanlineEffectRegBuffers
- adds r1, r4
- ldr r2, _0812ADF0 @ =0x01000090
- mov r0, sp
- bl CpuSet
- mov r0, sp
- adds r0, 0x2
- movs r1, 0
- strh r1, [r0]
- ldrb r2, [r5, 0x14]
- lsls r1, r2, 4
- subs r1, r2
- lsls r1, 7
- movs r2, 0x90
- lsls r2, 1
- adds r4, r2
- adds r1, r4
- ldr r2, _0812ADF4 @ =0x01000010
- bl CpuSet
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812ADE8: .4byte gScanlineEffect
-_0812ADEC: .4byte gScanlineEffectRegBuffers
-_0812ADF0: .4byte 0x01000090
-_0812ADF4: .4byte 0x01000010
- thumb_func_end sub_812ADA0
-
- thumb_func_start sub_812ADF8
-sub_812ADF8: @ 812ADF8
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, sp
- strh r4, [r0]
- ldr r5, _0812AE64 @ =gScanlineEffectRegBuffers
- ldr r0, _0812AE68 @ =0x01000090
- mov r9, r0
- mov r0, sp
- adds r1, r5, 0
- mov r2, r9
- bl CpuSet
- mov r0, sp
- adds r0, 0x2
- movs r6, 0
- strh r6, [r0]
- movs r2, 0x90
- lsls r2, 1
- adds r1, r5, r2
- ldr r2, _0812AE6C @ =0x01000010
- mov r8, r2
- bl CpuSet
- add r0, sp, 0x4
- strh r4, [r0]
- movs r2, 0xF0
- lsls r2, 3
- adds r1, r5, r2
- mov r2, r9
- bl CpuSet
- mov r0, sp
- adds r0, 0x6
- strh r6, [r0]
- movs r1, 0x8A
- lsls r1, 4
- adds r5, r1
- adds r1, r5, 0
- mov r2, r8
- bl CpuSet
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812AE64: .4byte gScanlineEffectRegBuffers
-_0812AE68: .4byte 0x01000090
-_0812AE6C: .4byte 0x01000010
- thumb_func_end sub_812ADF8
-
thumb_func_start sub_812AE70
sub_812AE70: @ 812AE70
push {r4,r5,lr}
diff --git a/data/graphics.s b/data/graphics.s
index 809385e49..cbc66ad4d 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -16374,13 +16374,13 @@ gFameCheckerBg3Tilemap:: @ 8EA0700
gFameCheckerBg2Tilemap:: @ 8EA0F00
.incbin "data/graphics/fame_checker_tilemap2.bin"
-gUnknown_8EA1700:: @ 8EA1700
+gLinkMiscMenu_Pal:: @ 8EA1700
.incbin "graphics/interface/union_room_chat.gbapal"
-gUnknown_8EA1720:: @ 8EA1720
+gLinkMiscMenu_Gfx:: @ 8EA1720
.incbin "graphics/interface/union_room_chat.4bpp.lz"
-gUnknown_8EA1958:: @ 8EA1958
+gLinkMiscMenu_Tilemap:: @ 8EA1958
.incbin "graphics/interface/union_room_chat.bin.lz"
gUnknown_8EA1A50:: @ 8EA1A50
diff --git a/data/strings.s b/data/strings.s
index 4102d3616..5cff90fcd 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -3093,34 +3093,34 @@ gUnknown_841B32E:: @ 841B32E
.string "{DYNAMIC 0x00} learned\n"
.string "{DYNAMIC 0x01}!$"
-gUnknown_841B33D:: @ 0x841B33D
+gText_Upper:: @ 0x841B33D
.string "UPPER$"
-gUnknown_841B343:: @ 0x841B343
+gText_Lower:: @ 0x841B343
.string "lower$"
-gUnknown_841B349:: @ 0x841B349
+gText_Others:: @ 0x841B349
.string "OTHERS$"
-gUnknown_841B350:: @ 0x841B350
+gText_Symbols:: @ 0x841B350
.string "SYMBOLS$"
-gUnknown_841B358:: @ 0x841B358
+gText_Register2:: @ 0x841B358
.string "REGISTER$"
-gUnknown_841B361:: @ 0x841B361
+gText_Exit:: @ 0x841B361
.string "EXIT$"
-gUnknown_841B366:: @ 0x841B366
+gText_QuitChatting:: @ 0x841B366
.string "Quit chatting?$"
-gUnknown_841B375:: @ 0x841B375
+gText_RegisterTextWhere:: @ 0x841B375
.string "Register text where?$"
-gUnknown_841B38A:: @ 0x841B38A
+gText_RegisterTextHere:: @ 0x841B38A
.string "Register text here?$"
-gUnknown_841B39E:: @ 0x841B39E
+gText_InputText:: @ 0x841B39E
.string "Input text.$"
gText_F700JoinedChat:: @ 841B3AA
@@ -3135,29 +3135,29 @@ gUnknown_841B3D0:: @ 0x841B3D0
gUnknown_841B3DA:: @ 0x841B3DA
.string "{DYNAMIC 0x00}の{DYNAMIC 0x01}ひきめは いません$"
-gUnknown_841B3E9:: @ 0x841B3E9
+gText_ExitingTheChat:: @ 0x841B3E9
.string "Exiting the chat‥$"
-gUnknown_841B3FB:: @ 0x841B3FB
+gText_LeaderHasLeftEndingChat:: @ 0x841B3FB
.string "The LEADER, {DYNAMIC 0x00}, has\n"
.string "left, ending the chat.$"
-gUnknown_841B426:: @ 0x841B426
+gText_RegisteredTextChanged_OKtoSave:: @ 0x841B426
.string "The registered text has been changed.\n"
.string "Is it okay to save the game?$"
-gUnknown_841B469:: @ 0x841B469
+gText_RegisteredTextChanged_AlreadySavedFile:: @ 0x841B469
.string "There is already a saved file.\n"
.string "Is it okay to overwrite it?$"
-gUnknown_841B4A4:: @ 0x841B4A4
+gText_RegisteredTextChanged_SavingDontTurnOff:: @ 0x841B4A4
.string "SAVING‥\n"
.string "DON'T TURN OFF THE POWER.$"
-gUnknown_841B4C6:: @ 0x841B4C6
+gText_RegisteredTextChanged_SavedTheGame:: @ 0x841B4C6
.string "{DYNAMIC 0x00} saved the game.$"
-gUnknown_841B4D9:: @ 0x841B4D9
+gText_IfLeaderLeavesChatWillEnd:: @ 0x841B4D9
.string "If the LEADER leaves, the chat\n"
.string "will end. Is that okay?$"
diff --git a/data/union_room_chat.s b/data/union_room_chat.s
index d79974946..2873cd4b1 100644
--- a/data/union_room_chat.s
+++ b/data/union_room_chat.s
@@ -6,52 +6,6 @@
.section .rodata
.align 2
-gUnknown_845AB64:: @ 845AB64
- .4byte gUnknown_841B366
- .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B375
- .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B38A
- .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B39E
- .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B3E9
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00
- .align 2
- .4byte gUnknown_841B3FB
- .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00
- .align 2
- .4byte gUnknown_841B426
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
- .align 2
- .4byte gUnknown_841B469
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
- .align 2
- .4byte gUnknown_841B4A4
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
- .align 2
- .4byte gUnknown_841B4C6
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x01, 0x01
- .align 2
- .4byte gUnknown_841B4D9
- .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01
- .align 2
-
-gUnknown_845ABE8:: @ 845ABE8
- .string "…$"
-
- .align 2
-gUnknown_845ABEC:: @ 845ABEC
- .4byte gUnknown_841B33D, 0
- .4byte gUnknown_841B343, 0
- .4byte gUnknown_841B350, 0
- .4byte gUnknown_841B358, 0
- .4byte gUnknown_841B361, 0
-
gUnknown_845AC14:: @ 845AC14
.incbin "graphics/union_room_chat/unk_845AC14.gbapal"
diff --git a/include/graphics.h b/include/graphics.h
index e87acb556..c3620279d 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4864,4 +4864,12 @@ extern const u32 gUnknown_8E83444[];
extern const u32 gBagBgPalette[];
extern const u32 gBagBgPalette_FemaleOverride[];
+// union_room_chat_display
+extern const u16 gUnknown_8EAA9F0[];
+extern const u32 gUnknown_8EAAA10[];
+extern const u32 gUnknown_8EAAA6C[];
+extern const u16 gLinkMiscMenu_Pal[];
+extern const u32 gLinkMiscMenu_Gfx[];
+extern const u32 gLinkMiscMenu_Tilemap[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/strings.h b/include/strings.h
index 81cbc63c1..7821825cf 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -40,7 +40,6 @@ extern const u8 gText_Second[];
extern const u8 gText_Third[];
extern const u8 gText_NoDecorations[];
extern const u8 gText_NoDecorationsInUse[];
-extern const u8 gText_Exit[];
extern const u8 gText_Cancel[];
extern const u8 gText_Color161Shadow161[];
extern const u8 gText_GoBackPrevMenu[];
@@ -288,7 +287,6 @@ extern const u8 gText_ThreePkmnAreNeeded[];
extern const u8 gText_TwoPokemonAreNeeded[];
extern const u8 gText_PokemonCantBeSame[];
extern const u8 gText_NoIdenticalHoldItems[];
-extern const u8 gString_Dummy[];
extern const u8 gText_DoWhatWithPokemon[];
extern const u8 gText_RestoreWhichMove[];
extern const u8 gText_BoostPp[];
@@ -327,13 +325,9 @@ extern const u8 gText_SendOut[];
extern const u8 gText_Enter[];
extern const u8 gText_NoEntry[];
extern const u8 gText_Store[];
-extern const u8 gText_Register[];
extern const u8 gText_Trade4[];
extern const u8 gText_NotPkmnOtherTrainerWants[];
extern const u8 gText_ThatIsntAnEgg[];
-extern const u8 gText_PkmnCantBeTradedNow[];
-extern const u8 gText_OtherTrainersPkmnCantBeTraded[];
-extern const u8 gText_EggCantBeTradedNow[];
extern const u8 gText_OtherTrainerCantAcceptPkmn[];
extern const u8 gText_CantTradeWithTrainer[];
extern const u8 gUnknown_84176CF[];
@@ -346,7 +340,6 @@ extern const u8 gText_PkmnCantParticipate[];
extern const u8 gText_CancelParticipation[];
extern const u8 gUnknown_8417494[];
extern const u8 gMenuText_Confirm[];
-extern const u8 gText_Lv[];
extern const u8 gText_MaleSymbol[];
extern const u8 gText_FemaleSymbol[];
extern const u8 gText_Slash[];
@@ -984,6 +977,16 @@ extern const u8 gUnknown_8415F6C[];
extern const u8 gUnknown_8415FFF[];
extern const u8 gUnknown_8416002[];
+// daycare
+extern const u8 gText_Lv[];
+extern const u8 gDaycareText_GetAlongVeryWell[];
+extern const u8 gDaycareText_GetAlong[];
+extern const u8 gDaycareText_DontLikeOther[];
+extern const u8 gDaycareText_PlayOther[];
+extern const u8 gExpandedPlaceholder_Empty[];
+extern const u8 gText_HatchedFromEgg[];
+extern const u8 gText_NickHatchPrompt[];
+
// trainer card
extern const u8 gText_WaitingTrainerFinishReading[];
extern const u8 gText_TrainerCardName[];
@@ -1075,4 +1078,22 @@ extern const u8 gText_YaySmileEmoji[];
extern const u8 gText_ThankYou[];
extern const u8 gText_ByeBye[];
+// union_room_chat_display
+extern const u8 gText_QuitChatting[];
+extern const u8 gText_RegisterTextWhere[];
+extern const u8 gText_RegisterTextHere[];
+extern const u8 gText_InputText[];
+extern const u8 gText_ExitingTheChat[];
+extern const u8 gText_LeaderHasLeftEndingChat[];
+extern const u8 gText_RegisteredTextChanged_OKtoSave[];
+extern const u8 gText_RegisteredTextChanged_AlreadySavedFile[];
+extern const u8 gText_RegisteredTextChanged_SavingDontTurnOff[];
+extern const u8 gText_RegisteredTextChanged_SavedTheGame[];
+extern const u8 gText_IfLeaderLeavesChatWillEnd[];
+extern const u8 gText_Upper[];
+extern const u8 gText_Lower[];
+extern const u8 gText_Symbols[];
+extern const u8 gText_Register2[];
+extern const u8 gText_Exit[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text_window.h b/include/text_window.h
index 8e8466145..3796629b4 100644
--- a/include/text_window.h
+++ b/include/text_window.h
@@ -26,6 +26,7 @@ void TextWindow_SetUserSelectedFrame(u8 windowId, u16 tileStart, u8 palette);
void LoadUserWindowBorderGfx(u8 windowId, u16 tileStart, u8 palette);
void sub_814FDA0(u8 windowId, u16 tileStart, u8 palette);
void DrawTextBorderOuter(u8 windowId, u16 tileStart, u8 palette);
+void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum);
void TextWindow_LoadTilesStdFrame1(u8 windowId, u16 destOffset);
void sub_814FE6C(u8 windowId, u16 destOffset, u8 palIdx);
void sub_814FEEC(u8 windowId, u16 destOffset, u8 palIdx);
diff --git a/include/trade.h b/include/trade.h
index d5106b172..f8e285e40 100644
--- a/include/trade.h
+++ b/include/trade.h
@@ -8,6 +8,10 @@
extern struct MailStruct gLinkPartnerMail[6];
extern u8 gSelectedTradeMonPositions[2];
+extern const u8 gText_MaleSymbol4[];
+extern const u8 gText_FemaleSymbol4[];
+extern const u8 gText_GenderlessSymbol[];
+
extern const u16 gUnknown_826601C[];
void CB2_ReturnFromLinkTrade(void);
s32 sub_804FB34(void);
diff --git a/include/union_room_chat.h b/include/union_room_chat.h
index 3488e71bc..93bd4a55f 100644
--- a/include/union_room_chat.h
+++ b/include/union_room_chat.h
@@ -1,13 +1,27 @@
#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
+};
+
+extern const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT];
+
void sub_8128420(void);
+u8 *sub_81294B0(int arg0);
u8 *sub_8129714(void);
void sub_8129730(u32 *a0, u32 *a1);
u8 *sub_8129758(void);
u16 sub_8129788(void);
u8 *sub_81297C4(void);
u16 sub_81297D0(void);
+int sub_81297DC(void);
+u8 *sub_8129814(void);
void copy_strings_to_sav1(void);
+u8 GetCurrentKeyboardPage(void);
#endif // GUARD_UNION_ROOM_CHAT_H
diff --git a/src/daycare.c b/src/daycare.c
index 856a5fbc0..ef9da89fe 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1,44 +1,34 @@
#include "global.h"
-#include "pokemon.h"
+#include "gflib.h"
#include "battle.h"
#include "daycare.h"
-#include "string_util.h"
#include "constants/species.h"
#include "constants/items.h"
#include "mail_data.h"
#include "pokemon_storage_system.h"
#include "event_data.h"
#include "random.h"
-#include "main.h"
#include "constants/moves.h"
-#include "text.h"
#include "menu.h"
#include "new_menu_helpers.h"
#include "script.h"
#include "strings.h"
-#include "task.h"
-#include "window.h"
#include "party_menu.h"
#include "list_menu.h"
#include "overworld.h"
#include "pokedex.h"
#include "decompress.h"
-#include "palette.h"
-#include "sound.h"
#include "constants/songs.h"
#include "text_window.h"
#include "trig.h"
-#include "malloc.h"
-#include "gpu_regs.h"
-#include "bg.h"
#include "m4a.h"
#include "graphics.h"
#include "scanline_effect.h"
#include "naming_screen.h"
#include "help_system.h"
#include "field_fadetransition.h"
+#include "trade.h"
#include "constants/daycare.h"
-#include "constants/pokemon.h"
#include "constants/region_map.h"
// Combination of RSE's Day-Care (re-used on Four Island), FRLG's Day-Care, and egg_hatch.c
@@ -60,20 +50,6 @@ struct EggHatchData
u8 textColor[3];
};
-extern const u8 gText_MaleSymbol4[];
-extern const u8 gText_FemaleSymbol4[];
-extern const u8 gText_GenderlessSymbol[];
-extern const u8 gText_Lv[];
-extern const u8 gDaycareText_GetAlongVeryWell[];
-extern const u8 gDaycareText_GetAlong[];
-extern const u8 gDaycareText_DontLikeOther[];
-extern const u8 gDaycareText_PlayOther[];
-extern const u8 gExpandedPlaceholder_Empty[];
-
-extern const u32 gUnknown_826601C[]; // tilemap gameboy circle
-extern const u8 gText_HatchedFromEgg[];
-extern const u8 gText_NickHatchPrompt[];
-
// this file's functions
static void ClearDaycareMonMail(struct DayCareMail *mail);
static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
diff --git a/src/trade.c b/src/trade.c
index 05a259e60..fe5f53be9 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -1,41 +1,22 @@
#include "global.h"
-#include "palette.h"
+#include "gflib.h"
#include "task.h"
#include "decompress.h"
-#include "gpu_regs.h"
-#include "malloc.h"
-#include "bg.h"
-#include "text.h"
-#include "window.h"
-#include "librfu.h"
#include "text_window.h"
-#include "evolution_scene.h"
#include "pokemon_icon.h"
-#include "pokedex.h"
-#include "mail_data.h"
#include "graphics.h"
#include "link.h"
-#include "random.h"
-#include "save.h"
#include "load_save.h"
-#include "quest_log.h"
-#include "field_fadetransition.h"
-#include "mevent.h"
-#include "help_system.h"
#include "link_rfu.h"
#include "cable_club.h"
#include "data.h"
-#include "sound.h"
-#include "string_util.h"
#include "strings.h"
#include "menu.h"
#include "overworld.h"
#include "battle_anim.h"
#include "pokeball.h"
#include "party_menu.h"
-#include "util.h"
#include "daycare.h"
-#include "script.h"
#include "event_data.h"
#include "battle_interface.h"
#include "pokemon_summary_screen.h"
@@ -43,11 +24,7 @@
#include "new_menu_helpers.h"
#include "trade.h"
#include "trade_scene.h"
-#include "constants/species.h"
-#include "constants/items.h"
-#include "constants/easy_chat.h"
#include "constants/songs.h"
-#include "constants/region_map.h"
#include "constants/moves.h"
struct TradeMenuResources
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index 936803f80..f8243f742 100644
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -13,18 +13,11 @@
#include "scanline_effect.h"
#include "strings.h"
#include "task.h"
+#include "union_room_chat.h"
#include "union_room_chat_display.h"
#include "data_8479668.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_COUNT
-};
-
struct UnionRoomChat
{
u8 filler0[0x4];
@@ -147,7 +140,7 @@ const u8 gUnknown_845A8AC[] = {
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] = {
+const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = {
[UNION_ROOM_KB_PAGE_UPPER] = {
gText_UnionRoomChatKeyboard_ABCDE,
gText_UnionRoomChatKeyboard_FGHIJ,
@@ -951,7 +944,7 @@ void sub_81292D8(void)
if (gUnknown_203B0E0->currentPage != UNION_ROOM_KB_PAGE_COUNT)
{
- charsStr = sUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow];
+ charsStr = gUnionRoomKeyboardText[gUnknown_203B0E0->currentPage][gUnknown_203B0E0->currentRow];
for (i = 0; i < gUnknown_203B0E0->unk11; i++)
{
if (*charsStr == CHAR_EXTRA_EMOJI)
@@ -1265,7 +1258,7 @@ u8 *sub_81297C4(void)
return gUnknown_203B0E0->unk39;
}
-u8 sub_81297D0(void)
+u16 sub_81297D0(void)
{
return gUnknown_203B0E0->unk16;
}
diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c
index 993481d3d..0e1e7c3b6 100644
--- a/src/union_room_chat_display.c
+++ b/src/union_room_chat_display.c
@@ -1,7 +1,12 @@
#include "global.h"
#include "gflib.h"
+#include "dynamic_placeholder_text_util.h"
+#include "graphics.h"
+#include "menu.h"
#include "new_menu_helpers.h"
#include "scanline_effect.h"
+#include "strings.h"
+#include "text_window.h"
#include "union_room_chat.h"
#include "union_room_chat_display.h"
#include "union_room_chat_objects.h"
@@ -36,6 +41,18 @@ struct Unk845AABC
bool32 (*unk4)(u8 *);
};
+struct Unk845AB64
+{
+ const u8 *unk0;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+ u8 unk7;
+ u8 unk8;
+ u8 unk9;
+ u8 unkA;
+};
+
EWRAM_DATA struct UnionRoomChat2 * gUnknown_203B0E4 = NULL;
void sub_8129BB8(struct UnionRoomChat2 * ptr);
@@ -87,6 +104,8 @@ void sub_812ACEC(void);
void sub_812AD04(void);
void sub_812AD20(void);
void sub_812AD50(void);
+void sub_812ADA0(s16 a0);
+void sub_812ADF8(s16 a0);
const u16 gUnknown_845AA24[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal");
const u16 gUnknown_845AA44[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal");
@@ -188,6 +207,30 @@ const struct Unk845AABC gUnknown_845AABC[] = {
{20, sub_812A3D0}
};
+const struct Unk845AB64 gUnknown_845AB64[] = {
+ {gText_QuitChatting, 1, 0, 0, 1, 2, 0, 0},
+ {gText_RegisterTextWhere, 1, 0, 0, 1, 2, 0, 0},
+ {gText_RegisterTextHere, 1, 0, 0, 1, 2, 0, 0},
+ {gText_InputText, 1, 0, 0, 1, 2, 0, 0},
+ {gText_ExitingTheChat, 2, 0, 0, 1, 2, 0, 0},
+ {gText_LeaderHasLeftEndingChat, 2, 0, 0, 0, 2, 1, 0},
+ {gText_RegisteredTextChanged_OKtoSave, 2, 0, 0, 1, 2, 0, 1},
+ {gText_RegisteredTextChanged_AlreadySavedFile, 2, 0, 0, 1, 2, 0, 1},
+ {gText_RegisteredTextChanged_SavingDontTurnOff, 2, 0, 0, 1, 2, 0, 1},
+ {gText_RegisteredTextChanged_SavedTheGame, 2, 0, 0, 1, 2, 1, 1},
+ {gText_IfLeaderLeavesChatWillEnd, 2, 0, 0, 1, 2, 0, 1}
+};
+
+const u8 gText_Ellipsis[] = _("…");
+
+const struct MenuAction gUnknown_845ABEC[] = {
+ {gText_Upper},
+ {gText_Lower},
+ {gText_Symbols},
+ {gText_Register2},
+ {gText_Exit}
+};
+
bool8 sub_8129B14(void)
{
gUnknown_203B0E4 = Alloc(sizeof(*gUnknown_203B0E4));
@@ -654,3 +697,532 @@ bool32 sub_812A1B8(u8 *state)
return TRUE;
}
+
+bool32 sub_812A1FC(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ sub_812A578(4, 0);
+ CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+bool32 sub_812A240(u8 *state)
+{
+ u8 *str;
+
+ switch (*state)
+ {
+ case 0:
+ DynamicPlaceholderTextUtil_Reset();
+ str = sub_8129814();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
+ sub_812A578(5, 0);
+ CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+bool32 sub_812A294(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ sub_812A578(6, 0);
+ sub_812A424(23, 10, 1);
+ CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+bool32 sub_812A2E4(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ sub_812A578(7, 0);
+ sub_812A424(23, 10, 1);
+ CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+bool32 sub_812A334(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ sub_812A578(8, 0);
+ CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+bool32 sub_812A378(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
+ sub_812A578(9, 0);
+ CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+bool32 sub_812A3D0(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ sub_812A578(10, 0);
+ sub_812A424(23, 10, 1);
+ CopyWindowToVram(gUnknown_203B0E4->unk1E, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+bool32 sub_812A420(u8 *arg0)
+{
+ return FALSE;
+}
+
+void sub_812A424(u8 left, u8 top, u8 initialCursorPos)
+{
+ struct WindowTemplate template;
+ template.bg = 0;
+ template.tilemapLeft = left;
+ template.tilemapTop = top;
+ template.width = 6;
+ template.height = 4;
+ template.paletteNum = 14;
+ template.baseBlock = 0x52;
+ gUnknown_203B0E4->unk18 = AddWindow(&template);
+ if (gUnknown_203B0E4->unk18 != 0xFF)
+ {
+ FillWindowPixelBuffer(gUnknown_203B0E4->unk18, PIXEL_FILL(1));
+ PutWindowTilemap(gUnknown_203B0E4->unk18);
+ AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gUnknown_203B0E4->unk18, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL);
+ DrawTextBorderOuter(gUnknown_203B0E4->unk18, 1, 13);
+ Menu_InitCursor(gUnknown_203B0E4->unk18, 2, 0, 2, 14, 2, initialCursorPos);
+ }
+}
+
+void sub_812A51C(void)
+{
+ if (gUnknown_203B0E4->unk18 != 0xFF)
+ {
+ ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->unk18, FALSE);
+ ClearWindowTilemap(gUnknown_203B0E4->unk18);
+ }
+}
+
+void sub_812A544(void)
+{
+ if (gUnknown_203B0E4->unk18 != 0xFF)
+ {
+ RemoveWindow(gUnknown_203B0E4->unk18);
+ gUnknown_203B0E4->unk18 = 0xFF;
+ }
+}
+
+s8 sub_812A568(void)
+{
+ return Menu_ProcessInput();
+}
+
+void sub_812A578(int arg0, u16 arg1)
+{
+ const u8 *str;
+ int windowId;
+ struct WindowTemplate template;
+ template.bg = 0;
+ template.tilemapLeft = 8;
+ template.tilemapTop = 16;
+ template.width = 21;
+ template.height = 4;
+ template.paletteNum = 14;
+ template.baseBlock = 0x06A;
+ if (gUnknown_845AB64[arg0].unkA)
+ {
+ template.tilemapLeft -= 7;
+ template.width += 7;
+ }
+
+ gUnknown_203B0E4->unk1E = AddWindow(&template);
+ windowId = gUnknown_203B0E4->unk1E;
+ if (gUnknown_203B0E4->unk1E == 0xFF)
+ return;
+
+ if (gUnknown_845AB64[arg0].unk9)
+ {
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_203B0E4->unk22, gUnknown_845AB64[arg0].unk0);
+ str = gUnknown_203B0E4->unk22;
+ }
+ else
+ {
+ str = gUnknown_845AB64[arg0].unk0;
+ }
+
+ ChangeBgY(0, arg1 * 256, 0);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ PutWindowTilemap(windowId);
+ if (gUnknown_845AB64[arg0].unk4 == 1)
+ {
+ DrawTextBorderInner(windowId, 0xA, 2);
+ AddTextPrinterParameterized5(
+ windowId,
+ 2,
+ str,
+ gUnknown_845AB64[arg0].unk5 + 8,
+ gUnknown_845AB64[arg0].unk6 + 8,
+ TEXT_SPEED_FF,
+ NULL,
+ gUnknown_845AB64[arg0].unk7,
+ gUnknown_845AB64[arg0].unk8);
+ }
+ else
+ {
+ DrawTextBorderOuter(windowId, 0xA, 2);
+ AddTextPrinterParameterized5(
+ windowId,
+ 2,
+ str,
+ gUnknown_845AB64[arg0].unk5,
+ gUnknown_845AB64[arg0].unk6,
+ TEXT_SPEED_FF,
+ NULL,
+ gUnknown_845AB64[arg0].unk7,
+ gUnknown_845AB64[arg0].unk8);
+ }
+
+ gUnknown_203B0E4->unk1E = windowId;
+}
+
+void sub_812A6F4(void)
+{
+ if (gUnknown_203B0E4->unk1E != 0xFF)
+ {
+ ClearStdWindowAndFrameToTransparent(gUnknown_203B0E4->unk1E, FALSE);
+ ClearWindowTilemap(gUnknown_203B0E4->unk1E);
+ }
+
+ ChangeBgY(0, 0, 0);
+}
+
+void sub_812A728(void)
+{
+ if (gUnknown_203B0E4->unk1E != 0xFF)
+ {
+ RemoveWindow(gUnknown_203B0E4->unk1E);
+ gUnknown_203B0E4->unk1E = 0xFF;
+ }
+}
+
+void sub_812A74C(u16 x, u16 width, u8 fillValue)
+{
+ FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14);
+}
+
+void sub_812A778(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4)
+{
+ u8 *str2;
+ u8 sp[38];
+ if (fillValue)
+ sub_812A74C(x, sub_81297DC() - x, fillValue);
+
+ sp[0] = fillValue;
+ sp[1] = arg3;
+ sp[2] = arg4;
+ str2 = &sp[4];
+ str2[0] = EXT_CTRL_CODE_BEGIN;
+ str2[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ str2[2] = 8;
+ StringCopy(&str2[3], str);
+ AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2);
+}
+
+void sub_812A804(void)
+{
+ u8 page;
+ int i;
+ int var1;
+ u16 left;
+ u16 top;
+ u8 sp[52];
+ u8 *str;
+ u8 *str2;
+
+ FillWindowPixelBuffer(2, PIXEL_FILL(15));
+ page = GetCurrentKeyboardPage();
+ sp[0] = 0;
+ sp[1] = 14;
+ sp[2] = 13;
+ if (page != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ str = &sp[4];
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ var1 = 8;
+ str[2] = var1;
+ left = var1;
+ if (page == UNION_ROOM_KB_PAGE_EMOJI)
+ left = 6;
+
+ for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12)
+ {
+ if (!gUnionRoomKeyboardText[page][i])
+ return;
+
+ StringCopy(&sp[7], gUnionRoomKeyboardText[page][i]);
+ AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]);
+ }
+ }
+ else
+ {
+ left = 4;
+ for (i = 0, top = 0; i < 10; i++, top += 12)
+ {
+ str2 = sub_81294B0(i);
+ if (GetStringWidth(0, str2, 0) <= 40)
+ {
+ AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, str2);
+ }
+ else
+ {
+ int length = StringLength_Multibyte(str2);
+ do
+ {
+ length--;
+ StringCopyN_Multibyte(&sp[4], str2, length);
+ } while (GetStringWidth(0, &sp[4], 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);
+ }
+ }
+ }
+}
+
+bool32 sub_812A980(void)
+{
+ if (gUnknown_203B0E4->unk20 < 56)
+ {
+ gUnknown_203B0E4->unk20 += 12;
+ if (gUnknown_203B0E4->unk20 >= 56)
+ gUnknown_203B0E4->unk20 = 56;
+
+ if (gUnknown_203B0E4->unk20 < 56)
+ {
+ sub_812ADA0(gUnknown_203B0E4->unk20);
+ return TRUE;
+ }
+ }
+
+ sub_812ADF8(gUnknown_203B0E4->unk20);
+ return FALSE;
+}
+
+bool32 sub_812A9C8(void)
+{
+ if (gUnknown_203B0E4->unk20 > 0)
+ {
+ gUnknown_203B0E4->unk20 -= 12;
+ if (gUnknown_203B0E4->unk20 <= 0)
+ gUnknown_203B0E4->unk20 = 0;
+
+ if (gUnknown_203B0E4->unk20 > 0)
+ {
+ sub_812ADA0(gUnknown_203B0E4->unk20);
+ return TRUE;
+ }
+ }
+
+ sub_812ADF8(gUnknown_203B0E4->unk20);
+ return FALSE;
+}
+
+void sub_812AA10(void)
+{
+ FillWindowPixelBuffer(3, PIXEL_FILL(1));
+ DrawTextBorderOuter(3, 1, 13);
+ UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, gUnknown_845ABEC);
+ Menu_InitCursor(3, 2, 0, 0, 14, 5, GetCurrentKeyboardPage());
+ PutWindowTilemap(3);
+}
+
+void sub_812AA64(void)
+{
+ ClearStdWindowAndFrameToTransparent(3, FALSE);
+ ClearWindowTilemap(3);
+}
+
+void sub_812AA78(u16 row, u8 *str, u8 arg2)
+{
+ u8 color[3];
+ color[0] = 1;
+ color[1] = arg2 * 2 + 2;
+ color[2] = arg2 * 2 + 3;
+ FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15);
+ AddTextPrinterParameterized3(0, 2, 0, row * 15, color, TEXT_SPEED_FF, str);
+}
+
+void sub_812AAD4(void)
+{
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(64, 240));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 144));
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG2 | WININ_WIN0_BG3
+ | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
+}
+
+void sub_812AB8C(void)
+{
+ SetBgTilemapBuffer(0, gUnknown_203B0E4->unk128);
+ SetBgTilemapBuffer(1, gUnknown_203B0E4->unk928);
+ SetBgTilemapBuffer(3, gUnknown_203B0E4->unk1128);
+ SetBgTilemapBuffer(2, gUnknown_203B0E4->unk1928);
+}
+
+void sub_812ABD8(void)
+{
+ RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1);
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
+ CopyBgTilemapBufferToVram(0);
+}
+
+void sub_812AC08(void)
+{
+ LoadPalette(gUnknown_8EAA9F0, 0x70, 0x20);
+ LoadPalette(gUnknown_845AA24, 0xC0, 0x20);
+ DecompressAndCopyTileDataToVram(1, gUnknown_8EAAA10, 0, 0, 0);
+ CopyToBgTilemapBuffer(1, gUnknown_8EAAA6C, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+}
+
+void sub_812AC58(void)
+{
+ u8 *ptr;
+
+ LoadPalette(gLinkMiscMenu_Pal, 0, 0x20);
+ ptr = DecompressAndCopyTileDataToVram(2, gLinkMiscMenu_Gfx, 0, 0, 0);
+ CopyToBgTilemapBuffer(2, gLinkMiscMenu_Tilemap, 0, 0);
+ CopyBgTilemapBufferToVram(2);
+}
+
+void sub_812AC9C(void)
+{
+ LoadPalette(gUnknown_845AA44, 0x80, 0x20);
+ RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1);
+}
+
+void sub_812ACC0(void)
+{
+ LoadPalette(gUnknown_845AA64, 0xF0, 0x20);
+ PutWindowTilemap(0);
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ CopyWindowToVram(0, 3);
+}
+
+void sub_812ACEC(void)
+{
+ PutWindowTilemap(2);
+ sub_812A804();
+ CopyWindowToVram(2, 3);
+}
+
+void sub_812AD04(void)
+{
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 3);
+}
+
+void sub_812AD20(void)
+{
+ FillWindowPixelBuffer(3, PIXEL_FILL(1));
+ TextWindow_SetUserSelectedFrame(3, 1, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(3, 0xA, 0x20);
+ LoadPalette(gTMCaseMainWindowPalette, 0xE0, 0x20);
+}
+
+void sub_812AD50(void)
+{
+ struct ScanlineEffectParams params;
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.dmaDest = &REG_BG1HOFS;
+ params.initState = 1;
+ params.unused9 = 0;
+ gUnknown_203B0E4->unk20 = 0;
+ CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers));
+ ScanlineEffect_SetParams(params);
+}
+
+void sub_812ADA0(s16 arg0)
+{
+ CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20);
+}
+
+void sub_812ADF8(s16 arg0)
+{
+ CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20);
+ CpuFill16(arg0, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20);
+}