summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-01-25 08:52:18 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2020-01-25 08:52:18 -0500
commitc99246fccfc6f04f015d0b5b2850fa7d01914961 (patch)
tree9379004c61a5beda3d896ed91305e8326879fbab
parent70e7f464cafb9173aef2eb0a8a7b47bc90238f09 (diff)
through sub_81298F8
-rw-r--r--asm/union_room_chat.s772
-rw-r--r--data/strings.s24
-rw-r--r--include/link_rfu.h2
-rw-r--r--include/strings.h14
-rw-r--r--src/union_room_chat.c309
5 files changed, 342 insertions, 779 deletions
diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s
index 24e341f0d..422a8786b 100644
--- a/asm/union_room_chat.s
+++ b/asm/union_room_chat.s
@@ -5,766 +5,6 @@
.text
- 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}
@@ -2497,7 +1737,7 @@ sub_812A804: @ 812A804
movs r0, 0x2
movs r1, 0xFF
bl FillWindowPixelBuffer
- bl sub_81296F4
+ bl GetCurrentKeyboardPage
lsls r0, 24
lsrs r2, r0, 24
add r1, sp, 0xC
@@ -2774,7 +2014,7 @@ sub_812AA10: @ 812AA10
movs r2, 0xE
movs r3, 0x5
bl UnionRoomAndTradeMenuPrintOptions
- bl sub_81296F4
+ bl GetCurrentKeyboardPage
lsls r0, 24
lsrs r0, 24
movs r1, 0xE
@@ -3388,7 +2628,7 @@ _0812AF18: .4byte gUnknown_203B0E8
sub_812AF1C: @ 812AF1C
push {r4,r5,lr}
sub sp, 0x4
- bl sub_81296F4
+ bl GetCurrentKeyboardPage
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -3470,7 +2710,7 @@ _0812AFBC: .4byte 0x01010000
thumb_func_start sub_812AFC0
sub_812AFC0: @ 812AFC0
push {lr}
- bl sub_81296F4
+ bl GetCurrentKeyboardPage
lsls r0, 24
lsrs r0, 24
cmp r0, 0x3
@@ -3520,7 +2760,7 @@ _0812B010:
lsrs r0, 16
cmp r0, 0x3
bls _0812B040
- bl sub_81296F4
+ bl GetCurrentKeyboardPage
lsls r0, 24
lsrs r0, 24
cmp r0, 0x3
@@ -3692,7 +2932,7 @@ _0812B15C: .4byte gUnknown_845B068
thumb_func_start sub_812B160
sub_812B160: @ 812B160
push {r4,lr}
- bl sub_81296F4
+ bl GetCurrentKeyboardPage
lsls r0, 24
lsrs r0, 24
cmp r0, 0x3
diff --git a/data/strings.s b/data/strings.s
index e77730429..4102d3616 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -3123,10 +3123,10 @@ gUnknown_841B38A:: @ 0x841B38A
gUnknown_841B39E:: @ 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
@@ -3161,34 +3161,34 @@ gUnknown_841B4D9:: @ 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/include/link_rfu.h b/include/link_rfu.h
index 9dac781b3..8e4da4d87 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -327,6 +327,8 @@ bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx);
bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx);
bool32 sub_80FBA1C(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/strings.h b/include/strings.h
index a57493a9b..81cbc63c1 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1061,4 +1061,18 @@ 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[];
+
#endif //GUARD_STRINGS_H
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index c171731c2..abd763367 100644
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "gflib.h"
+#include "dynamic_placeholder_text_util.h"
#include "help_system.h"
#include "link.h"
#include "link_rfu.h"
@@ -10,6 +11,7 @@
#include "quest_log.h"
#include "save.h"
#include "scanline_effect.h"
+#include "strings.h"
#include "task.h"
#include "data_8479668.h"
#include "constants/songs.h"
@@ -1110,5 +1112,310 @@ u16 sub_812951C(void)
void sub_8129560(u8 *arg0)
{
- arg0[0] = CHAR_SPACE;
+ arg0[0] = 0;
+}
+
+void sub_8129568(u8 *arg0)
+{
+ arg0[0] = 2;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13;
+}
+
+void sub_8129590(u8 *arg0)
+{
+ arg0[0] = 1;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], gUnknown_203B0E0->unk1A);
+}
+
+void sub_81295C0(u8 *arg0)
+{
+ arg0[0] = 3;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13;
+ sub_80FB9D0();
+}
+
+void sub_81295EC(u8 *arg0)
+{
+ arg0[0] = 4;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13;
+}
+
+void sub_8129614(u8 *arg0)
+{
+ arg0[0] = 5;
+ StringCopy(&arg0[1], gSaveBlock2Ptr->playerName);
+ arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_203B0E0->unk13;
+}
+
+bool32 sub_812963C(u8 *arg0, u8 *arg1)
+{
+ u8 *tempStr;
+ u8 var0 = *arg1;
+ u8 *str = arg1 + 1;
+ arg1 = str;
+ arg1 += 8;
+
+ switch (var0)
+ {
+ case 2:
+ if (gUnknown_203B0E0->unk13 != str[8])
+ {
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700JoinedChat);
+ return TRUE;
+ }
+ break;
+ case 1:
+ tempStr = StringCopy(arg0, str);
+ *(tempStr++) = EXT_CTRL_CODE_BEGIN;
+ *(tempStr++) = EXT_CTRL_CODE_CLEAR_TO;
+ *(tempStr++) = 42;
+ *(tempStr++) = CHAR_COLON;
+ StringCopy(tempStr, arg1);
+ return TRUE;
+ case 5:
+ StringCopy(gUnknown_203B0E0->unk79, str);
+ // fall through
+ case 3:
+ if (gUnknown_203B0E0->unk13 != *arg1)
+ {
+ DynamicPlaceholderTextUtil_Reset();
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700LeftChat);
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}
+
+u8 GetCurrentKeyboardPage(void)
+{
+ return gUnknown_203B0E0->currentPage;
+}
+
+void sub_8129700(u8 *arg0, u8 *arg1)
+{
+ *arg0 = gUnknown_203B0E0->unk11;
+ *arg1 = gUnknown_203B0E0->currentRow;
+}
+
+u8 *sub_8129714(void)
+{
+ return gUnknown_203B0E0->unk1A;
+}
+
+int sub_8129720(void)
+{
+ u8 *str = sub_8129714();
+ return StringLength_Multibyte(str);
+}
+
+void sub_8129730(u32 *arg0, u32 *arg1)
+{
+ int diff = gUnknown_203B0E0->unk15 - gUnknown_203B0E0->unk14;
+ if (diff < 0)
+ {
+ diff *= -1;
+ *arg0 = gUnknown_203B0E0->unk15;
+ }
+ else
+ {
+ *arg0 = gUnknown_203B0E0->unk14;
+ }
+
+ *arg1 = diff;
+}
+
+u8 *sub_8129758(void)
+{
+ int i;
+ u16 numChars = sub_812951C();
+ u8 *str = gUnknown_203B0E0->unk1A;
+ for (i = 0; i < numChars; i++)
+ {
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+
+ str++;
+ }
+
+ return str;
+}
+
+u16 sub_8129788(void)
+{
+ u16 count;
+ u32 i;
+ u16 numChars = sub_812951C();
+ u8 *str = gUnknown_203B0E0->unk1A;
+ for (count = 0, i = 0; i < numChars; count++, i++)
+ {
+ if (*str == CHAR_EXTRA_EMOJI)
+ str++;
+
+ str++;
+ }
+
+ return count;
+}
+
+u8 *sub_81297C4(void)
+{
+ return gUnknown_203B0E0->unk39;
+}
+
+u8 sub_81297D0(void)
+{
+ return gUnknown_203B0E0->unk16;
+}
+
+int sub_81297DC(void)
+{
+ return gUnknown_203B0E0->unk15;
+}
+
+int sub_81297E8(void)
+{
+ u8 *str = sub_81294EC();
+ u32 character = *str;
+ if (character > 0xFF || gUnknown_845A8AC[character] == character || gUnknown_845A8AC[character] == 0)
+ return 3;
+ else
+ return 0;
+}
+
+u8 *sub_8129814(void)
+{
+ return gUnknown_203B0E0->unk79;
+}
+
+void copy_strings_to_sav1(void)
+{
+ StringCopy(gSaveBlock1Ptr->unk3AD4[0], gText_Hello);
+ StringCopy(gSaveBlock1Ptr->unk3AD4[1], gText_Pokemon2);
+ StringCopy(gSaveBlock1Ptr->unk3AD4[2], gText_Trade);
+ StringCopy(gSaveBlock1Ptr->unk3AD4[3], gText_Battle);
+ StringCopy(gSaveBlock1Ptr->unk3AD4[4], gText_Lets);
+ StringCopy(gSaveBlock1Ptr->unk3AD4[5], gText_Ok);
+ StringCopy(gSaveBlock1Ptr->unk3AD4[6], gText_Sorry);
+ StringCopy(gSaveBlock1Ptr->unk3AD4[7], gText_YaySmileEmoji);
+ StringCopy(gSaveBlock1Ptr->unk3AD4[8], gText_ThankYou);
+ StringCopy(gSaveBlock1Ptr->unk3AD4[9], gText_ByeBye);
+}
+
+void sub_81298F8(u8 taskId)
+{
+ u8 *buffer;
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ DestroyTask(taskId);
+ return;
+ }
+
+ data[0] = 1;
+ // fall through
+ case 1:
+ data[4] = GetLinkPlayerCount();
+ if (gUnknown_203B0E0->unkD != data[4])
+ {
+ data[0] = 2;
+ gUnknown_203B0E0->unkD = data[4];
+ return;
+ }
+
+ data[3] = GetBlockReceivedStatus();
+ if (!data[3] && sub_80FBA1C())
+ return;
+
+ data[1] = 0;
+ data[0] = 3;
+ // fall through
+ case 3:
+ for (; data[1] < 5 && ((data[3] >> data[1]) & 1) == 0; data[1]++)
+ ;
+
+ if (data[1] == 5)
+ {
+ data[0] = 1;
+ return;
+ }
+
+ data[2] = data[1];
+ ResetBlockReceivedFlag(data[2]);
+ buffer = (u8 *)gBlockRecvBuffer[data[1]];
+ switch (buffer[0])
+ {
+ default:
+ case 1: data[5] = 3; break;
+ case 2: data[5] = 3; break;
+ case 3: data[5] = 4; break;
+ case 4: data[5] = 5; break;
+ case 5: data[5] = 6; break;
+ }
+
+ if (sub_812963C(gUnknown_203B0E0->unk39, (u8 *)gBlockRecvBuffer[data[1]]))
+ {
+ gUnknown_203B0E0->unk16 = data[1];
+ sub_8129C34(12, 2);
+ data[0] = 7;
+ }
+ else
+ {
+ data[0] = data[5];
+ }
+
+ data[1]++;
+ break;
+ case 7:
+ if (!sub_8129C8C(2))
+ data[0] = data[5];
+ break;
+ case 4:
+ if (!gUnknown_203B0E0->unk13 && data[2])
+ {
+ if (GetLinkPlayerCount() == 2)
+ {
+ sub_80FA4A8();
+ gUnknown_203B0E0->unk17 = 1;
+ DestroyTask(taskId);
+ return;
+ }
+
+ sub_80FBD6C(data[2]);
+ }
+
+ data[0] = 3;
+ break;
+ case 5:
+ if (gUnknown_203B0E0->unk13)
+ gUnknown_203B0E0->unk17 = 2;
+
+ DestroyTask(taskId);
+ break;
+ case 6:
+ gUnknown_203B0E0->unk17 = 3;
+ DestroyTask(taskId);
+ break;
+ case 2:
+ if (!sub_80FBA1C())
+ {
+ if (!gUnknown_203B0E0->unk13)
+ sub_80FB030(gUnknown_203B0E0->unkD);
+
+ data[0] = 1;
+ }
+ break;
+ }
}