summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@users.noreply.github.com>2020-01-25 21:07:18 -0500
committerGitHub <noreply@github.com>2020-01-25 21:07:18 -0500
commit78864c88bb4f1e2f7a1894528db3714913cc84ca (patch)
tree7d9e646e984522e7eb9b3d0752e8277c34070eb6
parenta09e66b53f61027d8805e5d6bb4df3d679693485 (diff)
parent52fbc43d73995977aa8f6c45405a91c68d515061 (diff)
Merge pull request #240 from PikalaxALT/union_room_chat
Union room chat
-rw-r--r--asm/union_room_chat.s5973
-rw-r--r--data/data_8479668.s60
-rw-r--r--data/graphics.s14
-rw-r--r--data/strings.s58
-rw-r--r--data/union_room_chat.s358
-rw-r--r--include/constants/global.h5
-rw-r--r--include/data_8479668.h35
-rw-r--r--include/global.h88
-rw-r--r--include/graphics.h11
-rw-r--r--include/help_system.h1
-rw-r--r--include/link_rfu.h6
-rw-r--r--include/main.h1
-rw-r--r--include/strings.h49
-rw-r--r--include/text.h14
-rw-r--r--include/text_window.h1
-rw-r--r--include/trade.h4
-rw-r--r--include/trainer_card.h2
-rw-r--r--include/union_room.h2
-rw-r--r--include/union_room_chat.h28
-rw-r--r--include/union_room_chat_display.h34
-rw-r--r--include/union_room_chat_objects.h16
-rw-r--r--ld_script.txt8
-rw-r--r--src/daycare.c30
-rw-r--r--src/link_rfu_2.c31
-rw-r--r--src/link_rfu_3.c4
-rw-r--r--src/mail_data.c4
-rw-r--r--src/new_game.c4
-rw-r--r--src/oak_speech.c4
-rw-r--r--src/pokemon.c4
-rw-r--r--src/quest_log.c44
-rw-r--r--src/trade.c25
-rw-r--r--src/union_room.c4
-rw-r--r--src/union_room_chat.c1453
-rw-r--r--src/union_room_chat_display.c1339
-rw-r--r--src/union_room_chat_objects.c318
-rw-r--r--sym_ewram.txt15
36 files changed, 3496 insertions, 6551 deletions
diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s
deleted file mode 100644
index adfd66b5d..000000000
--- a/asm/union_room_chat.s
+++ /dev/null
@@ -1,5973 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8128420
-sub_8128420: @ 8128420
- push {r4,lr}
- ldr r4, _08128450 @ =gUnknown_203B0E0
- movs r0, 0xDC
- lsls r0, 1
- bl Alloc
- str r0, [r4]
- bl sub_812845C
- ldr r1, _08128454 @ =gKeyRepeatStartDelay
- movs r0, 0x14
- strh r0, [r1]
- bl sub_812B4AC
- movs r0, 0
- bl SetVBlankCallback
- ldr r0, _08128458 @ =c2_081284E0
- bl SetMainCallback2
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08128450: .4byte gUnknown_203B0E0
-_08128454: .4byte gKeyRepeatStartDelay
-_08128458: .4byte c2_081284E0
- thumb_func_end sub_8128420
-
- thumb_func_start sub_812845C
-sub_812845C: @ 812845C
- push {r4-r7,lr}
- adds r4, r0, 0
- movs r5, 0
- movs r0, 0
- strh r0, [r4, 0x4]
- strh r0, [r4, 0x6]
- strb r5, [r4, 0x10]
- strb r5, [r4, 0x11]
- strb r5, [r4, 0x12]
- strb r5, [r4, 0x14]
- strb r5, [r4, 0x15]
- strb r5, [r4, 0x16]
- movs r0, 0xFF
- strb r0, [r4, 0x1A]
- bl GetLinkPlayerCount
- strb r0, [r4, 0xD]
- bl GetMultiplayerId
- strb r0, [r4, 0x13]
- strb r5, [r4, 0x17]
- strb r5, [r4, 0x18]
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r4, r1
- bl sub_8129560
- ldr r7, _081284B4 @ =gSaveBlock1Ptr
- ldr r6, _081284B8 @ =0x00003ad4
- adds r4, 0xB9
- movs r5, 0x9
-_0812849A:
- ldr r1, [r7]
- adds r1, r6
- adds r0, r4, 0
- bl StringCopy
- adds r6, 0x15
- adds r4, 0x15
- subs r5, 0x1
- cmp r5, 0
- bge _0812849A
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081284B4: .4byte gSaveBlock1Ptr
-_081284B8: .4byte 0x00003ad4
- thumb_func_end sub_812845C
-
- thumb_func_start sub_81284BC
-sub_81284BC: @ 81284BC
- push {r4,lr}
- ldr r4, _081284DC @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r0, [r0, 0xE]
- bl DestroyTask
- ldr r0, [r4]
- ldrb r0, [r0, 0xF]
- bl DestroyTask
- ldr r0, [r4]
- bl Free
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081284DC: .4byte gUnknown_203B0E0
- thumb_func_end sub_81284BC
-
- thumb_func_start c2_081284E0
-c2_081284E0: @ 81284E0
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r0, _081284FC @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r6, r0, r1
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _08128518
- cmp r0, 0x1
- bgt _08128500
- cmp r0, 0
- beq _08128506
- b _08128598
- .align 2, 0
-_081284FC: .4byte gMain
-_08128500:
- cmp r0, 0x2
- beq _08128554
- b _08128598
-_08128506:
- bl ResetTasks
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl sub_8129B14
- b _08128548
-_08128518:
- bl sub_8129BFC
- bl sub_8129B78
- adds r5, r0, 0
- cmp r5, 0
- bne _08128598
- movs r4, 0x1
- negs r4, r4
- adds r0, r4, 0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- str r5, [sp]
- adds r0, r4, 0
- adds r1, r4, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _08128550 @ =sub_81285B4
- bl SetVBlankCallback
-_08128548:
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- b _08128598
- .align 2, 0
-_08128550: .4byte sub_81285B4
-_08128554:
- bl UpdatePaletteFade
- ldr r0, _081285A0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08128598
- ldr r0, _081285A4 @ =sub_81285CC
- bl SetMainCallback2
- movs r0, 0x11
- movs r1, 0
- bl SetQuestLogEvent
- ldr r0, _081285A8 @ =sub_81285E8
- movs r1, 0x8
- bl CreateTask
- ldr r4, _081285AC @ =gUnknown_203B0E0
- ldr r1, [r4]
- strb r0, [r1, 0xE]
- ldr r0, _081285B0 @ =sub_81298F8
- movs r1, 0x7
- bl CreateTask
- ldr r1, [r4]
- strb r0, [r1, 0xF]
- bl LoadWirelessStatusIndicatorSpriteGfx
- movs r0, 0xE8
- movs r1, 0x96
- bl CreateWirelessStatusIndicatorSprite
-_08128598:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081285A0: .4byte gPaletteFade
-_081285A4: .4byte sub_81285CC
-_081285A8: .4byte sub_81285E8
-_081285AC: .4byte gUnknown_203B0E0
-_081285B0: .4byte sub_81298F8
- thumb_func_end c2_081284E0
-
- thumb_func_start sub_81285B4
-sub_81285B4: @ 81285B4
- push {lr}
- bl TransferPlttBuffer
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl ScanlineEffect_InitHBlankDmaTransfer
- pop {r0}
- bx r0
- thumb_func_end sub_81285B4
-
- thumb_func_start sub_81285CC
-sub_81285CC: @ 81285CC
- push {lr}
- bl RunTasks
- bl sub_8129BFC
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_81285CC
-
- thumb_func_start sub_81285E8
-sub_81285E8: @ 81285E8
- push {r4,lr}
- ldr r4, _08128600 @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r0, [r0, 0x17]
- cmp r0, 0x2
- beq _0812860E
- cmp r0, 0x2
- bgt _08128604
- cmp r0, 0x1
- beq _0812860A
- b _0812861E
- .align 2, 0
-_08128600: .4byte gUnknown_203B0E0
-_08128604:
- cmp r0, 0x3
- beq _08128612
- b _0812861E
-_0812860A:
- movs r0, 0x6
- b _08128614
-_0812860E:
- movs r0, 0x7
- b _08128614
-_08128612:
- movs r0, 0x8
-_08128614:
- bl sub_8129218
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1, 0x17]
-_0812861E:
- ldr r1, _08128638 @ =gUnknown_845A880
- ldr r0, _0812863C @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrh r0, [r0, 0x4]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08128638: .4byte gUnknown_845A880
-_0812863C: .4byte gUnknown_203B0E0
- thumb_func_end sub_81285E8
-
- thumb_func_start sub_8128640
-sub_8128640: @ 8128640
- push {r4,lr}
- ldr r4, _08128658 @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrh r1, [r0, 0x6]
- cmp r1, 0x1
- beq _08128674
- cmp r1, 0x1
- bgt _0812865C
- cmp r1, 0
- beq _08128662
- b _081286BC
- .align 2, 0
-_08128658: .4byte gUnknown_203B0E0
-_0812865C:
- cmp r1, 0x2
- beq _081286AC
- b _081286BC
-_08128662:
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r1
- bl sub_8129568
- ldr r1, [r4]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
-_08128674:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _081286BC
- bl sub_80FBA1C
- cmp r0, 0
- bne _081286BC
- ldr r4, _081286A8 @ =gUnknown_203B0E0
- ldr r1, [r4]
- movs r0, 0xC8
- lsls r0, 1
- adds r1, r0
- movs r0, 0
- movs r2, 0x28
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _081286BC
- ldr r1, [r4]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _081286BC
- .align 2, 0
-_081286A8: .4byte gUnknown_203B0E0
-_081286AC:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _081286BC
- movs r0, 0x1
- bl sub_8129218
-_081286BC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8128640
-
- thumb_func_start sub_81286C4
-sub_81286C4: @ 81286C4
- push {r4,r5,lr}
- ldr r5, _081286D8 @ =gUnknown_203B0E0
- ldr r3, [r5]
- ldrh r0, [r3, 0x6]
- cmp r0, 0
- beq _081286DC
- cmp r0, 0x1
- beq _0812878A
- b _081287AC
- .align 2, 0
-_081286D8: .4byte gUnknown_203B0E0
-_081286DC:
- ldr r1, _081286F8 @ =gMain
- ldrh r2, [r1, 0x2E]
- movs r0, 0x8
- ands r0, r2
- cmp r0, 0
- beq _081286FC
- ldrb r0, [r3, 0x15]
- cmp r0, 0
- beq _081287AC
- movs r0, 0x4
- bl sub_8129218
- b _081287AC
- .align 2, 0
-_081286F8: .4byte gMain
-_081286FC:
- movs r0, 0x4
- ands r0, r2
- cmp r0, 0
- beq _0812870C
- movs r0, 0x2
- bl sub_8129218
- b _081287AC
-_0812870C:
- ldrh r1, [r1, 0x30]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08128738
- ldrb r0, [r3, 0x15]
- cmp r0, 0
- beq _08128730
- bl sub_81293AC
- movs r0, 0x8
- movs r1, 0
- bl sub_8129C34
- ldr r1, [r5]
- movs r0, 0x1
- strh r0, [r1, 0x6]
- b _081287AC
-_08128730:
- movs r0, 0x3
- bl sub_8129218
- b _081287AC
-_08128738:
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r2
- cmp r0, 0
- beq _08128754
- bl sub_81292D8
- movs r0, 0x8
- movs r1, 0
- bl sub_8129C34
- movs r0, 0x2
- movs r1, 0x1
- b _08128780
-_08128754:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r2
- cmp r0, 0
- beq _08128774
- ldrb r0, [r3, 0x10]
- cmp r0, 0x3
- beq _0812876C
- bl sub_81293D8
- movs r0, 0x8
- b _0812877E
-_0812876C:
- movs r0, 0x5
- bl sub_8129218
- b _081287AC
-_08128774:
- bl sub_8129228
- cmp r0, 0
- beq _081287AC
- movs r0, 0x1
-_0812877E:
- movs r1, 0
-_08128780:
- bl sub_8129C34
- ldr r0, [r5]
- strh r4, [r0, 0x6]
- b _081287AC
-_0812878A:
- movs r0, 0
- bl sub_8129C8C
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- bl sub_8129C8C
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r4, 0
- bne _081287AC
- cmp r1, 0
- bne _081287AC
- ldr r0, [r5]
- strh r1, [r0, 0x6]
-_081287AC:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81286C4
-
- thumb_func_start sub_81287B4
-sub_81287B4: @ 81287B4
- push {r4-r6,lr}
- ldr r0, _081287CC @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrh r0, [r0, 0x6]
- cmp r0, 0x4
- bls _081287C2
- b _081288CE
-_081287C2:
- lsls r0, 2
- ldr r1, _081287D0 @ =_081287D4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081287CC: .4byte gUnknown_203B0E0
-_081287D0: .4byte _081287D4
- .align 2, 0
-_081287D4:
- .4byte _081287E8
- .4byte _081287F2
- .4byte _08128810
- .4byte _0812889C
- .4byte _081288B0
-_081287E8:
- movs r0, 0x3
- movs r1, 0
- bl sub_8129C34
- b _081287FE
-_081287F2:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _081288CE
-_081287FE:
- ldr r0, _0812880C @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _081288CE
- .align 2, 0
-_0812880C: .4byte gUnknown_203B0E0
-_08128810:
- bl Menu_ProcessInput
- lsls r0, 24
- asrs r0, 8
- lsrs r6, r0, 16
- asrs r4, r0, 16
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _08128848
- adds r0, 0x1
- cmp r4, r0
- beq _08128868
- movs r0, 0x4
- movs r1, 0
- bl sub_8129C34
- ldr r5, _08128844 @ =gUnknown_203B0E0
- ldr r2, [r5]
- ldrb r0, [r2, 0x10]
- cmp r0, r4
- beq _08128870
- cmp r4, 0x3
- ble _08128880
- b _08128870
- .align 2, 0
-_08128844: .4byte gUnknown_203B0E0
-_08128848:
- ldr r0, _08128864 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _081288CE
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl Menu_MoveCursor
- b _081288CE
- .align 2, 0
-_08128864: .4byte gMain
-_08128868:
- movs r0, 0x4
- movs r1, 0
- bl sub_8129C34
-_08128870:
- ldr r0, _0812887C @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
- strh r0, [r1, 0x6]
- b _081288CE
- .align 2, 0
-_0812887C: .4byte gUnknown_203B0E0
-_08128880:
- movs r1, 0
- strb r1, [r2, 0x11]
- ldr r0, [r5]
- strb r1, [r0, 0x12]
- movs r0, 0x5
- movs r1, 0x1
- bl sub_8129C34
- ldr r0, [r5]
- strb r6, [r0, 0x10]
- ldr r1, [r5]
- movs r0, 0x4
- strh r0, [r1, 0x6]
- b _081288CE
-_0812889C:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _081288CE
- movs r0, 0x1
- bl sub_8129218
- b _081288CE
-_081288B0:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _081288CE
- movs r0, 0x1
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _081288CE
- movs r0, 0x1
- bl sub_8129218
-_081288CE:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81287B4
-
- thumb_func_start sub_81288D4
-sub_81288D4: @ 81288D4
- push {r4,lr}
- ldr r0, _081288EC @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrh r0, [r0, 0x6]
- cmp r0, 0xA
- bls _081288E2
- b _08128A94
-_081288E2:
- lsls r0, 2
- ldr r1, _081288F0 @ =_081288F4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081288EC: .4byte gUnknown_203B0E0
-_081288F0: .4byte _081288F4
- .align 2, 0
-_081288F4:
- .4byte _08128920
- .4byte _08128938
- .4byte _08128954
- .4byte _0812899C
- .4byte _08128A44
- .4byte _08128A86
- .4byte _08128A94
- .4byte _08128A94
- .4byte _081289F0
- .4byte _081289B0
- .4byte _081289D4
-_08128920:
- movs r0, 0x6
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128934 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x1
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128934: .4byte gUnknown_203B0E0
-_08128938:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- beq _08128946
- b _08128A94
-_08128946:
- ldr r0, _08128950 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x2
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128950: .4byte gUnknown_203B0E0
-_08128954:
- bl sub_812A568
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08128966
- cmp r1, 0
- ble _08128A00
- b _08128A0A
-_08128966:
- ldr r4, _0812898C @ =gUnknown_203B0E0
- ldr r1, [r4]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- bne _08128990
- movs r2, 0xC8
- lsls r2, 1
- adds r0, r1, r2
- bl sub_8129614
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r1, [r4]
- movs r0, 0x9
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_0812898C: .4byte gUnknown_203B0E0
-_08128990:
- movs r2, 0xC8
- lsls r2, 1
- adds r0, r1, r2
- bl sub_81295C0
- b _08128A36
-_0812899C:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128A94
- movs r0, 0x1
- bl sub_8129218
- b _08128A94
-_081289B0:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128A94
- movs r0, 0x14
- movs r1, 0
- bl sub_8129C34
- ldr r0, _081289D0 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0xA
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_081289D0: .4byte gUnknown_203B0E0
-_081289D4:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128A94
- ldr r0, _081289EC @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x8
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_081289EC: .4byte gUnknown_203B0E0
-_081289F0:
- bl sub_812A568
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08128A24
- cmp r1, 0
- bgt _08128A0A
-_08128A00:
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08128A0E
- b _08128A94
-_08128A0A:
- cmp r1, 0x1
- bne _08128A94
-_08128A0E:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128A20 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128A20: .4byte gUnknown_203B0E0
-_08128A24:
- bl sub_80FA4A8
- ldr r4, _08128A40 @ =gUnknown_203B0E0
- ldr r0, [r4]
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r1
- bl sub_8129614
-_08128A36:
- ldr r1, [r4]
- movs r0, 0x4
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128A40: .4byte gUnknown_203B0E0
-_08128A44:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128A94
- bl sub_80FBA1C
- cmp r0, 0
- bne _08128A94
- ldr r4, _08128A7C @ =gUnknown_203B0E0
- ldr r1, [r4]
- movs r2, 0xC8
- lsls r2, 1
- adds r1, r2
- movs r0, 0
- movs r2, 0x28
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _08128A94
- ldr r1, [r4]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- bne _08128A80
- movs r0, 0x6
- strh r0, [r1, 0x6]
- b _08128A94
- .align 2, 0
-_08128A7C: .4byte gUnknown_203B0E0
-_08128A80:
- movs r0, 0x5
- strh r0, [r1, 0x6]
- b _08128A94
-_08128A86:
- ldr r0, _08128A9C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128A94
- movs r0, 0x9
- bl sub_8129218
-_08128A94:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08128A9C: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_81288D4
-
- thumb_func_start sub_8128AA0
-sub_8128AA0: @ 8128AA0
- push {r4,lr}
- ldr r1, _08128ABC @ =gUnknown_203B0E0
- ldr r0, [r1]
- ldrh r0, [r0, 0x6]
- adds r2, r1, 0
- cmp r0, 0x7
- bls _08128AB0
- b _08128BFC
-_08128AB0:
- lsls r0, 2
- ldr r1, _08128AC0 @ =_08128AC4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128ABC: .4byte gUnknown_203B0E0
-_08128AC0: .4byte _08128AC4
- .align 2, 0
-_08128AC4:
- .4byte _08128AE4
- .4byte _08128B08
- .4byte _08128B28
- .4byte _08128B4C
- .4byte _08128B80
- .4byte _08128BA0
- .4byte _08128BC4
- .4byte _08128BE8
-_08128AE4:
- ldr r0, _08128B00 @ =sub_81298F8
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- beq _08128AF2
- b _08128BFC
-_08128AF2:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128B04 @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _08128BDA
- .align 2, 0
-_08128B00: .4byte sub_81298F8
-_08128B04: .4byte gUnknown_203B0E0
-_08128B08:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128BFC
- movs r0, 0x12
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128B24 @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _08128BDA
- .align 2, 0
-_08128B24: .4byte gUnknown_203B0E0
-_08128B28:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128BFC
- ldr r4, _08128B48 @ =gUnknown_203B0E0
- ldr r0, [r4]
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r1
- bl sub_81295EC
- ldr r1, [r4]
- b _08128BDA
- .align 2, 0
-_08128B48: .4byte gUnknown_203B0E0
-_08128B4C:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128BFC
- bl sub_80FBA1C
- cmp r0, 0
- bne _08128BFC
- ldr r4, _08128B7C @ =gUnknown_203B0E0
- ldr r1, [r4]
- movs r0, 0xC8
- lsls r0, 1
- adds r1, r0
- movs r0, 0
- movs r2, 0x28
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _08128BFC
- ldr r1, [r4]
- b _08128BDA
- .align 2, 0
-_08128B7C: .4byte gUnknown_203B0E0
-_08128B80:
- bl GetBlockReceivedStatus
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08128BFC
- bl sub_80FBA1C
- cmp r0, 0
- bne _08128BFC
- ldr r0, _08128B9C @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _08128BDA
- .align 2, 0
-_08128B9C: .4byte gUnknown_203B0E0
-_08128BA0:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128BFC
- bl sub_80FBA1C
- adds r4, r0, 0
- cmp r4, 0
- bne _08128BFC
- bl sub_800AAC0
- ldr r0, _08128BC0 @ =gUnknown_203B0E0
- ldr r1, [r0]
- strh r4, [r1, 0xA]
- b _08128BDA
- .align 2, 0
-_08128BC0: .4byte gUnknown_203B0E0
-_08128BC4:
- ldr r1, [r2]
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bhi _08128BD0
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128BD0:
- ldr r0, _08128BE4 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128BFC
- ldr r1, [r2]
-_08128BDA:
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _08128BFC
- .align 2, 0
-_08128BE4: .4byte gReceivedRemoteLinkPlayers
-_08128BE8:
- ldr r1, [r2]
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bls _08128BF8
- movs r0, 0x9
- bl sub_8129218
- b _08128BFC
-_08128BF8:
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128BFC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8128AA0
-
- thumb_func_start sub_8128C04
-sub_8128C04: @ 8128C04
- push {r4,r5,lr}
- ldr r5, _08128C1C @ =gUnknown_203B0E0
- ldr r1, [r5]
- ldrh r0, [r1, 0x6]
- cmp r0, 0x1
- beq _08128C44
- cmp r0, 0x1
- bgt _08128C20
- cmp r0, 0
- beq _08128C2A
- b _08128CA2
- .align 2, 0
-_08128C1C: .4byte gUnknown_203B0E0
-_08128C20:
- cmp r0, 0x2
- beq _08128C6E
- cmp r0, 0x3
- beq _08128C90
- b _08128CA2
-_08128C2A:
- ldr r0, _08128C40 @ =sub_81298F8
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08128CA2
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- b _08128C80
- .align 2, 0
-_08128C40: .4byte sub_81298F8
-_08128C44:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128CA2
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128CA2
- bl sub_80FBA1C
- adds r4, r0, 0
- cmp r4, 0
- bne _08128CA2
- bl sub_800AAC0
- ldr r1, [r5]
- strh r4, [r1, 0xA]
- b _08128C82
-_08128C6E:
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bhi _08128C78
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128C78:
- ldr r0, _08128C8C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128CA2
-_08128C80:
- ldr r1, [r5]
-_08128C82:
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _08128CA2
- .align 2, 0
-_08128C8C: .4byte gReceivedRemoteLinkPlayers
-_08128C90:
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bls _08128C9E
- movs r0, 0x9
- bl sub_8129218
- b _08128CA2
-_08128C9E:
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128CA2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8128C04
-
- thumb_func_start sub_8128CA8
-sub_8128CA8: @ 8128CA8
- push {r4,lr}
- ldr r1, _08128CC0 @ =gUnknown_203B0E0
- ldr r0, [r1]
- ldrh r0, [r0, 0x6]
- adds r2, r1, 0
- cmp r0, 0x4
- bhi _08128D9C
- lsls r0, 2
- ldr r1, _08128CC4 @ =_08128CC8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128CC0: .4byte gUnknown_203B0E0
-_08128CC4: .4byte _08128CC8
- .align 2, 0
-_08128CC8:
- .4byte _08128CDC
- .4byte _08128D08
- .4byte _08128D30
- .4byte _08128D64
- .4byte _08128D88
-_08128CDC:
- ldr r0, _08128D00 @ =sub_81298F8
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08128D9C
- ldr r4, _08128D04 @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _08128CFA
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
-_08128CFA:
- ldr r1, [r4]
- b _08128D7A
- .align 2, 0
-_08128D00: .4byte sub_81298F8
-_08128D04: .4byte gUnknown_203B0E0
-_08128D08:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128D9C
- ldr r4, _08128D2C @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- beq _08128D26
- movs r0, 0x13
- movs r1, 0
- bl sub_8129C34
-_08128D26:
- ldr r1, [r4]
- b _08128D7A
- .align 2, 0
-_08128D2C: .4byte gUnknown_203B0E0
-_08128D30:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08128D9C
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128D9C
- bl sub_80FBA1C
- adds r4, r0, 0
- cmp r4, 0
- bne _08128D9C
- bl sub_800AAC0
- ldr r0, _08128D60 @ =gUnknown_203B0E0
- ldr r1, [r0]
- strh r4, [r1, 0xA]
- b _08128D7A
- .align 2, 0
-_08128D60: .4byte gUnknown_203B0E0
-_08128D64:
- ldr r1, [r2]
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bhi _08128D70
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128D70:
- ldr r0, _08128D84 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128D9C
- ldr r1, [r2]
-_08128D7A:
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _08128D9C
- .align 2, 0
-_08128D84: .4byte gReceivedRemoteLinkPlayers
-_08128D88:
- ldr r1, [r2]
- ldrh r0, [r1, 0xA]
- cmp r0, 0x95
- bls _08128D98
- movs r0, 0x9
- bl sub_8129218
- b _08128D9C
-_08128D98:
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_08128D9C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8128CA8
-
- thumb_func_start sub_8128DA4
-sub_8128DA4: @ 8128DA4
- push {r4,lr}
- ldr r1, _08128DBC @ =gUnknown_203B0E0
- ldr r0, [r1]
- ldrh r0, [r0, 0x6]
- adds r4, r1, 0
- cmp r0, 0x4
- bhi _08128E70
- lsls r0, 2
- ldr r1, _08128DC0 @ =_08128DC4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128DBC: .4byte gUnknown_203B0E0
-_08128DC0: .4byte _08128DC4
- .align 2, 0
-_08128DC4:
- .4byte _08128DD8
- .4byte _08128E00
- .4byte _08128E34
- .4byte _08128E42
- .4byte _08128E60
-_08128DD8:
- ldr r0, _08128DE8 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08128DEC
- movs r0, 0x1
- bl sub_8129218
- b _08128E70
- .align 2, 0
-_08128DE8: .4byte gReceivedRemoteLinkPlayers
-_08128DEC:
- ldr r0, [r4]
- movs r1, 0xC8
- lsls r1, 1
- adds r0, r1
- bl sub_8129590
- ldr r1, [r4]
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
-_08128E00:
- bl IsLinkTaskFinished
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08128E70
- bl sub_80FBA1C
- cmp r0, 0
- bne _08128E70
- ldr r4, _08128E30 @ =gUnknown_203B0E0
- ldr r1, [r4]
- movs r0, 0xC8
- lsls r0, 1
- adds r1, r0
- movs r0, 0
- movs r2, 0x28
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _08128E70
- ldr r1, [r4]
- b _08128E52
- .align 2, 0
-_08128E30: .4byte gUnknown_203B0E0
-_08128E34:
- bl sub_8129454
- movs r0, 0x8
- movs r1, 0
- bl sub_8129C34
- b _08128E4E
-_08128E42:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128E70
-_08128E4E:
- ldr r0, _08128E5C @ =gUnknown_203B0E0
- ldr r1, [r0]
-_08128E52:
- ldrh r0, [r1, 0x6]
- adds r0, 0x1
- strh r0, [r1, 0x6]
- b _08128E70
- .align 2, 0
-_08128E5C: .4byte gUnknown_203B0E0
-_08128E60:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _08128E70
- movs r0, 0x1
- bl sub_8129218
-_08128E70:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8128DA4
-
- thumb_func_start sub_8128E78
-sub_8128E78: @ 8128E78
- push {r4,lr}
- ldr r0, _08128E90 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrh r0, [r0, 0x6]
- cmp r0, 0x6
- bls _08128E86
- b _08128FA8
-_08128E86:
- lsls r0, 2
- ldr r1, _08128E94 @ =_08128E98
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128E90: .4byte gUnknown_203B0E0
-_08128E94: .4byte _08128E98
- .align 2, 0
-_08128E98:
- .4byte _08128EB4
- .4byte _08128EE4
- .4byte _08128F38
- .4byte _08128F50
- .4byte _08128F60
- .4byte _08128F74
- .4byte _08128F8C
-_08128EB4:
- bl sub_8129408
- cmp r0, 0
- beq _08128ED0
- movs r0, 0x9
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128ECC @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x2
- b _08128FA6
- .align 2, 0
-_08128ECC: .4byte gUnknown_203B0E0
-_08128ED0:
- movs r0, 0xD
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128EE0 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x5
- b _08128FA6
- .align 2, 0
-_08128EE0: .4byte gUnknown_203B0E0
-_08128EE4:
- ldr r0, _08128F04 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08128F0C
- bl sub_8129424
- movs r0, 0xB
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128F08 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
- b _08128FA6
- .align 2, 0
-_08128F04: .4byte gMain
-_08128F08: .4byte gUnknown_203B0E0
-_08128F0C:
- movs r4, 0x2
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08128F1A
- movs r0, 0xA
- b _08128F9A
-_08128F1A:
- bl sub_8129228
- cmp r0, 0
- beq _08128FA8
- movs r0, 0x1
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128F34 @ =gUnknown_203B0E0
- ldr r0, [r0]
- strh r4, [r0, 0x6]
- b _08128FA8
- .align 2, 0
-_08128F34: .4byte gUnknown_203B0E0
-_08128F38:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128FA8
- ldr r0, _08128F4C @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x1
- b _08128FA6
- .align 2, 0
-_08128F4C: .4byte gUnknown_203B0E0
-_08128F50:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128FA8
- movs r0, 0xA
- b _08128F9A
-_08128F60:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128FA8
- movs r0, 0x1
- bl sub_8129218
- b _08128FA8
-_08128F74:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08128FA8
- ldr r0, _08128F88 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x6
- b _08128FA6
- .align 2, 0
-_08128F88: .4byte gUnknown_203B0E0
-_08128F8C:
- ldr r0, _08128FB0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _08128FA8
- movs r0, 0x7
-_08128F9A:
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08128FB4 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x4
-_08128FA6:
- strh r0, [r1, 0x6]
-_08128FA8:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08128FB0: .4byte gMain
-_08128FB4: .4byte gUnknown_203B0E0
- thumb_func_end sub_8128E78
-
- thumb_func_start sub_8128FB8
-sub_8128FB8: @ 8128FB8
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _08128FD4 @ =gUnknown_203B0E0
- ldr r0, [r1]
- ldrh r0, [r0, 0x6]
- adds r4, r1, 0
- cmp r0, 0xD
- bls _08128FCA
- b _08129206
-_08128FCA:
- lsls r0, 2
- ldr r1, _08128FD8 @ =_08128FDC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08128FD4: .4byte gUnknown_203B0E0
-_08128FD8: .4byte _08128FDC
- .align 2, 0
-_08128FDC:
- .4byte _08129014
- .4byte _0812902E
- .4byte _08129054
- .4byte _08129098
- .4byte _081290BC
- .4byte _081290D8
- .4byte _0812911C
- .4byte _08129144
- .4byte _08129168
- .4byte _08129180
- .4byte _081291A4
- .4byte _081291B2
- .4byte _081291C8
- .4byte _081291E8
-_08129014:
- ldr r1, [r4]
- ldrb r0, [r1, 0x18]
- cmp r0, 0
- bne _0812901E
- b _081291C2
-_0812901E:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r1, [r4]
- movs r0, 0x1
- strh r0, [r1, 0x6]
- b _08129206
-_0812902E:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- beq _0812903C
- b _08129206
-_0812903C:
- movs r0, 0xE
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08129050 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x2
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129050: .4byte gUnknown_203B0E0
-_08129054:
- bl sub_812A568
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08129080
- cmp r1, 0
- bgt _0812906E
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08129074
- b _08129206
-_0812906E:
- cmp r1, 0x1
- beq _08129074
- b _08129206
-_08129074:
- ldr r0, _0812907C @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _081291C2
- .align 2, 0
-_0812907C: .4byte gUnknown_203B0E0
-_08129080:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08129094 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129094: .4byte gUnknown_203B0E0
-_08129098:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- beq _081290A6
- b _08129206
-_081290A6:
- movs r0, 0xF
- movs r1, 0
- bl sub_8129C34
- ldr r0, _081290B8 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x4
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_081290B8: .4byte gUnknown_203B0E0
-_081290BC:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- beq _081290CA
- b _08129206
-_081290CA:
- ldr r0, _081290D4 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x5
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_081290D4: .4byte gUnknown_203B0E0
-_081290D8:
- bl sub_812A568
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08129104
- cmp r1, 0
- bgt _081290F2
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _081290F8
- b _08129206
-_081290F2:
- cmp r1, 0x1
- beq _081290F8
- b _08129206
-_081290F8:
- ldr r0, _08129100 @ =gUnknown_203B0E0
- ldr r1, [r0]
- b _081291C2
- .align 2, 0
-_08129100: .4byte gUnknown_203B0E0
-_08129104:
- movs r0, 0x7
- movs r1, 0
- bl sub_8129C34
- ldr r0, _08129118 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x6
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129118: .4byte gUnknown_203B0E0
-_0812911C:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08129206
- movs r0, 0x10
- movs r1, 0
- bl sub_8129C34
- bl sub_8129470
- ldr r0, _08129140 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x7
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129140: .4byte gUnknown_203B0E0
-_08129144:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08129206
- bl SetContinueGameWarpStatusToDynamicWarp
- movs r0, 0
- bl TrySavingData
- ldr r0, _08129164 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x8
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_08129164: .4byte gUnknown_203B0E0
-_08129168:
- movs r0, 0x11
- movs r1, 0
- bl sub_8129C34
- ldr r0, _0812917C @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x9
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_0812917C: .4byte gUnknown_203B0E0
-_08129180:
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08129206
- movs r0, 0x30
- bl PlaySE
- bl ClearContinueGameWarpStatus2
- ldr r0, _081291A0 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0xA
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_081291A0: .4byte gUnknown_203B0E0
-_081291A4:
- ldr r1, [r4]
- movs r0, 0
- strb r0, [r1, 0x19]
- ldr r1, [r4]
- movs r0, 0xB
- strh r0, [r1, 0x6]
- b _08129206
-_081291B2:
- ldr r0, [r4]
- ldrb r1, [r0, 0x19]
- adds r1, 0x1
- strb r1, [r0, 0x19]
- ldr r1, [r4]
- ldrb r0, [r1, 0x19]
- cmp r0, 0x78
- bls _08129206
-_081291C2:
- movs r0, 0xC
- strh r0, [r1, 0x6]
- b _08129206
-_081291C8:
- movs r1, 0x1
- negs r1, r1
- movs r0, 0
- str r0, [sp]
- adds r0, r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _081291E4 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0xD
- strh r0, [r1, 0x6]
- b _08129206
- .align 2, 0
-_081291E4: .4byte gUnknown_203B0E0
-_081291E8:
- ldr r0, _08129210 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08129206
- bl sub_812B4B8
- bl sub_8129B88
- bl sub_81284BC
- ldr r0, _08129214 @ =CB2_ReturnToField
- bl SetMainCallback2
-_08129206:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129210: .4byte gPaletteFade
-_08129214: .4byte CB2_ReturnToField
- thumb_func_end sub_8128FB8
-
- thumb_func_start sub_8129218
-sub_8129218: @ 8129218
- ldr r1, _08129224 @ =gUnknown_203B0E0
- ldr r1, [r1]
- movs r2, 0
- strh r0, [r1, 0x4]
- strh r2, [r1, 0x6]
- bx lr
- .align 2, 0
-_08129224: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129218
-
- thumb_func_start sub_8129228
-sub_8129228: @ 8129228
- push {lr}
- ldr r0, _08129258 @ =gMain
- ldrh r2, [r0, 0x30]
- movs r0, 0x40
- ands r0, r2
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- bne _081292B2
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _08129268
- ldr r0, _0812925C @ =gUnknown_203B0E0
- ldr r2, [r0]
- ldr r1, _08129260 @ =gUnknown_845A8A8
- ldrb r0, [r2, 0x10]
- adds r0, r1
- ldrb r1, [r2, 0x12]
- ldrb r0, [r0]
- cmp r1, r0
- bcs _08129264
- adds r0, r1, 0x1
- b _081292CC
- .align 2, 0
-_08129258: .4byte gMain
-_0812925C: .4byte gUnknown_203B0E0
-_08129260: .4byte gUnknown_845A8A8
-_08129264:
- strb r3, [r2, 0x12]
- b _081292CE
-_08129268:
- ldr r0, _0812928C @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x10]
- cmp r0, 0x3
- beq _081292AE
- movs r0, 0x20
- ands r0, r2
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0
- beq _08129296
- ldrb r0, [r1, 0x11]
- cmp r0, 0
- beq _08129290
- subs r0, 0x1
- strb r0, [r1, 0x11]
- b _081292CE
- .align 2, 0
-_0812928C: .4byte gUnknown_203B0E0
-_08129290:
- movs r0, 0x4
- strb r0, [r1, 0x11]
- b _081292CE
-_08129296:
- movs r0, 0x10
- ands r0, r2
- cmp r0, 0
- beq _081292AE
- ldrb r0, [r1, 0x11]
- cmp r0, 0x3
- bhi _081292AA
- adds r0, 0x1
- strb r0, [r1, 0x11]
- b _081292CE
-_081292AA:
- strb r3, [r1, 0x11]
- b _081292CE
-_081292AE:
- movs r0, 0
- b _081292D0
-_081292B2:
- ldr r0, _081292C0 @ =gUnknown_203B0E0
- ldr r2, [r0]
- ldrb r0, [r2, 0x12]
- cmp r0, 0
- beq _081292C4
- subs r0, 0x1
- b _081292CC
- .align 2, 0
-_081292C0: .4byte gUnknown_203B0E0
-_081292C4:
- ldr r0, _081292D4 @ =gUnknown_845A8A8
- ldrb r1, [r2, 0x10]
- adds r1, r0
- ldrb r0, [r1]
-_081292CC:
- strb r0, [r2, 0x12]
-_081292CE:
- movs r0, 0x1
-_081292D0:
- pop {r1}
- bx r1
- .align 2, 0
-_081292D4: .4byte gUnknown_845A8A8
- thumb_func_end sub_8129228
-
- thumb_func_start sub_81292D8
-sub_81292D8: @ 81292D8
- push {r4-r6,lr}
- sub sp, 0x18
- ldr r0, _08129318 @ =gUnknown_203B0E0
- ldr r5, [r0]
- ldrb r0, [r5, 0x10]
- cmp r0, 0x3
- beq _08129320
- ldr r3, _0812931C @ =gUnknown_845A9AC
- ldrb r1, [r5, 0x12]
- lsls r1, 2
- adds r2, r0, 0
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0
- adds r1, r3
- ldr r4, [r1]
- ldrb r0, [r5, 0x11]
- cmp r0, 0
- beq _08129312
- adds r1, r0, 0
-_08129302:
- ldrb r0, [r4]
- cmp r0, 0xF9
- bne _0812930A
- adds r4, 0x1
-_0812930A:
- adds r4, 0x1
- subs r1, 0x1
- cmp r1, 0
- bne _08129302
-_08129312:
- movs r5, 0x1
- b _08129346
- .align 2, 0
-_08129318: .4byte gUnknown_203B0E0
-_0812931C: .4byte gUnknown_845A9AC
-_08129320:
- ldrb r0, [r5, 0x12]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r0
- adds r1, 0xB9
- adds r1, r5, r1
- mov r0, sp
- bl StringCopy
- movs r1, 0
- strb r1, [r0]
- movs r1, 0xFF
- strb r1, [r0, 0x1]
- mov r4, sp
- mov r0, sp
- bl StringLength_Multibyte
- adds r5, r0, 0
-_08129346:
- ldr r6, _081293A8 @ =gUnknown_203B0E0
- ldr r1, [r6]
- ldrb r0, [r1, 0x15]
- strb r0, [r1, 0x14]
- cmp r4, 0
- beq _0812939E
- bl sub_81294C8
- adds r2, r0, 0
- subs r5, 0x1
- movs r0, 0x1
- negs r0, r0
- cmp r5, r0
- beq _0812939A
- ldr r0, [r6]
- ldrb r0, [r0, 0x15]
- cmp r0, 0xE
- bhi _0812939A
- adds r3, r6, 0
-_0812936C:
- ldrb r0, [r4]
- cmp r0, 0xF9
- bne _08129378
- strb r0, [r2]
- adds r4, 0x1
- adds r2, 0x1
-_08129378:
- ldrb r0, [r4]
- strb r0, [r2]
- adds r4, 0x1
- adds r2, 0x1
- ldr r1, [r3]
- ldrb r0, [r1, 0x15]
- adds r0, 0x1
- strb r0, [r1, 0x15]
- subs r5, 0x1
- movs r0, 0x1
- negs r0, r0
- cmp r5, r0
- beq _0812939A
- ldr r0, [r3]
- ldrb r0, [r0, 0x15]
- cmp r0, 0xE
- bls _0812936C
-_0812939A:
- movs r0, 0xFF
- strb r0, [r2]
-_0812939E:
- add sp, 0x18
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081293A8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81292D8
-
- thumb_func_start sub_81293AC
-sub_81293AC: @ 81293AC
- push {r4,lr}
- ldr r4, _081293D4 @ =gUnknown_203B0E0
- ldr r1, [r4]
- ldrb r0, [r1, 0x15]
- strb r0, [r1, 0x14]
- ldr r0, [r4]
- ldrb r0, [r0, 0x15]
- cmp r0, 0
- beq _081293CE
- bl sub_81294EC
- movs r1, 0xFF
- strb r1, [r0]
- ldr r1, [r4]
- ldrb r0, [r1, 0x15]
- subs r0, 0x1
- strb r0, [r1, 0x15]
-_081293CE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081293D4: .4byte gUnknown_203B0E0
- thumb_func_end sub_81293AC
-
- thumb_func_start sub_81293D8
-sub_81293D8: @ 81293D8
- push {lr}
- ldr r0, _08129400 @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x15]
- subs r0, 0x1
- strb r0, [r1, 0x14]
- bl sub_81294EC
- adds r2, r0, 0
- ldrb r0, [r2]
- cmp r0, 0xF9
- beq _081293FC
- ldr r1, _08129404 @ =gUnknown_845A8AC
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _081293FC
- strb r0, [r2]
-_081293FC:
- pop {r0}
- bx r0
- .align 2, 0
-_08129400: .4byte gUnknown_203B0E0
-_08129404: .4byte gUnknown_845A8AC
- thumb_func_end sub_81293D8
-
- thumb_func_start sub_8129408
-sub_8129408: @ 8129408
- push {lr}
- ldr r0, _08129418 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x15]
- cmp r0, 0
- bne _0812941C
- movs r0, 0
- b _0812941E
- .align 2, 0
-_08129418: .4byte gUnknown_203B0E0
-_0812941C:
- movs r0, 0x1
-_0812941E:
- pop {r1}
- bx r1
- thumb_func_end sub_8129408
-
- thumb_func_start sub_8129424
-sub_8129424: @ 8129424
- push {r4,lr}
- bl sub_8129758
- adds r1, r0, 0
- ldr r4, _08129450 @ =gUnknown_203B0E0
- ldr r0, [r4]
- ldrb r3, [r0, 0x12]
- lsls r2, r3, 2
- adds r2, r3
- lsls r2, 2
- adds r2, r3
- adds r2, 0xB9
- adds r0, r2
- bl StringCopy
- ldr r1, [r4]
- movs r0, 0x1
- strb r0, [r1, 0x18]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129450: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129424
-
- thumb_func_start sub_8129454
-sub_8129454: @ 8129454
- ldr r1, _0812946C @ =gUnknown_203B0E0
- ldr r2, [r1]
- movs r0, 0xFF
- strb r0, [r2, 0x1A]
- ldr r2, [r1]
- movs r3, 0
- movs r0, 0xF
- strb r0, [r2, 0x14]
- ldr r0, [r1]
- strb r3, [r0, 0x15]
- bx lr
- .align 2, 0
-_0812946C: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129454
-
- thumb_func_start sub_8129470
-sub_8129470: @ 8129470
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _081294A4 @ =gSaveBlock1Ptr
- mov r8, r0
- ldr r7, _081294A8 @ =gUnknown_203B0E0
- movs r6, 0xB9
- ldr r5, _081294AC @ =0x00003ad4
- movs r4, 0x9
-_08129482:
- mov r1, r8
- ldr r0, [r1]
- adds r0, r5
- ldr r1, [r7]
- adds r1, r6
- bl StringCopy
- adds r6, 0x15
- adds r5, 0x15
- subs r4, 0x1
- cmp r4, 0
- bge _08129482
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081294A4: .4byte gSaveBlock1Ptr
-_081294A8: .4byte gUnknown_203B0E0
-_081294AC: .4byte 0x00003ad4
- thumb_func_end sub_8129470
-
- thumb_func_start sub_81294B0
-sub_81294B0: @ 81294B0
- ldr r2, _081294C4 @ =gUnknown_203B0E0
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 2
- adds r1, r0
- adds r1, 0xB9
- ldr r0, [r2]
- adds r0, r1
- bx lr
- .align 2, 0
-_081294C4: .4byte gUnknown_203B0E0
- thumb_func_end sub_81294B0
-
- thumb_func_start sub_81294C8
-sub_81294C8: @ 81294C8
- push {lr}
- ldr r0, _081294E8 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x1A
- ldrb r0, [r0, 0x1A]
- cmp r0, 0xFF
- beq _081294E0
-_081294D8:
- adds r1, 0x1
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _081294D8
-_081294E0:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_081294E8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81294C8
-
- thumb_func_start sub_81294EC
-sub_81294EC: @ 81294EC
- push {lr}
- ldr r0, _08129518 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r2, r0, 0
- adds r2, 0x1A
- adds r1, r2, 0
- ldrb r0, [r0, 0x1A]
- cmp r0, 0xFF
- beq _08129510
-_081294FE:
- adds r2, r1, 0
- ldrb r0, [r2]
- cmp r0, 0xF9
- bne _08129508
- adds r1, r2, 0x1
-_08129508:
- adds r1, 0x1
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _081294FE
-_08129510:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08129518: .4byte gUnknown_203B0E0
- thumb_func_end sub_81294EC
-
- thumb_func_start sub_812951C
-sub_812951C: @ 812951C
- push {r4,lr}
- ldr r4, _0812955C @ =gUnknown_203B0E0
- ldr r0, [r4]
- adds r0, 0x1A
- bl StringLength_Multibyte
- adds r2, r0, 0
- ldr r0, [r4]
- adds r1, r0, 0
- adds r1, 0x1A
- movs r4, 0
- cmp r2, 0xA
- bls _08129550
- subs r2, 0xA
- movs r3, 0
- cmp r4, r2
- bcs _08129550
-_0812953E:
- ldrb r0, [r1]
- cmp r0, 0xF9
- bne _08129546
- adds r1, 0x1
-_08129546:
- adds r1, 0x1
- adds r4, 0x1
- adds r3, 0x1
- cmp r3, r2
- bcc _0812953E
-_08129550:
- lsls r0, r4, 16
- lsrs r0, 16
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0812955C: .4byte gUnknown_203B0E0
- thumb_func_end sub_812951C
-
- thumb_func_start sub_8129560
-sub_8129560: @ 8129560
- movs r1, 0
- strb r1, [r0]
- bx lr
- thumb_func_end sub_8129560
-
- thumb_func_start sub_8129568
-sub_8129568: @ 8129568
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _08129588 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- ldr r0, _0812958C @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- strb r0, [r4, 0x9]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129588: .4byte gSaveBlock2Ptr
-_0812958C: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129568
-
- thumb_func_start sub_8129590
-sub_8129590: @ 8129590
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x1
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _081295B8 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- adds r4, 0x9
- ldr r0, _081295BC @ =gUnknown_203B0E0
- ldr r1, [r0]
- adds r1, 0x1A
- adds r0, r4, 0
- bl StringCopy
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081295B8: .4byte gSaveBlock2Ptr
-_081295BC: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129590
-
- thumb_func_start sub_81295C0
-sub_81295C0: @ 81295C0
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x3
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _081295E4 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- ldr r0, _081295E8 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- strb r0, [r4, 0x9]
- bl sub_80FB9D0
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081295E4: .4byte gSaveBlock2Ptr
-_081295E8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81295C0
-
- thumb_func_start sub_81295EC
-sub_81295EC: @ 81295EC
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x4
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _0812960C @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- ldr r0, _08129610 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- strb r0, [r4, 0x9]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812960C: .4byte gSaveBlock2Ptr
-_08129610: .4byte gUnknown_203B0E0
- thumb_func_end sub_81295EC
-
- thumb_func_start sub_8129614
-sub_8129614: @ 8129614
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x5
- strb r0, [r4]
- adds r0, r4, 0x1
- ldr r1, _08129634 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- ldr r0, _08129638 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- strb r0, [r4, 0x9]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129634: .4byte gSaveBlock2Ptr
-_08129638: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129614
-
- thumb_func_start sub_812963C
-sub_812963C: @ 812963C
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r5, r1, 0
- ldrb r0, [r5]
- adds r1, r0, 0
- adds r4, r5, 0x1
- adds r5, r4, 0
- adds r5, 0x8
- cmp r0, 0x2
- beq _08129664
- cmp r0, 0x2
- bgt _0812965A
- cmp r0, 0x1
- beq _08129688
- b _081296EC
-_0812965A:
- cmp r1, 0x3
- beq _081296BE
- cmp r1, 0x5
- beq _081296B2
- b _081296EC
-_08129664:
- ldr r0, _08129680 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- ldrb r1, [r4, 0x8]
- cmp r0, r1
- beq _081296EC
- bl DynamicPlaceholderTextUtil_Reset
- movs r0, 0
- adds r1, r4, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- ldr r1, _08129684 @ =gUnknown_841B3AA
- b _081296D8
- .align 2, 0
-_08129680: .4byte gUnknown_203B0E0
-_08129684: .4byte gUnknown_841B3AA
-_08129688:
- adds r0, r6, 0
- adds r1, r4, 0
- bl StringCopy
- movs r1, 0xFC
- strb r1, [r0]
- adds r0, 0x1
- movs r1, 0x13
- strb r1, [r0]
- adds r0, 0x1
- movs r1, 0x2A
- strb r1, [r0]
- adds r0, 0x1
- movs r1, 0xF0
- strb r1, [r0]
- adds r0, 0x1
- adds r1, r5, 0
- bl StringCopy
- movs r0, 0x1
- b _081296EE
-_081296B2:
- ldr r0, _081296E4 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r0, 0x79
- adds r1, r4, 0
- bl StringCopy
-_081296BE:
- ldr r0, _081296E4 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- ldrb r5, [r5]
- cmp r0, r5
- beq _081296EC
- bl DynamicPlaceholderTextUtil_Reset
- movs r0, 0
- adds r1, r4, 0
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr
- ldr r1, _081296E8 @ =gUnknown_841B3BE
-_081296D8:
- adds r0, r6, 0
- bl DynamicPlaceholderTextUtil_ExpandPlaceholders
- movs r0, 0x1
- b _081296EE
- .align 2, 0
-_081296E4: .4byte gUnknown_203B0E0
-_081296E8: .4byte gUnknown_841B3BE
-_081296EC:
- movs r0, 0
-_081296EE:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_812963C
-
- thumb_func_start sub_81296F4
-sub_81296F4: @ 81296F4
- ldr r0, _081296FC @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x10]
- bx lr
- .align 2, 0
-_081296FC: .4byte gUnknown_203B0E0
- thumb_func_end sub_81296F4
-
- thumb_func_start sub_8129700
-sub_8129700: @ 8129700
- ldr r2, _08129710 @ =gUnknown_203B0E0
- ldr r3, [r2]
- ldrb r2, [r3, 0x11]
- strb r2, [r0]
- ldrb r0, [r3, 0x12]
- strb r0, [r1]
- bx lr
- .align 2, 0
-_08129710: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129700
-
- thumb_func_start sub_8129714
-sub_8129714: @ 8129714
- ldr r0, _0812971C @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r0, 0x1A
- bx lr
- .align 2, 0
-_0812971C: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129714
-
- thumb_func_start sub_8129720
-sub_8129720: @ 8129720
- push {lr}
- bl sub_8129714
- bl StringLength_Multibyte
- pop {r1}
- bx r1
- thumb_func_end sub_8129720
-
- thumb_func_start sub_8129730
-sub_8129730: @ 8129730
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _08129748 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r3, [r0, 0x15]
- ldrb r2, [r0, 0x14]
- subs r0, r3, r2
- cmp r0, 0
- bge _0812974C
- negs r0, r0
- str r3, [r4]
- b _0812974E
- .align 2, 0
-_08129748: .4byte gUnknown_203B0E0
-_0812974C:
- str r2, [r4]
-_0812974E:
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8129730
-
- thumb_func_start sub_8129758
-sub_8129758: @ 8129758
- push {lr}
- bl sub_812951C
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, _08129784 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x1A
- cmp r2, 0
- beq _0812977E
-_0812976E:
- ldrb r0, [r1]
- cmp r0, 0xF9
- bne _08129776
- adds r1, 0x1
-_08129776:
- adds r1, 0x1
- subs r2, 0x1
- cmp r2, 0
- bne _0812976E
-_0812977E:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08129784: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129758
-
- thumb_func_start sub_8129788
-sub_8129788: @ 8129788
- push {r4,lr}
- bl sub_812951C
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, _081297C0 @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r1, r0, 0
- adds r1, 0x1A
- movs r2, 0
- movs r3, 0
- cmp r2, r4
- bcs _081297B8
-_081297A2:
- ldrb r0, [r1]
- cmp r0, 0xF9
- bne _081297AA
- adds r1, 0x1
-_081297AA:
- adds r1, 0x1
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- adds r3, 0x1
- cmp r3, r4
- bcc _081297A2
-_081297B8:
- adds r0, r2, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_081297C0: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129788
-
- thumb_func_start sub_81297C4
-sub_81297C4: @ 81297C4
- ldr r0, _081297CC @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r0, 0x39
- bx lr
- .align 2, 0
-_081297CC: .4byte gUnknown_203B0E0
- thumb_func_end sub_81297C4
-
- thumb_func_start sub_81297D0
-sub_81297D0: @ 81297D0
- ldr r0, _081297D8 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x16]
- bx lr
- .align 2, 0
-_081297D8: .4byte gUnknown_203B0E0
- thumb_func_end sub_81297D0
-
- thumb_func_start sub_81297DC
-sub_81297DC: @ 81297DC
- ldr r0, _081297E4 @ =gUnknown_203B0E0
- ldr r0, [r0]
- ldrb r0, [r0, 0x15]
- bx lr
- .align 2, 0
-_081297E4: .4byte gUnknown_203B0E0
- thumb_func_end sub_81297DC
-
- thumb_func_start sub_81297E8
-sub_81297E8: @ 81297E8
- push {lr}
- bl sub_81294EC
- ldrb r1, [r0]
- cmp r1, 0xFF
- bhi _08129802
- ldr r0, _08129808 @ =gUnknown_845A8AC
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, r1
- beq _08129802
- cmp r0, 0
- bne _0812980C
-_08129802:
- movs r0, 0x3
- b _0812980E
- .align 2, 0
-_08129808: .4byte gUnknown_845A8AC
-_0812980C:
- movs r0, 0
-_0812980E:
- pop {r1}
- bx r1
- thumb_func_end sub_81297E8
-
- thumb_func_start sub_8129814
-sub_8129814: @ 8129814
- ldr r0, _0812981C @ =gUnknown_203B0E0
- ldr r0, [r0]
- adds r0, 0x79
- bx lr
- .align 2, 0
-_0812981C: .4byte gUnknown_203B0E0
- thumb_func_end sub_8129814
-
- thumb_func_start copy_strings_to_sav1
-copy_strings_to_sav1: @ 8129820
- push {r4,lr}
- ldr r4, _081298A4 @ =gSaveBlock1Ptr
- ldr r0, [r4]
- ldr r1, _081298A8 @ =0x00003ad4
- adds r0, r1
- ldr r1, _081298AC @ =gUnknown_841B510
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298B0 @ =0x00003ae9
- adds r0, r1
- ldr r1, _081298B4 @ =gUnknown_841B516
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298B8 @ =0x00003afe
- adds r0, r1
- ldr r1, _081298BC @ =gUnknown_841B51E
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298C0 @ =0x00003b13
- adds r0, r1
- ldr r1, _081298C4 @ =gUnknown_841B524
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298C8 @ =0x00003b28
- adds r0, r1
- ldr r1, _081298CC @ =gUnknown_841B52B
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298D0 @ =0x00003b3d
- adds r0, r1
- ldr r1, _081298D4 @ =gUnknown_841B531
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298D8 @ =0x00003b52
- adds r0, r1
- ldr r1, _081298DC @ =gUnknown_841B535
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298E0 @ =0x00003b67
- adds r0, r1
- ldr r1, _081298E4 @ =gUnknown_841B53B
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298E8 @ =0x00003b7c
- adds r0, r1
- ldr r1, _081298EC @ =gUnknown_841B541
- bl StringCopy
- ldr r0, [r4]
- ldr r1, _081298F0 @ =0x00003b91
- adds r0, r1
- ldr r1, _081298F4 @ =gUnknown_841B54B
- bl StringCopy
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081298A4: .4byte gSaveBlock1Ptr
-_081298A8: .4byte 0x00003ad4
-_081298AC: .4byte gUnknown_841B510
-_081298B0: .4byte 0x00003ae9
-_081298B4: .4byte gUnknown_841B516
-_081298B8: .4byte 0x00003afe
-_081298BC: .4byte gUnknown_841B51E
-_081298C0: .4byte 0x00003b13
-_081298C4: .4byte gUnknown_841B524
-_081298C8: .4byte 0x00003b28
-_081298CC: .4byte gUnknown_841B52B
-_081298D0: .4byte 0x00003b3d
-_081298D4: .4byte gUnknown_841B531
-_081298D8: .4byte 0x00003b52
-_081298DC: .4byte gUnknown_841B535
-_081298E0: .4byte 0x00003b67
-_081298E4: .4byte gUnknown_841B53B
-_081298E8: .4byte 0x00003b7c
-_081298EC: .4byte gUnknown_841B541
-_081298F0: .4byte 0x00003b91
-_081298F4: .4byte gUnknown_841B54B
- thumb_func_end copy_strings_to_sav1
-
- thumb_func_start sub_81298F8
-sub_81298F8: @ 81298F8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0812991C @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- bls _08129912
- b _08129B08
-_08129912:
- lsls r0, 2
- ldr r1, _08129920 @ =_08129924
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0812991C: .4byte gTasks+0x8
-_08129920: .4byte _08129924
- .align 2, 0
-_08129924:
- .4byte _08129944
- .4byte _08129952
- .4byte _08129AEC
- .4byte _081299A0
- .4byte _08129A8C
- .4byte _08129AC4
- .4byte _08129AD8
- .4byte _08129A7C
-_08129944:
- ldr r0, _08129978 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0812994E
- b _08129AE0
-_0812994E:
- movs r0, 0x1
- strh r0, [r4]
-_08129952:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- strh r0, [r4, 0x8]
- ldr r3, _0812997C @ =gUnknown_203B0E0
- ldr r0, [r3]
- ldrb r1, [r0, 0xD]
- movs r5, 0x8
- ldrsh r0, [r4, r5]
- cmp r1, r0
- beq _08129980
- movs r0, 0x2
- strh r0, [r4]
- ldr r0, [r3]
- strb r2, [r0, 0xD]
- b _08129B08
- .align 2, 0
-_08129978: .4byte gReceivedRemoteLinkPlayers
-_0812997C: .4byte gUnknown_203B0E0
-_08129980:
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x6]
- cmp r0, 0
- bne _08129998
- bl sub_80FBA1C
- cmp r0, 0
- beq _08129998
- b _08129B08
-_08129998:
- movs r0, 0
- strh r0, [r4, 0x2]
- movs r0, 0x3
- strh r0, [r4]
-_081299A0:
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bgt _081299DA
- movs r2, 0x6
- ldrsh r0, [r4, r2]
- movs r3, 0x2
- ldrsh r1, [r4, r3]
- asrs r0, r1
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _081299DA
- movs r2, 0x1
-_081299BC:
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bgt _081299DA
- movs r5, 0x6
- ldrsh r0, [r4, r5]
- movs r3, 0x2
- ldrsh r1, [r4, r3]
- asrs r0, r1
- ands r0, r2
- cmp r0, 0
- beq _081299BC
-_081299DA:
- ldrh r1, [r4, 0x2]
- movs r5, 0x2
- ldrsh r0, [r4, r5]
- cmp r0, 0x5
- bne _081299E6
- b _08129B04
-_081299E6:
- strh r1, [r4, 0x4]
- lsls r0, r1, 24
- lsrs r0, 24
- bl ResetBlockReceivedFlag
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- lsls r0, 8
- ldr r1, _08129A0C @ =gBlockRecvBuffer
- adds r0, r1
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r0, 0x4
- bhi _08129A28
- lsls r0, 2
- ldr r1, _08129A10 @ =_08129A14
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08129A0C: .4byte gBlockRecvBuffer
-_08129A10: .4byte _08129A14
- .align 2, 0
-_08129A14:
- .4byte _08129A28
- .4byte _08129A2C
- .4byte _08129A30
- .4byte _08129A34
- .4byte _08129A38
-_08129A28:
- movs r0, 0x3
- b _08129A3A
-_08129A2C:
- movs r0, 0x3
- b _08129A3A
-_08129A30:
- movs r0, 0x4
- b _08129A3A
-_08129A34:
- movs r0, 0x5
- b _08129A3A
-_08129A38:
- movs r0, 0x6
-_08129A3A:
- strh r0, [r4, 0xA]
- ldr r5, _08129A68 @ =gUnknown_203B0E0
- ldr r0, [r5]
- adds r0, 0x39
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- lsls r1, 8
- ldr r2, _08129A6C @ =gBlockRecvBuffer
- adds r1, r2
- bl sub_812963C
- cmp r0, 0
- beq _08129A70
- ldr r0, [r5]
- ldrh r1, [r4, 0x2]
- strb r1, [r0, 0x16]
- movs r0, 0xC
- movs r1, 0x2
- bl sub_8129C34
- movs r0, 0x7
- b _08129A72
- .align 2, 0
-_08129A68: .4byte gUnknown_203B0E0
-_08129A6C: .4byte gBlockRecvBuffer
-_08129A70:
- ldrh r0, [r4, 0xA]
-_08129A72:
- strh r0, [r4]
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- b _08129B08
-_08129A7C:
- movs r0, 0x2
- bl sub_8129C8C
- lsls r0, 24
- cmp r0, 0
- bne _08129B08
- ldrh r0, [r4, 0xA]
- b _08129B06
-_08129A8C:
- ldr r6, _08129AB4 @ =gUnknown_203B0E0
- ldr r0, [r6]
- ldrb r0, [r0, 0x13]
- cmp r0, 0
- bne _08129AC0
- movs r3, 0x4
- ldrsh r0, [r4, r3]
- cmp r0, 0
- beq _08129AC0
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08129AB8
- bl sub_80FA4A8
- ldr r1, [r6]
- movs r0, 0x1
- b _08129ADE
- .align 2, 0
-_08129AB4: .4byte gUnknown_203B0E0
-_08129AB8:
- movs r5, 0x4
- ldrsh r0, [r4, r5]
- bl sub_80FBD6C
-_08129AC0:
- movs r0, 0x3
- b _08129B06
-_08129AC4:
- ldr r0, _08129AD4 @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- beq _08129AE0
- movs r0, 0x2
- b _08129ADE
- .align 2, 0
-_08129AD4: .4byte gUnknown_203B0E0
-_08129AD8:
- ldr r0, _08129AE8 @ =gUnknown_203B0E0
- ldr r1, [r0]
- movs r0, 0x3
-_08129ADE:
- strb r0, [r1, 0x17]
-_08129AE0:
- adds r0, r5, 0
- bl DestroyTask
- b _08129B08
- .align 2, 0
-_08129AE8: .4byte gUnknown_203B0E0
-_08129AEC:
- bl sub_80FBA1C
- cmp r0, 0
- bne _08129B08
- ldr r0, _08129B10 @ =gUnknown_203B0E0
- ldr r1, [r0]
- ldrb r0, [r1, 0x13]
- cmp r0, 0
- bne _08129B04
- ldrb r0, [r1, 0xD]
- bl sub_80FB030
-_08129B04:
- movs r0, 0x1
-_08129B06:
- strh r0, [r4]
-_08129B08:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08129B10: .4byte gUnknown_203B0E0
- thumb_func_end sub_81298F8
-
- thumb_func_start sub_8129B14
-sub_8129B14: @ 8129B14
- push {r4,lr}
- ldr r4, _08129B60 @ =gUnknown_203B0E4
- ldr r0, _08129B64 @ =0x00002168
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _08129B70
- bl sub_812AE70
- cmp r0, 0
- beq _08129B70
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _08129B68 @ =gUnknown_845AA84
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- ldr r0, _08129B6C @ =gUnknown_845AA94
- bl InitWindows
- bl ResetTempTileDataBuffers
- bl sub_812AD50
- ldr r0, [r4]
- bl sub_8129BB8
- bl sub_8129BC4
- movs r0, 0
- movs r1, 0
- bl sub_8129C34
- movs r0, 0x1
- b _08129B72
- .align 2, 0
-_08129B60: .4byte gUnknown_203B0E4
-_08129B64: .4byte 0x00002168
-_08129B68: .4byte gUnknown_845AA84
-_08129B6C: .4byte gUnknown_845AA94
-_08129B70:
- movs r0, 0
-_08129B72:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129B14
-
- thumb_func_start sub_8129B78
-sub_8129B78: @ 8129B78
- push {lr}
- movs r0, 0
- bl sub_8129C8C
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8129B78
-
- thumb_func_start sub_8129B88
-sub_8129B88: @ 8129B88
- push {r4,lr}
- bl sub_812AEB0
- ldr r4, _08129BB0 @ =gUnknown_203B0E4
- ldr r0, [r4]
- cmp r0, 0
- beq _08129B9E
- bl Free
- movs r0, 0
- str r0, [r4]
-_08129B9E:
- bl FreeAllWindowBuffers
- ldr r1, _08129BB4 @ =gScanlineEffect
- movs r0, 0x3
- strb r0, [r1, 0x15]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08129BB0: .4byte gUnknown_203B0E4
-_08129BB4: .4byte gScanlineEffect
- thumb_func_end sub_8129B88
-
- thumb_func_start sub_8129BB8
-sub_8129BB8: @ 8129BB8
- movs r2, 0
- movs r1, 0xFF
- strh r1, [r0, 0x18]
- strh r1, [r0, 0x1E]
- strh r2, [r0, 0x1A]
- bx lr
- thumb_func_end sub_8129BB8
-
- thumb_func_start sub_8129BC4
-sub_8129BC4: @ 8129BC4
- push {r4,r5,lr}
- ldr r1, _08129BF4 @ =gUnknown_203B0E4
- ldr r0, [r1]
- cmp r0, 0
- beq _08129BEC
- movs r2, 0
- adds r4, r1, 0
- ldr r5, _08129BF8 @ =sub_812A420
- movs r3, 0
-_08129BD6:
- ldr r0, [r4]
- lsls r1, r2, 3
- adds r0, r1
- str r5, [r0]
- strb r3, [r0, 0x4]
- ldr r0, [r4]
- adds r0, r1
- strb r3, [r0, 0x5]
- adds r2, 0x1
- cmp r2, 0x2
- ble _08129BD6
-_08129BEC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08129BF4: .4byte gUnknown_203B0E4
-_08129BF8: .4byte sub_812A420
- thumb_func_end sub_8129BC4
-
- thumb_func_start sub_8129BFC
-sub_8129BFC: @ 8129BFC
- push {r4-r6,lr}
- ldr r1, _08129C30 @ =gUnknown_203B0E4
- ldr r0, [r1]
- cmp r0, 0
- beq _08129C2A
- movs r5, 0
- adds r6, r1, 0
-_08129C0A:
- ldr r0, [r6]
- lsls r4, r5, 3
- adds r1, r0, r4
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _08129C24
- adds r0, r1, 0x5
- ldr r1, [r1]
- bl _call_via_r1
- ldr r1, [r6]
- adds r1, r4
- strb r0, [r1, 0x4]
-_08129C24:
- adds r5, 0x1
- cmp r5, 0x2
- ble _08129C0A
-_08129C2A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08129C30: .4byte gUnknown_203B0E4
- thumb_func_end sub_8129BFC
-
- thumb_func_start sub_8129C34
-sub_8129C34: @ 8129C34
- push {r4-r7,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 24
- ldr r3, _08129C70 @ =gUnknown_203B0E4
- ldr r0, [r3]
- lsrs r1, 21
- adds r0, r1
- ldr r2, _08129C74 @ =sub_812A420
- str r2, [r0]
- movs r4, 0
- adds r5, r3, 0
- adds r3, r1, 0
- mov r12, r4
- ldr r1, _08129C78 @ =gUnknown_845AABC
- movs r7, 0x1
- adds r2, r1, 0x4
-_08129C56:
- ldrh r0, [r1]
- cmp r0, r6
- bne _08129C7C
- ldr r1, [r5]
- adds r1, r3
- ldr r0, [r2]
- str r0, [r1]
- strb r7, [r1, 0x4]
- ldr r0, [r5]
- adds r0, r3
- mov r1, r12
- strb r1, [r0, 0x5]
- b _08129C86
- .align 2, 0
-_08129C70: .4byte gUnknown_203B0E4
-_08129C74: .4byte sub_812A420
-_08129C78: .4byte gUnknown_845AABC
-_08129C7C:
- adds r1, 0x8
- adds r2, 0x8
- adds r4, 0x1
- cmp r4, 0x14
- bls _08129C56
-_08129C86:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8129C34
-
- thumb_func_start sub_8129C8C
-sub_8129C8C: @ 8129C8C
- lsls r0, 24
- ldr r1, _08129C9C @ =gUnknown_203B0E4
- ldr r1, [r1]
- lsrs r0, 21
- adds r1, r0
- ldrb r0, [r1, 0x4]
- bx lr
- .align 2, 0
-_08129C9C: .4byte gUnknown_203B0E4
- thumb_func_end sub_8129C8C
-
- thumb_func_start sub_8129CA0
-sub_8129CA0: @ 8129CA0
- push {r4,lr}
- adds r4, r0, 0
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08129D36
- ldrb r0, [r4]
- cmp r0, 0x6
- bhi _08129D2C
- lsls r0, 2
- ldr r1, _08129CC0 @ =_08129CC4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08129CC0: .4byte _08129CC4
- .align 2, 0
-_08129CC4:
- .4byte _08129CE0
- .4byte _08129CEA
- .4byte _08129CF0
- .4byte _08129CF6
- .4byte _08129CFC
- .4byte _08129D02
- .4byte _08129D14
-_08129CE0:
- bl sub_812AAD4
- bl sub_812AB8C
- b _08129D30
-_08129CEA:
- bl sub_812ABD8
- b _08129D30
-_08129CF0:
- bl sub_812AC08
- b _08129D30
-_08129CF6:
- bl sub_812AC58
- b _08129D30
-_08129CFC:
- bl sub_812AC9C
- b _08129D30
-_08129D02:
- bl sub_812ACC0
- bl sub_812ACEC
- bl sub_812AD20
- bl sub_812AD04
- b _08129D30
-_08129D14:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129D30
- bl sub_812AEC8
- bl sub_812B048
- bl sub_812B100
- b _08129D30
-_08129D2C:
- movs r0, 0
- b _08129D38
-_08129D30:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08129D36:
- movs r0, 0x1
-_08129D38:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129CA0
-
- thumb_func_start sub_8129D40
-sub_8129D40: @ 8129D40
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129D50
- cmp r0, 0x1
- beq _08129D5E
- b _08129D68
-_08129D50:
- bl sub_812AA10
- movs r0, 0x3
- movs r1, 0x3
- bl CopyWindowToVram
- b _08129D68
-_08129D5E:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _08129D70
-_08129D68:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
-_08129D70:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129D40
-
- thumb_func_start sub_8129D78
-sub_8129D78: @ 8129D78
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129D88
- cmp r0, 0x1
- beq _08129D96
- b _08129DA0
-_08129D88:
- bl sub_812AA64
- movs r0, 0x3
- movs r1, 0x3
- bl CopyWindowToVram
- b _08129DA0
-_08129D96:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _08129DA8
-_08129DA0:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
-_08129DA8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129D78
-
- thumb_func_start sub_8129DB0
-sub_8129DB0: @ 8129DB0
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0x1
- beq _08129DE6
- cmp r0, 0x1
- bgt _08129DC4
- cmp r0, 0
- beq _08129DCA
- b _08129E0C
-_08129DC4:
- cmp r0, 0x2
- beq _08129DF2
- b _08129E0C
-_08129DCA:
- movs r0, 0x1
- bl sub_812AEFC
- bl sub_812A980
- cmp r0, 0
- bne _08129E12
- bl sub_812A804
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- b _08129E0C
-_08129DE6:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- beq _08129E0C
- b _08129E12
-_08129DF2:
- bl sub_812A9C8
- cmp r0, 0
- bne _08129E12
- bl sub_812AF1C
- movs r0, 0
- bl sub_812AEFC
- bl sub_812B160
- movs r0, 0
- b _08129E14
-_08129E0C:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08129E12:
- movs r0, 0x1
-_08129E14:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129DB0
-
- thumb_func_start sub_8129E1C
-sub_8129E1C: @ 8129E1C
- push {lr}
- bl sub_812AF1C
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_8129E1C
-
- thumb_func_start sub_8129E28
-sub_8129E28: @ 8129E28
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129E38
- cmp r0, 0x1
- beq _08129E5C
- b _08129E66
-_08129E38:
- movs r0, 0
- movs r1, 0
- bl sub_812A578
- movs r0, 0x17
- movs r1, 0xB
- movs r2, 0x1
- bl sub_812A424
- ldr r0, _08129E58 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- b _08129E66
- .align 2, 0
-_08129E58: .4byte gUnknown_203B0E4
-_08129E5C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _08129E6E
-_08129E66:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
-_08129E6E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129E28
-
- thumb_func_start sub_8129E74
-sub_8129E74: @ 8129E74
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129E84
- cmp r0, 0x1
- beq _08129E94
- b _08129EAA
-_08129E84:
- bl sub_812A6F4
- bl sub_812A51C
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- b _08129EAA
-_08129E94:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129EB0
- bl sub_812A728
- bl sub_812A544
- movs r0, 0
- b _08129EB2
-_08129EAA:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08129EB0:
- movs r0, 0x1
-_08129EB2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129E74
-
- thumb_func_start sub_8129EB8
-sub_8129EB8: @ 8129EB8
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _08129ECA
- cmp r0, 0x1
- beq _08129F02
- b _08129F14
-_08129ECA:
- add r1, sp, 0x8
- add r0, sp, 0x4
- bl sub_8129730
- ldr r0, [sp, 0x4]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [sp, 0x8]
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0
- bl sub_812A74C
- bl sub_8129714
- adds r1, r0, 0
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0
- movs r2, 0x3
- movs r3, 0x1
- bl sub_812A778
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- b _08129F14
-_08129F02:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129F1A
- bl sub_812B160
- movs r0, 0
- b _08129F1C
-_08129F14:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08129F1A:
- movs r0, 0x1
-_08129F1C:
- add sp, 0xC
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8129EB8
-
- thumb_func_start sub_8129F24
-sub_8129F24: @ 8129F24
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _08129F80
- cmp r0, 0x1
- bgt _08129F3A
- cmp r0, 0
- beq _08129F44
- b _08129FBA
-_08129F3A:
- cmp r0, 0x2
- beq _08129FA4
- cmp r0, 0x3
- beq _08129FB6
- b _08129FBA
-_08129F44:
- bl sub_8129788
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_8129758
- adds r5, r0, 0
- bl StringLength_Multibyte
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- movs r2, 0x66
- bl sub_812A74C
- movs r0, 0x5
- str r0, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0x4
- bl sub_812A778
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- b _08129FBA
-_08129F80:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129FC0
- movs r0, 0x1
- movs r1, 0x10
- bl sub_812A578
- ldr r0, _08129FA0 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- b _08129FBA
- .align 2, 0
-_08129FA0: .4byte gUnknown_203B0E4
-_08129FA4:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _08129FC0
- movs r0, 0x1
- bl sub_812AF8C
- b _08129FBA
-_08129FB6:
- movs r0, 0
- b _08129FC2
-_08129FBA:
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
-_08129FC0:
- movs r0, 0x1
-_08129FC2:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8129F24
-
- thumb_func_start sub_8129FCC
-sub_8129FCC: @ 8129FCC
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _0812A028
- cmp r0, 0x1
- bgt _08129FE2
- cmp r0, 0
- beq _08129FEC
- b _0812A062
-_08129FE2:
- cmp r0, 0x2
- beq _0812A048
- cmp r0, 0x3
- beq _0812A05E
- b _0812A062
-_08129FEC:
- bl sub_8129788
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sub_8129758
- adds r5, r0, 0
- bl StringLength_Multibyte
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- movs r2, 0
- bl sub_812A74C
- movs r0, 0x2
- str r0, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x3
- movs r3, 0x1
- bl sub_812A778
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- b _0812A062
-_0812A028:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0812A068
- bl sub_812A6F4
- ldr r0, _0812A044 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- b _0812A062
- .align 2, 0
-_0812A044: .4byte gUnknown_203B0E4
-_0812A048:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0812A068
- movs r0, 0
- bl sub_812AF8C
- bl sub_812A728
- b _0812A062
-_0812A05E:
- movs r0, 0
- b _0812A06A
-_0812A062:
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
-_0812A068:
- movs r0, 0x1
-_0812A06A:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8129FCC
-
- thumb_func_start sub_812A074
-sub_812A074: @ 812A074
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A084
- cmp r0, 0x1
- beq _0812A098
- b _0812A0A6
-_0812A084:
- bl sub_812A804
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A0A6
-_0812A098:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0812A0A6
- movs r0, 0
- b _0812A0A8
-_0812A0A6:
- movs r0, 0x1
-_0812A0A8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A074
-
- thumb_func_start sub_812A0B0
-sub_812A0B0: @ 812A0B0
- push {r4-r6,lr}
- adds r6, r0, 0
- ldrb r0, [r6]
- cmp r0, 0x4
- bhi _0812A182
- lsls r0, 2
- ldr r1, _0812A0C4 @ =_0812A0C8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0812A0C4: .4byte _0812A0C8
- .align 2, 0
-_0812A0C8:
- .4byte _0812A0DC
- .4byte _0812A108
- .4byte _0812A138
- .4byte _0812A15C
- .4byte _0812A126
-_0812A0DC:
- ldr r0, _0812A104 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrh r5, [r0, 0x1A]
- bl sub_81297C4
- adds r4, r0, 0
- bl sub_81297D0
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_812AA78
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- b _0812A17C
- .align 2, 0
-_0812A104: .4byte gUnknown_203B0E4
-_0812A108:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- bne _0812A182
- ldr r0, _0812A12C @ =gUnknown_203B0E4
- ldr r1, [r0]
- ldrh r0, [r1, 0x1A]
- cmp r0, 0x8
- bhi _0812A130
- adds r0, 0x1
- strh r0, [r1, 0x1A]
- movs r0, 0x4
- strb r0, [r6]
-_0812A126:
- movs r0, 0
- b _0812A184
- .align 2, 0
-_0812A12C: .4byte gUnknown_203B0E4
-_0812A130:
- strh r2, [r1, 0x1C]
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
-_0812A138:
- movs r0, 0
- movs r1, 0
- movs r2, 0x5
- movs r3, 0x11
- bl ScrollWindow
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r0, _0812A178 @ =gUnknown_203B0E4
- ldr r1, [r0]
- ldrh r0, [r1, 0x1C]
- adds r0, 0x1
- strh r0, [r1, 0x1C]
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
-_0812A15C:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0812A182
- ldr r0, _0812A178 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrh r0, [r0, 0x1C]
- cmp r0, 0x2
- bhi _0812A17C
- ldrb r0, [r6]
- subs r0, 0x1
- b _0812A180
- .align 2, 0
-_0812A178: .4byte gUnknown_203B0E4
-_0812A17C:
- ldrb r0, [r6]
- adds r0, 0x1
-_0812A180:
- strb r0, [r6]
-_0812A182:
- movs r0, 0x1
-_0812A184:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_812A0B0
-
- thumb_func_start sub_812A18C
-sub_812A18C: @ 812A18C
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A19C
- cmp r0, 0x1
- beq _0812A1A8
- b _0812A1AE
-_0812A19C:
- bl sub_812AFC0
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A1AE
-_0812A1A8:
- bl sub_812AFFC
- b _0812A1B0
-_0812A1AE:
- movs r0, 0x1
-_0812A1B0:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A18C
-
- thumb_func_start sub_812A1B8
-sub_812A1B8: @ 812A1B8
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0
- beq _0812A1C8
- cmp r0, 0x1
- beq _0812A1E8
- b _0812A1F2
-_0812A1C8:
- movs r0, 0x3
- movs r1, 0x10
- bl sub_812A578
- ldr r0, _0812A1E4 @ =gUnknown_203B0E4
- ldr r0, [r0]
- ldrb r0, [r0, 0x1E]
- movs r1, 0x3
- bl CopyWindowToVram
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0812A1F2
- .align 2, 0
-_0812A1E4: .4byte gUnknown_203B0E4
-_0812A1E8:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- b _0812A1F4
-_0812A1F2:
- movs r0, 0x1
-_0812A1F4:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812A1B8
-
- 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 sub_81296F4
- 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 @ =gUnknown_845A9AC
- 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 gUnknown_845A9AC
-_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 sub_81296F4
- 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}
- movs r5, 0
- ldr r4, _0812AE9C @ =gUnknown_845AF58
-_0812AE76:
- adds r0, r4, 0
- bl LoadCompressedSpriteSheet
- adds r4, 0x8
- adds r5, 0x1
- cmp r5, 0x4
- bls _0812AE76
- ldr r0, _0812AEA0 @ =gUnknown_845AF80
- bl LoadSpritePalette
- ldr r4, _0812AEA4 @ =gUnknown_203B0E8
- movs r0, 0x18
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _0812AEA8
- movs r0, 0x1
- b _0812AEAA
- .align 2, 0
-_0812AE9C: .4byte gUnknown_845AF58
-_0812AEA0: .4byte gUnknown_845AF80
-_0812AEA4: .4byte gUnknown_203B0E8
-_0812AEA8:
- movs r0, 0
-_0812AEAA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_812AE70
-
- thumb_func_start sub_812AEB0
-sub_812AEB0: @ 812AEB0
- push {lr}
- ldr r0, _0812AEC4 @ =gUnknown_203B0E8
- ldr r0, [r0]
- cmp r0, 0
- beq _0812AEBE
- bl Free
-_0812AEBE:
- pop {r0}
- bx r0
- .align 2, 0
-_0812AEC4: .4byte gUnknown_203B0E8
- thumb_func_end sub_812AEB0
-
- thumb_func_start sub_812AEC8
-sub_812AEC8: @ 812AEC8
- push {lr}
- ldr r0, _0812AEF0 @ =gUnknown_845AFC0
- movs r1, 0xA
- movs r2, 0x18
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0812AEF4 @ =gUnknown_203B0E8
- ldr r2, [r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _0812AEF8 @ =gSprites
- adds r1, r0
- str r1, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_0812AEF0: .4byte gUnknown_845AFC0
-_0812AEF4: .4byte gUnknown_203B0E8
-_0812AEF8: .4byte gSprites
- thumb_func_end sub_812AEC8
-
- thumb_func_start sub_812AEFC
-sub_812AEFC: @ 812AEFC
- ldr r1, _0812AF18 @ =gUnknown_203B0E8
- ldr r1, [r1]
- ldr r2, [r1]
- adds r2, 0x3E
- movs r1, 0x1
- ands r0, r1
- lsls r0, 2
- ldrb r3, [r2]
- movs r1, 0x5
- negs r1, r1
- ands r1, r3
- orrs r1, r0
- strb r1, [r2]
- bx lr
- .align 2, 0
-_0812AF18: .4byte gUnknown_203B0E8
- thumb_func_end sub_812AEFC
-
- thumb_func_start sub_812AF1C
-sub_812AF1C: @ 812AF1C
- push {r4,r5,lr}
- sub sp, 0x4
- bl sub_81296F4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- mov r5, sp
- adds r5, 0x1
- mov r0, sp
- adds r1, r5, 0
- bl sub_8129700
- cmp r4, 0x3
- beq _0812AF5C
- ldr r4, _0812AF58 @ =gUnknown_203B0E8
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
- ldr r1, [r4]
- ldr r2, [r1]
- mov r0, sp
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, 0xA
- strh r0, [r2, 0x20]
- ldr r2, [r1]
- b _0812AF72
- .align 2, 0
-_0812AF58: .4byte gUnknown_203B0E8
-_0812AF5C:
- ldr r4, _0812AF88 @ =gUnknown_203B0E8
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- ldr r2, [r4]
- ldr r1, [r2]
- movs r0, 0x18
- strh r0, [r1, 0x20]
- ldr r2, [r2]
-_0812AF72:
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, 0x18
- strh r0, [r2, 0x22]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812AF88: .4byte gUnknown_203B0E8
- thumb_func_end sub_812AF1C
-
- thumb_func_start sub_812AF8C
-sub_812AF8C: @ 812AF8C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 2
- ldr r0, _0812AFB8 @ =gUnknown_845AC14 + 2
- adds r4, r0
- movs r0, 0
- bl IndexOfSpritePaletteTag
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 4
- ldr r0, _0812AFBC @ =0x01010000
- adds r1, r0
- lsrs r1, 16
- adds r0, r4, 0
- movs r2, 0x4
- bl LoadPalette
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812AFB8: .4byte gUnknown_845AC14 + 2
-_0812AFBC: .4byte 0x01010000
- thumb_func_end sub_812AF8C
-
- thumb_func_start sub_812AFC0
-sub_812AFC0: @ 812AFC0
- push {lr}
- bl sub_81296F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _0812AFE0
- ldr r0, _0812AFDC @ =gUnknown_203B0E8
- ldr r0, [r0]
- ldr r0, [r0]
- movs r1, 0x1
- bl StartSpriteAnim
- b _0812AFEC
- .align 2, 0
-_0812AFDC: .4byte gUnknown_203B0E8
-_0812AFE0:
- ldr r0, _0812AFF8 @ =gUnknown_203B0E8
- ldr r0, [r0]
- ldr r0, [r0]
- movs r1, 0x3
- bl StartSpriteAnim
-_0812AFEC:
- ldr r0, _0812AFF8 @ =gUnknown_203B0E8
- ldr r1, [r0]
- movs r0, 0
- strh r0, [r1, 0x14]
- pop {r0}
- bx r0
- .align 2, 0
-_0812AFF8: .4byte gUnknown_203B0E8
- thumb_func_end sub_812AFC0
-
- thumb_func_start sub_812AFFC
-sub_812AFFC: @ 812AFFC
- push {r4,lr}
- ldr r4, _0812B00C @ =gUnknown_203B0E8
- ldr r1, [r4]
- ldrh r0, [r1, 0x14]
- cmp r0, 0x3
- bls _0812B010
-_0812B008:
- movs r0, 0
- b _0812B042
- .align 2, 0
-_0812B00C: .4byte gUnknown_203B0E8
-_0812B010:
- adds r0, 0x1
- strh r0, [r1, 0x14]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bls _0812B040
- bl sub_81296F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _0812B034
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0
- bl StartSpriteAnim
- b _0812B008
-_0812B034:
- ldr r0, [r4]
- ldr r0, [r0]
- movs r1, 0x2
- bl StartSpriteAnim
- b _0812B008
-_0812B040:
- movs r0, 0x1
-_0812B042:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812AFFC
-
- thumb_func_start sub_812B048
-sub_812B048: @ 812B048
- push {r4,r5,lr}
- ldr r0, _0812B08C @ =gUnknown_845AFE0
- movs r1, 0x4C
- movs r2, 0x98
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0812B090 @ =gUnknown_203B0E8
- ldr r2, [r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r4, _0812B094 @ =gSprites
- adds r1, r4
- str r1, [r2, 0x8]
- ldr r0, _0812B098 @ =gUnknown_845AFF8
- movs r1, 0x40
- movs r2, 0x98
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- str r1, [r2, 0x4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B08C: .4byte gUnknown_845AFE0
-_0812B090: .4byte gUnknown_203B0E8
-_0812B094: .4byte gSprites
-_0812B098: .4byte gUnknown_845AFF8
- thumb_func_end sub_812B048
-
- thumb_func_start sub_812B09C
-sub_812B09C: @ 812B09C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_81297DC
- adds r3, r0, 0
- cmp r3, 0xF
- bne _0812B0B8
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _0812B0CC
-_0812B0B8:
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x5
- negs r1, r1
- ands r1, r0
- strb r1, [r2]
- lsls r0, r3, 3
- adds r0, 0x4C
- strh r0, [r4, 0x20]
-_0812B0CC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_812B09C
-
- thumb_func_start sub_812B0D4
-sub_812B0D4: @ 812B0D4
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- movs r2, 0
- strh r0, [r1, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _0812B0FA
- strh r2, [r1, 0x2E]
- ldrh r0, [r1, 0x24]
- adds r0, 0x1
- strh r0, [r1, 0x24]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _0812B0FA
- strh r2, [r1, 0x24]
-_0812B0FA:
- pop {r0}
- bx r0
- thumb_func_end sub_812B0D4
-
- thumb_func_start sub_812B100
-sub_812B100: @ 812B100
- push {r4,r5,lr}
- ldr r0, _0812B150 @ =gUnknown_845B050
- movs r1, 0x8
- movs r2, 0x98
- movs r3, 0x3
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0812B154 @ =gUnknown_203B0E8
- ldr r2, [r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r4, _0812B158 @ =gSprites
- adds r1, r4
- str r1, [r2, 0xC]
- ldr r0, _0812B15C @ =gUnknown_845B068
- movs r1, 0x20
- movs r2, 0x98
- movs r3, 0x4
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [r5]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- str r1, [r2, 0x10]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B150: .4byte gUnknown_845B050
-_0812B154: .4byte gUnknown_203B0E8
-_0812B158: .4byte gSprites
-_0812B15C: .4byte gUnknown_845B068
- thumb_func_end sub_812B100
-
- thumb_func_start sub_812B160
-sub_812B160: @ 812B160
- push {r4,lr}
- bl sub_81296F4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0812B198
- bl sub_8129720
- cmp r0, 0
- beq _0812B1A2
- ldr r3, _0812B194 @ =gUnknown_203B0E8
- ldr r0, [r3]
- ldr r1, [r0, 0x10]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- ldr r0, [r0, 0x10]
- movs r1, 0x3
- bl StartSpriteAnim
- b _0812B1D6
- .align 2, 0
-_0812B194: .4byte gUnknown_203B0E8
-_0812B198:
- bl sub_81297E8
- adds r4, r0, 0
- cmp r4, 0x3
- bne _0812B1B8
-_0812B1A2:
- ldr r0, _0812B1B4 @ =gUnknown_203B0E8
- ldr r0, [r0]
- ldr r1, [r0, 0x10]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- b _0812B1D6
- .align 2, 0
-_0812B1B4: .4byte gUnknown_203B0E8
-_0812B1B8:
- ldr r3, _0812B1DC @ =gUnknown_203B0E8
- ldr r0, [r3]
- ldr r1, [r0, 0x10]
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r0, [r3]
- ldr r0, [r0, 0x10]
- lsls r1, r4, 24
- lsrs r1, 24
- bl StartSpriteAnim
-_0812B1D6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B1DC: .4byte gUnknown_203B0E8
- thumb_func_end sub_812B160
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/data_8479668.s b/data/data_8479668.s
index 8527b4f09..393a5cc44 100644
--- a/data/data_8479668.s
+++ b/data/data_8479668.s
@@ -75,64 +75,64 @@ gUnknown_847AA8F::
gUnknown_847AAA8::
.string "{CLEAR 11}…{CLEAR 16}“{CLEAR 16}”{CLEAR 18}‘{CLEAR 18}'{CLEAR 18} $"
-gUnknown_847AAC1::
+gText_UnionRoomChatKeyboard_ABCDE::
.string "ABCDE$"
-gUnknown_847AAC7::
+gText_UnionRoomChatKeyboard_FGHIJ::
.string "FGHIJ$"
-gUnknown_847AACD::
+gText_UnionRoomChatKeyboard_KLMNO::
.string "KLMNO$"
-gUnknown_847AAD3::
+gText_UnionRoomChatKeyboard_PQRST::
.string "PQRST$"
-gUnknown_847AAD9::
+gText_UnionRoomChatKeyboard_UVWXY::
.string "UVWXY$"
-gUnknown_847AADF::
+gText_UnionRoomChatKeyboard_Z::
.string "Z $"
-gUnknown_847AAE5::
+gText_UnionRoomChatKeyboard_01234Upper::
.string "01234$"
-gUnknown_847AAEB::
+gText_UnionRoomChatKeyboard_56789Upper::
.string "56789$"
-gUnknown_847AAF1::
+gText_UnionRoomChatKeyboard_PunctuationUpper::
.string ".,!? $"
-gUnknown_847AAF7::
+gText_UnionRoomChatKeyboard_SymbolsUpper::
.string "-/&… $"
-gUnknown_847AAFD::
+gText_UnionRoomChatKeyboard_abcde::
.string "abcde$"
-gUnknown_847AB03::
+gText_UnionRoomChatKeyboard_fghij::
.string "fghij$"
-gUnknown_847AB09::
+gText_UnionRoomChatKeyboard_klmno::
.string "klmno$"
-gUnknown_847AB0F::
+gText_UnionRoomChatKeyboard_pqrst::
.string "pqrst$"
-gUnknown_847AB15::
+gText_UnionRoomChatKeyboard_uvwxy::
.string "uvwxy$"
-gUnknown_847AB1B::
+gText_UnionRoomChatKeyboard_z::
.string "z $"
-gUnknown_847AB21::
+gText_UnionRoomChatKeyboard_01234Lower::
.string "01234$"
-gUnknown_847AB27::
+gText_UnionRoomChatKeyboard_56789Lower::
.string "56789$"
-gUnknown_847AB2D::
+gText_UnionRoomChatKeyboard_PunctuationLower::
.string ".,!? $"
-gUnknown_847AB33::
+gText_UnionRoomChatKeyboard_SymbolsLower::
.string "-/&… $"
.string "$"
@@ -144,34 +144,34 @@ gUnknown_847AB33::
.string "$"
.string "$"
-gUnknown_847AB41::
+gText_UnionRoomChatKeyboard_Emoji1::
.string "{EXTRA 245}{EXTRA 246}{EXTRA 247}{EXTRA 248}{EXTRA 254}$"
-gUnknown_847AB4C::
+gText_UnionRoomChatKeyboard_Emoji2::
.string "{EXTRA 249}{EXTRA 250}{EXTRA 252}{EXTRA 251}{EXTRA 253}$"
-gUnknown_847AB57::
+gText_UnionRoomChatKeyboard_Emoji3::
.string "{EXTRA 236}{EXTRA 237}{EXTRA 238}{EXTRA 235}{EXTRA 234}$"
-gUnknown_847AB62::
+gText_UnionRoomChatKeyboard_Emoji4::
.string "♂♀{EXTRA 212}{EXTRA 213}{EXTRA 211}$"
-gUnknown_847AB6B::
+gText_UnionRoomChatKeyboard_Emoji5::
.string "{EXTRA 216}{EXTRA 217}{EXTRA 242}{EXTRA 243}{EXTRA 244}$"
-gUnknown_847AB76::
+gText_UnionRoomChatKeyboard_Emoji6::
.string "{EXTRA 218}{EXTRA 241}{EXTRA 224}{EXTRA 226}{EXTRA 227}$"
-gUnknown_847AB81::
+gText_UnionRoomChatKeyboard_Emoji7::
.string "{EXTRA 240}{EXTRA 239}{EXTRA 225}{EXTRA 214}{EXTRA 215}$"
-gUnknown_847AB8C::
+gText_UnionRoomChatKeyboard_Emoji8::
.string "{EXTRA 228}{EXTRA 229}{EXTRA 230}{EXTRA 231}{EXTRA 232}$"
-gUnknown_847AB97::
+gText_UnionRoomChatKeyboard_Emoji9::
.string "{EXTRA 233}{EXTRA 220}{EXTRA 221}{EXTRA 222}{EXTRA 209}$"
-gUnknown_847ABA2::
+gText_UnionRoomChatKeyboard_Emoji10::
.string "{EXTRA 210}{EXTRA 208}ょ: $"
// trainer_tower (again?)
diff --git a/data/graphics.s b/data/graphics.s
index 809385e49..247a5d230 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -16374,16 +16374,16 @@ 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
+gUnionRoomChatIcons:: @ 8EA1A50
.incbin "graphics/interface/union_room_chat_icons.4bpp.lz"
.align 2
@@ -16508,13 +16508,13 @@ gTilesetPalettes_8EA9D88:: @ 8EA9D88
gTilesetTiles_8EA9F88:: @ 8EA9F88
.incbin "data/tilesets/secondary/82D4E6C/tiles.4bpp.lz"
-gUnknown_8EAA9F0:: @ 8EAA9F0
+gUnionRoomChatPanelBgPal_7:: @ 8EAA9F0
.incbin "graphics/interface/union_room_chat_panel.gbapal"
-gUnknown_8EAAA10:: @ 8EAAA10
+gUnionRoomChatPanelBgTiles:: @ 8EAAA10
.incbin "graphics/interface/union_room_chat_panel.4bpp.lz"
-gUnknown_8EAAA6C:: @ 8EAAA6C
+gUnionRoomChatPanelBgMap:: @ 8EAAA6C
.incbin "graphics/interface/union_room_chat_panel.bin.lz"
gCreditsMonBackdropPals:: @ 8EAAB18
diff --git a/data/strings.s b/data/strings.s
index e77730429..5cff90fcd 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -3093,40 +3093,40 @@ 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.$"
-gUnknown_841B3AA:: @ 841B3AA
+gText_F700JoinedChat:: @ 841B3AA
.string "{DYNAMIC 0x00} joined the chat!$"
-gUnknown_841B3BE:: @ 841B3BE
+gText_F700LeftChat:: @ 841B3BE
.string "{DYNAMIC 0x00} left the chat.$"
gUnknown_841B3D0:: @ 0x841B3D0
@@ -3135,60 +3135,60 @@ 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?$"
-gUnknown_841B510:: @ 841B510
+gText_Hello:: @ 841B510
.string "HELLO$"
-gUnknown_841B516:: @ 841B516
+gText_Pokemon2:: @ 841B516
.string "POKéMON$"
-gUnknown_841B51E:: @ 841B51E
+gText_Trade:: @ 841B51E
.string "TRADE$"
-gUnknown_841B524:: @ 841B524
+gText_Battle:: @ 841B524
.string "BATTLE$"
-gUnknown_841B52B:: @ 841B52B
+gText_Lets:: @ 841B52B
.string "LET'S$"
-gUnknown_841B531:: @ 841B531
+gText_Ok:: @ 841B531
.string "OK!$"
-gUnknown_841B535:: @ 841B535
+gText_Sorry:: @ 841B535
.string "SORRY$"
-gUnknown_841B53B:: @ 841B53B
+gText_YaySmileEmoji:: @ 841B53B
.string "YAY{EXTRA 0xF9}$"
-gUnknown_841B541:: @ 841B541
+gText_ThankYou:: @ 841B541
.string "THANK YOU$"
-gUnknown_841B54B:: @ 841B54B
+gText_ByeBye:: @ 841B54B
.string "BYE-BYE!$"
gUnknown_841B554:: @ 841B554
diff --git a/data/union_room_chat.s b/data/union_room_chat.s
deleted file mode 100644
index b61c5f44d..000000000
--- a/data/union_room_chat.s
+++ /dev/null
@@ -1,358 +0,0 @@
-#include "constants/region_map.h"
-#include "constants/flags.h"
-#include "constants/moves.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
- .section .rodata
- .align 2
-
-gUnknown_845A880:: @ 845A880
- .4byte sub_8128640
- .4byte sub_81286C4
- .4byte sub_81287B4
- .4byte sub_81288D4
- .4byte sub_8128DA4
- .4byte sub_8128E78
- .4byte sub_8128AA0
- .4byte sub_8128C04
- .4byte sub_8128CA8
- .4byte sub_8128FB8
-
-gUnknown_845A8A8:: @ 845A8A8
- .byte 0x09, 0x09, 0x09, 0x09
-
-gUnknown_845A8AC:: @ 845A8AC
- .byte 0x00, 0x16, 0x17, 0x68, 0x19, 0x1a, 0x1b, 0x1c
- .byte 0x1d, 0x1e, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24
- .byte 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02
- .byte 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00
- .byte 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12
- .byte 0x13, 0x14, 0x2a, 0x2b, 0x2c, 0x2d, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00
- .byte 0x00, 0x00, 0x6f, 0x5b, 0x5c, 0x5d, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- .byte 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7
- .byte 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf
- .byte 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7
- .byte 0xb8, 0xb9, 0xba, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9
- .byte 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1
- .byte 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9
- .byte 0xea, 0xeb, 0xec, 0xed, 0xee, 0xbb, 0xbc, 0xbd
- .byte 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5
- .byte 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd
- .byte 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xef
- .byte 0xf0, 0xf4, 0xf5, 0xf6, 0xf1, 0xf2, 0xf3, 0x00
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-
-gUnknown_845A9AC:: @ 845A9AC
- .4byte gUnknown_847AAC1
- .4byte gUnknown_847AAC7
- .4byte gUnknown_847AACD
- .4byte gUnknown_847AAD3
- .4byte gUnknown_847AAD9
- .4byte gUnknown_847AADF
- .4byte gUnknown_847AAE5
- .4byte gUnknown_847AAEB
- .4byte gUnknown_847AAF1
- .4byte gUnknown_847AAF7
- .4byte gUnknown_847AAFD
- .4byte gUnknown_847AB03
- .4byte gUnknown_847AB09
- .4byte gUnknown_847AB0F
- .4byte gUnknown_847AB15
- .4byte gUnknown_847AB1B
- .4byte gUnknown_847AB21
- .4byte gUnknown_847AB27
- .4byte gUnknown_847AB2D
- .4byte gUnknown_847AB33
- .4byte gUnknown_847AB41
- .4byte gUnknown_847AB4C
- .4byte gUnknown_847AB57
- .4byte gUnknown_847AB62
- .4byte gUnknown_847AB6B
- .4byte gUnknown_847AB76
- .4byte gUnknown_847AB81
- .4byte gUnknown_847AB8C
- .4byte gUnknown_847AB97
- .4byte gUnknown_847ABA2
-
-gUnknown_845AA24:: @ 845AA24
- .incbin "graphics/union_room_chat/unk_845AA24.gbapal"
-
-gUnknown_845AA44:: @ 845AA44
- .incbin "graphics/union_room_chat/unk_845AA44.gbapal"
-
-gUnknown_845AA64:: @ 845AA64
- .incbin "graphics/union_room_chat/unk_845AA64.gbapal"
-
-gUnknown_845AA84:: @ 845AA84
- .4byte 0x00000070
- @ {
- @ .bg = 0,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 7,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 0,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000011fd
- @ {
- @ .bg = 1,
- @ .charBaseIndex = 3,
- @ .mapBaseIndex = 31,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 1,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x0000217a
- @ {
- @ .bg = 2,
- @ .charBaseIndex = 2,
- @ .mapBaseIndex = 23,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 2,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000070f7
- @ {
- @ .bg = 3,
- @ .charBaseIndex = 1,
- @ .mapBaseIndex = 15,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 3,
- @ .baseTile = 0x0001
- @ }
-
-gUnknown_845AA94:: @ 845AA94
- .byte 3, 8, 1, 21, 19, 15
- .2byte 0x0001
- .byte 1, 9, 18, 15, 2, 12
- .2byte 0x007a
- .byte 1, 0, 2, 6, 15, 7
- .2byte 0x0020
- .byte 0, 1, 2, 7, 9, 14
- .2byte 0x0013
- .byte 255, 0, 0, 0, 0, 0
- .2byte 0x0000
-
-gUnknown_845AABC:: @ 845AABC
- .2byte 0x00
- .align 2
- .4byte sub_8129CA0
- .2byte 0x03
- .align 2
- .4byte sub_8129D40
- .2byte 0x04
- .align 2
- .4byte sub_8129D78
- .2byte 0x05
- .align 2
- .4byte sub_8129DB0
- .2byte 0x01
- .align 2
- .4byte sub_8129E1C
- .2byte 0x06
- .align 2
- .4byte sub_8129E28
- .2byte 0x07
- .align 2
- .4byte sub_8129E74
- .2byte 0x08
- .align 2
- .4byte sub_8129EB8
- .2byte 0x09
- .align 2
- .4byte sub_8129F24
- .2byte 0x0a
- .align 2
- .4byte sub_8129FCC
- .2byte 0x0b
- .align 2
- .4byte sub_812A074
- .2byte 0x0c
- .align 2
- .4byte sub_812A0B0
- .2byte 0x02
- .align 2
- .4byte sub_812A18C
- .2byte 0x0d
- .align 2
- .4byte sub_812A1B8
- .2byte 0x12
- .align 2
- .4byte sub_812A1FC
- .2byte 0x13
- .align 2
- .4byte sub_812A240
- .2byte 0x0e
- .align 2
- .4byte sub_812A294
- .2byte 0x0f
- .align 2
- .4byte sub_812A2E4
- .2byte 0x10
- .align 2
- .4byte sub_812A334
- .2byte 0x11
- .align 2
- .4byte sub_812A378
- .2byte 0x14
- .align 2
- .4byte sub_812A3D0
-
-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"
-
-gUnknown_845AC34::
- .incbin "graphics/union_room_chat/unk_845AC34.4bpp.lz"
-
-gUnknown_845AEB8::
- .incbin "graphics/union_room_chat/unk_845AEB8.4bpp.lz"
-
-gUnknown_845AED8::
- .incbin "graphics/union_room_chat/unk_845AED8.4bpp.lz"
-
-gUnknown_845AF04::
- .incbin "graphics/union_room_chat/unk_845AF04.4bpp.lz"
-
-gUnknown_845AF58:: @ 845AF58
- obj_tiles gUnknown_845AC34, 0x1000, 0
- obj_tiles gUnknown_845AED8, 0x0040, 1
- obj_tiles gUnknown_845AEB8, 0x0040, 2
- obj_tiles gUnknown_845AF04, 0x0080, 3
- obj_tiles gUnknown_8EA1A50, 0x0400, 4
-
-gUnknown_845AF80:: @ 845AF80
- obj_pal gUnknown_845AC14, 0
-
-gOamData_845AF88::
- .4byte 0xc0004000, 0x00000400
-
-gAnimCmd_845AF90::
- obj_image_anim_frame 0x0000, 30
- obj_image_anim_end
-
-gAnimCmd_845AF98::
- obj_image_anim_frame 0x0020, 30
- obj_image_anim_end
-
-gAnimCmd_845AFA0::
- obj_image_anim_frame 0x0040, 30
- obj_image_anim_end
-
-gAnimCmd_845AFA8::
- obj_image_anim_frame 0x0060, 30
- obj_image_anim_end
-
-gSpriteAnimTable_845AFB0::
- .4byte gAnimCmd_845AF90
- .4byte gAnimCmd_845AF98
- .4byte gAnimCmd_845AFA0
- .4byte gAnimCmd_845AFA8
-
-gUnknown_845AFC0:: @ 845AFC0
- spr_template 0, 0, gOamData_845AF88, gSpriteAnimTable_845AFB0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gOamData_845AFD8::
- .4byte 0x00008000, 0x00000800
-
-gUnknown_845AFE0:: @ 845AFE0
- spr_template 2, 0, gOamData_845AFD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_812B09C
-
-gUnknown_845AFF8:: @ 845AFF8
- spr_template 1, 0, gOamData_845AFD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_812B0D4
-
-gOamData_845B010::
- .4byte 0x40000000, 0x00000800
-
-gOamData_845B018::
- .4byte 0x80004000, 0x00000800
-
-gAnimCmd_845B020::
- obj_image_anim_frame 0x0000, 2
- obj_image_anim_end
-
-gAnimCmd_845B028::
- obj_image_anim_frame 0x0008, 2
- obj_image_anim_end
-
-gAnimCmd_845B030::
- obj_image_anim_frame 0x0010, 2
- obj_image_anim_end
-
-gAnimCmd_845B038::
- obj_image_anim_frame 0x0018, 2
- obj_image_anim_end
-
-gSpriteAnimTable_845B040::
- .4byte gAnimCmd_845B020
- .4byte gAnimCmd_845B028
- .4byte gAnimCmd_845B030
- .4byte gAnimCmd_845B038
-
-gUnknown_845B050:: @ 845B050
- spr_template 3, 0, gOamData_845B010, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
-gUnknown_845B068:: @ 845B068
- spr_template 4, 0, gOamData_845B018, gSpriteAnimTable_845B040, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
diff --git a/include/constants/global.h b/include/constants/global.h
index 77ef6f203..7f3c80bb4 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -38,6 +38,10 @@
#define FEMALE 1
#define GENDER_COUNT 2
+#define BARD_SONG_LENGTH 6
+#define NUM_STORYTELLER_TALES 4
+#define NUM_TRADER_ITEMS 4
+
#define OPTIONS_BUTTON_MODE_HELP 0
#define OPTIONS_BUTTON_MODE_LR 1
#define OPTIONS_BUTTON_MODE_L_EQUALS_A 2
@@ -62,6 +66,7 @@
#define MAX_MON_MOVES 4
+#define TRAINER_ID_LENGTH 4
#define PARTY_SIZE 6
#define MULTI_PARTY_SIZE (PARTY_SIZE / 2)
diff --git a/include/data_8479668.h b/include/data_8479668.h
new file mode 100644
index 000000000..1a1f44267
--- /dev/null
+++ b/include/data_8479668.h
@@ -0,0 +1,35 @@
+#ifndef GUARD_DATA_8479668_H
+#define GUARD_DATA_8479668_H
+
+extern const u8 gText_UnionRoomChatKeyboard_ABCDE[];
+extern const u8 gText_UnionRoomChatKeyboard_FGHIJ[];
+extern const u8 gText_UnionRoomChatKeyboard_KLMNO[];
+extern const u8 gText_UnionRoomChatKeyboard_PQRST[];
+extern const u8 gText_UnionRoomChatKeyboard_UVWXY[];
+extern const u8 gText_UnionRoomChatKeyboard_Z[];
+extern const u8 gText_UnionRoomChatKeyboard_01234Upper[];
+extern const u8 gText_UnionRoomChatKeyboard_56789Upper[];
+extern const u8 gText_UnionRoomChatKeyboard_PunctuationUpper[];
+extern const u8 gText_UnionRoomChatKeyboard_SymbolsUpper[];
+extern const u8 gText_UnionRoomChatKeyboard_abcde[];
+extern const u8 gText_UnionRoomChatKeyboard_fghij[];
+extern const u8 gText_UnionRoomChatKeyboard_klmno[];
+extern const u8 gText_UnionRoomChatKeyboard_pqrst[];
+extern const u8 gText_UnionRoomChatKeyboard_uvwxy[];
+extern const u8 gText_UnionRoomChatKeyboard_z[];
+extern const u8 gText_UnionRoomChatKeyboard_01234Lower[];
+extern const u8 gText_UnionRoomChatKeyboard_56789Lower[];
+extern const u8 gText_UnionRoomChatKeyboard_PunctuationLower[];
+extern const u8 gText_UnionRoomChatKeyboard_SymbolsLower[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji1[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji2[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji3[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji4[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji5[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji6[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji7[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji8[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji9[];
+extern const u8 gText_UnionRoomChatKeyboard_Emoji10[];
+
+#endif //GUARD_DATA_8479668_H
diff --git a/include/global.h b/include/global.h
index 180a1e0a3..2f87a0c29 100644
--- a/include/global.h
+++ b/include/global.h
@@ -182,13 +182,13 @@ struct BerryCrush
u32 unk;
};
-#define PLAYER_NAME_LENGTH 8
+#define PLAYER_NAME_LENGTH 7
#define LINK_B_RECORDS_COUNT 5
struct LinkBattleRecord
{
- u8 name[PLAYER_NAME_LENGTH];
+ u8 name[PLAYER_NAME_LENGTH + 1];
u16 trainerId;
u16 wins;
u16 losses;
@@ -261,7 +261,7 @@ struct BattleTowerData // Leftover from R/S
struct SaveBlock2
{
- /*0x000*/ u8 playerName[PLAYER_NAME_LENGTH];
+ /*0x000*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x008*/ u8 playerGender; // MALE, FEMALE
/*0x009*/ u8 specialSaveWarpFlags;
/*0x00A*/ u8 playerTrainerId[4];
@@ -312,7 +312,7 @@ struct SecretBaseRecord
/*0x1A9D*/ u8 gender:1;
/*0x1A9D*/ u8 sbr_field_1_5:1;
/*0x1A9D*/ u8 sbr_field_1_6:2;
- /*0x1A9E*/ u8 trainerName[7]; // TODO: Change PLAYER_NAME_LENGTH to 7
+ /*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH];
/*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class
/*0x1AA9*/ u8 language;
/*0x1AAA*/ u16 sbr_field_e;
@@ -398,41 +398,68 @@ struct MailStruct
/*0x20*/ u16 itemId;
};
-struct UnkMauvilleOldManStruct
+struct MauvilleManCommon
{
- u8 unk_2D94;
- u8 unk_2D95;
- /*0x2D96*/ u16 mauvilleOldMan_ecArray[6];
- /*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6];
- /*0x2DAE*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
- /*0x2DB6*/ u8 filler_2DB6[0x3];
- /*0x2DB9*/ u8 playerTrainerId[4];
- u8 unk_2DBD;
+ u8 id;
+};
+
+struct MauvilleManBard
+{
+ /*0x00*/ u8 id;
+ /*0x02*/ u16 songLyrics[BARD_SONG_LENGTH];
+ /*0x0E*/ u16 temporaryLyrics[BARD_SONG_LENGTH];
+ /*0x1A*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
+ /*0x22*/ u8 filler_2DB6[0x3];
+ /*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH];
+ /*0x29*/ bool8 hasChangedSong;
+ /*0x2A*/ u8 language;
}; /*size = 0x2C*/
-struct UnkMauvilleOldManStruct2
+struct MauvilleManStoryteller
+{
+ u8 id;
+ bool8 alreadyRecorded;
+ u8 filler2[2];
+ u8 gameStatIDs[NUM_STORYTELLER_TALES];
+ u8 trainerNames[NUM_STORYTELLER_TALES][PLAYER_NAME_LENGTH];
+ u8 statValues[NUM_STORYTELLER_TALES][4];
+ u8 language[NUM_STORYTELLER_TALES];
+};
+
+struct MauvilleManGiddy
{
- u8 filler0;
- u8 unk1;
- u8 unk2;
- u16 mauvilleOldMan_ecArray[10];
- u8 mauvilleOldMan_ecArray2[12];
- u8 fillerF[0x2];
+ /*0x00*/ u8 id;
+ /*0x01*/ u8 taleCounter;
+ /*0x02*/ u8 questionNum;
+ /*0x04*/ u16 randomWords[10];
+ /*0x18*/ u8 questionList[8];
+ /*0x20*/ u8 language;
}; /*size = 0x2C*/
+struct MauvilleManHipster
+{
+ u8 id;
+ bool8 alreadySpoken;
+ u8 language;
+};
+
struct MauvilleOldManTrader
{
- u8 unk0;
- u8 unk1[4];
- u8 unk5[4][11];
- u8 unk31;
+ u8 id;
+ u8 decorIds[NUM_TRADER_ITEMS];
+ u8 playerNames[NUM_TRADER_ITEMS][11];
+ u8 alreadyTraded;
+ u8 language[NUM_TRADER_ITEMS];
};
typedef union OldMan
{
- struct UnkMauvilleOldManStruct oldMan1;
- struct UnkMauvilleOldManStruct2 oldMan2;
+ struct MauvilleManCommon common;
+ struct MauvilleManBard bard;
+ struct MauvilleManGiddy giddy;
+ struct MauvilleManHipster hipster;
struct MauvilleOldManTrader trader;
+ struct MauvilleManStoryteller storyteller;
u8 filler[0x40];
} OldMan;
@@ -715,9 +742,11 @@ struct TrainerRematchState
struct TrainerNameRecord
{
u32 trainerId;
- u8 trainerName[PLAYER_NAME_LENGTH];
+ u8 trainerName[PLAYER_NAME_LENGTH + 1];
};
+#define UNION_ROOM_KB_ROW_COUNT 10
+
struct SaveBlock1
{
/*0x0000*/ struct Coords16 pos;
@@ -770,9 +799,10 @@ struct SaveBlock1
/*0x361C*/ struct RamScript ramScript;
/*0x3A08*/ u8 filler3A08[16];
/*0x3A18*/ u8 seen2[DEX_FLAGS_NO];
- /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH];
+ /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH + 1];
/*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS];
- /*0x3A94*/ u8 filler3A94[0x114];
+ /*0x3A94*/ u8 filler3A94[0x40];
+ /*0x3AD4*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
/*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20];
/*0x3C98*/ struct DaycareMon route5DayCareMon;
/*0x3D24*/ u8 filler3D24[0x10];
diff --git a/include/graphics.h b/include/graphics.h
index e87acb556..467a1d461 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4864,4 +4864,15 @@ extern const u32 gUnknown_8E83444[];
extern const u32 gBagBgPalette[];
extern const u32 gBagBgPalette_FemaleOverride[];
+// union_room_chat_display
+extern const u16 gUnionRoomChatPanelBgPal_7[];
+extern const u32 gUnionRoomChatPanelBgTiles[];
+extern const u32 gUnionRoomChatPanelBgMap[];
+extern const u16 gLinkMiscMenu_Pal[];
+extern const u32 gLinkMiscMenu_Gfx[];
+extern const u32 gLinkMiscMenu_Tilemap[];
+
+// union_room_chat_objects
+extern const u32 gUnionRoomChatIcons[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/help_system.h b/include/help_system.h
index 273b5e119..59adec912 100644
--- a/include/help_system.h
+++ b/include/help_system.h
@@ -92,5 +92,6 @@ bool8 MoveCursor(u8 by, u8 dirn);
void HelpSystem_BackupSomeVariable(void);
void HelpSystem_RestoreSomeVariable(void);
void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height);
+void sub_812B4AC(void);
#endif //GUARD_HELP_SYSTEM_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 790429870..81dd7fdf0 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -216,7 +216,7 @@ struct UnkRfuStruct_2
/* 0x99d */ u8 unk_ce5;
/* 0x99e */ u8 unk_ce6;
/* 0x99f */ u8 unk_ce7;
- /* 0x9a0 */ u8 unk_ce8;
+ /* 0x9a0 */ bool8 unk_ce8;
/* 0x9a1 */ u8 unk_ce9;
/* 0x9a2 */ u8 unk_cea[RFU_CHILD_MAX];
/* 0x9a6 */ u8 unk_cee[RFU_CHILD_MAX];
@@ -325,6 +325,10 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2);
bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name);
bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx);
bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx);
+bool32 GetRfuUnkCE8(void);
+void sub_80FA4A8(void);
+void sub_80FB9D0(void);
+void sub_80FB030(u32 a0);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
diff --git a/include/main.h b/include/main.h
index c962cf7bd..f89ffbd63 100644
--- a/include/main.h
+++ b/include/main.h
@@ -73,5 +73,6 @@ extern const char RomHeaderGameCode[4];
extern const char RomHeaderSoftwareVersion;
extern u8 gLinkTransferringData;
+extern u16 gKeyRepeatStartDelay;
#endif // GUARD_MAIN_H
diff --git a/include/strings.h b/include/strings.h
index a57493a9b..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[];
@@ -1061,4 +1064,36 @@ extern const u8 gText_CommStandbyAwaitingOtherPlayer[];
extern const u8 gText_RefusedBattle[];
extern const u8 gText_BattleWasRefused[];
+// union_room_chat
+extern const u8 gText_F700JoinedChat[];
+extern const u8 gText_F700LeftChat[];
+extern const u8 gText_Hello[];
+extern const u8 gText_Pokemon2[];
+extern const u8 gText_Trade[];
+extern const u8 gText_Battle[];
+extern const u8 gText_Lets[];
+extern const u8 gText_Ok[];
+extern const u8 gText_Sorry[];
+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.h b/include/text.h
index cd059e0e5..ff8b033e9 100644
--- a/include/text.h
+++ b/include/text.h
@@ -5,10 +5,24 @@
#define CHAR_SPACE 0x00
#define CHAR_0 0xA1
+#define CHAR_1 0xA2
+#define CHAR_2 0xA3
+#define CHAR_3 0xA4
+#define CHAR_4 0xA5
+#define CHAR_5 0xA6
+#define CHAR_6 0xA7
+#define CHAR_7 0xA8
+#define CHAR_8 0xA9
+#define CHAR_9 0xAA
+#define CHAR_EXCL_MARK 0xAB
#define CHAR_QUESTION_MARK 0xAC
#define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE
#define CHAR_ELLIPSIS 0xB0
+#define CHAR_DBL_QUOT_LEFT 0xB1
+#define CHAR_DBL_QUOT_RIGHT 0xB2
+#define CHAR_SGL_QUOT_LEFT 0xB3
+#define CHAR_SGL_QUOT_RIGHT 0xB4
#define CHAR_MALE 0xB5
#define CHAR_FEMALE 0xB6
#define CHAR_CURRENCY 0xB7
diff --git a/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/trainer_card.h b/include/trainer_card.h
index 06844dc2e..ed3e803d5 100644
--- a/include/trainer_card.h
+++ b/include/trainer_card.h
@@ -24,7 +24,7 @@ struct TrainerCard
/*0x20*/ u16 pokemonTrades;
/*0x24*/ u32 money;
/*0x28*/ u16 var_28[4];
- /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH];
+ /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x38*/ u8 version;
/*0x3A*/ u16 var_3A;
/*0x3C*/ u32 berryCrushPoints;
diff --git a/include/union_room.h b/include/union_room.h
index 3cb8eb84a..7e48b3e6e 100644
--- a/include/union_room.h
+++ b/include/union_room.h
@@ -7,7 +7,7 @@
struct UnkStruct_Shared
{
struct GFtgtGname gname;
- u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH];
+ u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
};
struct UnkStruct_x1C
diff --git a/include/union_room_chat.h b/include/union_room_chat.h
index 66daac376..3ce78b210 100644
--- a/include/union_room_chat.h
+++ b/include/union_room_chat.h
@@ -1,8 +1,30 @@
#ifndef GUARD_UNION_ROOM_CHAT_H
#define GUARD_UNION_ROOM_CHAT_H
-void sub_801DD98(void);
-void sub_8128420(void);
-void copy_strings_to_sav1(void);
+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 EnterUnionRoomChat(void);
+u8 *UnionRoomChat_GetWorkRegisteredText(int arg0);
+void UnionRoomChat_GetCursorColAndRow(u8 *colp, u8 *rowp);
+u8 *UnionRoomChat_GetMessageEntryBuffer(void);
+int UnionRoomChat_LenMessageEntryBuffer(void);
+void UnionRoomChat_GetBufferSelectionRegion(u32 *startp, u32 *diffp);
+u8 *UnionRoomChat_GetEndOfMessageEntryBuffer(void);
+u16 UnionRoomChat_GetNumCharsInMessageEntryBuffer(void);
+u8 *UnionRoomChat_GetLastReceivedMessage(void);
+u16 UnionRoomChat_GetReceivedPlayerIndex(void);
+int UnionRoomChat_GetMessageEntryCursorPosition(void);
+int UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(void);
+u8 *UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(void);
+void UnionRoomChat_InitializeRegisteredTexts(void);
+u8 GetCurrentKeyboardPage(void);
#endif // GUARD_UNION_ROOM_CHAT_H
diff --git a/include/union_room_chat_display.h b/include/union_room_chat_display.h
new file mode 100644
index 000000000..f880eeecb
--- /dev/null
+++ b/include/union_room_chat_display.h
@@ -0,0 +1,34 @@
+#ifndef GUARD_UNION_ROOM_CHAT_DISPLAY_H
+#define GUARD_UNION_ROOM_CHAT_DISPLAY_H
+
+#define CHATDISPLAYROUTINE_LOADGFX 0
+#define CHATDISPLAYROUTINE_MOVEKBCURSOR 1
+#define CHATDISPLAYROUTINE_CURSORBLINK 2
+#define CHATDISPLAYROUTINE_SHOWKBSWAPMENU 3
+#define CHATDISPLAYROUTINE_HIDEKBSWAPMENU 4
+#define CHATDISPLAYROUTINE_SWITCHPAGES 5
+#define CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG 6
+#define CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO 7
+#define CHATDISPLAYROUTINE_PRINTMSG 8
+#define CHATDISPLAYROUTINE_PRINTREGISTERWHERE 9
+#define CHATDISPLAYROUTINE_CANCELREGISTER 10
+#define CHATDISPLAYROUTINE_RETURNTOKB 11
+#define CHATDISPLAYROUTINE_SCROLLCHAT 12
+#define CHATDISPLAYROUTINE_PRINTINPUTTEXT 13
+#define CHATDISPLAYROUTINE_ASKSAVE 14
+#define CHATDISPLAYROUTINE_ASKOVERWRITESAVE 15
+#define CHATDISPLAYROUTINE_PRINTSAVING 16
+#define CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME 17
+#define CHATDISPLAYROUTINE_PRINTEXITINGCHAT 18
+#define CHATDISPLAYROUTINE_PRINTLEADERLEFT 19
+#define CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG 20
+
+bool8 UnionRoomChat_TryAllocGraphicsWork(void);
+bool32 UnionRoomChat_RunDisplaySubtask0(void);
+void UnionRoomChat_FreeGraphicsWork(void);
+void UnionRoomChat_RunDisplaySubtasks(void);
+void UnionRoomChat_StartDisplaySubtask(u16 a0, u8 a1);
+u8 RunDisplaySubtask(u8 a0);
+s8 UnionRoomChat_ProcessInput(void);
+
+#endif //GUARD_UNION_ROOM_CHAT_DISPLAY_H
diff --git a/include/union_room_chat_objects.h b/include/union_room_chat_objects.h
new file mode 100644
index 000000000..879f9f86b
--- /dev/null
+++ b/include/union_room_chat_objects.h
@@ -0,0 +1,16 @@
+#ifndef GUARD_UNION_ROOM_CHAT_OBJECTS_H
+#define GUARD_UNION_ROOM_CHAT_OBJECTS_H
+
+bool32 UnionRoomChat_TryAllocSpriteWork(void);
+void UnionRoomChat_FreeSpriteWork(void);
+void UnionRoomChat_CreateSelectorCursorObj(void);
+void UnionRoomChat_ToggleSelectorCursorObjVisibility(bool32 invisible);
+void UnionRoomChat_MoveSelectorCursorObj(void);
+void UnionRoomChat_UpdateObjPalCycle(u32 idx);
+void UnionRoomChat_SetSelectorCursorClosedImage(void);
+bool32 UnionRoomChat_AnimateSelectorCursorReopen(void);
+void UnionRoomChat_SpawnTextEntryPointerSprites(void);
+void CreatePageSwitchUISprites(void);
+void UpdateVisibleUnionRoomChatIcon(void);
+
+#endif //GUARD_UNION_ROOM_CHAT_OBJECTS_H
diff --git a/ld_script.txt b/ld_script.txt
index f0792ad9d..48617df29 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -246,7 +246,9 @@ SECTIONS {
src/union_room_battle.o(.text);
asm/pokemon_special_anim.o(.text);
src/party_menu.o(.text);
- asm/union_room_chat.o(.text);
+ src/union_room_chat.o(.text);
+ src/union_room_chat_display.o(.text);
+ src/union_room_chat_objects.o(.text);
src/help_system_812B1E0.o(.text);
src/quest_log_battle.o(.text);
src/fame_checker.o(.text);
@@ -534,7 +536,9 @@ SECTIONS {
src/union_room_message.o(.rodata);
data/pokemon_special_anim.o(.rodata);
src/party_menu.o(.rodata);
- data/union_room_chat.o(.rodata);
+ src/union_room_chat.o(.rodata);
+ src/union_room_chat_display.o(.rodata);
+ src/union_room_chat_objects.o(.rodata);
src/help_system_812B1E0.o(.rodata);
src/fame_checker.o(.rodata);
src/menu2.o(.rodata);
diff --git a/src/daycare.c b/src/daycare.c
index a377e97f5..277a382c7 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);
@@ -638,7 +614,7 @@ static void ClearDaycareMonMail(struct DayCareMail *mail)
{
s32 i;
- for (i = 0; i < PLAYER_NAME_LENGTH/* + 1*/; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
mail->OT_name[i] = 0;
for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
mail->monName[i] = 0;
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 17f604ee8..a27948650 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -30,7 +30,7 @@ static u16 gUnknown_3002008[7];
struct GFtgtGname gHostRFUtgtGnameBuffer;
struct UnkRfuStruct_2 Rfu;
-u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH];
+u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1];
static void sub_80F8AA4(void);
static void sub_80F8AEC(void);
@@ -448,7 +448,7 @@ static void sub_80F8B34(u8 taskId)
gTasks[taskId].data[1] = 8;
Rfu.unk_0c = 1;
CreateTask(sub_80FA834, 5);
- Rfu.unk_ce8 = 1;
+ Rfu.unk_ce8 = TRUE;
DestroyTask(taskId);
break;
}
@@ -1337,7 +1337,7 @@ static void sub_80FA1C4(void)
static void sub_80FA224(void)
{
- if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
+ if (gSendCmd[0] == 0 && !Rfu.unk_ce8)
{
sub_80F9D04(0x5f00);
Rfu.RfuFunc = sub_80FA1C4;
@@ -1620,7 +1620,7 @@ static void sub_80FA834(u8 taskId)
if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
{
- Rfu.unk_ce8 = 0;
+ Rfu.unk_ce8 = FALSE;
DestroyTask(taskId);
}
switch (gTasks[taskId].data[0])
@@ -1681,7 +1681,7 @@ static void sub_80FA834(u8 taskId)
case 6:
DestroyTask(taskId);
gReceivedRemoteLinkPlayers = 1;
- Rfu.unk_ce8 = 0;
+ Rfu.unk_ce8 = FALSE;
sub_80FEA34(1, 0x258);
if (Rfu.unk_ce6)
{
@@ -1740,7 +1740,7 @@ static void sub_80FAA94(u8 taskId)
u8 r4 = Rfu.unk_cde[gUnknown_843EC38[Rfu.unk_ce9]];
if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
{
- Rfu.unk_ce8 = 0;
+ Rfu.unk_ce8 = FALSE;
DestroyTask(taskId);
}
switch (gTasks[taskId].data[0])
@@ -1790,7 +1790,7 @@ static void sub_80FAA94(u8 taskId)
{
CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14));
ResetBlockReceivedFlag(0);
- Rfu.unk_ce8 = 0;
+ Rfu.unk_ce8 = FALSE;
if (Rfu.unk_ce6)
{
for (i = 0; i < RFU_CHILD_MAX; i++)
@@ -1799,7 +1799,7 @@ static void sub_80FAA94(u8 taskId)
{
Rfu.unk_ce5 = 1 << i;
Rfu.unk_ce6 ^= (1 << i);
- Rfu.unk_ce8 = 1;
+ Rfu.unk_ce8 = TRUE;
break;
}
}
@@ -1948,7 +1948,7 @@ void sub_80FB008(u8 a0, u32 a1, u32 a2)
rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer);
}
-void sub_80FB030(u32 a0)
+void sub_80FB030(u32 linkPlayerCount)
{
s32 i;
u32 r5;
@@ -1964,9 +1964,10 @@ void sub_80FB030(u32 a0)
{
if ((r8 >> i) & 1)
{
- r7 |= ((0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3));
+ r7 |= ((
+ 0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3));
r5++;
- if (r5 == a0 - 1)
+ if (r5 == linkPlayerCount - 1)
break;
}
}
@@ -2214,11 +2215,11 @@ static void sub_80FB5EC(u8 a0, u8 unused1)
if (idx != 0)
{
r1 = 1 << sub_80F886C(idx);
- if (Rfu.unk_ce6 == 0 && Rfu.unk_ce8 == 0)
+ if (Rfu.unk_ce6 == 0 && !Rfu.unk_ce8)
{
Rfu.unk_ce5 = r1;
Rfu.unk_ce6 |= (r1 ^ idx);
- Rfu.unk_ce8 = 1;
+ Rfu.unk_ce8 = TRUE;
}
else
{
@@ -2360,7 +2361,7 @@ bool32 sub_80FBA00(void)
return FALSE;
}
-bool32 sub_80FBA1C(void)
+bool32 GetRfuUnkCE8(void)
{
return Rfu.unk_ce8;
}
@@ -2534,7 +2535,7 @@ void sub_80FBD6C(u32 a0)
static void sub_80FBDB8(u8 taskId)
{
- if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
+ if (gSendCmd[0] == 0 && !Rfu.unk_ce8)
{
sub_80F9D04(0xED00);
gSendCmd[1] = gTasks[taskId].data[0];
diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c
index 31ea0830b..69b6603a8 100644
--- a/src/link_rfu_3.c
+++ b/src/link_rfu_3.c
@@ -848,7 +848,7 @@ static void ZeroName(u8 *name)
{
s32 i;
- for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
*name++ = 0;
}
@@ -858,7 +858,7 @@ static bool32 NameIsEmpty(const u8 *name)
{
s32 i;
- for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
if (*name++ != 0)
{
diff --git a/src/mail_data.c b/src/mail_data.c
index d4fa649e1..43ca1d0e6 100644
--- a/src/mail_data.c
+++ b/src/mail_data.c
@@ -20,7 +20,7 @@ void ClearMailStruct(struct MailStruct *mail)
for (i = 0; i < MAIL_WORDS_COUNT; i++)
mail->words[i] = 0xFFFF;
- for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
mail->playerName[i] = EOS;
for (i = 0; i < 4; i++)
mail->trainerId[i] = 0;
@@ -52,7 +52,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
{
for (i = 0; i < MAIL_WORDS_COUNT; i++)
gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF;
- for (i = 0; i < PLAYER_NAME_LENGTH - 1 && gSaveBlock2Ptr->playerName[i] != EOS; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH && gSaveBlock2Ptr->playerName[i] != EOS; i++)
gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i];
for (; i <= 5; i++)
gSaveBlock1Ptr->mail[id].playerName[i] = CHAR_SPACE;
diff --git a/src/new_game.c b/src/new_game.c
index 381ba28c8..05fb9c83e 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -108,7 +108,7 @@ void ResetMenuAndMonGlobals(void)
void NewGameInitData(void)
{
- u8 rivalName[PLAYER_NAME_LENGTH];
+ u8 rivalName[PLAYER_NAME_LENGTH + 1];
StringCopy(rivalName, gSaveBlock1Ptr->rivalName);
gDifferentSaveFile = TRUE;
@@ -143,7 +143,7 @@ void NewGameInitData(void)
sub_809C794();
InitEasyChatPhrases();
ResetTrainerFanClub();
- copy_strings_to_sav1();
+ UnionRoomChat_InitializeRegisteredTexts();
ResetMiniGamesResults();
sub_8143D24();
SetAllRenewableItemFlags();
diff --git a/src/oak_speech.c b/src/oak_speech.c
index 0ad5d6a6f..6887ff85a 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -1902,8 +1902,8 @@ static void GetDefaultName(u8 arg0, u8 namePick)
src = sRivalNameChoices[namePick];
dest = gSaveBlock1Ptr->rivalName;
}
- for (i = 0; i < PLAYER_NAME_LENGTH - 1 && src[i] != EOS; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH && src[i] != EOS; i++)
dest[i] = src[i];
- for (; i < PLAYER_NAME_LENGTH; i++)
+ for (; i < PLAYER_NAME_LENGTH + 1; i++)
dest[i] = EOS;
}
diff --git a/src/pokemon.c b/src/pokemon.c
index d1305861a..09e2ed998 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2991,7 +2991,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data)
{
retVal = 0;
- // FRLG changed this to 7 which used to be PLAYER_NAME_LENGTH
+ // FRLG changed this to 7 which used to be PLAYER_NAME_LENGTH + 1
while (retVal < 7)
{
data[retVal] = boxMon->otName[retVal];
@@ -5769,7 +5769,7 @@ s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor)
bool8 IsTradedMon(struct Pokemon *mon)
{
- u8 otName[7 + 1]; // change PLAYER_NAME_LENGTH to 7
+ u8 otName[PLAYER_NAME_LENGTH];
u32 otId;
GetMonData(mon, MON_DATA_OT_NAME, otName);
otId = GetMonData(mon, MON_DATA_OT_ID, 0);
diff --git a/src/quest_log.c b/src/quest_log.c
index 0cda4eb77..a02aea302 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -2411,8 +2411,8 @@ static void BufferFanClubTrainerName(struct LinkBattleRecords *linkRecords, u8 w
else
{
str = gStringVar1;
- StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH - 1);
- str[PLAYER_NAME_LENGTH - 1] = EOS;
+ StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH);
+ str[PLAYER_NAME_LENGTH] = EOS;
if ( str[0] == EXT_CTRL_CODE_BEGIN
&& str[1] == EXT_CTRL_CODE_JPN)
{
@@ -3401,8 +3401,8 @@ static const u16 *BufferQuestLogText_LinkTraded(const u16 *a0)
{
const u16 *r6 = a0 + 4;
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); // Mon received
@@ -3435,7 +3435,7 @@ static u16 *BufferQuestLogData_LinkBattledSingle(u16 *a0, const u16 *eventData)
a0[0] = QL_EVENT_LINK_BATTLED_SINGLE;
a0[1] = sQuestLogIdx;
*((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
a0 += 6;
return a0;
}
@@ -3444,8 +3444,8 @@ static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *a0)
{
DynamicPlaceholderTextUtil_Reset();
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
@@ -3459,7 +3459,7 @@ static u16 *BufferQuestLogData_LinkBattledDouble(u16 *a0, const u16 *eventData)
a0[0] = QL_EVENT_LINK_BATTLED_DOUBLE;
a0[1] = sQuestLogIdx;
*((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
a0 += 6;
return a0;
}
@@ -3468,8 +3468,8 @@ static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *a0)
{
DynamicPlaceholderTextUtil_Reset();
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]);
@@ -3483,9 +3483,9 @@ static u16 *BufferQuestLogData_LinkBattledMulti(u16 *a0, const u16 *eventData)
a0[0] = QL_EVENT_LINK_BATTLED_MULTI;
a0[1] = sQuestLogIdx;
*((u8 *)a0 + 4) = *((const u8 *)eventData + 0);
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1);
- memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH - 1);
- memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH - 1);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
+ memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH);
+ memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH);
a0 += 13;
return a0;
}
@@ -3494,9 +3494,9 @@ static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *a0)
{
DynamicPlaceholderTextUtil_Reset();
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memset(gStringVar2, EOS, PLAYER_NAME_LENGTH);
- memset(gStringVar3, EOS, PLAYER_NAME_LENGTH);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memset(gStringVar2, EOS, PLAYER_NAME_LENGTH + 1);
+ memset(gStringVar3, EOS, PLAYER_NAME_LENGTH + 1);
StringCopy7(gStringVar1, (const u8 *)a0 + 5);
StringCopy7(gStringVar2, (const u8 *)a0 + 12);
StringCopy7(gStringVar3, (const u8 *)a0 + 19);
@@ -3548,7 +3548,7 @@ static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData
a0[1] = sQuestLogIdx;
a0[2] = eventData[0];
a0[3] = eventData[1];
- memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH - 1);
+ memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH);
r4 += 8;
return (u16 *)r4;
}
@@ -3556,8 +3556,8 @@ static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData
static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *a0)
{
const u8 *r6 = (const u8 *)(a0 + 4);
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
QuestLog_GetSpeciesName(a0[3], gStringVar2, 0);
QuestLog_GetSpeciesName(a0[2], gStringVar3, 0);
@@ -3571,15 +3571,15 @@ static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *a0, const u16 *eventDat
a0[0] = QL_EVENT_LINK_BATTLED_UNION;
a0[1] = sQuestLogIdx;
*(u8 *)&a0[2] = *(const u8 *)&eventData[0];
- memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1);
+ memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH);
a0 += 6;
return a0;
}
static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *a0)
{
- memset(gStringVar1, EOS, PLAYER_NAME_LENGTH);
- memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1);
+ memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH);
BufferLinkPartnersName(gStringVar1);
StringCopy(gStringVar2, sBattleOutcomeTexts[*(const u8 *)&a0[2]]);
StringExpandPlaceholders(gStringVar4, QuestLog_Text_BattledTrainerEndedInOutcome);
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.c b/src/union_room.c
index 4e3428cc6..f942fb7d3 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -1852,7 +1852,7 @@ static void sub_81175BC(u8 taskId)
sub_80F8D14();
SetHostRFUtgtGname(69, 0, 1);
}
- sub_8128420();
+ EnterUnionRoomChat();
break;
case 8:
case 72:
@@ -3385,7 +3385,7 @@ static void sub_81199FC(u8 taskId)
case 2:
if (sUnionRoomPlayerName[0] == EOS)
{
- for (i = 0; i < PLAYER_NAME_LENGTH; i++)
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
if (structPtr->field_0->arr[i].field_1A_0 == 1)
{
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
new file mode 100644
index 000000000..d672c6b68
--- /dev/null
+++ b/src/union_room_chat.c
@@ -0,0 +1,1453 @@
+#include "global.h"
+#include "gflib.h"
+#include "dynamic_placeholder_text_util.h"
+#include "help_system.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "list_menu.h"
+#include "load_save.h"
+#include "menu.h"
+#include "overworld.h"
+#include "quest_log.h"
+#include "save.h"
+#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"
+
+#define MESSAGE_BUFFER_NCHAR 15
+
+#define CHAT_MESSAGE_0 0
+#define CHAT_MESSAGE_CHAT 1
+#define CHAT_MESSAGE_JOIN 2
+#define CHAT_MESSAGE_LEAVE 3
+#define CHAT_MESSAGE_DROP 4
+#define CHAT_MESSAGE_DISBAND 5
+
+#define CHATENTRYROUTINE_JOIN 0
+#define CHATNETRYROUTINE_HANDLE_INPUT 1
+#define CHATENTRYROUTINE_SWITCH 2
+#define CHATENTRYROUTINE_ASKQUITCHATTING 3
+#define CHATENTRYROUTINE_SEND 4
+#define CHATENTRYROUTINE_REGISTER 5
+#define CHATENTRYROUTINE_EXITCHAT 6
+#define CHATENTRYROUTINE_DROP 7
+#define CHATENTRYROUTINE_DISBANDED 8
+#define CHATENTRYROUTINE_SAVEANDEXIT 9
+
+#define CHATEXIT_NONE 0
+#define CHATEXIT_LEADER_LAST 1
+#define CHATEXIT_DROPPED 2
+#define CHATEXIT_DISBANDED 3
+
+struct UnionRoomChat
+{
+ u8 filler0[0x4];
+ u16 routineNo;
+ u16 routineState;
+ u8 filler8[0x2];
+ u16 exitDelayTimer;
+ u8 fillerC[0x1];
+ u8 linkPlayerCount;
+ u8 handleInputTask;
+ u8 receiveMessagesTask;
+ u8 currentPage;
+ u8 currentCol;
+ u8 currentRow;
+ u8 multiplayerId;
+ u8 lastBufferCursorPos;
+ u8 bufferCursorPos;
+ u8 receivedPlayerIndex;
+ u8 exitType;
+ bool8 changedRegisteredTexts;
+ u8 afterSaveTimer;
+ u8 messageEntryBuffer[2 * MESSAGE_BUFFER_NCHAR + 1];
+ u8 receivedMessage[0x40];
+ u8 hostName[0x40];
+ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
+ u8 filler18B[0x5];
+ u8 sendMessageBuffer[0x28];
+};
+
+static EWRAM_DATA struct UnionRoomChat * sWork = NULL;
+
+static void InitChatWork(struct UnionRoomChat * unionRoomChat);
+static void CB2_LoadInterface(void);
+static void VBlankCB_UnionRoomChatMain(void);
+static void CB2_UnionRoomChatMain(void);
+static void Task_HandlePlayerInput(u8 taskId);
+static void ChatEntryRoutine_Join(void);
+static void ChatEntryRoutine_HandleInput(void);
+static void ChatEntryRoutine_Switch(void);
+static void ChatEntryRoutine_AskQuitChatting(void);
+static void ChatEntryRoutine_ExitChat(void);
+static void ChatEntryRoutine_Drop(void);
+static void ChatEntryRoutine_Disbanded(void);
+static void ChatEntryRoutine_SendMessage(void);
+static void ChatEntryRoutine_Register(void);
+static void ChatEntryRoutine_SaveAndExit(void);
+static void GoToRoutine(u16 routineNo);
+static bool32 TypeChatMessage_HandleDPad(void);
+static void AppendCharacterToChatMessageBuffer(void);
+static void DeleteLastCharacterOfChatMessageBuffer(void);
+static void ToggleCaseOfLastCharacterInChatMessageBuffer(void);
+static bool32 ChatMsgHasAtLeastOneCharcter(void);
+static void RegisterTextAtRow(void);
+static void ResetMessageEntryBuffer(void);
+static void SaveRegisteredTextsToSB1(void);
+static u8 *GetEndOfUnk1A(void);
+static u8 *GetPtrToLastCharOfUnk1A(void);
+static void PrepareSendBuffer_Null(u8 *ptr);
+static void PrepareSendBuffer_Join(u8 *ptr);
+static void PrepareSendBuffer_Chat(u8 *ptr);
+static void PrepareSendBuffer_Leave(u8 *ptr);
+static void PrepareSendBuffer_Drop(u8 *ptr);
+static void PrepareSendBuffer_Disband(u8 *ptr);
+static void Task_ReceiveChatMessage(u8 taskId);
+
+static void (*const sChatEntryRoutines[])(void) = {
+ [CHATENTRYROUTINE_JOIN] = ChatEntryRoutine_Join,
+ [CHATNETRYROUTINE_HANDLE_INPUT] = ChatEntryRoutine_HandleInput,
+ [CHATENTRYROUTINE_SWITCH] = ChatEntryRoutine_Switch,
+ [CHATENTRYROUTINE_ASKQUITCHATTING] = ChatEntryRoutine_AskQuitChatting,
+ [CHATENTRYROUTINE_SEND] = ChatEntryRoutine_SendMessage,
+ [CHATENTRYROUTINE_REGISTER] = ChatEntryRoutine_Register,
+ [CHATENTRYROUTINE_EXITCHAT] = ChatEntryRoutine_ExitChat,
+ [CHATENTRYROUTINE_DROP] = ChatEntryRoutine_Drop,
+ [CHATENTRYROUTINE_DISBANDED] = ChatEntryRoutine_Disbanded,
+ [CHATENTRYROUTINE_SAVEANDEXIT] = ChatEntryRoutine_SaveAndExit
+};
+
+static const u8 sKeyboardPageMaxRow[] =
+{
+ [UNION_ROOM_KB_PAGE_UPPER] = 9,
+ [UNION_ROOM_KB_PAGE_LOWER] = 9,
+ [UNION_ROOM_KB_PAGE_EMOJI] = 9,
+ 9
+};
+
+static const u8 sCaseToggleTable[] = {
+ 0x00, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C,
+ 0x1D, 0x1E, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24,
+ 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02,
+ 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00,
+ 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12,
+ 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00,
+ 0x00, 0x00, 0x6F, 0x5B, 0x5C, 0x5D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
+ 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
+ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
+ 0xB8, 0xB9, 0xBA, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9,
+ 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1,
+ 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
+ 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xBB, 0xBC, 0xBD,
+ 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5,
+ 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
+ 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xEF,
+ 0xF0, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = {
+ [UNION_ROOM_KB_PAGE_UPPER] = {
+ gText_UnionRoomChatKeyboard_ABCDE,
+ gText_UnionRoomChatKeyboard_FGHIJ,
+ gText_UnionRoomChatKeyboard_KLMNO,
+ gText_UnionRoomChatKeyboard_PQRST,
+ gText_UnionRoomChatKeyboard_UVWXY,
+ gText_UnionRoomChatKeyboard_Z,
+ gText_UnionRoomChatKeyboard_01234Upper,
+ gText_UnionRoomChatKeyboard_56789Upper,
+ gText_UnionRoomChatKeyboard_PunctuationUpper,
+ gText_UnionRoomChatKeyboard_SymbolsUpper
+ },
+ [UNION_ROOM_KB_PAGE_LOWER] = {
+ gText_UnionRoomChatKeyboard_abcde,
+ gText_UnionRoomChatKeyboard_fghij,
+ gText_UnionRoomChatKeyboard_klmno,
+ gText_UnionRoomChatKeyboard_pqrst,
+ gText_UnionRoomChatKeyboard_uvwxy,
+ gText_UnionRoomChatKeyboard_z,
+ gText_UnionRoomChatKeyboard_01234Lower,
+ gText_UnionRoomChatKeyboard_56789Lower,
+ gText_UnionRoomChatKeyboard_PunctuationLower,
+ gText_UnionRoomChatKeyboard_SymbolsLower
+ },
+ [UNION_ROOM_KB_PAGE_EMOJI] = {
+ gText_UnionRoomChatKeyboard_Emoji1,
+ gText_UnionRoomChatKeyboard_Emoji2,
+ gText_UnionRoomChatKeyboard_Emoji3,
+ gText_UnionRoomChatKeyboard_Emoji4,
+ gText_UnionRoomChatKeyboard_Emoji5,
+ gText_UnionRoomChatKeyboard_Emoji6,
+ gText_UnionRoomChatKeyboard_Emoji7,
+ gText_UnionRoomChatKeyboard_Emoji8,
+ gText_UnionRoomChatKeyboard_Emoji9,
+ gText_UnionRoomChatKeyboard_Emoji10
+ }
+};
+
+void EnterUnionRoomChat(void)
+{
+ sWork = Alloc(sizeof(struct UnionRoomChat));
+ InitChatWork(sWork);
+ gKeyRepeatStartDelay = 20;
+ sub_812B4AC();
+ SetVBlankCallback(NULL);
+ SetMainCallback2(CB2_LoadInterface);
+}
+
+static void InitChatWork(struct UnionRoomChat * unionRoomChat)
+{
+ int i;
+
+ unionRoomChat->routineNo = CHATENTRYROUTINE_JOIN;
+ unionRoomChat->routineState = 0;
+ unionRoomChat->currentPage = UNION_ROOM_KB_PAGE_UPPER;
+ unionRoomChat->currentCol = 0;
+ unionRoomChat->currentRow = 0;
+ unionRoomChat->lastBufferCursorPos = 0;
+ unionRoomChat->bufferCursorPos = 0;
+ unionRoomChat->receivedPlayerIndex = 0;
+ unionRoomChat->messageEntryBuffer[0] = EOS;
+ unionRoomChat->linkPlayerCount = GetLinkPlayerCount();
+ unionRoomChat->multiplayerId = GetMultiplayerId();
+ unionRoomChat->exitType = 0;
+ unionRoomChat->changedRegisteredTexts = FALSE;
+ PrepareSendBuffer_Null(unionRoomChat->sendMessageBuffer);
+ for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
+ StringCopy(unionRoomChat->registeredTexts[i], gSaveBlock1Ptr->registeredTexts[i]);
+}
+
+static void FreeChatWork(void)
+{
+ DestroyTask(sWork->handleInputTask);
+ DestroyTask(sWork->receiveMessagesTask);
+ Free(sWork);
+}
+
+static void CB2_LoadInterface(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ UnionRoomChat_TryAllocGraphicsWork();
+ gMain.state++;
+ break;
+ case 1:
+ UnionRoomChat_RunDisplaySubtasks();
+ if (!UnionRoomChat_RunDisplaySubtask0())
+ {
+ BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ SetVBlankCallback(VBlankCB_UnionRoomChatMain);
+ gMain.state++;
+ }
+ break;
+ case 2:
+ UpdatePaletteFade();
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CB2_UnionRoomChatMain);
+ SetQuestLogEvent(QL_EVENT_USED_UNION_ROOM_CHAT, NULL);
+ sWork->handleInputTask = CreateTask(Task_HandlePlayerInput, 8);
+ sWork->receiveMessagesTask = CreateTask(Task_ReceiveChatMessage, 7);
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(232, 150);
+ }
+ break;
+ }
+}
+
+static void VBlankCB_UnionRoomChatMain(void)
+{
+ TransferPlttBuffer();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+static void CB2_UnionRoomChatMain(void)
+{
+ RunTasks();
+ UnionRoomChat_RunDisplaySubtasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void Task_HandlePlayerInput(u8 taskId)
+{
+ switch (sWork->exitType)
+ {
+ case CHATEXIT_LEADER_LAST:
+ GoToRoutine(CHATENTRYROUTINE_EXITCHAT);
+ sWork->exitType = CHATEXIT_NONE;
+ break;
+ case CHATEXIT_DROPPED:
+ GoToRoutine(CHATENTRYROUTINE_DROP);
+ sWork->exitType = CHATEXIT_NONE;
+ break;
+ case CHATEXIT_DISBANDED:
+ GoToRoutine(CHATENTRYROUTINE_DISBANDED);
+ sWork->exitType = CHATEXIT_NONE;
+ break;
+ }
+
+ sChatEntryRoutines[sWork->routineNo]();
+}
+
+static void ChatEntryRoutine_Join(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ PrepareSendBuffer_Join(sWork->sendMessageBuffer);
+ sWork->routineState++;
+ // fall through
+ case 1:
+ if (IsLinkTaskFinished() && !GetRfuUnkCE8())
+ {
+ if (SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer)))
+ sWork->routineState++;
+ }
+ break;
+ case 2:
+ if (IsLinkTaskFinished())
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ }
+}
+
+static void ChatEntryRoutine_HandleInput(void)
+{
+ bool8 var0, var1;
+
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (JOY_NEW(START_BUTTON))
+ {
+ if (sWork->bufferCursorPos)
+ GoToRoutine(CHATENTRYROUTINE_SEND);
+ }
+ else if (JOY_NEW(SELECT_BUTTON))
+ {
+ GoToRoutine(CHATENTRYROUTINE_SWITCH);
+ }
+ else if (JOY_REPT(B_BUTTON))
+ {
+ if (sWork->bufferCursorPos)
+ {
+ DeleteLastCharacterOfChatMessageBuffer();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0);
+ sWork->routineState = 1;
+ }
+ else
+ {
+ GoToRoutine(CHATENTRYROUTINE_ASKQUITCHATTING);
+ }
+ }
+ else if (JOY_NEW(A_BUTTON))
+ {
+ AppendCharacterToChatMessageBuffer();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0);
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CURSORBLINK, 1);
+ sWork->routineState = 1;
+ }
+ else if (JOY_NEW(R_BUTTON))
+ {
+ if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ ToggleCaseOfLastCharacterInChatMessageBuffer();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0);
+ sWork->routineState = 1;
+ }
+ else
+ {
+ GoToRoutine(CHATENTRYROUTINE_REGISTER);
+ }
+ }
+ else if (TypeChatMessage_HandleDPad())
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0);
+ sWork->routineState = 1;
+ }
+ break;
+ case 1:
+ var0 = RunDisplaySubtask(0);
+ var1 = RunDisplaySubtask(1);
+ if (!var0 && !var1)
+ sWork->routineState = 0;
+ break;
+ }
+}
+
+static void ChatEntryRoutine_Switch(void)
+{
+ s16 input;
+ bool32 shouldSwitchPages;
+
+ switch (sWork->routineState)
+ {
+ case 0:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWKBSWAPMENU, 0);
+ sWork->routineState++;
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState++;
+ break;
+ case 2:
+ input = Menu_ProcessInput();
+ switch (input)
+ {
+ default:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0);
+ shouldSwitchPages = TRUE;
+ if (sWork->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT)
+ shouldSwitchPages = FALSE;
+ break;
+ case MENU_NOTHING_CHOSEN:
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(1);
+ }
+ return;
+ case MENU_B_PRESSED:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0);
+ sWork->routineState = 3;
+ return;
+ }
+
+ if (!shouldSwitchPages)
+ {
+ sWork->routineState = 3;
+ return;
+ }
+
+ sWork->currentCol = 0;
+ sWork->currentRow = 0;
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SWITCHPAGES, 1);
+ sWork->currentPage = input;
+ sWork->routineState = 4;
+ break;
+ case 3:
+ // Wait Return To Prev Page
+ if (!RunDisplaySubtask(0))
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ case 4:
+ // Wait Page Switch
+ if (!RunDisplaySubtask(0) && !RunDisplaySubtask(1))
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ }
+}
+
+static void ChatEntryRoutine_AskQuitChatting(void)
+{
+ s8 input;
+
+ switch (sWork->routineState)
+ {
+ case 0:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, 0);
+ sWork->routineState = 1;
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 2;
+ break;
+ case 2:
+ input = UnionRoomChat_ProcessInput();
+ switch (input)
+ {
+ case -1:
+ case 1:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 3;
+ break;
+ case 0:
+ if (sWork->multiplayerId == 0)
+ {
+ PrepareSendBuffer_Disband(sWork->sendMessageBuffer);
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 9;
+ }
+ else
+ {
+ PrepareSendBuffer_Leave(sWork->sendMessageBuffer);
+ sWork->routineState = 4;
+ }
+ break;
+ }
+ break;
+ case 3:
+ if (!RunDisplaySubtask(0))
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ case 9:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, 0);
+ sWork->routineState = 10;
+ }
+ break;
+ case 10:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 8;
+ break;
+ case 8:
+ input = UnionRoomChat_ProcessInput();
+ switch (input)
+ {
+ case -1:
+ case 1:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 3;
+ break;
+ case 0:
+ sub_80FA4A8();
+ PrepareSendBuffer_Disband(sWork->sendMessageBuffer);
+ sWork->routineState = 4;
+ break;
+ }
+ break;
+ case 4:
+ if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer)))
+ {
+ if (sWork->multiplayerId == 0)
+ sWork->routineState = 6;
+ else
+ sWork->routineState = 5;
+ }
+ break;
+ case 5:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT);
+ }
+ break;
+ }
+}
+
+static void ChatEntryRoutine_ExitChat(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState++;
+ }
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTEXITINGCHAT, 0);
+ sWork->routineState++;
+ }
+ break;
+ case 2:
+ if (!RunDisplaySubtask(0))
+ {
+ PrepareSendBuffer_Drop(sWork->sendMessageBuffer);
+ sWork->routineState++;
+ }
+ break;
+ case 3:
+ if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer)))
+ sWork->routineState++;
+ break;
+ case 4:
+ if ((GetBlockReceivedStatus() & 1) && !GetRfuUnkCE8())
+ sWork->routineState++;
+ break;
+ case 5:
+ if (IsLinkTaskFinished() && !GetRfuUnkCE8())
+ {
+ sub_800AAC0();
+ sWork->exitDelayTimer = 0;
+ sWork->routineState++;
+ }
+ break;
+ case 6:
+ if (sWork->exitDelayTimer < 150)
+ sWork->exitDelayTimer++;
+
+ if (!gReceivedRemoteLinkPlayers)
+ sWork->routineState++;
+ break;
+ case 7:
+ if (sWork->exitDelayTimer >= 150)
+ GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT);
+ else
+ sWork->exitDelayTimer++;
+ break;
+ }
+}
+
+static void ChatEntryRoutine_Drop(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState++;
+ }
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !GetRfuUnkCE8())
+ {
+ sub_800AAC0();
+ sWork->exitDelayTimer = 0;
+ sWork->routineState++;
+ }
+ break;
+ case 2:
+ if (sWork->exitDelayTimer < 150)
+ sWork->exitDelayTimer++;
+
+ if (!gReceivedRemoteLinkPlayers)
+ sWork->routineState++;
+ break;
+ case 3:
+ if (sWork->exitDelayTimer >= 150)
+ GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT);
+ else
+ sWork->exitDelayTimer++;
+ break;
+ }
+}
+
+static void ChatEntryRoutine_Disbanded(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!FuncIsActiveTask(Task_ReceiveChatMessage))
+ {
+ if (sWork->multiplayerId)
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+
+ sWork->routineState++;
+ }
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ {
+ if (sWork->multiplayerId != 0)
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTLEADERLEFT, 0);
+
+ sWork->routineState++;
+ }
+ break;
+ case 2:
+ if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !GetRfuUnkCE8())
+ {
+ sub_800AAC0();
+ sWork->exitDelayTimer = 0;
+ sWork->routineState++;
+ }
+ break;
+ case 3:
+ if (sWork->exitDelayTimer < 150)
+ sWork->exitDelayTimer++;
+
+ if (!gReceivedRemoteLinkPlayers)
+ sWork->routineState++;
+ break;
+ case 4:
+ if (sWork->exitDelayTimer >= 150)
+ GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT);
+ else
+ sWork->exitDelayTimer++;
+ break;
+ }
+}
+
+static void ChatEntryRoutine_SendMessage(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ }
+
+ PrepareSendBuffer_Chat(sWork->sendMessageBuffer);
+ sWork->routineState++;
+ // fall through
+ case 1:
+ if (IsLinkTaskFinished() == TRUE && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer)))
+ sWork->routineState++;
+ break;
+ case 2:
+ ResetMessageEntryBuffer();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0);
+ sWork->routineState++;
+ break;
+ case 3:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState++;
+ break;
+ case 4:
+ if (IsLinkTaskFinished())
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ }
+}
+
+static void ChatEntryRoutine_Register(void)
+{
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (ChatMsgHasAtLeastOneCharcter())
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTREGISTERWHERE, 0);
+ sWork->routineState = 2;
+ }
+ else
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTINPUTTEXT, 0);
+ sWork->routineState = 5;
+ }
+ break;
+ case 1:
+ if (JOY_NEW(A_BUTTON))
+ {
+ RegisterTextAtRow();
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_RETURNTOKB, 0);
+ sWork->routineState = 3;
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0);
+ sWork->routineState = 4;
+ }
+ else if (TypeChatMessage_HandleDPad())
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0);
+ sWork->routineState = 2;
+ }
+ break;
+ case 2:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 1;
+ break;
+ case 3:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0);
+ sWork->routineState = 4;
+ }
+ break;
+ case 4:
+ if (!RunDisplaySubtask(0))
+ GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT);
+ break;
+ case 5:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 6;
+ break;
+ case 6:
+ if (JOY_NEW(A_BUTTON | B_BUTTON))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 4;
+ }
+ break;
+ }
+}
+
+static void ChatEntryRoutine_SaveAndExit(void)
+{
+ s8 input;
+
+ switch (sWork->routineState)
+ {
+ case 0:
+ if (!sWork->changedRegisteredTexts)
+ {
+ sWork->routineState = 12;
+ }
+ else
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 1;
+ }
+ break;
+ case 1:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKSAVE, 0);
+ sWork->routineState = 2;
+ }
+ break;
+ case 2:
+ input = UnionRoomChat_ProcessInput();
+ switch (input)
+ {
+ case -1:
+ case 1:
+ sWork->routineState = 12;
+ break;
+ case 0:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 3;
+ break;
+ }
+ break;
+ case 3:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKOVERWRITESAVE, 0);
+ sWork->routineState = 4;
+ }
+ break;
+ case 4:
+ if (!RunDisplaySubtask(0))
+ sWork->routineState = 5;
+ break;
+ case 5:
+ input = UnionRoomChat_ProcessInput();
+ switch (input)
+ {
+ case -1:
+ case 1:
+ sWork->routineState = 12;
+ break;
+ case 0:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0);
+ sWork->routineState = 6;
+ break;
+ }
+ break;
+ case 6:
+ if (!RunDisplaySubtask(0))
+ {
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVING, 0);
+ SaveRegisteredTextsToSB1();
+ sWork->routineState = 7;
+ }
+ break;
+ case 7:
+ if (!RunDisplaySubtask(0))
+ {
+ SetContinueGameWarpStatusToDynamicWarp();
+ TrySavingData(SAVE_NORMAL);
+ sWork->routineState = 8;
+ }
+ break;
+ case 8:
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, 0);
+ sWork->routineState = 9;
+ break;
+ case 9:
+ if (!RunDisplaySubtask(0))
+ {
+ PlaySE(SE_SAVE);
+ ClearContinueGameWarpStatus2();
+ sWork->routineState = 10;
+ }
+ break;
+ case 10:
+ sWork->afterSaveTimer = 0;
+ sWork->routineState = 11;
+ break;
+ case 11:
+ sWork->afterSaveTimer++;
+ if (sWork->afterSaveTimer > 120)
+ sWork->routineState = 12;
+ break;
+ case 12:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ sWork->routineState = 13;
+ break;
+ case 13:
+ if (!gPaletteFade.active)
+ {
+ sub_812B4B8();
+ UnionRoomChat_FreeGraphicsWork();
+ FreeChatWork();
+ SetMainCallback2(CB2_ReturnToField);
+ }
+ break;
+ }
+}
+
+static void GoToRoutine(u16 routineNo)
+{
+ sWork->routineNo = routineNo;
+ sWork->routineState = 0;
+}
+
+static bool32 TypeChatMessage_HandleDPad(void)
+{
+ if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ {
+ if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ if (sWork->currentRow < sKeyboardPageMaxRow[sWork->currentPage])
+ sWork->currentRow++;
+ else
+ sWork->currentRow = 0;
+
+ return TRUE;
+ }
+
+ if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ {
+ if (sWork->currentCol)
+ sWork->currentCol--;
+ else
+ sWork->currentCol = 4;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ {
+ if (sWork->currentCol > 3)
+ sWork->currentCol = 0;
+ else
+ sWork->currentCol++;
+ }
+ else
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+ else
+ {
+ if (sWork->currentRow)
+ sWork->currentRow--;
+ else
+ sWork->currentRow = sKeyboardPageMaxRow[sWork->currentPage];
+
+ return TRUE;
+ }
+}
+
+static void AppendCharacterToChatMessageBuffer(void)
+{
+ int i;
+ const u8 *charsStr;
+ int strLength;
+ u8 *str;
+ u8 buffer[21];
+
+ if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ charsStr = gUnionRoomKeyboardText[sWork->currentPage][sWork->currentRow];
+ for (i = 0; i < sWork->currentCol; i++)
+ {
+ if (*charsStr == CHAR_EXTRA_EMOJI)
+ charsStr++;
+ charsStr++;
+ }
+
+ strLength = 1;
+ }
+ else
+ {
+ u8 *tempStr = StringCopy(buffer, sWork->registeredTexts[sWork->currentRow]);
+ tempStr[0] = CHAR_SPACE;
+ tempStr[1] = EOS;
+ charsStr = buffer;
+ strLength = StringLength_Multibyte(buffer);
+ }
+
+ sWork->lastBufferCursorPos = sWork->bufferCursorPos;
+ if (!charsStr)
+ return;
+
+ str = GetEndOfUnk1A();
+ while (--strLength != -1 && sWork->bufferCursorPos < MESSAGE_BUFFER_NCHAR)
+ {
+ if (*charsStr == CHAR_EXTRA_EMOJI)
+ {
+ *str = *charsStr;
+ charsStr++;
+ str++;
+ }
+
+ *str = *charsStr;
+ charsStr++;
+ str++;
+
+ sWork->bufferCursorPos++;
+ }
+
+ *str = EOS;
+}
+
+static void DeleteLastCharacterOfChatMessageBuffer(void)
+{
+ sWork->lastBufferCursorPos = sWork->bufferCursorPos;
+ if (sWork->bufferCursorPos)
+ {
+ u8 *str = GetPtrToLastCharOfUnk1A();
+ *str = EOS;
+ sWork->bufferCursorPos--;
+ }
+}
+
+static void ToggleCaseOfLastCharacterInChatMessageBuffer(void)
+{
+ u8 *str;
+ u8 character;
+
+ sWork->lastBufferCursorPos = sWork->bufferCursorPos - 1;
+ str = GetPtrToLastCharOfUnk1A();
+ if (*str != CHAR_EXTRA_EMOJI)
+ {
+ character = sCaseToggleTable[*str];
+ if (character)
+ *str = character;
+ }
+}
+
+static bool32 ChatMsgHasAtLeastOneCharcter(void)
+{
+ if (sWork->bufferCursorPos)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void RegisterTextAtRow(void)
+{
+ u8 *src = UnionRoomChat_GetEndOfMessageEntryBuffer();
+ StringCopy(sWork->registeredTexts[sWork->currentRow], src);
+ sWork->changedRegisteredTexts = TRUE;
+}
+
+static void ResetMessageEntryBuffer(void)
+{
+ sWork->messageEntryBuffer[0] = EOS;
+ sWork->lastBufferCursorPos = MESSAGE_BUFFER_NCHAR;
+ sWork->bufferCursorPos = 0;
+}
+
+static void SaveRegisteredTextsToSB1(void)
+{
+ int i;
+ for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
+ StringCopy(gSaveBlock1Ptr->registeredTexts[i], sWork->registeredTexts[i]);
+}
+
+u8 *UnionRoomChat_GetWorkRegisteredText(int arg0)
+{
+ return sWork->registeredTexts[arg0];
+}
+
+static u8 *GetEndOfUnk1A(void)
+{
+ u8 *str = sWork->messageEntryBuffer;
+ while (*str != EOS)
+ str++;
+
+ return str;
+}
+
+static u8 *GetPtrToLastCharOfUnk1A(void)
+{
+ u8 *str = sWork->messageEntryBuffer;
+ u8 *str2 = str;
+ while (*str != EOS)
+ {
+ str2 = str;
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+ str++;
+ }
+
+ return str2;
+}
+
+static u16 GetNumCharsInMessageEntryBuffer(void)
+{
+ u8 *str;
+ u32 i, numChars, strLength;
+
+ strLength = StringLength_Multibyte(sWork->messageEntryBuffer);
+ str = sWork->messageEntryBuffer;
+ numChars = 0;
+ if (strLength > 10)
+ {
+ strLength -= 10;
+ for (i = 0; i < strLength; i++)
+ {
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+
+ str++;
+ numChars++;
+ }
+ }
+
+ return numChars;
+}
+
+static void PrepareSendBuffer_Null(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_0;
+}
+
+static void PrepareSendBuffer_Join(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_JOIN;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId;
+}
+
+static void PrepareSendBuffer_Chat(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_CHAT;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], sWork->messageEntryBuffer);
+}
+
+static void PrepareSendBuffer_Leave(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_LEAVE;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId;
+ sub_80FB9D0();
+}
+
+static void PrepareSendBuffer_Drop(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_DROP;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId;
+}
+
+static void PrepareSendBuffer_Disband(u8 *arg0)
+{
+ arg0[0] = CHAT_MESSAGE_DISBAND;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId;
+}
+
+static bool32 ProcessReceivedChatMessage(u8 *dest, u8 *recvMessage)
+{
+ u8 *tempStr;
+ u8 cmd = *recvMessage;
+ u8 *name = recvMessage + 1;
+ recvMessage = name;
+ recvMessage += PLAYER_NAME_LENGTH + 1;
+
+ switch (cmd)
+ {
+ case CHAT_MESSAGE_JOIN:
+ if (sWork->multiplayerId != name[PLAYER_NAME_LENGTH + 1])
+ {
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700JoinedChat);
+ return TRUE;
+ }
+ break;
+ case CHAT_MESSAGE_CHAT:
+ tempStr = StringCopy(dest, name);
+ *(tempStr++) = EXT_CTRL_CODE_BEGIN;
+ *(tempStr++) = EXT_CTRL_CODE_CLEAR_TO;
+ *(tempStr++) = 42;
+ *(tempStr++) = CHAR_COLON;
+ StringCopy(tempStr, recvMessage);
+ return TRUE;
+ case CHAT_MESSAGE_DISBAND:
+ StringCopy(sWork->hostName, name);
+ // fall through
+ case CHAT_MESSAGE_LEAVE:
+ if (sWork->multiplayerId != *recvMessage)
+ {
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700LeftChat);
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+u8 GetCurrentKeyboardPage(void)
+{
+ return sWork->currentPage;
+}
+
+void UnionRoomChat_GetCursorColAndRow(u8 *colp, u8 *rowp)
+{
+ *colp = sWork->currentCol;
+ *rowp = sWork->currentRow;
+}
+
+u8 *UnionRoomChat_GetMessageEntryBuffer(void)
+{
+ return sWork->messageEntryBuffer;
+}
+
+int UnionRoomChat_LenMessageEntryBuffer(void)
+{
+ u8 *str = UnionRoomChat_GetMessageEntryBuffer();
+ return StringLength_Multibyte(str);
+}
+
+void UnionRoomChat_GetBufferSelectionRegion(u32 *startp, u32 *diffp)
+{
+ int diff = sWork->bufferCursorPos - sWork->lastBufferCursorPos;
+ if (diff < 0)
+ {
+ diff *= -1;
+ *startp = sWork->bufferCursorPos;
+ }
+ else
+ {
+ *startp = sWork->lastBufferCursorPos;
+ }
+
+ *diffp = diff;
+}
+
+u8 *UnionRoomChat_GetEndOfMessageEntryBuffer(void)
+{
+ int i;
+ u16 numChars = GetNumCharsInMessageEntryBuffer();
+ u8 *str = sWork->messageEntryBuffer;
+ for (i = 0; i < numChars; i++)
+ {
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+
+ str++;
+ }
+
+ return str;
+}
+
+// Useless overhead
+u16 UnionRoomChat_GetNumCharsInMessageEntryBuffer(void)
+{
+ u16 count;
+ u32 i;
+ u16 numChars = GetNumCharsInMessageEntryBuffer();
+ u8 *str = sWork->messageEntryBuffer;
+ for (count = 0, i = 0; i < numChars; count++, i++)
+ {
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+
+ str++;
+ }
+
+ return count;
+}
+
+u8 *UnionRoomChat_GetLastReceivedMessage(void)
+{
+ return sWork->receivedMessage;
+}
+
+u16 UnionRoomChat_GetReceivedPlayerIndex(void)
+{
+ return sWork->receivedPlayerIndex;
+}
+
+int UnionRoomChat_GetMessageEntryCursorPosition(void)
+{
+ return sWork->bufferCursorPos;
+}
+
+// This probably does more in the Japanese titles.
+int UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(void)
+{
+ u8 *str = GetPtrToLastCharOfUnk1A();
+ u32 character = *str;
+ if (character > 0xFF || sCaseToggleTable[character] == character || sCaseToggleTable[character] == 0)
+ return 3;
+ else
+ return 0;
+}
+
+u8 *UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(void)
+{
+ return sWork->hostName;
+}
+
+void UnionRoomChat_InitializeRegisteredTexts(void)
+{
+ StringCopy(gSaveBlock1Ptr->registeredTexts[0], gText_Hello);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[1], gText_Pokemon2);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[2], gText_Trade);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[3], gText_Battle);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[4], gText_Lets);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[5], gText_Ok);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[6], gText_Sorry);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[7], gText_YaySmileEmoji);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[8], gText_ThankYou);
+ StringCopy(gSaveBlock1Ptr->registeredTexts[9], gText_ByeBye);
+}
+
+#define tState data[0]
+#define tI data[1]
+#define tCurrLinkPlayer data[2]
+#define tBlockReceivedStatus data[3]
+#define tLinkPlayerCount data[4]
+#define tNextState data[5]
+
+static void Task_ReceiveChatMessage(u8 taskId)
+{
+ u8 *buffer;
+ s16 *data = gTasks[taskId].data;
+
+ switch (tState)
+ {
+ case 0:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ DestroyTask(taskId);
+ return;
+ }
+
+ tState = 1;
+ // fall through
+ case 1:
+ tLinkPlayerCount = GetLinkPlayerCount();
+ if (sWork->linkPlayerCount != tLinkPlayerCount)
+ {
+ tState = 2;
+ sWork->linkPlayerCount = tLinkPlayerCount;
+ return;
+ }
+
+ tBlockReceivedStatus = GetBlockReceivedStatus();
+ if (!tBlockReceivedStatus && GetRfuUnkCE8())
+ return;
+
+ tI = 0;
+ tState = 3;
+ // fall through
+ case 3:
+ // Idle listen
+ for (; tI < 5 && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++)
+ ;
+
+ if (tI == 5)
+ {
+ tState = 1;
+ return;
+ }
+
+ tCurrLinkPlayer = tI;
+ ResetBlockReceivedFlag(tCurrLinkPlayer);
+ buffer = (u8 *)gBlockRecvBuffer[tI];
+ switch (buffer[0])
+ {
+ default:
+ case CHAT_MESSAGE_CHAT: tNextState = 3; break;
+ case CHAT_MESSAGE_JOIN: tNextState = 3; break;
+ case CHAT_MESSAGE_LEAVE: tNextState = 4; break;
+ case CHAT_MESSAGE_DROP: tNextState = 5; break;
+ case CHAT_MESSAGE_DISBAND: tNextState = 6; break;
+ }
+
+ if (ProcessReceivedChatMessage(sWork->receivedMessage, (u8 *)gBlockRecvBuffer[tI]))
+ {
+ sWork->receivedPlayerIndex = tI;
+ UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SCROLLCHAT, 2);
+ tState = 7;
+ }
+ else
+ {
+ tState = tNextState;
+ }
+
+ tI++;
+ break;
+ case 7:
+ if (!RunDisplaySubtask(2))
+ tState = tNextState;
+ break;
+ case 4:
+ // Someone is leaving
+ if (sWork->multiplayerId == 0 && tCurrLinkPlayer != 0)
+ {
+ // You're the leader, and the person who left is not you
+ if (GetLinkPlayerCount() == 2)
+ {
+ sub_80FA4A8();
+ sWork->exitType = CHATEXIT_LEADER_LAST;
+ DestroyTask(taskId);
+ return;
+ }
+
+ sub_80FBD6C(tCurrLinkPlayer);
+ }
+
+ tState = 3;
+ break;
+ case 5:
+ // Person left
+ if (sWork->multiplayerId != 0)
+ sWork->exitType = CHATEXIT_DROPPED;
+
+ DestroyTask(taskId);
+ break;
+ case 6:
+ // The leader disbanded the chat
+ sWork->exitType = CHATEXIT_DISBANDED;
+ DestroyTask(taskId);
+ break;
+ case 2:
+ if (!GetRfuUnkCE8())
+ {
+ if (sWork->multiplayerId == 0)
+ sub_80FB030(sWork->linkPlayerCount);
+
+ tState = 1;
+ }
+ break;
+ }
+}
+
+#undef tNextState
+#undef tLinkPlayerCount
+#undef tBlockReceivedStatus
+#undef tCurrLinkPlayer
+#undef tI
+#undef tState
diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c
new file mode 100644
index 000000000..54aef8d65
--- /dev/null
+++ b/src/union_room_chat_display.c
@@ -0,0 +1,1339 @@
+#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"
+
+#define STDMESSAGE_QUIT_CHATTING 0
+#define STDMESSAGE_REGISTER_WHERE 1
+#define STDMESSAGE_REGISTER_HERE 2
+#define STDMESSAGE_INPUT_TEXT 3
+#define STDMESSAGE_EXITING_CHAT 4
+#define STDMESSAGE_LEADER_LEFT 5
+#define STDMESSAGE_ASK_SAVE 6
+#define STDMESSAGE_ASK_OVERWRITE 7
+#define STDMESSAGE_SAVING_NO_OFF 8
+#define STDMESSAGE_SAVED_THE_GAME 9
+#define STDMESSAGE_WARN_LEADER_LEAVE 10
+
+struct UnionRoomChat2Subtask
+{
+ bool32 (*callback)(u8 *);
+ u8 active;
+ u8 state;
+};
+
+struct UnionRoomChat2
+{
+ struct UnionRoomChat2Subtask subtasks[3];
+ u16 yesNoMenuWinId;
+ u16 curLine;
+ u16 scrollCount;
+ u16 messageWindowId;
+ s16 bg1hofs;
+ u8 expandedPlaceholdersBuffer[0x106];
+ u8 bg0Buffer[BG_SCREEN_SIZE];
+ u8 bg1Buffer[BG_SCREEN_SIZE];
+ u8 bg3Buffer[BG_SCREEN_SIZE];
+ u8 bg2Buffer[BG_SCREEN_SIZE];
+ u8 unk2128[0x20];
+ u8 unk2148[0x20];
+};
+
+struct SubtaskInfo
+{
+ u16 idx;
+ bool32 (*callback)(u8 *);
+};
+
+struct MessageWindowInfo
+{
+ const u8 *text;
+ bool8 boxType;
+ u8 x;
+ u8 y;
+ u8 letterSpacing;
+ u8 lineSpacing;
+ bool8 expandPlaceholders;
+ bool8 widerBox;
+};
+
+static EWRAM_DATA struct UnionRoomChat2 * sWork = NULL;
+
+static void InitWork(struct UnionRoomChat2 * ptr);
+static void UnionRoomChat_ResetDisplaySubtasks(void);
+static bool32 DisplaySubtask_LoadGfx(u8 *state);
+static bool32 DisplaySubtask_PrintWin3(u8 *state);
+static bool32 DisplaySubtask_HideWin3(u8 *state);
+static bool32 DisplaySubtask_SwitchPages(u8 *state);
+static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state);
+static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state);
+static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state);
+static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state);
+static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state);
+static bool32 DisplaySubtask_CancelRegister(u8 *state);
+static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state);
+static bool32 DisplaySubtask_ScrollChat(u8 *state);
+static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state);
+static bool32 DisplaySubtask_PrintInputText(u8 *state);
+static bool32 DisplaySubtask_PrintExitingChat(u8 *state);
+static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state);
+static bool32 DisplaySubtask_AskSave(u8 *state);
+static bool32 DisplaySubtask_AskOverwriteSave(u8 *state);
+static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state);
+static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state);
+static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state);
+static bool32 DisplaySubtaskDummy(u8 *state);
+static void PlaceYesNoMenuAt(u8 a0, u8 a1, u8 a2);
+static void HideYesNoMenuWindow(void);
+static void DestroyYesNoMenuWindow(void);
+static void PlaceStdMessageWindow(int id, u16 bg0vofs);
+static void HideStdMessageWindow(void);
+static void DestroyStdMessageWindow(void);
+static void FillWin1Rect(u16 x, u16 width, u8 fillValue);
+static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor);
+static void PrintCurrentKeyboardPage(void);
+static bool32 AnimateMoveBg1Right(void);
+static bool32 AnimateMoveBg1Left(void);
+static void PrintKeyboardSwapTextsOnWin3(void);
+static void ClearWin3(void);
+static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx);
+static void ResetGpuBgState(void);
+static void SetBgTilemapWorkBuffers(void);
+static void ClearBg0(void);
+static void LoadUnionRoomChatPanelGfx(void);
+static void LoadLinkMiscMenuGfx(void);
+static void LoadBg1Pal8(void);
+static void LoadWin0(void);
+static void LoadWin2(void);
+static void LoadWin1(void);
+static void LoadWin3(void);
+static void sub_812AD50(void);
+static void FillScanlineEffectWithValue1col(s16 a0);
+static void FillScanlineEffectWithValue2col(s16 a0);
+
+static const u16 sUnionRoomChatPanelBgPal_C[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal");
+static const u16 sBg1Pal8[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal");
+static const u16 sWin0PalF[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal");
+
+static const struct BgTemplate gUnknown_845AA84[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 7,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0x0000
+ }, {
+ .bg = 1,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0x0000
+ }, {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 23,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0x0000
+ }, {
+ .bg = 3,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 15,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0x0001
+ }
+};
+
+static const struct WindowTemplate gUnknown_845AA94[] = {
+ {
+ .bg = 3,
+ .tilemapLeft = 8,
+ .tilemapTop = 1,
+ .width = 21,
+ .height = 19,
+ .paletteNum = 15,
+ .baseBlock = 0x001
+ }, {
+ .bg = 1,
+ .tilemapLeft = 9,
+ .tilemapTop = 18,
+ .width = 15,
+ .height = 2,
+ .paletteNum = 12,
+ .baseBlock = 0x07a
+ }, {
+ .bg = 1,
+ .tilemapLeft = 0,
+ .tilemapTop = 2,
+ .width = 6,
+ .height = 15,
+ .paletteNum = 7,
+ .baseBlock = 0x020
+ }, {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 2,
+ .width = 7,
+ .height = 9,
+ .paletteNum = 14,
+ .baseBlock = 0x013
+ }, DUMMY_WIN_TEMPLATE
+};
+
+static const struct SubtaskInfo sSubtaskInfo[] = {
+ {CHATDISPLAYROUTINE_LOADGFX, DisplaySubtask_LoadGfx},
+ {CHATDISPLAYROUTINE_SHOWKBSWAPMENU, DisplaySubtask_PrintWin3},
+ {CHATDISPLAYROUTINE_HIDEKBSWAPMENU, DisplaySubtask_HideWin3},
+ {CHATDISPLAYROUTINE_SWITCHPAGES, DisplaySubtask_SwitchPages},
+ {CHATDISPLAYROUTINE_MOVEKBCURSOR, DisplaySubtask_MoveSelectorCursorObj},
+ {CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, DisplaySubtask_ShowQuitChattingDialog},
+ {CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, DisplaySubtask_HideQuitChattingDialog},
+ {CHATDISPLAYROUTINE_PRINTMSG, DisplaySubtask_UpdateMessageBuffer},
+ {CHATDISPLAYROUTINE_PRINTREGISTERWHERE, DisplaySubtask_PrintRegisterWhere},
+ {CHATDISPLAYROUTINE_CANCELREGISTER, DisplaySubtask_CancelRegister},
+ {CHATDISPLAYROUTINE_RETURNTOKB, DisplaySubtask_ReturnToKeyboard},
+ {CHATDISPLAYROUTINE_SCROLLCHAT, DisplaySubtask_ScrollChat},
+ {CHATDISPLAYROUTINE_CURSORBLINK, DisplaySubtask_AnimateSelectorCursorBlink},
+ {CHATDISPLAYROUTINE_PRINTINPUTTEXT, DisplaySubtask_PrintInputText},
+ {CHATDISPLAYROUTINE_PRINTEXITINGCHAT, DisplaySubtask_PrintExitingChat},
+ {CHATDISPLAYROUTINE_PRINTLEADERLEFT, DisplaySubtask_PrintLeaderLeft},
+ {CHATDISPLAYROUTINE_ASKSAVE, DisplaySubtask_AskSave},
+ {CHATDISPLAYROUTINE_ASKOVERWRITESAVE, DisplaySubtask_AskOverwriteSave},
+ {CHATDISPLAYROUTINE_PRINTSAVING, DisplaySubtask_PrintSavingDontTurnOffPower},
+ {CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, DisplaySubtask_PrintSavedTheGame},
+ {CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, DisplaySubtask_ShowConfirmLeaderLeaveDialog}
+};
+
+static const struct MessageWindowInfo sMessageWindowInfo[] = {
+
+ [STDMESSAGE_QUIT_CHATTING] = {
+ .text = gText_QuitChatting,
+ .boxType = 1,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_REGISTER_WHERE] = {
+ .text = gText_RegisterTextWhere,
+ .boxType = 1,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_REGISTER_HERE] = {
+ .text = gText_RegisterTextHere,
+ .boxType = 1,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_INPUT_TEXT] = {
+ .text = gText_InputText,
+ .boxType = 1,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_EXITING_CHAT] = {
+ .text = gText_ExitingTheChat,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_LEADER_LEFT] = {
+ .text = gText_LeaderHasLeftEndingChat,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 0,
+ .lineSpacing = 2,
+ .expandPlaceholders = TRUE,
+ .widerBox = FALSE
+ },
+ [STDMESSAGE_ASK_SAVE] = {
+ .text = gText_RegisteredTextChanged_OKtoSave,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = TRUE
+ },
+ [STDMESSAGE_ASK_OVERWRITE] = {
+ .text = gText_RegisteredTextChanged_AlreadySavedFile,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = TRUE
+ },
+ [STDMESSAGE_SAVING_NO_OFF] = {
+ .text = gText_RegisteredTextChanged_SavingDontTurnOff,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = TRUE
+ },
+ [STDMESSAGE_SAVED_THE_GAME] = {
+ .text = gText_RegisteredTextChanged_SavedTheGame,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = TRUE,
+ .widerBox = TRUE
+ },
+ [STDMESSAGE_WARN_LEADER_LEAVE] = {
+ .text = gText_IfLeaderLeavesChatWillEnd,
+ .boxType = 2,
+ .x = 0,
+ .y = 0,
+ .letterSpacing = 1,
+ .lineSpacing = 2,
+ .expandPlaceholders = FALSE,
+ .widerBox = TRUE
+ }
+};
+
+static const u8 gText_Ellipsis[] = _("…");
+
+static const struct MenuAction sKeyboardSwapTexts[] = {
+ {gText_Upper},
+ {gText_Lower},
+ {gText_Symbols},
+ {gText_Register2},
+ {gText_Exit}
+};
+
+bool8 UnionRoomChat_TryAllocGraphicsWork(void)
+{
+ sWork = Alloc(sizeof(*sWork));
+ if (sWork && UnionRoomChat_TryAllocSpriteWork())
+ {
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_845AA84, NELEMS(gUnknown_845AA84));
+ InitWindows(gUnknown_845AA94);
+ ResetTempTileDataBuffers();
+ sub_812AD50();
+ InitWork(sWork);
+ UnionRoomChat_ResetDisplaySubtasks();
+ UnionRoomChat_StartDisplaySubtask(0, 0);
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+bool32 UnionRoomChat_RunDisplaySubtask0(void)
+{
+ return RunDisplaySubtask(0);
+}
+
+void UnionRoomChat_FreeGraphicsWork(void)
+{
+ UnionRoomChat_FreeSpriteWork();
+ if (sWork != NULL)
+ FREE_AND_SET_NULL(sWork);
+
+ FreeAllWindowBuffers();
+ gScanlineEffect.state = 3;
+}
+
+static void InitWork(struct UnionRoomChat2 *arg0)
+{
+ arg0->yesNoMenuWinId = 0xFF;
+ arg0->messageWindowId = 0xFF;
+ arg0->curLine = 0;
+}
+
+void UnionRoomChat_ResetDisplaySubtasks(void)
+{
+ int i;
+
+ if (sWork == NULL)
+ return;
+
+ for (i = 0; i < 3; i++)
+ {
+ sWork->subtasks[i].callback = DisplaySubtaskDummy;
+ sWork->subtasks[i].active = FALSE;
+ sWork->subtasks[i].state = 0;
+ }
+}
+
+void UnionRoomChat_RunDisplaySubtasks(void)
+{
+ int i;
+
+ if (sWork == NULL)
+ return;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (sWork->subtasks[i].active)
+ sWork->subtasks[i].active = sWork->subtasks[i].callback(&sWork->subtasks[i].state);
+ }
+}
+
+void UnionRoomChat_StartDisplaySubtask(u16 arg0, u8 arg1)
+{
+ int i;
+
+ sWork->subtasks[arg1].callback = DisplaySubtaskDummy;
+ for (i = 0; i < NELEMS(sSubtaskInfo); i++)
+ {
+ if (sSubtaskInfo[i].idx == arg0)
+ {
+ sWork->subtasks[arg1].callback = sSubtaskInfo[i].callback;
+ sWork->subtasks[arg1].active = TRUE;
+ sWork->subtasks[arg1].state = 0;
+ break;
+ }
+ }
+}
+
+bool8 RunDisplaySubtask(u8 arg0)
+{
+ return sWork->subtasks[arg0].active;
+}
+
+static bool32 DisplaySubtask_LoadGfx(u8 *state)
+{
+ if (FreeTempTileDataBuffersIfPossible() == TRUE)
+ return TRUE;
+
+ switch (*state)
+ {
+ case 0:
+ ResetGpuBgState();
+ SetBgTilemapWorkBuffers();
+ break;
+ case 1:
+ ClearBg0();
+ break;
+ case 2:
+ LoadUnionRoomChatPanelGfx();
+ break;
+ case 3:
+ LoadLinkMiscMenuGfx();
+ break;
+ case 4:
+ LoadBg1Pal8();
+ break;
+ case 5:
+ LoadWin0();
+ LoadWin2();
+ LoadWin3();
+ LoadWin1();
+ break;
+ case 6:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ UnionRoomChat_CreateSelectorCursorObj();
+ UnionRoomChat_SpawnTextEntryPointerSprites();
+ CreatePageSwitchUISprites();
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintWin3(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PrintKeyboardSwapTextsOnWin3();
+ CopyWindowToVram(3, 3);
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_HideWin3(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ ClearWin3();
+ CopyWindowToVram(3, 3);
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_SwitchPages(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ UnionRoomChat_ToggleSelectorCursorObjVisibility(TRUE);
+ if (AnimateMoveBg1Right())
+ return TRUE;
+
+ PrintCurrentKeyboardPage();
+ CopyWindowToVram(2, 2);
+ break;
+ case 1:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+ break;
+ case 2:
+ if (AnimateMoveBg1Left())
+ return TRUE;
+
+ UnionRoomChat_MoveSelectorCursorObj();
+ UnionRoomChat_ToggleSelectorCursorObjVisibility(FALSE);
+ UpdateVisibleUnionRoomChatIcon();
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state)
+{
+ UnionRoomChat_MoveSelectorCursorObj();
+ return FALSE;
+}
+
+static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_QUIT_CHATTING, 0);
+ PlaceYesNoMenuAt(23, 11, 1);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ HideStdMessageWindow();
+ HideYesNoMenuWindow();
+ CopyBgTilemapBufferToVram(0);
+ break;
+ case 1:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+
+ DestroyStdMessageWindow();
+ DestroyYesNoMenuWindow();
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state)
+{
+ u32 start, length;
+ u8 *str;
+
+ switch (*state)
+ {
+ case 0:
+ UnionRoomChat_GetBufferSelectionRegion(&start, &length);
+ FillWin1Rect(start, length, PIXEL_FILL(0));
+ str = UnionRoomChat_GetMessageEntryBuffer();
+ PrintOnWin1Parameterized(0, str, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY);
+ CopyWindowToVram(1, 2);
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ UpdateVisibleUnionRoomChatIcon();
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state)
+{
+ u16 var0;
+ u8 *str;
+ u16 length;
+
+ switch (*state)
+ {
+ case 0:
+ var0 = UnionRoomChat_GetNumCharsInMessageEntryBuffer();
+ str = UnionRoomChat_GetEndOfMessageEntryBuffer();
+ length = StringLength_Multibyte(str);
+ FillWin1Rect(var0, length, PIXEL_FILL(6));
+ PrintOnWin1Parameterized(var0, str, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED);
+ CopyWindowToVram(1, 2);
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ PlaceStdMessageWindow(STDMESSAGE_REGISTER_WHERE, 16);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ }
+ else
+ {
+ return TRUE;
+ }
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ UnionRoomChat_UpdateObjPalCycle(1);
+ else
+ return TRUE;
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_CancelRegister(u8 *state)
+{
+ u16 x;
+ u8 *str;
+ u16 length;
+
+ switch (*state)
+ {
+ case 0:
+ x = UnionRoomChat_GetNumCharsInMessageEntryBuffer();
+ str = UnionRoomChat_GetEndOfMessageEntryBuffer();
+ length = StringLength_Multibyte(str);
+ FillWin1Rect(x, length, PIXEL_FILL(0));
+ PrintOnWin1Parameterized(x, str, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY);
+ CopyWindowToVram(1, 2);
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ HideStdMessageWindow();
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ }
+ else
+ {
+ return TRUE;
+ }
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ UnionRoomChat_UpdateObjPalCycle(0);
+ DestroyStdMessageWindow();
+ }
+ else
+ {
+ return TRUE;
+ }
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PrintCurrentKeyboardPage();
+ CopyWindowToVram(2, 2);
+ (*state)++;
+ break;
+ case 1:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+ else
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_ScrollChat(u8 *state)
+{
+ u16 row;
+ u8 *str;
+ u8 colorIdx;
+
+ switch (*state)
+ {
+ case 0:
+ row = sWork->curLine;
+ str = UnionRoomChat_GetLastReceivedMessage();
+ colorIdx = UnionRoomChat_GetReceivedPlayerIndex();
+ PrintTextOnWin0Colorized(row, str, colorIdx);
+ CopyWindowToVram(0, 2);
+ break;
+ case 1:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+
+ if (sWork->curLine < 9)
+ {
+ sWork->curLine++;
+ *state = 4;
+ return FALSE;
+ }
+ else
+ {
+ sWork->scrollCount = 0;
+ (*state)++;
+ }
+ // fall through
+ case 2:
+ ScrollWindow(0, 0, 5, PIXEL_FILL(1));
+ CopyWindowToVram(0, 2);
+ sWork->scrollCount++;
+ (*state)++;
+ // fall through
+ case 3:
+ if (IsDma3ManagerBusyWithBgCopy())
+ return TRUE;
+
+ if (sWork->scrollCount < 3)
+ {
+ (*state)--;
+ return TRUE;
+ }
+ break;
+ case 4:
+ return FALSE;
+ default:
+ return TRUE;
+ }
+
+ (*state)++;
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ UnionRoomChat_SetSelectorCursorClosedImage();
+ (*state)++;
+ break;
+ case 1:
+ return UnionRoomChat_AnimateSelectorCursorReopen();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintInputText(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_INPUT_TEXT, 16);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintExitingChat(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_EXITING_CHAT, 0);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state)
+{
+ u8 *str;
+
+ switch (*state)
+ {
+ case 0:
+ DynamicPlaceholderTextUtil_Reset();
+ str = UnionRoomChat_GetNameOfPlayerWhoDisbandedChat();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
+ PlaceStdMessageWindow(STDMESSAGE_LEADER_LEFT, 0);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_AskSave(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_ASK_SAVE, 0);
+ PlaceYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_AskOverwriteSave(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_ASK_OVERWRITE, 0);
+ PlaceYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_SAVING_NO_OFF, 0);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName);
+ PlaceStdMessageWindow(STDMESSAGE_SAVED_THE_GAME, 0);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ PlaceStdMessageWindow(STDMESSAGE_WARN_LEADER_LEAVE, 0);
+ PlaceYesNoMenuAt(23, 10, 1);
+ CopyWindowToVram(sWork->messageWindowId, 3);
+ (*state)++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool32 DisplaySubtaskDummy(u8 *arg0)
+{
+ return FALSE;
+}
+
+static void PlaceYesNoMenuAt(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 = 0x052;
+ sWork->yesNoMenuWinId = AddWindow(&template);
+ if (sWork->yesNoMenuWinId != 0xFF)
+ {
+ FillWindowPixelBuffer(sWork->yesNoMenuWinId, PIXEL_FILL(1));
+ PutWindowTilemap(sWork->yesNoMenuWinId);
+ AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL);
+ DrawTextBorderOuter(sWork->yesNoMenuWinId, 1, 13);
+ Menu_InitCursor(sWork->yesNoMenuWinId, 2, 0, 2, 14, 2, initialCursorPos);
+ }
+}
+
+static void HideYesNoMenuWindow(void)
+{
+ if (sWork->yesNoMenuWinId != 0xFF)
+ {
+ ClearStdWindowAndFrameToTransparent(sWork->yesNoMenuWinId, FALSE);
+ ClearWindowTilemap(sWork->yesNoMenuWinId);
+ }
+}
+
+static void DestroyYesNoMenuWindow(void)
+{
+ if (sWork->yesNoMenuWinId != 0xFF)
+ {
+ RemoveWindow(sWork->yesNoMenuWinId);
+ sWork->yesNoMenuWinId = 0xFF;
+ }
+}
+
+s8 UnionRoomChat_ProcessInput(void)
+{
+ return Menu_ProcessInput();
+}
+
+static void PlaceStdMessageWindow(int id, u16 bg0vofs)
+{
+ 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 (sMessageWindowInfo[id].widerBox)
+ {
+ template.tilemapLeft -= 7;
+ template.width += 7;
+ }
+
+ sWork->messageWindowId = AddWindow(&template);
+ windowId = sWork->messageWindowId;
+ if (sWork->messageWindowId == 0xFF)
+ return;
+
+ if (sMessageWindowInfo[id].expandPlaceholders)
+ {
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(sWork->expandedPlaceholdersBuffer, sMessageWindowInfo[id].text);
+ str = sWork->expandedPlaceholdersBuffer;
+ }
+ else
+ {
+ str = sMessageWindowInfo[id].text;
+ }
+
+ ChangeBgY(0, bg0vofs * 256, 0);
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
+ PutWindowTilemap(windowId);
+ if (sMessageWindowInfo[id].boxType == 1)
+ {
+ DrawTextBorderInner(windowId, 0xA, 2);
+ AddTextPrinterParameterized5(
+ windowId,
+ 2,
+ str,
+ sMessageWindowInfo[id].x + 8,
+ sMessageWindowInfo[id].y + 8,
+ TEXT_SPEED_FF,
+ NULL,
+ sMessageWindowInfo[id].letterSpacing,
+ sMessageWindowInfo[id].lineSpacing);
+ }
+ else
+ {
+ DrawTextBorderOuter(windowId, 0xA, 2);
+ AddTextPrinterParameterized5(
+ windowId,
+ 2,
+ str,
+ sMessageWindowInfo[id].x,
+ sMessageWindowInfo[id].y,
+ TEXT_SPEED_FF,
+ NULL,
+ sMessageWindowInfo[id].letterSpacing,
+ sMessageWindowInfo[id].lineSpacing);
+ }
+
+ sWork->messageWindowId = windowId;
+}
+
+static void HideStdMessageWindow(void)
+{
+ if (sWork->messageWindowId != 0xFF)
+ {
+ ClearStdWindowAndFrameToTransparent(sWork->messageWindowId, FALSE);
+ ClearWindowTilemap(sWork->messageWindowId);
+ }
+
+ ChangeBgY(0, 0, 0);
+}
+
+static void DestroyStdMessageWindow(void)
+{
+ if (sWork->messageWindowId != 0xFF)
+ {
+ RemoveWindow(sWork->messageWindowId);
+ sWork->messageWindowId = 0xFF;
+ }
+}
+
+static void FillWin1Rect(u16 x, u16 width, u8 fillValue)
+{
+ FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14);
+}
+
+static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor)
+{
+ u8 color[3];
+ u8 strbuf[35];
+
+ if (bgColor != TEXT_COLOR_TRANSPARENT)
+ FillWin1Rect(x, UnionRoomChat_GetMessageEntryCursorPosition() - x, bgColor);
+
+ color[0] = bgColor;
+ color[1] = fgColor;
+ color[2] = shadowColor;
+ strbuf[0] = EXT_CTRL_CODE_BEGIN;
+ strbuf[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ strbuf[2] = 8;
+ StringCopy(&strbuf[3], str);
+ AddTextPrinterParameterized3(1, 2, x * 8, 1, color, TEXT_SPEED_FF, strbuf);
+}
+
+static void PrintCurrentKeyboardPage(void)
+{
+ u8 page;
+ int i;
+ u16 left;
+ u16 top;
+ u8 color[3];
+ u8 str[45];
+ u8 *str2;
+
+ FillWindowPixelBuffer(2, PIXEL_FILL(15));
+ page = GetCurrentKeyboardPage();
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_DYNAMIC_COLOR_5;
+ color[2] = TEXT_DYNAMIC_COLOR_4;
+ if (page != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING;
+ str[2] = 8;
+
+ if (page == UNION_ROOM_KB_PAGE_EMOJI)
+ left = 6;
+ else
+ left = 8;
+ for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12)
+ {
+ if (!gUnionRoomKeyboardText[page][i])
+ return;
+
+ StringCopy(&str[3], gUnionRoomKeyboardText[page][i]);
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str);
+ }
+ }
+ else
+ {
+ left = 4;
+ for (i = 0, top = 0; i < 10; i++, top += 12)
+ {
+ str2 = UnionRoomChat_GetWorkRegisteredText(i);
+ if (GetStringWidth(0, str2, 0) <= 40)
+ {
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str2);
+ }
+ else
+ {
+ int length = StringLength_Multibyte(str2);
+ do
+ {
+ length--;
+ StringCopyN_Multibyte(str, str2, length);
+ } while (GetStringWidth(0, str, 0) > 35);
+
+ AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str);
+ AddTextPrinterParameterized3(2, 0, left + 35, top, color, TEXT_SPEED_FF, gText_Ellipsis);
+ }
+ }
+ }
+}
+
+static bool32 AnimateMoveBg1Right(void)
+{
+ if (sWork->bg1hofs < 56)
+ {
+ sWork->bg1hofs += 12;
+ if (sWork->bg1hofs >= 56)
+ sWork->bg1hofs = 56;
+
+ if (sWork->bg1hofs < 56)
+ {
+ FillScanlineEffectWithValue1col(sWork->bg1hofs);
+ return TRUE;
+ }
+ }
+
+ FillScanlineEffectWithValue2col(sWork->bg1hofs);
+ return FALSE;
+}
+
+static bool32 AnimateMoveBg1Left(void)
+{
+ if (sWork->bg1hofs > 0)
+ {
+ sWork->bg1hofs -= 12;
+ if (sWork->bg1hofs <= 0)
+ sWork->bg1hofs = 0;
+
+ if (sWork->bg1hofs > 0)
+ {
+ FillScanlineEffectWithValue1col(sWork->bg1hofs);
+ return TRUE;
+ }
+ }
+
+ FillScanlineEffectWithValue2col(sWork->bg1hofs);
+ return FALSE;
+}
+
+static void PrintKeyboardSwapTextsOnWin3(void)
+{
+ FillWindowPixelBuffer(3, PIXEL_FILL(1));
+ DrawTextBorderOuter(3, 1, 13);
+ UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, sKeyboardSwapTexts);
+ Menu_InitCursor(3, 2, 0, 0, 14, 5, GetCurrentKeyboardPage());
+ PutWindowTilemap(3);
+}
+
+static void ClearWin3(void)
+{
+ ClearStdWindowAndFrameToTransparent(3, FALSE);
+ ClearWindowTilemap(3);
+}
+
+static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx)
+// colorIdx: 0 = grey, 1 = red, 2 = green, 3 = blue
+{
+ u8 color[3];
+ color[0] = TEXT_COLOR_WHITE;
+ color[1] = colorIdx * 2 + 2;
+ color[2] = colorIdx * 2 + 3;
+ FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15);
+ AddTextPrinterParameterized3(0, 2, 0, row * 15, color, TEXT_SPEED_FF, str);
+}
+
+static void ResetGpuBgState(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);
+}
+
+static void SetBgTilemapWorkBuffers(void)
+{
+ SetBgTilemapBuffer(0, sWork->bg0Buffer);
+ SetBgTilemapBuffer(1, sWork->bg1Buffer);
+ SetBgTilemapBuffer(3, sWork->bg3Buffer);
+ SetBgTilemapBuffer(2, sWork->bg2Buffer);
+}
+
+static void ClearBg0(void)
+{
+ RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1);
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
+ CopyBgTilemapBufferToVram(0);
+}
+
+static void LoadUnionRoomChatPanelGfx(void)
+{
+ LoadPalette(gUnionRoomChatPanelBgPal_7, 0x70, 0x20);
+ LoadPalette(sUnionRoomChatPanelBgPal_C, 0xC0, 0x20);
+ DecompressAndCopyTileDataToVram(1, gUnionRoomChatPanelBgTiles, 0, 0, 0);
+ CopyToBgTilemapBuffer(1, gUnionRoomChatPanelBgMap, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+}
+
+static void LoadLinkMiscMenuGfx(void)
+{
+ u8 *ptr;
+
+ LoadPalette(gLinkMiscMenu_Pal, 0, 0x20);
+ ptr = DecompressAndCopyTileDataToVram(2, gLinkMiscMenu_Gfx, 0, 0, 0);
+ CopyToBgTilemapBuffer(2, gLinkMiscMenu_Tilemap, 0, 0);
+ CopyBgTilemapBufferToVram(2);
+}
+
+static void LoadBg1Pal8(void)
+{
+ LoadPalette(sBg1Pal8, 0x80, 0x20);
+ RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1);
+}
+
+static void LoadWin0(void)
+{
+ LoadPalette(sWin0PalF, 0xF0, 0x20);
+ PutWindowTilemap(0);
+ FillWindowPixelBuffer(0, PIXEL_FILL(1));
+ CopyWindowToVram(0, 3);
+}
+
+static void LoadWin2(void)
+{
+ PutWindowTilemap(2);
+ PrintCurrentKeyboardPage();
+ CopyWindowToVram(2, 3);
+}
+
+static void LoadWin1(void)
+{
+ FillWindowPixelBuffer(1, PIXEL_FILL(0));
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 3);
+}
+
+static void LoadWin3(void)
+{
+ FillWindowPixelBuffer(3, PIXEL_FILL(1));
+ TextWindow_SetUserSelectedFrame(3, 1, 0xD0);
+ TextWindow_SetStdFrame0_WithPal(3, 0xA, 0x20);
+ LoadPalette(gTMCaseMainWindowPalette, 0xE0, 0x20);
+}
+
+static void sub_812AD50(void)
+{
+ struct ScanlineEffectParams params;
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.dmaDest = &REG_BG1HOFS;
+ params.initState = 1;
+ params.unused9 = 0;
+ sWork->bg1hofs = 0;
+ CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers));
+ ScanlineEffect_SetParams(params);
+}
+
+static void FillScanlineEffectWithValue1col(s16 arg0)
+{
+ CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120);
+ CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20);
+}
+
+static void FillScanlineEffectWithValue2col(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);
+}
diff --git a/src/union_room_chat_objects.c b/src/union_room_chat_objects.c
new file mode 100644
index 000000000..f97136a0a
--- /dev/null
+++ b/src/union_room_chat_objects.c
@@ -0,0 +1,318 @@
+#include "global.h"
+#include "gflib.h"
+#include "decompress.h"
+#include "graphics.h"
+#include "union_room_chat.h"
+
+struct UnionRoomChat3
+{
+ struct Sprite *selectorCursorSprite;
+ struct Sprite *characterSelectCursorSprite;
+ struct Sprite *textEntryCursorSprite;
+ struct Sprite *rButtonSprite;
+ struct Sprite *chatIconsSprite;
+ u16 cursorBlinkTimer;
+};
+
+static EWRAM_DATA struct UnionRoomChat3 *sWork = NULL;
+
+static void SpriteCB_TextEntryCursor(struct Sprite * sprite);
+static void SpriteCB_CharacterSelectCursor(struct Sprite * sprite);
+
+static const u16 sUnionRoomChatInterfacePal[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal");
+static const u32 sSelectorCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz");
+static const u32 sHorizontalBarGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz");
+static const u32 sMenuCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz");
+static const u32 sRButtonGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz");
+
+static const struct CompressedSpriteSheet sSpriteSheets[] = {
+ {sSelectorCursorGfxTiles, 0x1000, 0},
+ {sMenuCursorGfxTiles, 0x0040, 1},
+ {sHorizontalBarGfxTiles, 0x0040, 2},
+ {sRButtonGfxTiles, 0x0080, 3},
+ {gUnionRoomChatIcons, 0x0400, 4}
+};
+
+static const struct SpritePalette sSpritePalette = {
+ sUnionRoomChatInterfacePal, 0
+};
+
+static const struct OamData sOamData_64x32_1 = {
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .priority = 1
+};
+
+static const union AnimCmd sAnim_CursorSmallOpen[] = {
+ ANIMCMD_FRAME(0x00, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_CursorSmallClosed[] = {
+ ANIMCMD_FRAME(0x20, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_CursorLargeOpen[] = {
+ ANIMCMD_FRAME(0x40, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_CursorLargeClosed[] = {
+ ANIMCMD_FRAME(0x60, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnims_SelectorCursor[] = {
+ sAnim_CursorSmallOpen,
+ sAnim_CursorSmallClosed,
+ sAnim_CursorLargeOpen,
+ sAnim_CursorLargeClosed
+};
+
+static const struct SpriteTemplate sSpriteTemplate_SelectorCursor = {
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &sOamData_64x32_1,
+ .anims = sSpriteAnims_SelectorCursor,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct OamData sOamData_8x16_2 = {
+ .shape = SPRITE_SHAPE(8x16),
+ .size = SPRITE_SIZE(8x16),
+ .priority = 2
+};
+
+static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = {
+ .tileTag = 2,
+ .paletteTag = 0,
+ .oam = &sOamData_8x16_2,
+ .anims = gDummySpriteAnimTable,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_TextEntryCursor
+};
+
+static const struct SpriteTemplate sSpriteTemplate_CharacterSelectCursor = {
+ .tileTag = 1,
+ .paletteTag = 0,
+ .oam = &sOamData_8x16_2,
+ .anims = gDummySpriteAnimTable,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_CharacterSelectCursor
+};
+
+static const struct OamData sOamData_16x16_2 = {
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .priority = 2
+};
+
+static const struct OamData sOamData_32x16_2 = {
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .priority = 2
+};
+
+static const union AnimCmd sAnim_UnionRoomChatIcons_ToggleCase[] = {
+ ANIMCMD_FRAME(0x00, 2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy1[] = {
+ ANIMCMD_FRAME(0x08, 2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy2[] = {
+ ANIMCMD_FRAME(0x10, 2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sAnim_UnionRoomChatIcons_Register[] = {
+ ANIMCMD_FRAME(0x18, 2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_UnionRoomChatIcons[] = {
+ sAnim_UnionRoomChatIcons_ToggleCase,
+ sAnim_UnionRoomChatIcons_Dummy1,
+ sAnim_UnionRoomChatIcons_Dummy2,
+ sAnim_UnionRoomChatIcons_Register
+};
+
+static const struct SpriteTemplate sSpriteTemplate_RButton = {
+ .tileTag = 3,
+ .paletteTag = 0,
+ .oam = &sOamData_16x16_2,
+ .anims = gDummySpriteAnimTable,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+static const struct SpriteTemplate sSpriteTemplate_UnionRoomChatIcons = {
+ .tileTag = 4,
+ .paletteTag = 0,
+ .oam = &sOamData_32x16_2,
+ .anims = sSpriteAnimTable_UnionRoomChatIcons,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+bool32 UnionRoomChat_TryAllocSpriteWork(void)
+{
+ int i;
+ for (i = 0; i < NELEMS(sSpriteSheets); i++)
+ LoadCompressedSpriteSheet(&sSpriteSheets[i]);
+
+ LoadSpritePalette(&sSpritePalette);
+ sWork = Alloc(sizeof(struct UnionRoomChat3));
+ if (sWork == NULL)
+ return FALSE;
+
+ return TRUE;
+}
+
+void UnionRoomChat_FreeSpriteWork(void)
+{
+ if (sWork != NULL)
+ Free(sWork);
+}
+
+void UnionRoomChat_CreateSelectorCursorObj(void)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_SelectorCursor, 10, 24, 0);
+ sWork->selectorCursorSprite = &gSprites[spriteId];
+}
+
+void UnionRoomChat_ToggleSelectorCursorObjVisibility(bool32 invisible)
+{
+ sWork->selectorCursorSprite->invisible = invisible;
+}
+
+void UnionRoomChat_MoveSelectorCursorObj(void)
+{
+ u8 x, y;
+ u8 page = GetCurrentKeyboardPage();
+ UnionRoomChat_GetCursorColAndRow(&x, &y);
+ if (page != UNION_ROOM_KB_PAGE_COUNT)
+ {
+ StartSpriteAnim(sWork->selectorCursorSprite, 0);
+ sWork->selectorCursorSprite->pos1.x = x * 8 + 10;
+ sWork->selectorCursorSprite->pos1.y = y * 12 + 24;
+ }
+ else
+ {
+ StartSpriteAnim(sWork->selectorCursorSprite, 2);
+ sWork->selectorCursorSprite->pos1.x = 24;
+ sWork->selectorCursorSprite->pos1.y = y * 12 + 24;
+ }
+}
+
+void UnionRoomChat_UpdateObjPalCycle(int arg0)
+{
+ const u16 *palette = &sUnionRoomChatInterfacePal[arg0 * 2 + 1];
+ u8 index = IndexOfSpritePaletteTag(0);
+ LoadPalette(palette, index * 16 + 0x101, 4);
+}
+
+void UnionRoomChat_SetSelectorCursorClosedImage(void)
+{
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
+ StartSpriteAnim(sWork->selectorCursorSprite, 1);
+ else
+ StartSpriteAnim(sWork->selectorCursorSprite, 3);
+
+ sWork->cursorBlinkTimer = 0;
+}
+
+bool32 UnionRoomChat_AnimateSelectorCursorReopen(void)
+{
+ if (sWork->cursorBlinkTimer > 3)
+ return FALSE;
+
+ if (++sWork->cursorBlinkTimer > 3)
+ {
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
+ StartSpriteAnim(sWork->selectorCursorSprite, 0);
+ else
+ StartSpriteAnim(sWork->selectorCursorSprite, 2);
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void UnionRoomChat_SpawnTextEntryPointerSprites(void)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_TextEntryCursor, 76, 152, 2);
+ sWork->textEntryCursorSprite = &gSprites[spriteId];
+ spriteId = CreateSprite(&sSpriteTemplate_CharacterSelectCursor, 64, 152, 1);
+ sWork->characterSelectCursorSprite = &gSprites[spriteId];
+}
+
+static void SpriteCB_TextEntryCursor(struct Sprite *sprite)
+{
+ int var0 = UnionRoomChat_GetMessageEntryCursorPosition();
+ if (var0 == 15)
+ {
+ sprite->invisible = TRUE;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ sprite->pos1.x = var0 * 8 + 76;
+ }
+}
+
+static void SpriteCB_CharacterSelectCursor(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 4)
+ {
+ sprite->data[0] = 0;
+ if (++sprite->pos2.x > 4)
+ sprite->pos2.x = 0;
+ }
+}
+
+void CreatePageSwitchUISprites(void)
+{
+ u8 spriteId = CreateSprite(&sSpriteTemplate_RButton, 8, 152, 3);
+ sWork->rButtonSprite = &gSprites[spriteId];
+ spriteId = CreateSprite(&sSpriteTemplate_UnionRoomChatIcons, 32, 152, 4);
+ sWork->chatIconsSprite = &gSprites[spriteId];
+ sWork->chatIconsSprite->invisible = TRUE;
+}
+
+void UpdateVisibleUnionRoomChatIcon(void)
+{
+ if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT)
+ {
+ if (UnionRoomChat_LenMessageEntryBuffer() != 0)
+ {
+ // REGISTER
+ sWork->chatIconsSprite->invisible = FALSE;
+ StartSpriteAnim(sWork->chatIconsSprite, 3);
+ }
+ else
+ {
+ sWork->chatIconsSprite->invisible = TRUE;
+ }
+ }
+ else
+ {
+ int anim = UnionRoomChat_GetWhetherShouldShowCaseToggleIcon();
+ if (anim == 3)
+ {
+ sWork->chatIconsSprite->invisible = TRUE;
+ }
+ else
+ {
+ // A <--> a
+ sWork->chatIconsSprite->invisible = FALSE;
+ StartSpriteAnim(sWork->chatIconsSprite, anim);
+ }
+ }
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 3ab110c7b..b9b7063d0 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -369,17 +369,12 @@ gUnknown_203B098: @ 203B098
.align 2
.include "src/party_menu.o"
-
.align 2
-gUnknown_203B0E0: @ 203B0E0
- .space 0x4
-
-gUnknown_203B0E4: @ 203B0E4
- .space 0x4
-
-gUnknown_203B0E8: @ 203B0E8
- .space 0x4
-
+ .include "src/union_room_chat.o"
+ .align 2
+ .include "src/union_room_chat_display.o"
+ .align 2
+ .include "src/union_room_chat_objects.o"
.align 2
.include "src/help_system_812B1E0.o"
.align 2