summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-01-14 12:27:56 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2020-01-14 12:27:56 -0500
commitb76b38c257e36ce13b32f95ed726175efddb1478 (patch)
treea75213a57a1599e88a1874022f1adf572da8f692
parentd9ea5a08159ededd81fc0d8c33b0270b925081b6 (diff)
Finish porting link_rfu_2
-rw-r--r--asm/link_rfu_2.s4661
-rw-r--r--asm/overworld.s2
-rw-r--r--common_syms/link_rfu_2.txt3
-rw-r--r--data/link_rfu_2.s45
-rw-r--r--include/link.h16
-rw-r--r--include/link_rfu.h9
-rw-r--r--include/mystery_gift_menu.h1
-rw-r--r--ld_script.txt2
-rw-r--r--src/link_rfu_2.c1747
-rw-r--r--src/mevent_server_helpers.c8
-rw-r--r--sym_common.txt11
-rw-r--r--sym_ewram.txt8
12 files changed, 1703 insertions, 4810 deletions
diff --git a/asm/link_rfu_2.s b/asm/link_rfu_2.s
index e67fa8ccf..2428f2984 100644
--- a/asm/link_rfu_2.s
+++ b/asm/link_rfu_2.s
@@ -5,4665 +5,4 @@
.text
- thumb_func_start sub_80FA0F8
-sub_80FA0F8: @ 80FA0F8
- push {lr}
- ldr r1, _080FA110 @ =Rfu
- adds r1, 0x5A
- strb r0, [r1]
- movs r0, 0xA1
- lsls r0, 8
- bl sub_80F9D04
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_080FA110: .4byte Rfu
- thumb_func_end sub_80FA0F8
-
- thumb_func_start sub_80FA114
-sub_80FA114: @ 80FA114
- push {lr}
- bl rfu_clearAllSlot
- bl sub_80FD52C
- ldr r1, _080FA138 @ =gReceivedRemoteLinkPlayers
- movs r0, 0
- strb r0, [r1]
- ldr r2, _080FA13C @ =Rfu
- adds r3, r2, 0
- adds r3, 0xEF
- movs r1, 0
- movs r0, 0x1
- strb r0, [r3]
- str r1, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_080FA138: .4byte gReceivedRemoteLinkPlayers
-_080FA13C: .4byte Rfu
- thumb_func_end sub_80FA114
-
- thumb_func_start sub_80FA140
-sub_80FA140: @ 80FA140
- push {lr}
- ldr r0, _080FA15C @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r1, [r0, 0x2]
- ldrb r0, [r0, 0x3]
- orrs r0, r1
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- bl sub_80FA114
- pop {r0}
- bx r0
- .align 2, 0
-_080FA15C: .4byte gRfuLinkStatus
- thumb_func_end sub_80FA140
-
- thumb_func_start sub_80FA160
-sub_80FA160: @ 80FA160
- push {r4,lr}
- ldr r4, _080FA178 @ =Rfu
- ldrb r0, [r4, 0xC]
- cmp r0, 0
- bne _080FA180
- bl sub_80FEB14
- ldr r0, _080FA17C @ =0x0000099c
- adds r1, r4, r0
- movs r0, 0x2
- strb r0, [r1]
- b _080FA184
- .align 2, 0
-_080FA178: .4byte Rfu
-_080FA17C: .4byte 0x0000099c
-_080FA180:
- ldr r0, _080FA18C @ =sub_80FA140
- str r0, [r4]
-_080FA184:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA18C: .4byte sub_80FA140
- thumb_func_end sub_80FA160
-
- thumb_func_start sub_80FA190
-sub_80FA190: @ 80FA190
- push {lr}
- bl sub_80FEB14
- ldr r2, _080FA1B4 @ =Rfu
- ldr r0, _080FA1B8 @ =0x0000099c
- adds r1, r2, r0
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, _080FA1BC @ =gRfuLinkStatus
- ldr r1, [r0]
- ldrb r0, [r1, 0x2]
- ldrb r1, [r1, 0x3]
- orrs r0, r1
- ldr r1, _080FA1C0 @ =0x0000099b
- adds r2, r1
- strb r0, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_080FA1B4: .4byte Rfu
-_080FA1B8: .4byte 0x0000099c
-_080FA1BC: .4byte gRfuLinkStatus
-_080FA1C0: .4byte 0x0000099b
- thumb_func_end sub_80FA190
-
- thumb_func_start sub_80FA1C4
-sub_80FA1C4: @ 80FA1C4
- push {r4,r5,lr}
- ldr r0, _080FA208 @ =Rfu
- ldrb r5, [r0, 0xD]
- movs r2, 0
- movs r1, 0
- adds r3, r0, 0
- adds r4, r3, 0
- adds r4, 0xE4
-_080FA1D4:
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _080FA1DE
- adds r2, 0x1
-_080FA1DE:
- adds r1, 0x1
- cmp r1, 0x4
- ble _080FA1D4
- cmp r2, r5
- bne _080FA218
- ldr r2, _080FA20C @ =gBattleTypeFlags
- ldr r0, [r2]
- ldr r1, _080FA210 @ =0x0000ffdf
- ands r0, r1
- str r0, [r2]
- ldrb r0, [r3, 0xC]
- cmp r0, 0
- bne _080FA214
- adds r0, r3, 0
- adds r0, 0xEE
- ldrb r1, [r0]
- movs r1, 0x3
- strb r1, [r0]
- bl sub_80FA160
- b _080FA218
- .align 2, 0
-_080FA208: .4byte Rfu
-_080FA20C: .4byte gBattleTypeFlags
-_080FA210: .4byte 0x0000ffdf
-_080FA214:
- ldr r0, _080FA220 @ =sub_80FA160
- str r0, [r3]
-_080FA218:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA220: .4byte sub_80FA160
- thumb_func_end sub_80FA1C4
-
- thumb_func_start sub_80FA224
-sub_80FA224: @ 80FA224
- push {r4,lr}
- ldr r0, _080FA250 @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _080FA248
- ldr r4, _080FA254 @ =Rfu
- movs r1, 0x9A
- lsls r1, 4
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FA248
- movs r0, 0xBE
- lsls r0, 7
- bl sub_80F9D04
- ldr r0, _080FA258 @ =sub_80FA1C4
- str r0, [r4]
-_080FA248:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA250: .4byte gSendCmd
-_080FA254: .4byte Rfu
-_080FA258: .4byte sub_80FA1C4
- thumb_func_end sub_80FA224
-
- thumb_func_start sub_80FA25C
-sub_80FA25C: @ 80FA25C
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r2, _080FA280 @ =Rfu
- ldr r0, [r2]
- cmp r0, 0
- bne _080FA27C
- ldr r1, _080FA284 @ =0x00000991
- adds r0, r2, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, _080FA288 @ =sub_80FA224
- str r0, [r2]
- adds r0, r3, 0
- bl DestroyTask
-_080FA27C:
- pop {r0}
- bx r0
- .align 2, 0
-_080FA280: .4byte Rfu
-_080FA284: .4byte 0x00000991
-_080FA288: .4byte sub_80FA224
- thumb_func_end sub_80FA25C
-
- thumb_func_start task_add_05_task_del_08FA224_when_no_RfuFunc
-task_add_05_task_del_08FA224_when_no_RfuFunc: @ 80FA28C
- push {r4,lr}
- ldr r4, _080FA2AC @ =sub_80FA25C
- adds r0, r4, 0
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080FA2A4
- adds r0, r4, 0
- movs r1, 0x5
- bl CreateTask
-_080FA2A4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA2AC: .4byte sub_80FA25C
- thumb_func_end task_add_05_task_del_08FA224_when_no_RfuFunc
-
- thumb_func_start sub_80FA2B0
-sub_80FA2B0: @ 80FA2B0
- push {r4,r5,lr}
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- beq _080FA2DE
- ldr r1, _080FA348 @ =Rfu
- ldr r2, _080FA34C @ =0x0000069e
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r4, r0, 0
- cmp r4, 0
- bne _080FA2DE
- adds r5, r1, 0
- adds r5, 0xFE
- ldrh r0, [r5]
- cmp r0, 0x3C
- bls _080FA2DE
- movs r0, 0xCC
- lsls r0, 7
- bl sub_80F9D04
- strh r4, [r5]
-_080FA2DE:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- cmp r1, r2
- bcs _080FA30A
- ldr r0, _080FA348 @ =Rfu
- adds r3, r0, 0
- adds r3, 0xE9
- ldrb r0, [r3]
- cmp r0, 0
- beq _080FA30A
-_080FA2F8:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r2
- bcs _080FA30A
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FA2F8
-_080FA30A:
- ldr r4, _080FA348 @ =Rfu
- cmp r1, r2
- bne _080FA336
- movs r1, 0
- adds r3, r4, 0
- adds r3, 0xE9
- movs r2, 0
-_080FA318:
- adds r0, r1, r3
- strb r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x4
- bls _080FA318
- movs r1, 0x80
- lsls r1, 1
- adds r0, r4, r1
- ldrh r1, [r0]
- adds r1, 0x1
- movs r2, 0
- strh r1, [r0]
- str r2, [r4]
-_080FA336:
- adds r1, r4, 0
- adds r1, 0xFE
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA348: .4byte Rfu
-_080FA34C: .4byte 0x0000069e
- thumb_func_end sub_80FA2B0
-
- thumb_func_start sub_80FA350
-sub_80FA350: @ 80FA350
- push {r4,lr}
- ldr r4, _080FA378 @ =Rfu
- ldr r1, _080FA37C @ =0x0000069e
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FA372
- ldr r0, _080FA380 @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _080FA372
- movs r0, 0xCC
- lsls r0, 7
- bl sub_80F9D04
- ldr r0, _080FA384 @ =sub_80FA2B0
- str r0, [r4]
-_080FA372:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA378: .4byte Rfu
-_080FA37C: .4byte 0x0000069e
-_080FA380: .4byte gSendCmd
-_080FA384: .4byte sub_80FA2B0
- thumb_func_end sub_80FA350
-
- thumb_func_start sub_80FA388
-sub_80FA388: @ 80FA388
- push {r4,lr}
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- beq _080FA3C4
- ldr r4, _080FA3B4 @ =Rfu
- ldr r1, _080FA3B8 @ =0x0000069e
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FA416
- ldr r0, _080FA3BC @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _080FA416
- movs r0, 0xCC
- lsls r0, 7
- bl sub_80F9D04
- ldr r0, _080FA3C0 @ =sub_80FA2B0
- b _080FA414
- .align 2, 0
-_080FA3B4: .4byte Rfu
-_080FA3B8: .4byte 0x0000069e
-_080FA3BC: .4byte gSendCmd
-_080FA3C0: .4byte sub_80FA2B0
-_080FA3C4:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0x1
- cmp r1, r2
- bcs _080FA3F2
- ldr r3, _080FA41C @ =Rfu
- adds r0, r3, 0
- adds r0, 0xEA
- ldrb r0, [r0]
- cmp r0, 0
- beq _080FA3F2
- adds r3, 0xE9
-_080FA3E0:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, r2
- bcs _080FA3F2
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FA3E0
-_080FA3F2:
- cmp r1, r2
- bne _080FA416
- ldr r4, _080FA41C @ =Rfu
- ldr r1, _080FA420 @ =0x0000069e
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FA416
- ldr r0, _080FA424 @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _080FA416
- movs r0, 0xCC
- lsls r0, 7
- bl sub_80F9D04
- ldr r0, _080FA428 @ =sub_80FA350
-_080FA414:
- str r0, [r4]
-_080FA416:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA41C: .4byte Rfu
-_080FA420: .4byte 0x0000069e
-_080FA424: .4byte gSendCmd
-_080FA428: .4byte sub_80FA350
- thumb_func_end sub_80FA388
-
- thumb_func_start sub_80FA42C
-sub_80FA42C: @ 80FA42C
- push {lr}
- ldr r1, _080FA444 @ =Rfu
- ldr r2, [r1]
- cmp r2, 0
- bne _080FA440
- ldr r0, _080FA448 @ =sub_80FA388
- str r0, [r1]
- adds r0, r1, 0
- adds r0, 0xFE
- strh r2, [r0]
-_080FA440:
- pop {r0}
- bx r0
- .align 2, 0
-_080FA444: .4byte Rfu
-_080FA448: .4byte sub_80FA388
- thumb_func_end sub_80FA42C
-
- thumb_func_start sub_80FA44C
-sub_80FA44C: @ 80FA44C
- push {r4,lr}
- adds r3, r0, 0
- ldr r1, _080FA468 @ =gUnknown_843EC8C
- ldrh r0, [r1]
- cmp r0, r3
- beq _080FA47A
- ldr r4, _080FA46C @ =0x0000ffff
- adds r2, r1, 0
-_080FA45C:
- ldrh r0, [r2]
- cmp r0, r4
- bne _080FA470
- movs r0, 0
- b _080FA47C
- .align 2, 0
-_080FA468: .4byte gUnknown_843EC8C
-_080FA46C: .4byte 0x0000ffff
-_080FA470:
- adds r1, 0x2
- adds r2, 0x2
- ldrh r0, [r1]
- cmp r0, r3
- bne _080FA45C
-_080FA47A:
- movs r0, 0x1
-_080FA47C:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80FA44C
-
- thumb_func_start sub_80FA484
-sub_80FA484: @ 80FA484
- push {lr}
- cmp r0, 0
- beq _080FA498
- movs r1, 0x96
- lsls r1, 2
- movs r0, 0x1
- bl sub_80FEA34
- movs r0, 0
- b _080FA4A4
-_080FA498:
- movs r0, 0
- movs r1, 0
- bl sub_80FEA34
- lsls r0, 24
- lsrs r0, 24
-_080FA4A4:
- pop {r1}
- bx r1
- thumb_func_end sub_80FA484
-
- thumb_func_start sub_80FA4A8
-sub_80FA4A8: @ 80FA4A8
- push {lr}
- ldr r0, _080FA4C0 @ =Rfu
- ldr r1, _080FA4C4 @ =0x00000991
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- movs r0, 0
- bl sub_80FD760
- pop {r0}
- bx r0
- .align 2, 0
-_080FA4C0: .4byte Rfu
-_080FA4C4: .4byte 0x00000991
- thumb_func_end sub_80FA4A8
-
- thumb_func_start rfu_get_multiplayer_id
-rfu_get_multiplayer_id: @ 80FA4C8
- push {lr}
- ldr r1, _080FA4DC @ =Rfu
- ldrb r0, [r1, 0xC]
- cmp r0, 0x1
- beq _080FA4E4
- ldr r2, _080FA4E0 @ =0x00000986
- adds r0, r1, r2
- ldrb r0, [r0]
- b _080FA4E6
- .align 2, 0
-_080FA4DC: .4byte Rfu
-_080FA4E0: .4byte 0x00000986
-_080FA4E4:
- movs r0, 0
-_080FA4E6:
- pop {r1}
- bx r1
- thumb_func_end rfu_get_multiplayer_id
-
- thumb_func_start GetRfuPlayerCount
-GetRfuPlayerCount: @ 80FA4EC
- ldr r0, _080FA4F4 @ =Rfu
- ldrb r0, [r0, 0xD]
- bx lr
- .align 2, 0
-_080FA4F4: .4byte Rfu
- thumb_func_end GetRfuPlayerCount
-
- thumb_func_start IsLinkRfuTaskFinished
-IsLinkRfuTaskFinished: @ 80FA4F8
- push {lr}
- movs r1, 0
- ldr r0, _080FA50C @ =Rfu
- ldr r0, [r0]
- cmp r0, 0
- bne _080FA506
- movs r1, 0x1
-_080FA506:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080FA50C: .4byte Rfu
- thumb_func_end IsLinkRfuTaskFinished
-
- thumb_func_start sub_80FA510
-sub_80FA510: @ 80FA510
- push {lr}
- ldr r0, _080FA524 @ =Rfu
- ldr r0, [r0]
- cmp r0, 0
- beq _080FA51E
- bl _call_via_r0
-_080FA51E:
- pop {r0}
- bx r0
- .align 2, 0
-_080FA524: .4byte Rfu
- thumb_func_end sub_80FA510
-
- thumb_func_start sub_80FA528
-sub_80FA528: @ 80FA528
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r7, 0
- movs r5, 0
- ldr r6, _080FA594 @ =Rfu
- ldr r0, _080FA598 @ =0x000008f6
- adds r0, r6
- mov r8, r0
-_080FA53A:
- ldr r1, _080FA59C @ =0x00000989
- adds r0, r6, r1
- adds r4, r5, r0
- ldrb r0, [r4]
- subs r0, 0x5
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080FA5C2
- ldr r1, _080FA5A0 @ =gRfuSlotStatusNI
- lsls r0, r5, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x46
- beq _080FA55E
- cmp r0, 0x48
- bne _080FA5A8
-_080FA55E:
- ldr r2, _080FA5A4 @ =0x0000098d
- adds r0, r6, r2
- adds r1, r5, r0
- ldrb r0, [r1]
- cmp r0, 0x8
- bne _080FA5C2
- movs r0, 0x9
- strb r0, [r4]
- movs r0, 0xA
- strb r0, [r1]
- lsls r1, r5, 24
- lsrs r1, 24
- movs r0, 0x8
- bl rfu_clearSlot
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r5
- lsrs r0, 24
- movs r1, 0x8
- adds r2, r4, 0
- movs r3, 0x1
- bl rfu_NI_setSendData
- movs r7, 0x1
- b _080FA5C2
- .align 2, 0
-_080FA594: .4byte Rfu
-_080FA598: .4byte 0x000008f6
-_080FA59C: .4byte 0x00000989
-_080FA5A0: .4byte gRfuSlotStatusNI
-_080FA5A4: .4byte 0x0000098d
-_080FA5A8:
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x47
- bne _080FA5C2
- lsls r1, r5, 24
- lsrs r1, 24
- movs r0, 0x8
- bl rfu_clearSlot
-_080FA5C2:
- adds r5, 0x1
- cmp r5, 0x3
- ble _080FA53A
- adds r0, r7, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80FA528
-
- thumb_func_start sub_80FA5D4
-sub_80FA5D4: @ 80FA5D4
- push {r4-r6,lr}
- movs r3, 0
- movs r1, 0
- ldr r5, _080FA620 @ =Rfu+0x98d
- movs r6, 0x1
- movs r4, 0
-_080FA5E0:
- adds r2, r1, r5
- ldrb r0, [r2]
- cmp r0, 0xB
- bne _080FA5F4
- adds r0, r6, 0
- lsls r0, r1
- orrs r3, r0
- lsls r0, r3, 24
- lsrs r3, r0, 24
- strb r4, [r2]
-_080FA5F4:
- adds r1, 0x1
- cmp r1, 0x3
- ble _080FA5E0
- cmp r3, 0
- beq _080FA608
- adds r0, r3, 0
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
-_080FA608:
- movs r1, 0
- ldr r2, _080FA620 @ =Rfu+0x98d
-_080FA60C:
- adds r0, r1, r2
- ldrb r0, [r0]
- subs r0, 0xA
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _080FA624
- movs r0, 0x1
- b _080FA62C
- .align 2, 0
-_080FA620: .4byte Rfu+0x98d
-_080FA624:
- adds r1, 0x1
- cmp r1, 0x3
- ble _080FA60C
- movs r0, 0
-_080FA62C:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80FA5D4
-
- thumb_func_start sub_80FA634
-sub_80FA634: @ 80FA634
- push {lr}
- adds r2, r0, 0
- adds r0, r1, 0
- lsls r2, 16
- lsrs r2, 16
- adds r1, r2, 0
- bl sub_80FBC70
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xFF
- beq _080FA668
- ldr r0, _080FA660 @ =Rfu
- ldr r2, _080FA664 @ =0x00000989
- adds r0, r2
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0x9
- beq _080FA668
- movs r0, 0
- b _080FA66A
- .align 2, 0
-_080FA660: .4byte Rfu
-_080FA664: .4byte 0x00000989
-_080FA668:
- movs r0, 0x1
-_080FA66A:
- pop {r1}
- bx r1
- thumb_func_end sub_80FA634
-
- thumb_func_start sub_80FA670
-sub_80FA670: @ 80FA670
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r0, r2, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r1, 16
- lsrs r1, 16
- bl sub_80FBC70
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _080FA6B4 @ =Rfu
- ldr r0, _080FA6B8 @ =0x00000989
- adds r5, r0
- adds r5, r4, r5
- strb r6, [r5]
- movs r0, 0x4
- adds r1, r4, 0
- bl rfu_clearSlot
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r4
- lsrs r0, 24
- movs r1, 0x8
- adds r2, r5, 0
- movs r3, 0x1
- bl rfu_NI_setSendData
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA6B4: .4byte Rfu
-_080FA6B8: .4byte 0x00000989
- thumb_func_end sub_80FA670
-
- thumb_func_start sub_80FA6BC
-sub_80FA6BC: @ 80FA6BC
- push {r4,r5,lr}
- ldr r4, _080FA6F0 @ =Rfu
- ldr r0, _080FA6F4 @ =0x0000093d
- adds r5, r4, r0
- movs r0, 0x8
- strb r0, [r5]
- ldr r0, _080FA6F8 @ =0x000008f6
- adds r4, r0
- ldrb r1, [r4]
- movs r0, 0x4
- bl rfu_clearSlot
- ldrb r1, [r4]
- movs r0, 0x80
- lsls r0, 17
- lsls r0, r1
- lsrs r0, 24
- movs r1, 0x8
- adds r2, r5, 0
- movs r3, 0x1
- bl rfu_NI_setSendData
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA6F0: .4byte Rfu
-_080FA6F4: .4byte 0x0000093d
-_080FA6F8: .4byte 0x000008f6
- thumb_func_end sub_80FA6BC
-
- thumb_func_start sub_80FA6FC
-sub_80FA6FC: @ 80FA6FC
- push {lr}
- adds r2, r0, 0
- adds r0, r1, 0
- lsls r2, 16
- lsrs r2, 16
- adds r1, r2, 0
- bl sub_80FBC70
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _080FA718
- movs r0, 0x2
- b _080FA732
-_080FA718:
- ldr r1, _080FA72C @ =gRfuSlotStatusNI
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0
- beq _080FA730
- movs r0, 0
- b _080FA732
- .align 2, 0
-_080FA72C: .4byte gRfuSlotStatusNI
-_080FA730:
- movs r0, 0x1
-_080FA732:
- pop {r1}
- bx r1
- thumb_func_end sub_80FA6FC
-
- thumb_func_start sub_80FA738
-sub_80FA738: @ 80FA738
- push {r4,r5,lr}
- bl sub_80FA528
- movs r4, 0
- ldr r0, _080FA77C @ =Rfu
- ldr r1, _080FA780 @ =0x0000098d
- adds r5, r0, r1
-_080FA746:
- ldr r1, _080FA784 @ =gRfuSlotStatusNI
- lsls r0, r4, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0]
- subs r0, 0x26
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _080FA770
- adds r1, r4, r5
- ldrb r0, [r1]
- cmp r0, 0xA
- bne _080FA766
- movs r0, 0xB
- strb r0, [r1]
-_080FA766:
- lsls r1, r4, 24
- lsrs r1, 24
- movs r0, 0x4
- bl rfu_clearSlot
-_080FA770:
- adds r4, 0x1
- cmp r4, 0x3
- ble _080FA746
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA77C: .4byte Rfu
-_080FA780: .4byte 0x0000098d
-_080FA784: .4byte gRfuSlotStatusNI
- thumb_func_end sub_80FA738
-
- thumb_func_start sub_80FA788
-sub_80FA788: @ 80FA788
- push {r4,r5,lr}
- movs r4, 0
- ldr r1, _080FA800 @ =Rfu
- ldr r2, _080FA804 @ =0x0000093d
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _080FA7C2
- ldr r2, _080FA808 @ =gRfuSlotStatusNI
- ldr r0, _080FA80C @ =0x000008f6
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0x26
- beq _080FA7BA
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0x27
- bne _080FA7C2
-_080FA7BA:
- ldrb r1, [r1]
- movs r0, 0x4
- bl rfu_clearSlot
-_080FA7C2:
- ldr r2, _080FA808 @ =gRfuSlotStatusNI
- ldr r5, _080FA800 @ =Rfu
- ldr r0, _080FA80C @ =0x000008f6
- adds r1, r5, r0
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x46
- beq _080FA7E6
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x48
- bne _080FA814
-_080FA7E6:
- ldrb r1, [r1]
- movs r0, 0x8
- bl rfu_clearSlot
- ldr r2, _080FA810 @ =0x0000093e
- adds r4, r5, r2
- ldrb r0, [r4]
- movs r1, 0
- bl sub_80FB9E4
- ldrb r4, [r4]
- b _080FA82C
- .align 2, 0
-_080FA800: .4byte Rfu
-_080FA804: .4byte 0x0000093d
-_080FA808: .4byte gRfuSlotStatusNI
-_080FA80C: .4byte 0x000008f6
-_080FA810: .4byte 0x0000093e
-_080FA814:
- ldrb r0, [r1]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ldrh r0, [r0, 0x34]
- cmp r0, 0x47
- bne _080FA82C
- ldrb r1, [r1]
- movs r0, 0x8
- bl rfu_clearSlot
- movs r4, 0x6
-_080FA82C:
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80FA788
-
- thumb_func_start sub_80FA834
-sub_80FA834: @ 80FA834
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, _080FA884 @ =Rfu
- adds r0, r5, 0
- adds r0, 0xF1
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _080FA85C
- movs r0, 0x9A
- lsls r0, 4
- adds r1, r5, r0
- movs r0, 0
- strb r0, [r1]
- adds r0, r6, 0
- bl DestroyTask
-_080FA85C:
- ldr r2, _080FA888 @ =gTasks
- lsls r1, r6, 2
- adds r0, r1, r6
- lsls r0, 3
- adds r4, r0, r2
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- adds r7, r1, 0
- cmp r0, 0x3
- beq _080FA904
- cmp r0, 0x3
- bgt _080FA88C
- cmp r0, 0x1
- beq _080FA8B4
- cmp r0, 0x1
- bgt _080FA900
- cmp r0, 0
- beq _080FA89E
- b _080FA9BC
- .align 2, 0
-_080FA884: .4byte Rfu
-_080FA888: .4byte gTasks
-_080FA88C:
- cmp r0, 0x5
- beq _080FA938
- cmp r0, 0x5
- blt _080FA926
- cmp r0, 0x6
- beq _080FA96C
- cmp r0, 0x65
- beq _080FA8EC
- b _080FA9BC
-_080FA89E:
- bl sub_80F9C50
- lsls r0, 24
- cmp r0, 0
- bne _080FA8AA
- b _080FA9BC
-_080FA8AA:
- bl ResetBlockReceivedFlags
- bl sub_800B0B4
- b _080FA930
-_080FA8B4:
- ldrb r0, [r5, 0xC]
- cmp r0, 0x1
- bne _080FA8F4
- ldr r0, _080FA8CC @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _080FA8D0
- movs r0, 0xF0
- lsls r0, 7
- bl sub_80F9D04
- b _080FA8D8
- .align 2, 0
-_080FA8CC: .4byte gReceivedRemoteLinkPlayers
-_080FA8D0:
- movs r0, 0xEE
- lsls r0, 7
- bl sub_80F9D04
-_080FA8D8:
- ldr r0, _080FA8E8 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x65
- strh r0, [r1, 0x8]
- b _080FA9BC
- .align 2, 0
-_080FA8E8: .4byte gTasks
-_080FA8EC:
- ldr r0, _080FA8FC @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- bne _080FA9BC
-_080FA8F4:
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _080FA9BC
- .align 2, 0
-_080FA8FC: .4byte gSendCmd
-_080FA900:
- ldrb r0, [r5, 0xD]
- b _080FA92C
-_080FA904:
- ldrb r0, [r5, 0xC]
- cmp r0, 0x1
- bne _080FA930
- bl sub_80F9C50
- lsls r0, 24
- cmp r0, 0
- beq _080FA9BC
- adds r1, r5, 0
- adds r1, 0x5A
- movs r0, 0
- strb r0, [r1]
- movs r0, 0xA1
- lsls r0, 8
- bl sub_80F9D04
- b _080FA930
-_080FA926:
- bl sub_80F9C78
- lsls r0, 24
-_080FA92C:
- cmp r0, 0
- beq _080FA9BC
-_080FA930:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080FA9BC
-_080FA938:
- movs r4, 0
- ldrb r0, [r5, 0xD]
- cmp r4, r0
- bge _080FA956
-_080FA940:
- adds r0, r4, 0
- bl sub_800B110
- lsls r0, r4, 24
- lsrs r0, 24
- bl Rfu_ResetBlockReceivedFlag
- adds r4, 0x1
- ldrb r2, [r5, 0xD]
- cmp r4, r2
- blt _080FA940
-_080FA956:
- ldr r0, _080FA968 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080FA9BC
- .align 2, 0
-_080FA968: .4byte gTasks
-_080FA96C:
- adds r0, r6, 0
- bl DestroyTask
- ldr r1, _080FA9C4 @ =gReceivedRemoteLinkPlayers
- movs r0, 0x1
- strb r0, [r1]
- movs r0, 0x9A
- lsls r0, 4
- adds r1, r5, r0
- movs r0, 0
- strb r0, [r1]
- movs r1, 0x96
- lsls r1, 2
- movs r0, 0x1
- bl sub_80FEA34
- ldr r2, _080FA9C8 @ =0x0000099e
- adds r1, r5, r2
- ldrb r0, [r1]
- cmp r0, 0
- beq _080FA9BC
- movs r4, 0
- adds r2, r1, 0
- movs r3, 0x1
- ldr r0, _080FA9CC @ =0x0000099d
- adds r5, r0
-_080FA9A0:
- ldrb r0, [r2]
- asrs r0, r4
- ands r0, r3
- cmp r0, 0
- beq _080FA9B6
- adds r0, r3, 0
- lsls r0, r4
- strb r0, [r5]
- ldrb r1, [r2]
- eors r0, r1
- strb r0, [r2]
-_080FA9B6:
- adds r4, 0x1
- cmp r4, 0x3
- ble _080FA9A0
-_080FA9BC:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA9C4: .4byte gReceivedRemoteLinkPlayers
-_080FA9C8: .4byte 0x0000099e
-_080FA9CC: .4byte 0x0000099d
- thumb_func_end sub_80FA834
-
- thumb_func_start sub_80FA9D0
-sub_80FA9D0: @ 80FA9D0
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0
- movs r5, 0x1
- ldr r4, _080FA9F8 @ =Rfu+0x996
- movs r3, 0
-_080FA9DE:
- adds r0, r2, 0
- asrs r0, r1
- ands r0, r5
- cmp r0, 0
- beq _080FA9EC
- adds r0, r1, r4
- strb r3, [r0]
-_080FA9EC:
- adds r1, 0x1
- cmp r1, 0x3
- ble _080FA9DE
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FA9F8: .4byte Rfu+0x996
- thumb_func_end sub_80FA9D0
-
- thumb_func_start sub_80FA9FC
-sub_80FA9FC: @ 80FA9FC
- push {r4-r7,lr}
- adds r2, r0, 0
- ldr r1, _080FAA4C @ =Rfu
- ldrb r0, [r2, 0xF]
- strb r0, [r1, 0xD]
- movs r4, 0
- ldr r0, _080FAA50 @ =0x00000996
- adds r5, r1, r0
- adds r3, r2, 0
- adds r3, 0x10
-_080FAA10:
- adds r0, r4, r5
- adds r1, r3, r4
- ldrb r1, [r1]
- strb r1, [r0]
- adds r4, 0x1
- cmp r4, 0x3
- ble _080FAA10
- adds r6, r2, 0
- ldr r5, _080FAA54 @ =gLinkPlayers
- movs r4, 0x4
-_080FAA24:
- adds r0, r5, 0
- adds r1, r6, 0
- adds r1, 0x14
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- ldm r1!, {r2,r3,r7}
- stm r0!, {r2,r3,r7}
- ldr r1, [r1]
- str r1, [r0]
- adds r0, r5, 0
- bl sub_800B284
- adds r6, 0x1C
- adds r5, 0x1C
- subs r4, 0x1
- cmp r4, 0
- bge _080FAA24
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FAA4C: .4byte Rfu
-_080FAA50: .4byte 0x00000996
-_080FAA54: .4byte gLinkPlayers
- thumb_func_end sub_80FA9FC
-
- thumb_func_start sub_80FAA58
-sub_80FAA58: @ 80FAA58
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r0, _080FAA8C @ =gUnknown_843EDE4 "PokemonSioInfo"
- adds r1, r4, 0
- bl strcmp
- adds r5, r0, 0
- cmp r5, 0
- bne _080FAA84
- adds r0, r4, 0
- bl sub_80FA9FC
- mov r0, sp
- strh r5, [r0]
- ldr r2, _080FAA90 @ =0x0100007e
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0
- bl ResetBlockReceivedFlag
-_080FAA84:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FAA8C: .4byte gUnknown_843EDE4
-_080FAA90: .4byte 0x0100007e
- thumb_func_end sub_80FAA58
-
- thumb_func_start sub_80FAA94
-sub_80FAA94: @ 80FAA94
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, _080FAAF4 @ =Rfu
- ldr r2, _080FAAF8 @ =gUnknown_843EC38
- ldr r1, _080FAAFC @ =0x000009a1
- adds r0, r3, r1
- ldrb r1, [r0]
- adds r1, r2
- ldr r2, _080FAB00 @ =0x00000996
- adds r0, r3, r2
- ldrb r1, [r1]
- adds r0, r1
- ldrb r4, [r0]
- adds r0, r3, 0
- adds r0, 0xF1
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _080FAAD2
- movs r5, 0x9A
- lsls r5, 4
- adds r1, r3, r5
- movs r0, 0
- strb r0, [r1]
- adds r0, r6, 0
- bl DestroyTask
-_080FAAD2:
- ldr r0, _080FAB04 @ =gTasks
- lsls r2, r6, 2
- adds r1, r2, r6
- lsls r1, 3
- adds r1, r0
- movs r3, 0x8
- ldrsh r1, [r1, r3]
- adds r3, r0, 0
- adds r7, r2, 0
- cmp r1, 0x5
- bls _080FAAEA
- b _080FACD6
-_080FAAEA:
- lsls r0, r1, 2
- ldr r1, _080FAB08 @ =_080FAB0C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080FAAF4: .4byte Rfu
-_080FAAF8: .4byte gUnknown_843EC38
-_080FAAFC: .4byte 0x000009a1
-_080FAB00: .4byte 0x00000996
-_080FAB04: .4byte gTasks
-_080FAB08: .4byte _080FAB0C
- .align 2, 0
-_080FAB0C:
- .4byte _080FAB24
- .4byte _080FAB44
- .4byte _080FAB5C
- .4byte _080FABA4
- .4byte _080FABEE
- .4byte _080FAC78
-_080FAB24:
- ldr r0, _080FAB40 @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- beq _080FAB2E
- b _080FACD6
-_080FAB2E:
- adds r0, r4, 0
- bl ResetBlockReceivedFlag
- movs r0, 0xF0
- lsls r0, 7
- bl sub_80F9D04
- b _080FAC2E
- .align 2, 0
-_080FAB40: .4byte gSendCmd
-_080FAB44:
- ldr r0, _080FAB58 @ =gSendCmd
- ldrh r0, [r0]
- cmp r0, 0
- beq _080FAB4E
- b _080FACD6
-_080FAB4E:
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r3
- b _080FAC36
- .align 2, 0
-_080FAB58: .4byte gSendCmd
-_080FAB5C:
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- asrs r0, r4
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080FAB70
- b _080FACD6
-_080FAB70:
- adds r0, r4, 0
- bl ResetBlockReceivedFlag
- lsls r2, r4, 8
- ldr r0, _080FAB9C @ =gBlockRecvBuffer
- adds r2, r0
- ldr r1, _080FABA0 @ =gLinkPlayers
- lsls r0, r4, 3
- subs r0, r4
- lsls r0, 2
- adds r0, r1
- adds r1, r0, 0
- adds r2, 0x10
- ldm r2!, {r3-r5}
- stm r1!, {r3-r5}
- ldm r2!, {r3-r5}
- stm r1!, {r3-r5}
- ldr r2, [r2]
- str r2, [r1]
- bl sub_800B284
- b _080FAC2E
- .align 2, 0
-_080FAB9C: .4byte gBlockRecvBuffer
-_080FABA0: .4byte gLinkPlayers
-_080FABA4:
- ldr r5, _080FAC40 @ =gBlockSendBuffer
- adds r1, r5, 0
- ldr r0, _080FAC44 @ =gUnknown_843EDE4 "PokemonSioInfo"
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldrh r2, [r0]
- strh r2, [r1]
- ldrb r0, [r0, 0x2]
- strb r0, [r1, 0x2]
- ldr r1, _080FAC48 @ =Rfu
- ldrb r0, [r1, 0xD]
- strb r0, [r5, 0xF]
- movs r2, 0
- adds r4, r5, 0
- adds r4, 0x10
- ldr r0, _080FAC4C @ =0x00000996
- adds r3, r1, r0
-_080FABC6:
- adds r0, r4, r2
- adds r1, r2, r3
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x3
- ble _080FABC6
- ldr r1, _080FAC50 @ =gLinkPlayers
- adds r0, r5, 0
- adds r0, 0x14
- movs r2, 0x8C
- bl memcpy
- ldr r0, _080FAC54 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_080FABEE:
- ldr r5, _080FAC40 @ =gBlockSendBuffer
- ldr r1, _080FAC48 @ =Rfu
- ldrb r0, [r1, 0xD]
- strb r0, [r5, 0xF]
- movs r2, 0
- ldr r3, _080FAC50 @ =gLinkPlayers
- mov r12, r3
- adds r4, r5, 0
- adds r4, 0x10
- ldr r0, _080FAC4C @ =0x00000996
- adds r3, r1, r0
-_080FAC04:
- adds r0, r4, r2
- adds r1, r2, r3
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x3
- ble _080FAC04
- adds r0, r5, 0
- adds r0, 0x14
- mov r1, r12
- movs r2, 0x8C
- bl memcpy
- ldr r1, _080FAC40 @ =gBlockSendBuffer
- movs r0, 0
- movs r2, 0xA0
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _080FACD6
-_080FAC2E:
- ldr r0, _080FAC54 @ =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
-_080FAC36:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _080FACD6
- .align 2, 0
-_080FAC40: .4byte gBlockSendBuffer
-_080FAC44: .4byte gUnknown_843EDE4
-_080FAC48: .4byte Rfu
-_080FAC4C: .4byte 0x00000996
-_080FAC50: .4byte gLinkPlayers
-_080FAC54: .4byte gTasks
-_080FAC58:
- adds r0, r3, 0
- lsls r0, r2
- ldr r2, _080FAC74 @ =0x0000099d
- adds r1, r5, r2
- strb r0, [r1]
- ldrb r1, [r4]
- eors r0, r1
- strb r0, [r4]
- movs r4, 0x9A
- lsls r4, 4
- adds r0, r5, r4
- strb r3, [r0]
- b _080FACD0
- .align 2, 0
-_080FAC74: .4byte 0x0000099d
-_080FAC78:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _080FACD6
- bl GetBlockReceivedStatus
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _080FACD6
- mov r0, sp
- movs r4, 0
- strh r4, [r0]
- ldr r1, _080FACE0 @ =gBlockRecvBuffer
- ldr r2, _080FACE4 @ =0x0100007e
- bl CpuSet
- movs r0, 0
- bl ResetBlockReceivedFlag
- ldr r1, _080FACE8 @ =Rfu
- movs r5, 0x9A
- lsls r5, 4
- adds r0, r1, r5
- strb r4, [r0]
- ldr r0, _080FACEC @ =0x0000099e
- adds r3, r1, r0
- ldrb r0, [r3]
- cmp r0, 0
- beq _080FACD0
- movs r2, 0
- adds r5, r1, 0
- adds r4, r3, 0
- ldrb r1, [r4]
- movs r3, 0x1
-_080FACC0:
- adds r0, r1, 0
- asrs r0, r2
- ands r0, r3
- cmp r0, 0
- bne _080FAC58
- adds r2, 0x1
- cmp r2, 0x3
- ble _080FACC0
-_080FACD0:
- adds r0, r6, 0
- bl DestroyTask
-_080FACD6:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FACE0: .4byte gBlockRecvBuffer
-_080FACE4: .4byte 0x0100007e
-_080FACE8: .4byte Rfu
-_080FACEC: .4byte 0x0000099e
- thumb_func_end sub_80FAA94
-
- thumb_func_start sub_80FACF0
-sub_80FACF0: @ 80FACF0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r6, _080FAD2C @ =Rfu
- adds r0, r6, 0
- adds r0, 0xF1
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _080FAD0E
- adds r0, r5, 0
- bl DestroyTask
-_080FAD0E:
- ldr r1, _080FAD30 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080FAD54
- cmp r0, 0x1
- bgt _080FAD34
- cmp r0, 0
- beq _080FAD3A
- b _080FAD8A
- .align 2, 0
-_080FAD2C: .4byte Rfu
-_080FAD30: .4byte gTasks
-_080FAD34:
- cmp r0, 0x2
- beq _080FAD66
- b _080FAD8A
-_080FAD3A:
- ldrb r0, [r6, 0xD]
- cmp r0, 0
- beq _080FAD8A
- bl sub_800B0B4
- ldr r1, _080FAD50 @ =gBlockSendBuffer
- movs r0, 0
- movs r2, 0x3C
- bl SendBlock
- b _080FAD5E
- .align 2, 0
-_080FAD50: .4byte gBlockSendBuffer
-_080FAD54:
- bl IsLinkTaskFinished
- lsls r0, 24
- cmp r0, 0
- beq _080FAD8A
-_080FAD5E:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080FAD8A
-_080FAD66:
- bl GetBlockReceivedStatus
- movs r4, 0x1
- adds r1, r4, 0
- ands r1, r0
- cmp r1, 0
- beq _080FAD8A
- ldr r0, _080FAD90 @ =gBlockRecvBuffer
- bl sub_80FA9FC
- movs r0, 0
- bl ResetBlockReceivedFlag
- ldr r0, _080FAD94 @ =gReceivedRemoteLinkPlayers
- strb r4, [r0]
- adds r0, r5, 0
- bl DestroyTask
-_080FAD8A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FAD90: .4byte gBlockRecvBuffer
-_080FAD94: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_80FACF0
-
- thumb_func_start sub_80FAD98
-sub_80FAD98: @ 80FAD98
- push {r4-r7,lr}
- ldr r0, _080FAE10 @ =Rfu
- adds r7, r0, 0
- adds r7, 0xEE
- ldrb r1, [r7]
- adds r5, r0, 0
- cmp r1, 0x1
- bne _080FAE30
- ldr r0, _080FAE14 @ =gUnknown_3005E10
- ldrb r0, [r0, 0x2]
- cmp r0, 0
- bne _080FAE30
- ldr r6, _080FAE18 @ =gMain
- ldr r1, [r6, 0x4]
- ldr r0, _080FAE1C @ =c2_mystery_gift_e_reader_run
- cmp r1, r0
- bne _080FADC0
- ldr r1, _080FAE20 @ =gWirelessCommType
- movs r0, 0x2
- strb r0, [r1]
-_080FADC0:
- ldr r4, _080FAE24 @ =CB2_LinkError
- adds r0, r4, 0
- bl SetMainCallback2
- str r4, [r6, 0x8]
- ldrh r0, [r5, 0xA]
- lsls r4, r0, 16
- ldrh r0, [r5, 0x10]
- lsls r0, 8
- orrs r4, r0
- ldrh r0, [r5, 0x12]
- orrs r4, r0
- ldr r1, _080FAE28 @ =0x0000069e
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r6, r0, 0
- ldr r1, _080FAE2C @ =0x000008d2
- adds r0, r5, r1
- ldrb r0, [r0]
- adds r5, r0, 0
- bl sub_80FB9F4
- movs r3, 0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _080FADF8
- movs r3, 0x1
-_080FADF8:
- adds r0, r4, 0
- adds r1, r6, 0
- adds r2, r5, 0
- bl sub_800ACBC
- ldrb r0, [r7]
- movs r0, 0x2
- strb r0, [r7]
- bl CloseLink
- b _080FAE62
- .align 2, 0
-_080FAE10: .4byte Rfu
-_080FAE14: .4byte gUnknown_3005E10
-_080FAE18: .4byte gMain
-_080FAE1C: .4byte c2_mystery_gift_e_reader_run
-_080FAE20: .4byte gWirelessCommType
-_080FAE24: .4byte CB2_LinkError
-_080FAE28: .4byte 0x0000069e
-_080FAE2C: .4byte 0x000008d2
-_080FAE30:
- ldr r1, _080FAE68 @ =0x000008d3
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080FAE44
- ldr r1, _080FAE6C @ =0x0000069f
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080FAE62
-_080FAE44:
- ldr r0, _080FAE70 @ =gUnknown_3005E10
- ldrb r0, [r0, 0x2]
- cmp r0, 0
- beq _080FAE50
- bl sub_80FEB14
-_080FAE50:
- movs r4, 0xE0
- lsls r4, 7
- movs r0, 0x1
- adds r1, r4, 0
- bl sub_80FB9E4
- adds r0, r4, 0
- bl sub_80FB0E8
-_080FAE62:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FAE68: .4byte 0x000008d3
-_080FAE6C: .4byte 0x0000069f
-_080FAE70: .4byte gUnknown_3005E10
- thumb_func_end sub_80FAD98
-
- thumb_func_start rfu_REQ_recvData_then_sendData
-rfu_REQ_recvData_then_sendData: @ 80FAE74
- push {lr}
- ldr r0, _080FAE90 @ =gUnknown_3005E10
- ldrb r0, [r0, 0x6]
- cmp r0, 0x1
- bne _080FAE8C
- bl rfu_REQ_recvData
- bl rfu_waitREQComplete
- movs r0, 0
- bl LinkRfu_REQ_SendData_HandleParentRelationship
-_080FAE8C:
- pop {r0}
- bx r0
- .align 2, 0
-_080FAE90: .4byte gUnknown_3005E10
- thumb_func_end rfu_REQ_recvData_then_sendData
-
- thumb_func_start sub_80FAE94
-sub_80FAE94: @ 80FAE94
- push {r4,r5,lr}
- movs r5, 0
- ldr r4, _080FAEC8 @ =Rfu
- ldr r1, _080FAECC @ =0x00000985
- adds r0, r4, r1
- strb r5, [r0]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- bl sub_80FDA30
- adds r0, r4, 0
- adds r0, 0xEF
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FAEE8
- ldrb r0, [r4, 0xC]
- cmp r0, 0x1
- beq _080FAED6
- cmp r0, 0x1
- bgt _080FAED0
- cmp r0, 0
- beq _080FAEDC
- b _080FAEE8
- .align 2, 0
-_080FAEC8: .4byte Rfu
-_080FAECC: .4byte 0x00000985
-_080FAED0:
- cmp r0, 0x2
- beq _080FAEE4
- b _080FAEE8
-_080FAED6:
- bl sub_80F911C
- b _080FAEE8
-_080FAEDC:
- bl sub_80F9514
- adds r5, r0, 0
- b _080FAEE8
-_080FAEE4:
- bl rfu_REQ_recvData_then_sendData
-_080FAEE8:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80FAE94
-
- thumb_func_start sub_80FAEF0
-sub_80FAEF0: @ 80FAEF0
- push {r4,lr}
- movs r4, 0
- ldr r1, _080FAF18 @ =Rfu
- adds r0, r1, 0
- adds r0, 0xEF
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FAF10
- ldrb r0, [r1, 0xC]
- cmp r0, 0x1
- bne _080FAF0C
- bl sub_80F9204
- adds r4, r0, 0
-_080FAF0C:
- bl sub_80FAD98
-_080FAF10:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_080FAF18: .4byte Rfu
- thumb_func_end sub_80FAEF0
-
- thumb_func_start sub_80FAF1C
-sub_80FAF1C: @ 80FAF1C
- push {lr}
- ldr r0, _080FAF2C @ =gUnknown_3005E00
- ldr r1, _080FAF30 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- bl StringCopy
- pop {r0}
- bx r0
- .align 2, 0
-_080FAF2C: .4byte gUnknown_3005E00
-_080FAF30: .4byte gSaveBlock2Ptr
- thumb_func_end sub_80FAF1C
-
- thumb_func_start sub_80FAF34
-sub_80FAF34: @ 80FAF34
- push {r4,lr}
- ldr r4, _080FAF54 @ =gUnknown_3005440
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0xD
- bl memset
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl sub_80FCB54
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FAF54: .4byte gUnknown_3005440
- thumb_func_end sub_80FAF34
-
- thumb_func_start sub_80FAF58
-sub_80FAF58: @ 80FAF58
- push {r4,lr}
- adds r4, r0, 0
- adds r3, r1, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080FAF70 @ =gUnknown_3005440
- adds r1, r4, 0
- bl sub_80FCB54
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FAF70: .4byte gUnknown_3005440
- thumb_func_end sub_80FAF58
-
- thumb_func_start sub_80FAF74
-sub_80FAF74: @ 80FAF74
- push {r4,r5,lr}
- ldr r5, _080FAF9C @ =gUnknown_3005440
- movs r4, 0x1
- ands r0, r4
- lsls r0, 4
- ldrb r3, [r5]
- movs r2, 0x11
- negs r2, r2
- ands r2, r3
- orrs r2, r0
- ands r1, r4
- lsls r1, 5
- movs r0, 0x21
- negs r0, r0
- ands r2, r0
- orrs r2, r1
- strb r2, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FAF9C: .4byte gUnknown_3005440
- thumb_func_end sub_80FAF74
-
- thumb_func_start sub_80FAFA0
-sub_80FAFA0: @ 80FAFA0
- push {r4,r5,lr}
- ldr r5, _080FAFD4 @ =gUnknown_3005440
- lsls r0, 2
- ldrb r4, [r5, 0x9]
- movs r3, 0x3
- ands r3, r4
- orrs r3, r0
- strb r3, [r5, 0x9]
- ldr r3, _080FAFD8 @ =0x000003ff
- adds r0, r3, 0
- ands r1, r0
- ldrh r3, [r5, 0x8]
- ldr r0, _080FAFDC @ =0xfffffc00
- ands r0, r3
- orrs r0, r1
- strh r0, [r5, 0x8]
- lsls r2, 1
- ldrb r1, [r5, 0xB]
- movs r0, 0x1
- ands r0, r1
- orrs r0, r2
- strb r0, [r5, 0xB]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FAFD4: .4byte gUnknown_3005440
-_080FAFD8: .4byte 0x000003ff
-_080FAFDC: .4byte 0xfffffc00
- thumb_func_end sub_80FAFA0
-
- thumb_func_start sub_80FAFE0
-sub_80FAFE0: @ 80FAFE0
- push {lr}
- lsls r0, 24
- ldr r2, _080FB000 @ =gUnknown_3005440
- lsrs r0, 17
- ldrb r3, [r2, 0xA]
- movs r1, 0x7F
- ands r1, r3
- orrs r1, r0
- strb r1, [r2, 0xA]
- ldr r3, _080FB004 @ =gUnknown_3005E00
- movs r0, 0
- movs r1, 0x2
- bl rfu_REQ_configGameData
- pop {r0}
- bx r0
- .align 2, 0
-_080FB000: .4byte gUnknown_3005440
-_080FB004: .4byte gUnknown_3005E00
- thumb_func_end sub_80FAFE0
-
- thumb_func_start sub_80FB008
-sub_80FB008: @ 80FB008
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080FB016
- bl sub_80FAF58
-_080FB016:
- ldr r2, _080FB028 @ =gUnknown_3005440
- ldr r3, _080FB02C @ =gUnknown_3005E00
- movs r0, 0
- movs r1, 0x2
- bl rfu_REQ_configGameData
- pop {r0}
- bx r0
- .align 2, 0
-_080FB028: .4byte gUnknown_3005440
-_080FB02C: .4byte gUnknown_3005E00
- thumb_func_end sub_80FB008
-
- thumb_func_start sub_80FB030
-sub_80FB030: @ 80FB030
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r0
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x45
- bne _080FB0C4
- movs r5, 0
- movs r7, 0
- ldr r3, _080FB0D4 @ =Rfu
- ldr r1, _080FB0D8 @ =0x0000099a
- adds r0, r3, r1
- ldr r2, _080FB0DC @ =0x0000099b
- adds r1, r3, r2
- ldrb r2, [r0]
- ldrb r0, [r1]
- adds r1, r0, 0
- eors r1, r2
- mov r8, r1
- movs r4, 0
- movs r6, 0x1
- ldr r2, _080FB0E0 @ =gLinkPlayers
- mov r12, r2
- ldr r0, _080FB0E4 @ =0x00000996
- adds r0, r3
- mov r10, r0
- mov r3, r12
- adds r3, 0x4
-_080FB074:
- mov r0, r8
- asrs r0, r4
- ands r0, r6
- cmp r0, 0
- beq _080FB0B4
- mov r1, r10
- adds r0, r4, r1
- ldrb r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- mov r2, r12
- adds r1, r0, r2
- ldrb r1, [r1, 0x13]
- adds r2, r6, 0
- ands r2, r1
- lsls r2, 3
- adds r0, r3
- ldr r1, [r0]
- movs r0, 0x7
- ands r1, r0
- movs r0, 0x80
- orrs r1, r0
- orrs r2, r1
- lsls r0, r5, 3
- lsls r2, r0
- orrs r7, r2
- adds r5, 0x1
- mov r0, r9
- subs r0, 0x1
- cmp r5, r0
- beq _080FB0BA
-_080FB0B4:
- adds r4, 0x1
- cmp r4, 0x3
- ble _080FB074
-_080FB0BA:
- movs r0, 0x45
- adds r1, r7, 0
- movs r2, 0
- bl sub_80FB008
-_080FB0C4:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB0D4: .4byte Rfu
-_080FB0D8: .4byte 0x0000099a
-_080FB0DC: .4byte 0x0000099b
-_080FB0E0: .4byte gLinkPlayers
-_080FB0E4: .4byte 0x00000996
- thumb_func_end sub_80FB030
-
- thumb_func_start sub_80FB0E8
-sub_80FB0E8: @ 80FB0E8
- push {r4,lr}
- adds r4, r0, 0
- ldr r2, _080FB110 @ =Rfu
- adds r3, r2, 0
- adds r3, 0xEE
- ldrb r0, [r3]
- cmp r0, 0
- bne _080FB10A
- ldr r1, _080FB114 @ =gUnknown_3005E10
- ldrh r0, [r1, 0x14]
- strh r0, [r2, 0x10]
- ldrh r0, [r1, 0x16]
- strh r0, [r2, 0x12]
- strh r4, [r2, 0xA]
- ldrb r0, [r3]
- movs r0, 0x1
- strb r0, [r3]
-_080FB10A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB110: .4byte Rfu
-_080FB114: .4byte gUnknown_3005E10
- thumb_func_end sub_80FB0E8
-
- thumb_func_start sub_80FB118
-sub_80FB118: @ 80FB118
- ldr r0, _080FB124 @ =Rfu
- adds r0, 0xEE
- ldrb r1, [r0]
- movs r1, 0
- strb r1, [r0]
- bx lr
- .align 2, 0
-_080FB124: .4byte Rfu
- thumb_func_end sub_80FB118
-
- thumb_func_start sub_80FB128
-sub_80FB128: @ 80FB128
- push {lr}
- adds r2, r0, 0
- cmp r2, 0
- bne _080FB140
- ldr r0, _080FB13C @ =Rfu
- adds r0, 0xEE
- ldrb r1, [r0]
- strb r2, [r0]
- b _080FB14A
- .align 2, 0
-_080FB13C: .4byte Rfu
-_080FB140:
- ldr r0, _080FB150 @ =Rfu
- adds r0, 0xEE
- ldrb r1, [r0]
- movs r1, 0x4
- strb r1, [r0]
-_080FB14A:
- pop {r0}
- bx r0
- .align 2, 0
-_080FB150: .4byte Rfu
- thumb_func_end sub_80FB128
-
- thumb_func_start sub_80FB154
-sub_80FB154: @ 80FB154
- push {lr}
- ldr r0, _080FB16C @ =gUnknown_3005E10
- ldrb r0, [r0]
- movs r1, 0x1
- bl sub_80FBE20
- ldr r1, _080FB170 @ =Rfu
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080FB16C: .4byte gUnknown_3005E10
-_080FB170: .4byte Rfu
- thumb_func_end sub_80FB154
-
- thumb_func_start sub_80FB174
-sub_80FB174: @ 80FB174
- ldr r1, _080FB17C @ =Rfu
- ldr r0, _080FB180 @ =sub_80FB154
- str r0, [r1]
- bx lr
- .align 2, 0
-_080FB17C: .4byte Rfu
-_080FB180: .4byte sub_80FB154
- thumb_func_end sub_80FB174
-
- thumb_func_start sub_80FB184
-sub_80FB184: @ 80FB184
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r4, r0, 24
- movs r6, 0
- cmp r4, 0x32
- bne _080FB19A
- b _080FB2D8
-_080FB19A:
- cmp r4, 0x32
- bgt _080FB1CA
- cmp r4, 0x13
- bgt _080FB1B8
- cmp r4, 0x12
- blt _080FB1A8
- b _080FB366
-_080FB1A8:
- cmp r4, 0x10
- bne _080FB1AE
- b _080FB366
-_080FB1AE:
- cmp r4, 0x10
- bgt _080FB204
- cmp r4, 0
- beq _080FB1F6
- b _080FB366
-_080FB1B8:
- cmp r4, 0x30
- bne _080FB1BE
- b _080FB2E4
-_080FB1BE:
- cmp r4, 0x30
- ble _080FB1C4
- b _080FB2CC
-_080FB1C4:
- cmp r4, 0x14
- beq _080FB2A0
- b _080FB366
-_080FB1CA:
- cmp r4, 0x44
- bgt _080FB1DC
- cmp r4, 0x42
- blt _080FB1D4
- b _080FB366
-_080FB1D4:
- cmp r4, 0x33
- bne _080FB1DA
- b _080FB2E4
-_080FB1DA:
- b _080FB366
-_080FB1DC:
- cmp r4, 0xF3
- bne _080FB1E2
- b _080FB332
-_080FB1E2:
- cmp r4, 0xF3
- bgt _080FB1EE
- cmp r4, 0xF0
- bge _080FB1EC
- b _080FB366
-_080FB1EC:
- b _080FB34C
-_080FB1EE:
- cmp r4, 0xFF
- bne _080FB1F4
- b _080FB34C
-_080FB1F4:
- b _080FB366
-_080FB1F6:
- ldr r1, _080FB200 @ =Rfu
- movs r0, 0x2
- strh r0, [r1, 0x4]
- b _080FB366
- .align 2, 0
-_080FB200: .4byte Rfu
-_080FB204:
- ldr r0, _080FB268 @ =gUnknown_3005E10
- ldrh r0, [r0, 0x14]
- bl sub_80FB564
- movs r5, 0
- movs r0, 0x1
- mov r8, r0
- ldr r1, _080FB26C @ =Rfu
- mov r9, r1
- ldr r3, _080FB270 @ =0x0000098d
- add r3, r9
- mov r10, r3
- movs r7, 0x7F
-_080FB21E:
- ldr r0, _080FB268 @ =gUnknown_3005E10
- ldrh r0, [r0, 0x14]
- asrs r0, r5
- mov r1, r8
- ands r0, r1
- cmp r0, 0
- beq _080FB286
- ldr r0, _080FB274 @ =gRfuLinkStatus
- lsls r1, r5, 5
- adds r1, 0x14
- ldr r0, [r0]
- adds r0, r1
- ldrb r0, [r0, 0x10]
- adds r4, r7, 0
- ands r4, r0
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- adds r0, r7, 0
- ands r0, r1
- cmp r4, r0
- bne _080FB27C
- ldr r0, _080FB278 @ =0x00000989
- add r0, r9
- adds r0, r5, r0
- movs r1, 0
- strb r1, [r0]
- mov r3, r10
- adds r2, r5, r3
- strb r1, [r2]
- movs r0, 0x20
- adds r1, r5, 0
- movs r3, 0x1
- bl rfu_setRecvBuffer
- b _080FB286
- .align 2, 0
-_080FB268: .4byte gUnknown_3005E10
-_080FB26C: .4byte Rfu
-_080FB270: .4byte 0x0000098d
-_080FB274: .4byte gRfuLinkStatus
-_080FB278: .4byte 0x00000989
-_080FB27C:
- mov r0, r8
- lsls r0, r5
- orrs r6, r0
- lsls r0, r6, 24
- lsrs r6, r0, 24
-_080FB286:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _080FB21E
- cmp r6, 0
- beq _080FB366
- adds r0, r6, 0
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- b _080FB366
-_080FB2A0:
- ldr r4, _080FB2C0 @ =Rfu
- ldr r1, _080FB2C4 @ =0x0000099f
- adds r0, r4, r1
- ldr r1, _080FB2C8 @ =gUnknown_3005E10
- ldrb r2, [r0]
- ldrb r0, [r1]
- cmp r2, r0
- beq _080FB2BA
- eors r0, r2
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
-_080FB2BA:
- movs r0, 0x11
- strh r0, [r4, 0x4]
- b _080FB366
- .align 2, 0
-_080FB2C0: .4byte Rfu
-_080FB2C4: .4byte 0x0000099f
-_080FB2C8: .4byte gUnknown_3005E10
-_080FB2CC:
- ldr r0, _080FB2D4 @ =Rfu
- adds r0, 0xF0
- b _080FB362
- .align 2, 0
-_080FB2D4: .4byte Rfu
-_080FB2D8:
- ldr r0, _080FB2E0 @ =Rfu
- adds r0, 0xF0
- movs r1, 0x3
- b _080FB364
- .align 2, 0
-_080FB2E0: .4byte Rfu
-_080FB2E4:
- ldr r1, _080FB314 @ =Rfu
- adds r2, r1, 0
- adds r2, 0xF0
- movs r0, 0x4
- strb r0, [r2]
- ldr r3, _080FB318 @ =0x0000099a
- adds r1, r3
- ldr r0, _080FB31C @ =gUnknown_3005E10
- ldrb r2, [r0, 0x14]
- ldrb r0, [r1]
- adds r3, r0, 0
- bics r3, r2
- adds r2, r3, 0
- strb r2, [r1]
- ldr r0, _080FB320 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080FB328
- cmp r2, 0
- bne _080FB324
- adds r0, r4, 0
- bl sub_80FB0E8
- b _080FB328
- .align 2, 0
-_080FB314: .4byte Rfu
-_080FB318: .4byte 0x0000099a
-_080FB31C: .4byte gUnknown_3005E10
-_080FB320: .4byte gReceivedRemoteLinkPlayers
-_080FB324:
- bl sub_80FB174
-_080FB328:
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_80FB9E4
- b _080FB366
-_080FB332:
- movs r0, 0x1
- movs r1, 0xF3
- bl sub_80FB9E4
- movs r0, 0xF3
- bl sub_80FB0E8
- ldr r0, _080FB348 @ =Rfu
- adds r0, 0xEF
- b _080FB362
- .align 2, 0
-_080FB348: .4byte Rfu
-_080FB34C:
- adds r0, r4, 0
- bl sub_80FB0E8
- movs r0, 0x1
- adds r1, r4, 0
- bl sub_80FB9E4
- ldr r0, _080FB374 @ =Rfu
- ldr r1, _080FB378 @ =0x00000993
- adds r0, r1
- ldrb r1, [r0]
-_080FB362:
- movs r1, 0x1
-_080FB364:
- strb r1, [r0]
-_080FB366:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB374: .4byte Rfu
-_080FB378: .4byte 0x00000993
- thumb_func_end sub_80FB184
-
- thumb_func_start sub_80FB37C
-sub_80FB37C: @ 80FB37C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x31
- bne _080FB388
- b _080FB4E8
-_080FB388:
- cmp r4, 0x31
- bgt _080FB3B6
- cmp r4, 0x22
- beq _080FB40C
- cmp r4, 0x22
- bgt _080FB3A4
- cmp r4, 0x20
- beq _080FB3F4
- cmp r4, 0x20
- ble _080FB39E
- b _080FB556
-_080FB39E:
- cmp r4, 0
- beq _080FB3E6
- b _080FB556
-_080FB3A4:
- cmp r4, 0x24
- beq _080FB432
- cmp r4, 0x24
- blt _080FB428
- cmp r4, 0x25
- beq _080FB47C
- cmp r4, 0x30
- beq _080FB486
- b _080FB556
-_080FB3B6:
- cmp r4, 0x44
- bgt _080FB3CC
- cmp r4, 0x42
- blt _080FB3C0
- b _080FB556
-_080FB3C0:
- cmp r4, 0x33
- beq _080FB49A
- cmp r4, 0x33
- bge _080FB3CA
- b _080FB504
-_080FB3CA:
- b _080FB556
-_080FB3CC:
- cmp r4, 0xF3
- bne _080FB3D2
- b _080FB524
-_080FB3D2:
- cmp r4, 0xF3
- bgt _080FB3DE
- cmp r4, 0xF0
- bge _080FB3DC
- b _080FB556
-_080FB3DC:
- b _080FB53C
-_080FB3DE:
- cmp r4, 0xFF
- bne _080FB3E4
- b _080FB53C
-_080FB3E4:
- b _080FB556
-_080FB3E6:
- ldr r1, _080FB3F0 @ =Rfu
- movs r0, 0x6
- strh r0, [r1, 0x4]
- b _080FB556
- .align 2, 0
-_080FB3F0: .4byte Rfu
-_080FB3F4:
- ldr r0, _080FB400 @ =Rfu
- ldr r1, _080FB404 @ =gUnknown_3005E10
- ldrh r1, [r1, 0x14]
- ldr r2, _080FB408 @ =0x00000985
- adds r0, r2
- b _080FB554
- .align 2, 0
-_080FB400: .4byte Rfu
-_080FB404: .4byte gUnknown_3005E10
-_080FB408: .4byte 0x00000985
-_080FB40C:
- ldr r0, _080FB41C @ =Rfu
- ldr r1, _080FB420 @ =gUnknown_3005E10
- ldrh r1, [r1, 0x14]
- ldr r2, _080FB424 @ =0x000008f6
- adds r0, r2
- ldrb r2, [r0]
- b _080FB554
- .align 2, 0
-_080FB41C: .4byte Rfu
-_080FB420: .4byte gUnknown_3005E10
-_080FB424: .4byte 0x000008f6
-_080FB428:
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_80FB9E4
- b _080FB556
-_080FB432:
- ldr r4, _080FB468 @ =Rfu
- movs r1, 0
- movs r0, 0xB
- strh r0, [r4, 0x4]
- ldr r2, _080FB46C @ =0x0000093d
- adds r0, r4, r2
- strb r1, [r0]
- ldr r0, _080FB470 @ =0x0000093e
- adds r2, r4, r0
- strb r1, [r2]
- ldr r1, _080FB474 @ =0x000008f6
- adds r5, r4, r1
- ldrb r1, [r5]
- movs r0, 0x20
- movs r3, 0x1
- bl rfu_setRecvBuffer
- ldrb r1, [r5]
- ldr r2, _080FB478 @ =0x000008f7
- adds r4, r2
- movs r0, 0x10
- adds r2, r4, 0
- movs r3, 0x46
- bl rfu_setRecvBuffer
- b _080FB556
- .align 2, 0
-_080FB468: .4byte Rfu
-_080FB46C: .4byte 0x0000093d
-_080FB470: .4byte 0x0000093e
-_080FB474: .4byte 0x000008f6
-_080FB478: .4byte 0x000008f7
-_080FB47C:
- movs r0, 0x2
- movs r1, 0x25
- bl sub_80FB9E4
- b _080FB556
-_080FB486:
- ldr r0, _080FB4D8 @ =Rfu
- adds r2, r0, 0
- adds r2, 0xF0
- movs r1, 0x2
- strb r1, [r2]
- ldr r1, _080FB4DC @ =0x0000093e
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x6
- beq _080FB556
-_080FB49A:
- ldr r2, _080FB4D8 @ =Rfu
- adds r1, r2, 0
- adds r1, 0xF0
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _080FB4AA
- movs r0, 0x4
- strb r0, [r1]
-_080FB4AA:
- ldr r1, _080FB4DC @ =0x0000093e
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x9
- beq _080FB4BC
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_80FB9E4
-_080FB4BC:
- ldr r0, _080FB4E0 @ =gUnknown_843EDF8 "LINK LOSS DISCONNECT!"
- movs r1, 0x5
- movs r2, 0x5
- bl nullsub_87
- ldr r0, _080FB4E4 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080FB556
- adds r0, r4, 0
- bl sub_80FB0E8
- b _080FB556
- .align 2, 0
-_080FB4D8: .4byte Rfu
-_080FB4DC: .4byte 0x0000093e
-_080FB4E0: .4byte gUnknown_843EDF8
-_080FB4E4: .4byte gReceivedRemoteLinkPlayers
-_080FB4E8:
- ldr r0, _080FB4FC @ =Rfu
- adds r0, 0xF0
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, _080FB500 @ =gUnknown_843EE10 "LINK LOSS RECOVERY NOW"
- movs r1, 0x5
- movs r2, 0x5
- bl nullsub_87
- b _080FB556
- .align 2, 0
-_080FB4FC: .4byte Rfu
-_080FB500: .4byte gUnknown_843EE10
-_080FB504:
- ldr r1, _080FB51C @ =Rfu
- adds r2, r1, 0
- adds r2, 0xF0
- movs r0, 0x3
- strb r0, [r2]
- ldr r2, _080FB520 @ =0x000008f4
- adds r1, r2
- ldrb r0, [r1]
- movs r0, 0x1
- strb r0, [r1]
- b _080FB556
- .align 2, 0
-_080FB51C: .4byte Rfu
-_080FB520: .4byte 0x000008f4
-_080FB524:
- movs r0, 0x1
- movs r1, 0xF3
- bl sub_80FB9E4
- movs r0, 0xF3
- bl sub_80FB0E8
- ldr r0, _080FB538 @ =Rfu
- adds r0, 0xEF
- b _080FB552
- .align 2, 0
-_080FB538: .4byte Rfu
-_080FB53C:
- movs r0, 0x1
- adds r1, r4, 0
- bl sub_80FB9E4
- adds r0, r4, 0
- bl sub_80FB0E8
- ldr r0, _080FB55C @ =Rfu
- ldr r1, _080FB560 @ =0x00000993
- adds r0, r1
- ldrb r1, [r0]
-_080FB552:
- movs r1, 0x1
-_080FB554:
- strb r1, [r0]
-_080FB556:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB55C: .4byte Rfu
-_080FB560: .4byte 0x00000993
- thumb_func_end sub_80FB37C
-
- thumb_func_start sub_80FB564
-sub_80FB564: @ 80FB564
- push {r4-r6,lr}
- adds r3, r0, 0
- movs r2, 0
- movs r6, 0x1
- ldr r0, _080FB598 @ =Rfu
- ldr r4, _080FB59C @ =0x000009a2
- adds r1, r0, r4
- movs r5, 0
- movs r4, 0xFF
-_080FB576:
- adds r0, r3, 0
- asrs r0, r2
- ands r0, r6
- cmp r0, 0
- beq _080FB588
- strb r5, [r1]
- ldrb r0, [r1, 0x4]
- orrs r0, r4
- strb r0, [r1, 0x4]
-_080FB588:
- adds r1, 0x1
- adds r2, 0x1
- cmp r2, 0x3
- ble _080FB576
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB598: .4byte Rfu
-_080FB59C: .4byte 0x000009a2
- thumb_func_end sub_80FB564
-
- thumb_func_start sub_80FB5A0
-sub_80FB5A0: @ 80FB5A0
- push {r4-r7,lr}
- adds r5, r0, 0
- movs r3, 0
- movs r2, 0
- movs r4, 0x1
- ldr r6, _080FB5E8 @ =gRfuLinkStatus
- movs r7, 0x7F
-_080FB5AE:
- adds r0, r5, 0
- asrs r0, r2
- ands r0, r4
- cmp r0, 0
- beq _080FB5D4
- lsls r1, r2, 5
- adds r1, 0x14
- ldr r0, [r6]
- adds r0, r1
- ldrb r1, [r0, 0x10]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0x45
- bne _080FB5D4
- adds r0, r4, 0
- lsls r0, r2
- orrs r3, r0
- lsls r0, r3, 24
- lsrs r3, r0, 24
-_080FB5D4:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _080FB5AE
- adds r0, r3, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080FB5E8: .4byte gRfuLinkStatus
- thumb_func_end sub_80FB5A0
-
- thumb_func_start sub_80FB5EC
-sub_80FB5EC: @ 80FB5EC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x25
- bne _080FB5F8
- b _080FB86C
-_080FB5F8:
- cmp r4, 0x25
- bgt _080FB63A
- cmp r4, 0x14
- bne _080FB602
- b _080FB780
-_080FB602:
- cmp r4, 0x14
- bgt _080FB61A
- cmp r4, 0x11
- beq _080FB69A
- cmp r4, 0x11
- ble _080FB610
- b _080FB9C2
-_080FB610:
- cmp r4, 0
- beq _080FB684
- cmp r4, 0x10
- beq _080FB690
- b _080FB9C2
-_080FB61A:
- cmp r4, 0x22
- bne _080FB620
- b _080FB7E8
-_080FB620:
- cmp r4, 0x22
- bgt _080FB62C
- cmp r4, 0x20
- bne _080FB62A
- b _080FB7D0
-_080FB62A:
- b _080FB9C2
-_080FB62C:
- cmp r4, 0x23
- bne _080FB632
- b _080FB804
-_080FB632:
- cmp r4, 0x24
- bne _080FB638
- b _080FB83A
-_080FB638:
- b _080FB9C2
-_080FB63A:
- cmp r4, 0x44
- bgt _080FB66A
- cmp r4, 0x42
- blt _080FB644
- b _080FB9C2
-_080FB644:
- cmp r4, 0x32
- bne _080FB64A
- b _080FB894
-_080FB64A:
- cmp r4, 0x32
- bgt _080FB65C
- cmp r4, 0x30
- bne _080FB654
- b _080FB8C0
-_080FB654:
- cmp r4, 0x31
- bne _080FB65A
- b _080FB876
-_080FB65A:
- b _080FB9C2
-_080FB65C:
- cmp r4, 0x33
- bne _080FB662
- b _080FB8C8
-_080FB662:
- cmp r4, 0x40
- bne _080FB668
- b _080FB97C
-_080FB668:
- b _080FB9C2
-_080FB66A:
- cmp r4, 0xF3
- bne _080FB670
- b _080FB98C
-_080FB670:
- cmp r4, 0xF3
- bgt _080FB67C
- cmp r4, 0xF0
- bge _080FB67A
- b _080FB9C2
-_080FB67A:
- b _080FB9A8
-_080FB67C:
- cmp r4, 0xFF
- bne _080FB682
- b _080FB9A8
-_080FB682:
- b _080FB9C2
-_080FB684:
- ldr r1, _080FB68C @ =Rfu
- movs r0, 0x11
- strh r0, [r1, 0x4]
- b _080FB9C2
- .align 2, 0
-_080FB68C: .4byte Rfu
-_080FB690:
- movs r0, 0x4
- movs r1, 0
- bl sub_80FB9E4
- b _080FB9C2
-_080FB69A:
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x45
- bne _080FB758
- ldr r5, _080FB704 @ =Rfu
- ldr r1, _080FB708 @ =0x00000991
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FB758
- ldr r0, _080FB70C @ =gUnknown_3005E10
- ldrh r0, [r0, 0x14]
- bl sub_80FB5A0
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080FB722
- adds r0, r4, 0
- bl sub_80F886C
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x1
- mov r12, r2
- mov r1, r12
- lsls r1, r0
- lsls r1, 24
- lsrs r1, 24
- ldr r7, _080FB710 @ =0x0000099e
- adds r6, r5, r7
- ldrb r2, [r6]
- cmp r2, 0
- bne _080FB714
- movs r0, 0x9A
- lsls r0, 4
- adds r3, r5, r0
- ldrb r0, [r3]
- cmp r0, 0
- bne _080FB714
- subs r7, 0x1
- adds r0, r5, r7
- strb r1, [r0]
- eors r1, r4
- orrs r1, r2
- strb r1, [r6]
- mov r0, r12
- strb r0, [r3]
- b _080FB722
- .align 2, 0
-_080FB704: .4byte Rfu
-_080FB708: .4byte 0x00000991
-_080FB70C: .4byte gUnknown_3005E10
-_080FB710: .4byte 0x0000099e
-_080FB714:
- ldr r0, _080FB744 @ =Rfu
- ldr r1, _080FB748 @ =0x0000099e
- adds r0, r1
- ldrb r2, [r0]
- adds r1, r4, 0
- orrs r1, r2
- strb r1, [r0]
-_080FB722:
- ldr r0, _080FB74C @ =gUnknown_3005E10
- ldrh r1, [r0, 0x14]
- cmp r4, r1
- beq _080FB772
- ldr r2, _080FB744 @ =Rfu
- ldr r7, _080FB750 @ =0x0000099b
- adds r3, r2, r7
- adds r0, r4, 0
- eors r0, r1
- ldrb r1, [r3]
- orrs r0, r1
- strb r0, [r3]
- ldr r0, _080FB754 @ =0x0000099c
- adds r2, r0
- movs r0, 0x2
- strb r0, [r2]
- b _080FB772
- .align 2, 0
-_080FB744: .4byte Rfu
-_080FB748: .4byte 0x0000099e
-_080FB74C: .4byte gUnknown_3005E10
-_080FB750: .4byte 0x0000099b
-_080FB754: .4byte 0x0000099c
-_080FB758:
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x54
- bne _080FB772
- ldr r0, _080FB77C @ =gUnknown_3005E10
- ldrb r0, [r0]
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
-_080FB772:
- ldr r0, _080FB77C @ =gUnknown_3005E10
- ldrh r0, [r0, 0x14]
- bl sub_80FB564
- b _080FB9C2
- .align 2, 0
-_080FB77C: .4byte gUnknown_3005E10
-_080FB780:
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- movs r0, 0x7F
- ands r0, r1
- cmp r0, 0x45
- beq _080FB7B6
- ldr r4, _080FB7C8 @ =gUnknown_3005E10
- ldrb r0, [r4, 0x1]
- cmp r0, 0x1
- bls _080FB7B6
- ldrb r0, [r4, 0x14]
- bl sub_80F886C
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x80
- lsls r1, 17
- lsls r1, r0
- lsrs r1, 24
- ldrb r0, [r4]
- eors r1, r0
- adds r0, r1, 0
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
-_080FB7B6:
- ldr r1, _080FB7CC @ =Rfu
- ldrh r0, [r1, 0x4]
- cmp r0, 0xF
- beq _080FB7C0
- b _080FB9C2
-_080FB7C0:
- movs r0, 0x10
- strh r0, [r1, 0x4]
- b _080FB9C2
- .align 2, 0
-_080FB7C8: .4byte gUnknown_3005E10
-_080FB7CC: .4byte Rfu
-_080FB7D0:
- ldr r0, _080FB7DC @ =Rfu
- ldr r1, _080FB7E0 @ =gUnknown_3005E10
- ldrh r1, [r1, 0x14]
- ldr r2, _080FB7E4 @ =0x00000985
- adds r0, r2
- b _080FB9C0
- .align 2, 0
-_080FB7DC: .4byte Rfu
-_080FB7E0: .4byte gUnknown_3005E10
-_080FB7E4: .4byte 0x00000985
-_080FB7E8:
- ldr r0, _080FB7F8 @ =Rfu
- ldr r1, _080FB7FC @ =gUnknown_3005E10
- ldrh r1, [r1, 0x14]
- ldr r7, _080FB800 @ =0x000008f6
- adds r0, r7
- ldrb r2, [r0]
- b _080FB9C0
- .align 2, 0
-_080FB7F8: .4byte Rfu
-_080FB7FC: .4byte gUnknown_3005E10
-_080FB800: .4byte 0x000008f6
-_080FB804:
- ldr r1, _080FB824 @ =Rfu
- movs r0, 0x12
- strh r0, [r1, 0x4]
- ldr r0, _080FB828 @ =0x00000987
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x1
- bhi _080FB830
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, _080FB82C @ =sub_80FC028
- movs r1, 0x2
- bl CreateTask
- b _080FB9C2
- .align 2, 0
-_080FB824: .4byte Rfu
-_080FB828: .4byte 0x00000987
-_080FB82C: .4byte sub_80FC028
-_080FB830:
- movs r0, 0x2
- movs r1, 0x23
- bl sub_80FB9E4
- b _080FB9C2
-_080FB83A:
- ldr r4, _080FB860 @ =Rfu
- movs r0, 0xD
- strh r0, [r4, 0x4]
- movs r0, 0x3
- movs r1, 0
- bl sub_80FB9E4
- ldr r1, _080FB864 @ =0x000008f6
- adds r0, r4, r1
- ldrb r1, [r0]
- ldr r2, _080FB868 @ =0x000008f7
- adds r4, r2
- movs r0, 0x10
- adds r2, r4, 0
- movs r3, 0x46
- bl rfu_setRecvBuffer
- b _080FB9C2
- .align 2, 0
-_080FB860: .4byte Rfu
-_080FB864: .4byte 0x000008f6
-_080FB868: .4byte 0x000008f7
-_080FB86C:
- movs r0, 0x2
- movs r1, 0x25
- bl sub_80FB9E4
- b _080FB9C2
-_080FB876:
- ldr r0, _080FB88C @ =gUnknown_3005E10
- ldrb r1, [r0]
- ldrh r0, [r0, 0x14]
- ands r1, r0
- cmp r1, 0
- bne _080FB884
- b _080FB9C2
-_080FB884:
- ldr r0, _080FB890 @ =Rfu
- adds r0, 0xF0
- movs r1, 0x1
- b _080FB9C0
- .align 2, 0
-_080FB88C: .4byte gUnknown_3005E10
-_080FB890: .4byte Rfu
-_080FB894:
- ldr r2, _080FB8B4 @ =Rfu
- adds r1, r2, 0
- adds r1, 0xF0
- movs r0, 0x3
- strb r0, [r1]
- ldr r0, _080FB8B8 @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0
- beq _080FB8AA
- b _080FB9C2
-_080FB8AA:
- ldr r7, _080FB8BC @ =0x000008f4
- adds r0, r2, r7
- ldrb r1, [r0]
- movs r1, 0x1
- b _080FB9C0
- .align 2, 0
-_080FB8B4: .4byte Rfu
-_080FB8B8: .4byte gRfuLinkStatus
-_080FB8BC: .4byte 0x000008f4
-_080FB8C0:
- ldr r0, _080FB900 @ =Rfu
- adds r0, 0xF0
- movs r1, 0x2
- strb r1, [r0]
-_080FB8C8:
- ldr r2, _080FB900 @ =Rfu
- adds r1, r2, 0
- adds r1, 0xF0
- ldrb r0, [r1]
- cmp r0, 0x2
- beq _080FB8D8
- movs r0, 0x4
- strb r0, [r1]
-_080FB8D8:
- ldrb r0, [r2, 0xC]
- cmp r0, 0x1
- bne _080FB916
- ldr r0, _080FB904 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080FB934
- ldr r0, _080FB908 @ =0x0000099a
- adds r2, r0
- ldr r0, _080FB90C @ =gUnknown_3005E10
- ldrb r1, [r0, 0x14]
- ldrb r0, [r2]
- bics r0, r1
- strb r0, [r2]
- cmp r0, 0
- bne _080FB910
- adds r0, r4, 0
- bl sub_80FB0E8
- b _080FB934
- .align 2, 0
-_080FB900: .4byte Rfu
-_080FB904: .4byte gReceivedRemoteLinkPlayers
-_080FB908: .4byte 0x0000099a
-_080FB90C: .4byte gUnknown_3005E10
-_080FB910:
- bl sub_80FB174
- b _080FB934
-_080FB916:
- ldr r1, _080FB964 @ =0x0000099c
- adds r0, r2, r1
- ldrb r0, [r0]
- cmp r0, 0x2
- beq _080FB934
- ldr r0, _080FB968 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080FB934
- adds r0, r4, 0
- bl sub_80FB0E8
- movs r0, 0
- bl sub_80FD760
-_080FB934:
- ldr r0, _080FB96C @ =gRfuLinkStatus
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _080FB95A
- ldr r0, _080FB970 @ =gUnknown_3005E10
- ldrb r0, [r0, 0x7]
- cmp r0, 0
- bne _080FB95A
- ldr r0, _080FB974 @ =sub_80F8B34
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FB95A
- ldr r1, _080FB978 @ =Rfu
- movs r0, 0x11
- strh r0, [r1, 0x4]
-_080FB95A:
- movs r0, 0x2
- adds r1, r4, 0
- bl sub_80FB9E4
- b _080FB9C2
- .align 2, 0
-_080FB964: .4byte 0x0000099c
-_080FB968: .4byte gReceivedRemoteLinkPlayers
-_080FB96C: .4byte gRfuLinkStatus
-_080FB970: .4byte gUnknown_3005E10
-_080FB974: .4byte sub_80F8B34
-_080FB978: .4byte Rfu
-_080FB97C:
- ldr r0, _080FB984 @ =Rfu
- ldr r2, _080FB988 @ =0x0000099b
- adds r0, r2
- b _080FB9BE
- .align 2, 0
-_080FB984: .4byte Rfu
-_080FB988: .4byte 0x0000099b
-_080FB98C:
- movs r0, 0x1
- movs r1, 0xF3
- bl sub_80FB9E4
- movs r0, 0xF3
- bl sub_80FB0E8
- ldr r0, _080FB9A4 @ =Rfu
- adds r0, 0xEF
- movs r1, 0x1
- b _080FB9C0
- .align 2, 0
-_080FB9A4: .4byte Rfu
-_080FB9A8:
- adds r0, r4, 0
- bl sub_80FB0E8
- movs r0, 0x1
- adds r1, r4, 0
- bl sub_80FB9E4
- ldr r0, _080FB9C8 @ =Rfu
- ldr r7, _080FB9CC @ =0x00000993
- adds r0, r7
- ldrb r1, [r0]
-_080FB9BE:
- movs r1, 0
-_080FB9C0:
- strb r1, [r0]
-_080FB9C2:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FB9C8: .4byte Rfu
-_080FB9CC: .4byte 0x00000993
- thumb_func_end sub_80FB5EC
-
- thumb_func_start sub_80FB9D0
-sub_80FB9D0: @ 80FB9D0
- ldr r0, _080FB9DC @ =Rfu
- ldr r1, _080FB9E0 @ =0x0000099c
- adds r0, r1
- movs r1, 0x2
- strb r1, [r0]
- bx lr
- .align 2, 0
-_080FB9DC: .4byte Rfu
-_080FB9E0: .4byte 0x0000099c
- thumb_func_end sub_80FB9D0
-
- thumb_func_start sub_80FB9E4
-sub_80FB9E4: @ 80FB9E4
- ldr r2, _080FB9F0 @ =Rfu
- adds r3, r2, 0
- adds r3, 0xF1
- strb r0, [r3]
- strh r1, [r2, 0xA]
- bx lr
- .align 2, 0
-_080FB9F0: .4byte Rfu
- thumb_func_end sub_80FB9E4
-
- thumb_func_start sub_80FB9F4
-sub_80FB9F4: @ 80FB9F4
- ldr r0, _080FB9FC @ =Rfu
- adds r0, 0xF1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080FB9FC: .4byte Rfu
- thumb_func_end sub_80FB9F4
-
- thumb_func_start sub_80FBA00
-sub_80FBA00: @ 80FBA00
- push {lr}
- bl sub_80FB9F4
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- cmp r0, 0x1
- bls _080FBA14
- movs r0, 0
- b _080FBA16
-_080FBA14:
- movs r0, 0x1
-_080FBA16:
- pop {r1}
- bx r1
- thumb_func_end sub_80FBA00
-
- thumb_func_start sub_80FBA1C
-sub_80FBA1C: @ 80FBA1C
- ldr r0, _080FBA28 @ =Rfu
- movs r1, 0x9A
- lsls r1, 4
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080FBA28: .4byte Rfu
- thumb_func_end sub_80FBA1C
-
- thumb_func_start Rfu_IsMaster
-Rfu_IsMaster: @ 80FBA2C
- ldr r0, _080FBA34 @ =Rfu
- ldrb r0, [r0, 0xC]
- bx lr
- .align 2, 0
-_080FBA34: .4byte Rfu
- thumb_func_end Rfu_IsMaster
-
- thumb_func_start RFUVSync
-RFUVSync: @ 80FBA38
- push {lr}
- bl rfu_syncVBlank_
- pop {r0}
- bx r0
- thumb_func_end RFUVSync
-
- thumb_func_start sub_80FBA44
-sub_80FBA44: @ 80FBA44
- push {lr}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- ldr r1, _080FBA5C @ =gRecvCmds
- ldr r2, _080FBA60 @ =0x05000014
- mov r0, sp
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_080FBA5C: .4byte gRecvCmds
-_080FBA60: .4byte 0x05000014
- thumb_func_end sub_80FBA44
-
- thumb_func_start sub_80FBA64
-sub_80FBA64: @ 80FBA64
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80FBA64
-
- thumb_func_start sub_80FBA78
-sub_80FBA78: @ 80FBA78
- push {r4,lr}
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl ResetTasks
- bl ResetPaletteFade
- ldr r0, _080FBAF4 @ =sub_80FBA64
- bl SetVBlankCallback
- bl IsWirelessAdapterConnected
- lsls r0, 24
- cmp r0, 0
- beq _080FBAEC
- ldr r1, _080FBAF8 @ =gLinkType
- ldr r2, _080FBAFC @ =0x00001111
- adds r0, r2, 0
- strh r0, [r1]
- bl sub_800B1F4
- bl OpenLink
- ldr r0, _080FBB00 @ =gMain
- ldrh r0, [r0, 0x24]
- bl SeedRng
- movs r4, 0
-_080FBAB4:
- bl Random
- ldr r1, _080FBB04 @ =gSaveBlock2Ptr
- ldr r1, [r1]
- adds r1, 0xA
- adds r1, r4
- strb r0, [r1]
- adds r4, 0x1
- cmp r4, 0x3
- ble _080FBAB4
- movs r1, 0xAA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- bl sub_80FBB20
- ldr r0, _080FBB08 @ =sub_80FBB74
- bl SetMainCallback2
-_080FBAEC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBAF4: .4byte sub_80FBA64
-_080FBAF8: .4byte gLinkType
-_080FBAFC: .4byte 0x00001111
-_080FBB00: .4byte gMain
-_080FBB04: .4byte gSaveBlock2Ptr
-_080FBB08: .4byte sub_80FBB74
- thumb_func_end sub_80FBA78
-
- thumb_func_start sub_80FBB0C
-sub_80FBB0C: @ 80FBB0C
- push {lr}
- ldr r0, _080FBB1C @ =sub_80F8B34
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080FBB1C: .4byte sub_80F8B34
- thumb_func_end sub_80FBB0C
-
- thumb_func_start sub_80FBB20
-sub_80FBB20: @ 80FBB20
- push {r4,lr}
- ldr r4, _080FBB44 @ =nullsub_89
- adds r0, r4, 0
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080FBB3E
- adds r0, r4, 0
- movs r1, 0
- bl CreateTask
- ldr r1, _080FBB48 @ =Rfu
- adds r1, 0x66
- strb r0, [r1]
-_080FBB3E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBB44: .4byte nullsub_89
-_080FBB48: .4byte Rfu
- thumb_func_end sub_80FBB20
-
- thumb_func_start sub_80FBB4C
-sub_80FBB4C: @ 80FBB4C
- push {lr}
- ldr r0, _080FBB6C @ =nullsub_89
- bl FuncIsActiveTask
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FBB66
- ldr r0, _080FBB70 @ =Rfu
- adds r0, 0x66
- ldrb r0, [r0]
- bl DestroyTask
-_080FBB66:
- pop {r0}
- bx r0
- .align 2, 0
-_080FBB6C: .4byte nullsub_89
-_080FBB70: .4byte Rfu
- thumb_func_end sub_80FBB4C
-
- thumb_func_start sub_80FBB74
-sub_80FBB74: @ 80FBB74
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_80FBB74
-
- thumb_func_start sub_80FBB8C
-sub_80FBB8C: @ 80FBB8C
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r1, _080FBBC4 @ =Rfu
- movs r0, 0x1
- strb r0, [r1, 0xC]
- bl sub_80FAF1C
- ldr r0, _080FBBC8 @ =sub_80FB184
- movs r1, 0
- bl sub_80FD430
- ldr r2, _080FBBCC @ =gUnknown_203ABF0
- adds r1, r2, 0
- ldr r0, _080FBBD0 @ =gUnknown_843EBB4
- ldm r0!, {r3,r5,r6}
- stm r1!, {r3,r5,r6}
- ldm r0!, {r3,r5,r6}
- stm r1!, {r3,r5,r6}
- ldr r0, _080FBBD4 @ =gUnknown_843EBCC
- subs r4, 0x1
- adds r4, r0
- ldrb r0, [r4]
- strh r0, [r2, 0x2]
- bl sub_80F8E74
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBBC4: .4byte Rfu
-_080FBBC8: .4byte sub_80FB184
-_080FBBCC: .4byte gUnknown_203ABF0
-_080FBBD0: .4byte gUnknown_843EBB4
-_080FBBD4: .4byte gUnknown_843EBCC
- thumb_func_end sub_80FBB8C
-
- thumb_func_start sub_80FBBD8
-sub_80FBBD8: @ 80FBBD8
- push {lr}
- ldr r1, _080FBBF4 @ =Rfu
- movs r0, 0
- strb r0, [r1, 0xC]
- bl sub_80FAF1C
- ldr r0, _080FBBF8 @ =sub_80FB37C
- ldr r1, _080FBBFC @ =sub_80F8D20
- bl sub_80FD430
- bl sub_80F8F10
- pop {r0}
- bx r0
- .align 2, 0
-_080FBBF4: .4byte Rfu
-_080FBBF8: .4byte sub_80FB37C
-_080FBBFC: .4byte sub_80F8D20
- thumb_func_end sub_80FBBD8
-
- thumb_func_start sub_80FBC00
-sub_80FBC00: @ 80FBC00
- push {r4-r7,lr}
- ldr r0, _080FBC4C @ =gUnknown_203ADFA
- ldrb r0, [r0]
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080FBC46
- ldr r4, _080FBC50 @ =Rfu
- movs r5, 0
- movs r0, 0x2
- strb r0, [r4, 0xC]
- bl sub_80FAF1C
- ldr r0, _080FBC54 @ =sub_80FB5EC
- movs r1, 0
- bl sub_80FD430
- ldr r2, _080FBC58 @ =gUnknown_203ABF0
- adds r1, r2, 0
- ldr r0, _080FBC5C @ =gUnknown_843EBB4
- ldm r0!, {r3,r6,r7}
- stm r1!, {r3,r6,r7}
- ldm r0!, {r3,r6,r7}
- stm r1!, {r3,r6,r7}
- strb r5, [r2, 0x11]
- movs r0, 0x96
- lsls r0, 2
- strh r0, [r2, 0x12]
- ldr r0, _080FBC60 @ =sub_80F8B34
- movs r1, 0x1
- bl CreateTask
- adds r4, 0x67
- strb r0, [r4]
-_080FBC46:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBC4C: .4byte gUnknown_203ADFA
-_080FBC50: .4byte Rfu
-_080FBC54: .4byte sub_80FB5EC
-_080FBC58: .4byte gUnknown_203ABF0
-_080FBC5C: .4byte gUnknown_843EBB4
-_080FBC60: .4byte sub_80F8B34
- thumb_func_end sub_80FBC00
-
- thumb_func_start sub_80FBC64
-sub_80FBC64: @ 80FBC64
- ldrb r1, [r0, 0x1]
- lsls r1, 8
- ldrb r0, [r0]
- orrs r0, r1
- bx lr
- thumb_func_end sub_80FBC64
-
- thumb_func_start sub_80FBC70
-sub_80FBC70: @ 80FBC70
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- str r0, [sp]
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- movs r0, 0xFF
- mov r9, r0
- movs r7, 0
- ldr r1, _080FBCF4 @ =gRfuLinkStatus
- mov r8, r1
-_080FBC8E:
- lsls r4, r7, 5
- adds r5, r4, 0
- adds r5, 0x14
- mov r1, r8
- ldr r0, [r1]
- adds r0, r5
- adds r0, 0x8
- bl sub_80FBC64
- lsls r0, 16
- lsrs r6, r0, 16
- mov r1, r8
- ldr r0, [r1]
- adds r0, r4
- ldrh r0, [r0, 0x18]
- bl sub_80FA44C
- cmp r0, 0
- beq _080FBCD8
- mov r0, r8
- ldr r1, [r0]
- adds r1, r5
- adds r1, 0x15
- ldr r0, [sp]
- bl StringCompare
- cmp r0, 0
- bne _080FBCD8
- cmp r10, r6
- bne _080FBCD8
- mov r9, r7
- mov r1, r8
- ldr r0, [r1]
- adds r0, r4
- ldrb r0, [r0, 0x16]
- cmp r0, 0xFF
- bne _080FBCE2
-_080FBCD8:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0x3
- bls _080FBC8E
-_080FBCE2:
- mov r0, r9
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080FBCF4: .4byte gRfuLinkStatus
- thumb_func_end sub_80FBC70
-
- thumb_func_start sub_80FBCF8
-sub_80FBCF8: @ 80FBCF8
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r0, r6, 24
- lsrs r0, 24
- bl rfu_REQ_disconnect
- bl rfu_waitREQComplete
- ldr r4, _080FBD3C @ =Rfu
- ldr r0, _080FBD40 @ =0x0000099a
- adds r5, r4, r0
- ldrb r0, [r5]
- bics r0, r6
- strb r0, [r5]
- ldr r1, _080FBD44 @ =0x00000992
- adds r6, r4, r1
- ldrb r1, [r6]
- movs r0, 0x1
- bl rfu_clearSlot
- ldrb r0, [r5]
- ldr r1, _080FBD48 @ =0x0000093f
- adds r4, r1
- adds r1, r4, 0
- movs r2, 0x46
- bl rfu_UNI_setSendData
- ldrb r0, [r5]
- bl sub_80F886C
- strb r0, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBD3C: .4byte Rfu
-_080FBD40: .4byte 0x0000099a
-_080FBD44: .4byte 0x00000992
-_080FBD48: .4byte 0x0000093f
- thumb_func_end sub_80FBCF8
-
- thumb_func_start sub_80FBD4C
-sub_80FBD4C: @ 80FBD4C
- push {lr}
- lsls r1, 16
- lsrs r1, 16
- bl sub_80FBC70
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xFF
- beq _080FBD66
- movs r0, 0x1
- lsls r0, r1
- bl sub_80FBCF8
-_080FBD66:
- pop {r0}
- bx r0
- thumb_func_end sub_80FBD4C
-
- thumb_func_start sub_80FBD6C
-sub_80FBD6C: @ 80FBD6C
- push {r4-r6,lr}
- adds r4, r0, 0
- cmp r4, 0
- beq _080FBDAC
- movs r3, 0
- movs r2, 0
- ldr r5, _080FBDB4 @ =Rfu+0x996
- adds r6, r5, 0x4
-_080FBD7C:
- adds r0, r2, r5
- ldrb r0, [r0]
- cmp r0, r4
- bne _080FBD9A
- ldrb r0, [r6]
- asrs r0, r2
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080FBD9A
- adds r0, r1, 0
- lsls r0, r2
- orrs r3, r0
- lsls r0, r3, 24
- lsrs r3, r0, 24
-_080FBD9A:
- adds r2, 0x1
- cmp r2, 0x3
- ble _080FBD7C
- cmp r3, 0
- beq _080FBDAC
- adds r0, r3, 0
- movs r1, 0x2
- bl sub_80FBE20
-_080FBDAC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBDB4: .4byte Rfu+0x996
- thumb_func_end sub_80FBD6C
-
- thumb_func_start sub_80FBDB8
-sub_80FBDB8: @ 80FBDB8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r6, _080FBE10 @ =gSendCmd
- ldrh r0, [r6]
- cmp r0, 0
- bne _080FBE08
- ldr r5, _080FBE14 @ =Rfu
- movs r1, 0x9A
- lsls r1, 4
- adds r0, r5, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FBE08
- movs r0, 0xED
- lsls r0, 8
- bl sub_80F9D04
- ldr r1, _080FBE18 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x8]
- strh r1, [r6, 0x2]
- ldrh r1, [r0, 0xA]
- strh r1, [r6, 0x4]
- ldr r1, _080FBE1C @ =gUnknown_843EC41
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r0, r1
- ldrb r1, [r5, 0xD]
- ldrb r0, [r0]
- subs r1, r0
- strb r1, [r5, 0xD]
- ldrb r0, [r5, 0xD]
- strh r0, [r6, 0x6]
- adds r0, r4, 0
- bl DestroyTask
-_080FBE08:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBE10: .4byte gSendCmd
-_080FBE14: .4byte Rfu
-_080FBE18: .4byte gTasks
-_080FBE1C: .4byte gUnknown_843EC41
- thumb_func_end sub_80FBDB8
-
- thumb_func_start sub_80FBE20
-sub_80FBE20: @ 80FBE20
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- ldr r5, _080FBE50 @ =sub_80FBDB8
- adds r0, r5, 0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- bne _080FBE58
- adds r0, r5, 0
- movs r1, 0x5
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _080FBE54 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- strh r4, [r0, 0x8]
- b _080FBE68
- .align 2, 0
-_080FBE50: .4byte sub_80FBDB8
-_080FBE54: .4byte gTasks
-_080FBE58:
- ldr r0, _080FBE7C @ =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- orrs r4, r0
- strh r4, [r1, 0x8]
-_080FBE68:
- ldr r1, _080FBE7C @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- strh r6, [r0, 0xA]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBE7C: .4byte gTasks
- thumb_func_end sub_80FBE20
-
- thumb_func_start sub_80FBE80
-sub_80FBE80: @ 80FBE80
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _080FBED8 @ =gTasks+0x8
- adds r4, r0, r1
- bl sub_80F8EA4
- lsls r0, 24
- cmp r0, 0
- beq _080FBF30
- adds r0, r4, 0
- adds r0, 0x10
- bl sub_80FBC64
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_80FBC70
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _080FBF18
- ldr r0, _080FBEDC @ =gRfuLinkStatus
- ldr r0, [r0]
- lsls r1, r2, 5
- adds r0, r1
- ldrb r0, [r0, 0x16]
- cmp r0, 0xFF
- beq _080FBEE8
- ldr r0, _080FBEE0 @ =Rfu
- ldr r1, _080FBEE4 @ =0x000008f5
- adds r0, r1
- strb r2, [r0]
- bl sub_80F8ECC
- cmp r0, 0
- beq _080FBF36
- b _080FBF10
- .align 2, 0
-_080FBED8: .4byte gTasks+0x8
-_080FBEDC: .4byte gRfuLinkStatus
-_080FBEE0: .4byte Rfu
-_080FBEE4: .4byte 0x000008f5
-_080FBEE8:
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- movs r5, 0x7F
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0x15
- beq _080FBF30
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0x16
- beq _080FBF30
- movs r1, 0xE0
- lsls r1, 7
- movs r0, 0x2
- bl sub_80FB9E4
-_080FBF10:
- adds r0, r6, 0
- bl DestroyTask
- b _080FBF36
-_080FBF18:
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
- ldr r0, _080FBF28 @ =Rfu
- ldr r1, _080FBF2C @ =0x000008f5
- adds r0, r1
- strb r2, [r0]
- b _080FBF36
- .align 2, 0
-_080FBF28: .4byte Rfu
-_080FBF2C: .4byte 0x000008f5
-_080FBF30:
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
-_080FBF36:
- movs r1, 0x1E
- ldrsh r0, [r4, r1]
- cmp r0, 0xF0
- ble _080FBF4E
- movs r1, 0xE0
- lsls r1, 7
- movs r0, 0x2
- bl sub_80FB9E4
- adds r0, r6, 0
- bl DestroyTask
-_080FBF4E:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80FBE80
-
- thumb_func_start sub_80FBF54
-sub_80FBF54: @ 80FBF54
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r5, r1, 16
- lsrs r5, 16
- ldr r0, _080FBF8C @ =Rfu
- adds r0, 0xF1
- movs r1, 0
- strb r1, [r0]
- ldr r0, _080FBF90 @ =sub_80FBE80
- movs r1, 0x3
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _080FBF94 @ =gTasks+0x8
- adds r4, r0
- adds r0, r4, 0
- adds r1, r6, 0
- bl StringCopy
- strh r5, [r4, 0x10]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080FBF8C: .4byte Rfu
-_080FBF90: .4byte sub_80FBE80
-_080FBF94: .4byte gTasks+0x8
- thumb_func_end sub_80FBF54
-
- thumb_func_start sub_80FBF98
-sub_80FBF98: @ 80FBF98
- push {r4,r5,lr}
- adds r4, r1, 0
- lsls r0, 16
- lsrs r5, r0, 16
- bl sub_80F9800
- ldrb r1, [r0, 0xA]
- movs r2, 0x7F
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0x45
- bne _080FBFBE
- ldrb r1, [r4, 0xA]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0x45
- beq _080FC01E
-_080FBFBA:
- movs r0, 0x1
- b _080FC020
-_080FBFBE:
- ldrb r1, [r4, 0xA]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0x40
- bne _080FBFBA
- cmp r5, 0x44
- bne _080FC01E
- ldr r5, _080FBFEC @ =Rfu+0x10a
- ldrh r0, [r5, 0x8]
- ldr r3, _080FBFF0 @ =0x000003ff
- adds r2, r3, 0
- ands r2, r0
- movs r0, 0xCE
- lsls r0, 1
- cmp r2, r0
- bne _080FBFF4
- ldrh r1, [r4, 0x8]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, r2
- beq _080FC01E
- b _080FBFBA
- .align 2, 0
-_080FBFEC: .4byte Rfu+0x10a
-_080FBFF0: .4byte 0x000003ff
-_080FBFF4:
- ldrh r1, [r4, 0x8]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, r2
- bne _080FBFBA
- ldrb r2, [r4, 0xB]
- movs r0, 0xFE
- ldrb r3, [r5, 0xB]
- adds r1, r0, 0
- ands r1, r2
- ands r0, r3
- cmp r1, r0
- bne _080FBFBA
- ldrb r2, [r4, 0x9]
- movs r0, 0xFC
- ldrb r3, [r5, 0x9]
- adds r1, r0, 0
- ands r1, r2
- ands r0, r3
- cmp r1, r0
- bne _080FBFBA
-_080FC01E:
- movs r0, 0
-_080FC020:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80FBF98
-
- thumb_func_start sub_80FC028
-sub_80FC028: @ 80FC028
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r5, r0, 24
- mov r8, r5
- ldr r6, _080FC0E0 @ =Rfu
- adds r0, r6, 0
- adds r0, 0xF1
- ldrb r0, [r0]
- cmp r0, 0x4
- bne _080FC046
- adds r0, r5, 0
- bl DestroyTask
-_080FC046:
- ldr r1, _080FC0E4 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- lsls r0, 16
- movs r1, 0x96
- lsls r1, 17
- cmp r0, r1
- ble _080FC070
- movs r1, 0xE0
- lsls r1, 7
- movs r0, 0x2
- bl sub_80FB9E4
- adds r0, r5, 0
- bl DestroyTask
-_080FC070:
- ldr r1, _080FC0E8 @ =0x00000985
- adds r0, r6, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _080FC108
- ldr r0, _080FC0EC @ =gUnknown_3005E10
- ldrb r0, [r0, 0x6]
- cmp r0, 0
- bne _080FC108
- movs r2, 0x86
- lsls r2, 1
- adds r0, r6, r2
- bl sub_80FBC64
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r2, _080FC0F0 @ =0x00000119
- adds r0, r6, r2
- bl sub_80FBC70
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _080FC108
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- ldr r7, _080FC0F4 @ =gRfuLinkStatus
- lsls r4, r2, 5
- adds r2, r4, 0
- adds r2, 0x14
- ldr r1, [r7]
- adds r1, r2
- adds r1, 0x6
- bl sub_80FBF98
- cmp r0, 0
- bne _080FC0F8
- ldr r0, [r7]
- adds r1, r0, r4
- ldrb r0, [r1, 0x16]
- cmp r0, 0xFF
- beq _080FC108
- ldrh r0, [r1, 0x14]
- movs r1, 0x5A
- bl sub_80FD610
- lsls r0, 24
- cmp r0, 0
- bne _080FC108
- movs r0, 0xA
- strh r0, [r6, 0x4]
- adds r0, r5, 0
- bl DestroyTask
- b _080FC108
- .align 2, 0
-_080FC0E0: .4byte Rfu
-_080FC0E4: .4byte gTasks
-_080FC0E8: .4byte 0x00000985
-_080FC0EC: .4byte gUnknown_3005E10
-_080FC0F0: .4byte 0x00000119
-_080FC0F4: .4byte gRfuLinkStatus
-_080FC0F8:
- movs r1, 0xE0
- lsls r1, 7
- movs r0, 0x2
- bl sub_80FB9E4
- mov r0, r8
- bl DestroyTask
-_080FC108:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80FC028
-
- thumb_func_start sub_80FC114
-sub_80FC114: @ 80FC114
- push {r4-r7,lr}
- adds r3, r0, 0
- adds r5, r1, 0
- lsls r4, r2, 24
- lsrs r4, 24
- ldr r6, _080FC184 @ =Rfu
- ldr r1, _080FC188 @ =0x00000987
- adds r0, r6, r1
- movs r7, 0
- strb r7, [r0]
- adds r0, r6, 0
- adds r0, 0xF1
- strb r7, [r0]
- ldr r1, _080FC18C @ =0x00000119
- adds r0, r6, r1
- adds r1, r3, 0
- bl StringCopy
- movs r1, 0x85
- lsls r1, 1
- adds r0, r6, r1
- adds r1, r5, 0
- movs r2, 0xD
- bl memcpy
- bl sub_80FEB3C
- ldr r0, _080FC190 @ =sub_80FC028
- movs r1, 0x2
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _080FC194 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- strh r4, [r1, 0xA]
- ldr r0, _080FC198 @ =sub_80F8B34
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- cmp r4, 0x45
- bne _080FC19C
- cmp r1, 0xFF
- beq _080FC1AA
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r1, 0x1
- strh r1, [r0, 0x16]
- b _080FC1AA
- .align 2, 0
-_080FC184: .4byte Rfu
-_080FC188: .4byte 0x00000987
-_080FC18C: .4byte 0x00000119
-_080FC190: .4byte sub_80FC028
-_080FC194: .4byte gTasks
-_080FC198: .4byte sub_80F8B34
-_080FC19C:
- cmp r2, 0xFF
- beq _080FC1AA
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r5
- strh r7, [r0, 0x16]
-_080FC1AA:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80FC114
-
- thumb_func_start sub_80FC1B0
-sub_80FC1B0: @ 80FC1B0
- push {lr}
- ldr r0, _080FC1C0 @ =Rfu
- adds r0, 0xF0
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _080FC1C4
- movs r0, 0
- b _080FC1C6
- .align 2, 0
-_080FC1C0: .4byte Rfu
-_080FC1C4:
- movs r0, 0x1
-_080FC1C6:
- pop {r1}
- bx r1
- thumb_func_end sub_80FC1B0
-
- thumb_func_start sub_80FC1CC
-sub_80FC1CC: @ 80FC1CC
- push {r4,lr}
- movs r1, 0
- ldr r0, _080FC1F0 @ =gUnknown_3005E10
- ldrb r2, [r0]
- ldr r4, _080FC1F4 @ =Rfu+0x989
- movs r3, 0x1
-_080FC1D8:
- adds r0, r2, 0
- asrs r0, r1
- ands r0, r3
- cmp r0, 0
- beq _080FC1F8
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _080FC1F8
- movs r0, 0
- b _080FC200
- .align 2, 0
-_080FC1F0: .4byte gUnknown_3005E10
-_080FC1F4: .4byte Rfu+0x989
-_080FC1F8:
- adds r1, 0x1
- cmp r1, 0x3
- ble _080FC1D8
- movs r0, 0x1
-_080FC200:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80FC1CC
-
- thumb_func_start sub_80FC208
-sub_80FC208: @ 80FC208
- push {r4,lr}
- movs r4, 0
-_080FC20C:
- lsls r2, r4, 24
- lsrs r2, 24
- ldr r0, _080FC224 @ =gUnknown_843EE28
- movs r1, 0
- bl nullsub_87
- adds r4, 0x1
- cmp r4, 0x13
- ble _080FC20C
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC224: .4byte gUnknown_843EE28
- thumb_func_end sub_80FC208
-
- thumb_func_start sub_80FC228
-sub_80FC228: @ 80FC228
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1C
- movs r2, 0x13
- movs r3, 0x2
- bl nullsub_88
- ldr r4, _080FC2F8 @ =gRfuLinkStatus
- ldr r0, [r4]
- ldrb r0, [r0, 0x2]
- movs r1, 0x14
- movs r2, 0x1
- movs r3, 0x1
- bl nullsub_88
- ldr r0, [r4]
- ldrb r0, [r0, 0x3]
- movs r1, 0x17
- movs r2, 0x1
- movs r3, 0x1
- bl nullsub_88
- ldr r0, _080FC2FC @ =Rfu
- ldrb r0, [r0, 0xC]
- cmp r0, 0x1
- bne _080FC304
- movs r6, 0
- adds r7, r4, 0
- movs r5, 0x14
-_080FC26C:
- ldr r2, [r7]
- ldrb r0, [r2, 0x7]
- asrs r0, r6
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080FC2AA
- lsls r0, r6, 5
- adds r0, r2, r0
- ldrh r0, [r0, 0x18]
- adds r4, r6, 0x3
- lsls r4, 24
- lsrs r4, 24
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_88
- ldr r0, [r7]
- adds r0, r5
- adds r0, 0x6
- movs r1, 0x6
- adds r2, r4, 0
- bl nullsub_87
- ldr r0, [r7]
- adds r0, r5
- adds r0, 0x15
- movs r1, 0x16
- adds r2, r4, 0
- bl nullsub_87
-_080FC2AA:
- adds r5, 0x20
- adds r6, 0x1
- cmp r6, 0x3
- ble _080FC26C
- movs r6, 0
- ldr r0, _080FC2FC @ =Rfu
- mov r8, r0
-_080FC2B8:
- movs r5, 0
- adds r7, r6, 0x1
- lsls r0, r6, 3
- adds r2, r6, 0
- adds r2, 0xB
- subs r0, r6
- lsls r0, 1
- mov r1, r8
- adds r1, 0x14
- adds r4, r0, r1
- lsls r6, r2, 24
-_080FC2CE:
- ldrb r0, [r4]
- lsls r1, r5, 25
- lsrs r1, 24
- lsrs r2, r6, 24
- movs r3, 0x2
- bl nullsub_88
- adds r4, 0x1
- adds r5, 0x1
- cmp r5, 0xD
- ble _080FC2CE
- adds r6, r7, 0
- cmp r6, 0x3
- ble _080FC2B8
- ldr r0, _080FC300 @ =gUnknown_843EE64 "NOWSLOT"
- movs r1, 0x1
- movs r2, 0xF
- bl nullsub_87
- b _080FC436
- .align 2, 0
-_080FC2F8: .4byte gRfuLinkStatus
-_080FC2FC: .4byte Rfu
-_080FC300: .4byte gUnknown_843EE64
-_080FC304:
- ldr r1, [r4]
- ldrb r0, [r1, 0x2]
- cmp r0, 0
- beq _080FC3A0
- ldrb r0, [r1, 0x7]
- cmp r0, 0
- beq _080FC3A0
- movs r6, 0
- movs r5, 0xC0
- lsls r5, 18
-_080FC318:
- lsrs r4, r5, 24
- movs r0, 0
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_88
- ldr r0, _080FC38C @ =gUnknown_843EE47
- movs r1, 0x6
- adds r2, r4, 0
- bl nullsub_87
- ldr r0, _080FC390 @ =gUnknown_843EE57
- movs r1, 0x16
- adds r2, r4, 0
- bl nullsub_87
- movs r1, 0x80
- lsls r1, 17
- adds r5, r1
- adds r6, 0x1
- cmp r6, 0x3
- ble _080FC318
- ldr r5, _080FC394 @ =gRfuLinkStatus
- ldr r1, [r5]
- ldr r4, _080FC398 @ =Rfu
- ldr r0, _080FC39C @ =0x000008f6
- adds r4, r0
- ldrb r0, [r4]
- lsls r0, 5
- adds r1, r0
- ldrh r0, [r1, 0x18]
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x4
- bl nullsub_88
- ldrb r1, [r4]
- lsls r1, 5
- adds r1, 0x14
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x6
- movs r1, 0x6
- movs r2, 0x3
- bl nullsub_87
- ldrb r1, [r4]
- lsls r1, 5
- adds r1, 0x14
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x15
- movs r1, 0x16
- movs r2, 0x3
- bl nullsub_87
- b _080FC436
- .align 2, 0
-_080FC38C: .4byte gUnknown_843EE47
-_080FC390: .4byte gUnknown_843EE57
-_080FC394: .4byte gRfuLinkStatus
-_080FC398: .4byte Rfu
-_080FC39C: .4byte 0x000008f6
-_080FC3A0:
- movs r6, 0
- ldr r1, _080FC440 @ =gRfuLinkStatus
- ldr r0, [r1]
- ldrb r0, [r0, 0x8]
- cmp r6, r0
- bge _080FC3FC
- adds r7, r1, 0
- movs r1, 0x14
- mov r8, r1
-_080FC3B2:
- ldr r0, [r7]
- lsls r5, r6, 5
- adds r1, r0, r5
- ldrb r0, [r1, 0x16]
- cmp r0, 0xFF
- beq _080FC3EE
- ldrh r0, [r1, 0x18]
- adds r4, r6, 0x3
- lsls r4, 24
- lsrs r4, 24
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_88
- ldr r0, [r7]
- adds r0, r5
- ldrh r0, [r0, 0x14]
- movs r1, 0x6
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_88
- ldr r0, [r7]
- add r0, r8
- adds r0, 0x15
- movs r1, 0x16
- adds r2, r4, 0
- bl nullsub_87
-_080FC3EE:
- movs r0, 0x20
- add r8, r0
- adds r6, 0x1
- ldr r0, [r7]
- ldrb r0, [r0, 0x8]
- cmp r6, r0
- blt _080FC3B2
-_080FC3FC:
- cmp r6, 0x3
- bgt _080FC436
- lsls r0, r6, 24
- movs r1, 0xC0
- lsls r1, 18
- adds r5, r0, r1
-_080FC408:
- lsrs r4, r5, 24
- movs r0, 0
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0x4
- bl nullsub_88
- ldr r0, _080FC444 @ =gUnknown_843EE47
- movs r1, 0x6
- adds r2, r4, 0
- bl nullsub_87
- ldr r0, _080FC448 @ =gUnknown_843EE57
- movs r1, 0x16
- adds r2, r4, 0
- bl nullsub_87
- movs r0, 0x80
- lsls r0, 17
- adds r5, r0
- adds r6, 0x1
- cmp r6, 0x3
- ble _080FC408
-_080FC436:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC440: .4byte gRfuLinkStatus
-_080FC444: .4byte gUnknown_843EE47
-_080FC448: .4byte gUnknown_843EE57
- thumb_func_end sub_80FC228
-
- thumb_func_start sub_80FC44C
-sub_80FC44C: @ 80FC44C
- ldr r0, _080FC458 @ =Rfu
- ldr r1, _080FC45C @ =0x000008d2
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080FC458: .4byte Rfu
-_080FC45C: .4byte 0x000008d2
- thumb_func_end sub_80FC44C
-
- thumb_func_start GetRfuRecvQueueLength
-GetRfuRecvQueueLength: @ 80FC460
- ldr r0, _080FC46C @ =Rfu
- ldr r1, _080FC470 @ =0x0000069e
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_080FC46C: .4byte Rfu
-_080FC470: .4byte 0x0000069e
- thumb_func_end GetRfuRecvQueueLength
-
- thumb_func_start nullsub_89
-nullsub_89: @ 80FC474
- bx lr
- thumb_func_end nullsub_89
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/overworld.s b/asm/overworld.s
index 8eeb570f1..5b3c1a495 100644
--- a/asm/overworld.s
+++ b/asm/overworld.s
@@ -5722,7 +5722,7 @@ sub_8057910: @ 8057910
lsrs r0, 24
cmp r0, 0x3C
bls _0805792E
- bl sub_80FA190
+ bl LinkRfu_FatalError
_0805792E:
pop {r0}
bx r0
diff --git a/common_syms/link_rfu_2.txt b/common_syms/link_rfu_2.txt
new file mode 100644
index 000000000..bf170665d
--- /dev/null
+++ b/common_syms/link_rfu_2.txt
@@ -0,0 +1,3 @@
+gUnknown_3005440
+Rfu
+gUnknown_3005E00
diff --git a/data/link_rfu_2.s b/data/link_rfu_2.s
index 4877a20e2..ae38a9c89 100644
--- a/data/link_rfu_2.s
+++ b/data/link_rfu_2.s
@@ -6,48 +6,3 @@
.section .rodata
.align 2
- .align 2
-gUnknown_843EDE4:: @ 843EDE4
- .asciz "PokemonSioInfo"
-
- .byte 0, 1, 7, 0x14, 0xFF
-
- .align 2
-gUnknown_843EDF8:: @ 843EDF8
- .asciz "LINK LOSS DISCONNECT!"
-
- .align 2
-gUnknown_843EE10:: @ 843EE10
- .asciz "LINK LOSS RECOVERY NOW"
-
- .align 2
-gUnknown_843EE28:: @ 843EE28
- .asciz " "
-
-gUnknown_843EE47:: @ 843EE47
- .asciz " "
-
-gUnknown_843EE57:: @ 843EE57
- .asciz " "
- .asciz " "
- .asciz "*"
-
- .align 2
-gUnknown_843EE64:: @ 843EE64
- .asciz "NOWSLOT"
- .align 2
- .asciz " "
- .align 2
- .asciz "CLOCK DRIFT"
- .align 2
- .asciz "BUSY SEND "
- .align 2
- .asciz "CMD REJECT "
- .align 2
- .asciz "CLOCK SLAVE"
- .align 2
- .asciz "CHILD "
- .align 2
- .asciz "PARENT"
- .align 2
- .asciz "SEARCH"
diff --git a/include/link.h b/include/link.h
index bb3ffbb2f..4175ac97f 100644
--- a/include/link.h
+++ b/include/link.h
@@ -65,6 +65,19 @@
#define LINKCMD_SEND_HELD_KEYS_2 0xCAFE
#define LINKCMD_0xCCCC 0xCCCC
+#define LINKTYPE_0x1111 0x1111 // trade
+#define LINKTYPE_0x1122 0x1122 // trade
+#define LINKTYPE_0x1133 0x1133 // trade
+#define LINKTYPE_0x1144 0x1144 // trade
+#define LINKTYPE_BATTLE 0x2211
+#define LINKTYPE_0x2222 0x2222 // unused battle?
+#define LINKTYPE_SINGLE_BATTLE 0x2233
+#define LINKTYPE_DOUBLE_BATTLE 0x2244
+#define LINKTYPE_MULTI_BATTLE 0x2255
+#define LINKTYPE_BATTLE_TOWER_50 0x2266
+#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277
+#define LINKTYPE_BATTLE_TOWER 0x2288
+
#define MASTER_HANDSHAKE 0x8FFF
#define SLAVE_HANDSHAKE 0xB9A0
@@ -262,5 +275,8 @@ bool8 IsWirelessAdapterConnected(void);
bool8 sub_800A474(u8 a0);
void LinkVSync(void);
bool8 HandleLinkConnection(void);
+void sub_800B0B4(void);
+void sub_800B110(u32 who);
+void sub_800ACBC(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
#endif // GUARD_LINK_H
diff --git a/include/link_rfu.h b/include/link_rfu.h
index cb315f31d..a5c60fd52 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -109,7 +109,7 @@ extern struct UnkRfuStruct_1 gUnknown_3005E10;
void AddTextPrinterToWindow1(const u8 *str);
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
-void sub_80FA190(void);
+void LinkRfu_FatalError(void);
void MG_DrawCheckerboardPattern(void);
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
bool8 IsLinkRfuTaskFinished(void);
@@ -167,6 +167,13 @@ bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
bool8 sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
bool8 sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
+u8 sub_80FEA34(u8 a0, u16 a1);
+void sub_80FDA30(u32 a0);
+void sub_80FCB54(struct UnkLinkRfuStruct_02022B14 *data, u8 r9, bool32 r2, s32 r3);
+void rfu_syncVBlank_(void);
+s32 sub_80FD430(void (*func1)(u8, u8), void (*func2)(u16));
+void sub_80FEB3C(void);
+void sub_80FAFE0(u8 a0);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h
index 6fed52119..32624d602 100644
--- a/include/mystery_gift_menu.h
+++ b/include/mystery_gift_menu.h
@@ -6,5 +6,6 @@ extern bool8 gGiftIsFromEReader;
void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void);
void PrintMysteryGiftOrEReaderTopMenu(bool8, bool32);
void c2_mystery_gift(void);
+void c2_mystery_gift_e_reader_run(void);
#endif //GUARD_MYSTERY_GIFT_MENU_H
diff --git a/ld_script.txt b/ld_script.txt
index 8b17d3cd6..942e4ece3 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -226,7 +226,6 @@ SECTIONS {
src/save_menu_util.o(.text);
src/map_preview_screen.o(.text);
src/link_rfu_2.o(.text);
- asm/link_rfu_2.o(.text);
asm/link_rfu_4.o(.text);
src/link_rfu.o(.text);
asm/easy_chat_2.o(.text);
@@ -512,7 +511,6 @@ SECTIONS {
data/box_party_pokemon_dropdown.o(.rodata);
src/map_preview_screen.o(.rodata);
src/link_rfu_2.o(.rodata);
- data/link_rfu_2.o(.rodata);
data/link_rfu_4.o(.rodata);
data/link_rfu.o(.rodata);
src/pokedex_screen.o(.rodata);
diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c
index 5d8c26983..9baee37ed 100644
--- a/src/link_rfu_2.c
+++ b/src/link_rfu_2.c
@@ -1,10 +1,17 @@
#include "global.h"
+#include "battle.h"
+#include "gpu_regs.h"
#include "librfu.h"
#include "link.h"
#include "link_rfu.h"
+#include "mystery_gift_menu.h"
#include "overworld.h"
+#include "palette.h"
#include "quest_log.h"
+#include "random.h"
+#include "string_util.h"
#include "task.h"
+#include "constants/species.h"
struct UnkRfuStruct_2_Sub_6c
{
@@ -24,7 +31,7 @@ struct UnkRfuStruct_2
/* 0x004 */ u16 unk_04;
/* 0x006 */ u8 filler_06[4];
/* 0x00a */ u16 unk_0a;
- /* 0x00c */ u8 unk_0c;
+ /* 0x00c */ u8 unk_0c; // parentChildMode?
/* 0x00d */ u8 playerCount;
/* 0x00e */ u8 unk_0e;
/* 0x00f */ u8 unk_0f;
@@ -66,7 +73,7 @@ struct UnkRfuStruct_2
/* 0x93e */ u8 unk_c86;
/* 0x93f */ u8 unk_c87[5][7][2];
/* 0x985 */ u8 unk_ccd;
- /* 0x986 */ u8 unk_cce;
+ /* 0x986 */ u8 unk_cce; // childId
/* 0x987 */ u8 unk_ccf;
/* 0x988 */ vu8 unk_cd0;
/* 0x989 */ u8 unk_cd1[4];
@@ -87,44 +94,58 @@ struct UnkRfuStruct_2
/* 0x9a1 */ u8 unk_ce9;
/* 0x9a2 */ u8 unk_cea[4];
/* 0x9a6 */ u8 unk_cee[4];
-} Rfu; // size: 0x9AC
+}; // size: 0x9AC
+
+struct UnkRfuStruct_8010A14{
+ char unk_00[15]; // PokemonSioInfo
+ u8 unk_0f;
+ u8 unk_10[4];
+ struct LinkPlayer unk_14[5];
+ u8 fill_a0[0x5c];
+};
-EWRAM_DATA struct UnkLinkRfuStruct_02022B2C gUnknown_203ABF0 = {};
-EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_203AC08 = {};
+static EWRAM_DATA struct UnkLinkRfuStruct_02022B2C gUnknown_203ABF0 = {};
+static EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_203AC08 = {};
-ALIGNED(8) IWRAM_DATA u8 gUnknown_3001188;
-ALIGNED(8) IWRAM_DATA struct RfuAPIBuffer gRfuAPIBuffer;
-ALIGNED(8) IWRAM_DATA u8 gUnknown_3001FF8[14];
-ALIGNED(8) IWRAM_DATA u16 gUnknown_3002008[7];
+static u8 gUnknown_3001188;
+static struct RfuAPIBuffer gRfuAPIBuffer;
+static u8 gUnknown_3001FF8[14];
+static u16 gUnknown_3002008[7];
struct UnkLinkRfuStruct_02022B14 gUnknown_3005440;
+struct UnkRfuStruct_2 Rfu;
u8 gUnknown_3005E00[PLAYER_NAME_LENGTH];
-void sub_80F8AA4(void);
-void sub_80F8AEC(void);
-void sub_80F8D20(u16 a0);
-void sub_80F8DA8(u16 a0);
-void sub_80F906C(void);
-void sub_80F9868(u8 unused);
-void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data);
-void sub_80F9D04(u16 command);
-void rfufunc_80F9F44(void);
-void sub_80F9FA8(void);
-void rfufunc_80FA020(void);
-void sub_80FA510(void);
-void sub_80FA738(void);
-int sub_80FA788(void);
-void sub_80FA834(u8 taskId);
-void sub_80FA9D0(u16 a0);
-bool32 sub_80FAA58(void * a0);
-void sub_80FAA94(u8 taskId);
-void sub_80FACF0(u8 taskId);
-void sub_80FAFE0(u8 a0);
-void sub_80FB0E8(u32 a0);
-void sub_80FBCF8(u32 a0);
-void sub_80FC208(void);
-
-const struct UnkLinkRfuStruct_02022B2C gUnknown_843EBB4 = {
+static void sub_80F8AA4(void);
+static void sub_80F8AEC(void);
+static void sub_80F8D20(u16 a0);
+static void sub_80F8DA8(u16 a0);
+static void sub_80F906C(void);
+static void sub_80F9868(u8 unused);
+static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data);
+static void sub_80F9D04(u16 command);
+static void rfufunc_80F9F44(void);
+static void sub_80F9FA8(void);
+static void rfufunc_80FA020(void);
+static void CallRfuFunc(void);
+static void sub_80FA738(void);
+static int sub_80FA788(void);
+static void sub_80FA834(u8 taskId);
+static void sub_80FA9D0(u16 a0);
+static void sub_80FAA58(void * a0);
+static void sub_80FAA94(u8 taskId);
+static void sub_80FACF0(u8 taskId);
+static void sub_80FB0E8(u32 a0);
+static void sub_80FB564(s32 a0);
+static void sub_80FBB74(void);
+static u8 sub_80FBC70(const u8 *a0, u16 a1);
+static void sub_80FBCF8(u32 a0);
+static void sub_80FBE20(u32 a0, u32 a1);
+static void sub_80FC028(u8 taskId);
+static void sub_80FC208(void);
+static void nullsub_89(u8 taskId);
+
+static const struct UnkLinkRfuStruct_02022B2C gUnknown_843EBB4 = {
.unk_00 = 0x04,
.unk_01 = 0x20,
.unk_02 = 0x0000,
@@ -138,11 +159,11 @@ const struct UnkLinkRfuStruct_02022B2C gUnknown_843EBB4 = {
.unk_14 = 0x012c
};
-const u8 gUnknown_843EBCC[] = {
+static const u8 gUnknown_843EBCC[] = {
0, 3, 2, 1, 0
};
-const u32 gUnknown_843EBD4[] = {
+static const u32 gUnknown_843EBD4[] = {
0x000000,
0x000001,
0x000003,
@@ -170,24 +191,24 @@ const u32 gUnknown_843EBD4[] = {
0xffffff
};
-const u8 gUnknown_843EC38[] = {
+static const u8 gUnknown_843EC38[] = {
0, 0, 1,
1, 2, 2,
2, 2, 3
};
-const u8 gUnknown_843EC41[] = {
+static const u8 gUnknown_843EC41[] = {
0, 1, 1, 2,
1, 2, 2, 3,
1, 2, 2, 3,
2, 3, 3, 4
};
-const u8 gUnknown_843EC51[] = {
+static const u8 gUnknown_843EC51[] = {
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};
-const struct {
+static const struct {
u8 *buffer;
u32 size;
} gUnknown_843EC64[] = {
@@ -198,11 +219,11 @@ const struct {
{ gBlockSendBuffer, 40 }
};
-const u16 gUnknown_843EC8C[] = {
+static const u16 gUnknown_843EC8C[] = {
0x0002, 0x7f7d, 0xFFFF
};
-const char sUnref_843EC92[][15] = {
+static const char sUnref_843EC92[][15] = {
"RFU WAIT",
"RFU BOOT",
"RFU ERROR",
@@ -216,7 +237,7 @@ const char sUnref_843EC92[][15] = {
"RFU CP POLL"
};
-const char sUnref_843ED37[][16] = {
+static const char sUnref_843ED37[][16] = {
" ",
"RECOVER START ",
"DISSCONECT ",
@@ -224,18 +245,18 @@ const char sUnref_843ED37[][16] = {
"RECOVER FAILED"
};
-const TaskFunc gUnknown_843ED88[] = {
+static const TaskFunc gUnknown_843ED88[] = {
sub_80FA834,
sub_80FAA94,
sub_80FACF0
};
-void nullsub_87(const void *unused_0, u8 unused_1, u8 unused_2)
+static void nullsub_87(const void *unused_0, u8 unused_1, u8 unused_2)
{
// debug?
}
-void nullsub_88(u16 unused_0, u8 unused_1, u8 unused_2, u8 unused_3)
+static void nullsub_88(u16 unused_0, u8 unused_1, u8 unused_2, u8 unused_3)
{
}
@@ -287,7 +308,7 @@ void sub_80F86F4(void)
}
}
-void sub_80F8738(u8 taskId)
+static void sub_80F8738(u8 taskId)
{
sub_80FA738();
switch (Rfu.unk_04)
@@ -325,12 +346,12 @@ void sub_80F8738(u8 taskId)
}
}
-s32 sub_80F886C(u8 idx)
+static u8 sub_80F886C(u8 idx)
{
return gUnknown_843EC51[idx];
}
-void sub_80F887C(s32 r2, s32 r5)
+static void sub_80F887C(s32 r2, s32 r5)
{
u8 i;
u8 r4 = 1;
@@ -374,7 +395,7 @@ void sub_80F887C(s32 r2, s32 r5)
}
}
-void sub_80F893C(u8 taskId)
+static void sub_80F893C(u8 taskId)
{
switch (Rfu.unk_04)
{
@@ -428,7 +449,7 @@ void sub_80F893C(u8 taskId)
}
}
-void sub_80F8AA4(void)
+static void sub_80F8AA4(void)
{
u8 i;
u8 r5 = gUnknown_3005E10.unk_00;
@@ -443,7 +464,7 @@ void sub_80F8AA4(void)
}
}
-void sub_80F8AEC(void)
+static void sub_80F8AEC(void)
{
u8 r5 = gUnknown_3005E10.unk_00;
rfu_UNI_setSendData(r5, Rfu.unk_c87, 70);
@@ -453,7 +474,7 @@ void sub_80F8AEC(void)
Rfu.unk_0c = 1;
}
-void sub_80F8B34(u8 taskId)
+static void sub_80F8B34(u8 taskId)
{
if (sub_80F9800()->unk_0a_0 == 0x54 && sub_80FB9F4() == 4)
{
@@ -524,7 +545,7 @@ void sub_80F8D14(void)
sub_80FD760(FALSE);
}
-void sub_80F8D20(u16 unused)
+static void sub_80F8D20(u16 unused)
{
s32 i;
@@ -546,7 +567,7 @@ void sub_80F8D20(u16 unused)
LinkRfu_REQ_SendData_HandleParentRelationship(TRUE);
}
-void sub_80F8DA8(u16 unused)
+static void sub_80F8DA8(u16 unused)
{
Rfu.unk_cdb = 1;
}
@@ -592,14 +613,14 @@ void sub_80F8DC0(void)
}
}
-void sub_80F8E74(void)
+static void sub_80F8E74(void)
{
if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)
return;
Rfu.unk_67 = CreateTask(sub_80F8738, 1);
}
-bool8 sub_80F8EA4(void)
+static bool8 sub_80F8EA4(void)
{
if (Rfu.unk_04 == 7 && Rfu.unk_ccd)
{
@@ -608,7 +629,7 @@ bool8 sub_80F8EA4(void)
return FALSE;
}
-bool32 sub_80F8ECC(void)
+static bool32 sub_80F8ECC(void)
{
if (Rfu.unk_04 == 7 && !sub_80FD610(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240))
{
@@ -618,7 +639,7 @@ bool32 sub_80F8ECC(void)
return FALSE;
}
-void sub_80F8F10(void)
+static void sub_80F8F10(void)
{
if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)
return;
@@ -655,7 +676,7 @@ void sub_80F8FA0(void)
Rfu.unk_04 = 14;
}
-void sub_80F8FAC(u8 a0)
+static void sub_80F8FAC(u8 a0)
{
u8 i;
@@ -670,7 +691,7 @@ void sub_80F8FAC(u8 a0)
}
}
-void sub_80F8FD4(void)
+static void sub_80F8FD4(void)
{
s32 i, j;
@@ -686,7 +707,7 @@ void sub_80F8FD4(void)
CpuFill16(0, gRecvCmds, sizeof gRecvCmds);
}
-void sub_80F9038(void)
+static void sub_80F9038(void)
{
s32 i;
for (i = 0; i < 7; i++)
@@ -699,7 +720,7 @@ void sub_80F9038(void)
}
}
-void sub_80F906C(void)
+static void sub_80F906C(void)
{
if (Rfu.unk_c3c)
{
@@ -742,7 +763,7 @@ bool32 IsRfuRecvQueueEmpty(void)
return TRUE;
}
-bool32 sub_80F911C(void)
+static bool32 sub_80F911C(void)
{
if (Rfu.unk_04 < 20)
{
@@ -788,7 +809,7 @@ bool32 sub_80F911C(void)
return FALSE;
}
-bool32 sub_80F9204(void)
+static bool32 sub_80F9204(void)
{
u16 i;
u16 flags;
@@ -844,7 +865,7 @@ bool32 sub_80F9204(void)
}
sub_80F9038();
sub_80F9868(0);
- sub_80FA510();
+ CallRfuFunc();
if (Rfu.unk_ce5 && !Rfu.unk_cd9)
{
gUnknown_203AC08.unk_0e = 0;
@@ -876,7 +897,7 @@ bool32 sub_80F9204(void)
return gRfuLinkStatus->sendSlotUNIFlag ? retval & 1 : FALSE;
}
-void sub_80F94BC(u16 *a0, u8 *a1)
+static void sub_80F94BC(u16 *a0, u8 *a1)
{
s32 i;
@@ -897,7 +918,7 @@ void sub_80F94BC(u16 *a0, u8 *a1)
}
}
-bool32 sub_80F9514(void)
+static bool32 sub_80F9514(void)
{
u8 i;
u8 j;
@@ -935,7 +956,7 @@ bool32 sub_80F9514(void)
if (Rfu.unk_cd0)
{
Rfu.unk_cd0--;
- sub_80FA510();
+ CallRfuFunc();
sub_80F94BC(gSendCmd, sp48);
sub_80FC63C(&Rfu.unk_9e8, sp48);
for (i = 0; i < CMD_LENGTH - 1; i++)
@@ -944,7 +965,7 @@ bool32 sub_80F9514(void)
return IsRfuRecvQueueEmpty();
}
-void sub_80F965C(u8 unused, u32 flags)
+static void sub_80F965C(u8 unused, u32 flags)
{
s32 i, j;
@@ -986,7 +1007,7 @@ void Rfu_ResetBlockReceivedFlag(u8 a0)
Rfu.unk_80[a0].unk_12 = 0;
}
-u8 sub_80F9770(const u8 *a0)
+static u8 sub_80F9770(const u8 *a0)
{
u8 i;
@@ -999,7 +1020,7 @@ u8 sub_80F9770(const u8 *a0)
return a0[Rfu.unk_c3e];
}
-void rfu_func_080F97B8(void)
+static void rfu_func_080F97B8(void)
{
// static u8 gUnknown_3001188;
if (gReceivedRemoteLinkPlayers
@@ -1033,7 +1054,7 @@ void Rfu_set_zero(void)
Rfu.RfuFunc = NULL;
}
-void sub_80F9868(u8 unused)
+static void sub_80F9868(u8 unused)
{
u16 i;
u16 j;
@@ -1138,7 +1159,7 @@ void sub_80F9868(u8 unused)
}
}
-bool8 sub_80F9C50(void)
+static bool8 sub_80F9C50(void)
{
s32 i;
@@ -1150,7 +1171,7 @@ bool8 sub_80F9C50(void)
return TRUE;
}
-bool8 sub_80F9C78(void)
+static bool8 sub_80F9C78(void)
{
s32 i;
@@ -1162,7 +1183,7 @@ bool8 sub_80F9C78(void)
return TRUE;
}
-void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data)
+static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data)
{
data->unk_00 = 0;
data->unk_02 = 0;
@@ -1188,7 +1209,7 @@ u8 Rfu_GetBlockReceivedStatus(void)
return flags;
}
-void sub_80F9D04(u16 command)
+static void sub_80F9D04(u16 command)
{
u8 i;
u8 *buff;
@@ -1273,7 +1294,7 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size)
return TRUE;
}
-void rfufunc_80F9F44(void)
+static void rfufunc_80F9F44(void)
{
if (gSendCmd[0] == 0)
{
@@ -1290,7 +1311,7 @@ void rfufunc_80F9F44(void)
}
}
}
-void sub_80F9FA8(void)
+static void sub_80F9FA8(void)
{
s32 i;
const u8 *src = Rfu.unk_6c.unk_04;
@@ -1305,7 +1326,7 @@ void sub_80F9FA8(void)
}
}
-void rfufunc_80FA020(void)
+static void rfufunc_80FA020(void)
{
const u8 *src = Rfu.unk_6c.unk_04;
u8 mpId = GetMultiplayerId();
@@ -1329,3 +1350,1569 @@ void rfufunc_80FA020(void)
else
Rfu.RfuFunc = NULL;
}
+
+bool8 sub_80FA0F8(u8 a0)
+{
+ Rfu.unk_5a = a0;
+ sub_80F9D04(0xa100);
+ return TRUE;
+}
+
+static void sub_80FA114(void)
+{
+ rfu_clearAllSlot();
+ sub_80FD52C();
+ gReceivedRemoteLinkPlayers = 0;
+ Rfu.unk_ef = 1;
+ Rfu.RfuFunc = NULL;
+}
+
+static void sub_80FA140(void)
+{
+ rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
+ rfu_waitREQComplete();
+ sub_80FA114();
+}
+
+static void sub_80FA160(void)
+{
+ if (Rfu.unk_0c == 0)
+ {
+ sub_80FEB14();
+ Rfu.unk_ce4 = 2;
+ }
+ else
+ Rfu.RfuFunc = sub_80FA140;
+}
+
+void LinkRfu_FatalError(void)
+{
+ sub_80FEB14();
+ Rfu.unk_ce4 = 1;
+ Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
+}
+
+static void sub_80FA1C4(void)
+{
+ s32 i;
+ u8 playerCount = Rfu.playerCount;
+ s32 count = 0;
+
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ if (Rfu.unk_e4[i])
+ count++;
+ }
+ if (count == playerCount)
+ {
+ gBattleTypeFlags &= (u16)~BATTLE_TYPE_20;
+ if (Rfu.unk_0c == 0)
+ {
+ Rfu.unk_ee = 3;
+ sub_80FA160();
+ }
+ else
+ Rfu.RfuFunc = sub_80FA160;
+ }
+}
+
+static void sub_80FA224(void)
+{
+ if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
+ {
+ sub_80F9D04(0x5f00);
+ Rfu.RfuFunc = sub_80FA1C4;
+ }
+}
+
+static void sub_80FA25C(u8 taskId)
+{
+ if (Rfu.RfuFunc == NULL)
+ {
+ Rfu.unk_cd9 = 1;
+ Rfu.RfuFunc = sub_80FA224;
+ DestroyTask(taskId);
+ }
+}
+
+void task_add_05_task_del_08FA224_when_no_RfuFunc(void)
+{
+ if (!FuncIsActiveTask(sub_80FA25C))
+ CreateTask(sub_80FA25C, 5);
+}
+
+static void sub_80FA2B0(void)
+{
+ u8 playerCount;
+ u8 i;
+
+ if (GetMultiplayerId() != 0)
+ {
+ if (Rfu.unk_124.unk_8c2 == 0 && Rfu.unk_fe > 0x3c)
+ {
+ sub_80F9D04(0x6600);
+ Rfu.unk_fe = 0;
+ }
+ }
+ playerCount = GetLinkPlayerCount();
+ for (i = 0; i < playerCount; i++)
+ {
+ if (Rfu.unk_e9[i] == 0)
+ break;
+ }
+ if (i == playerCount)
+ {
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ Rfu.unk_e9[i] = 0;
+ Rfu.unk_100++;
+ Rfu.RfuFunc = NULL;
+ }
+ Rfu.unk_fe++;
+}
+
+static void sub_80FA350(void)
+{
+ if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ {
+ sub_80F9D04(0x6600);
+ Rfu.RfuFunc = sub_80FA2B0;
+ }
+}
+
+static void sub_80FA388(void)
+{
+ u8 i;
+ u8 playerCount;
+
+ if (GetMultiplayerId() != 0)
+ {
+ if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ {
+ sub_80F9D04(0x6600);
+ Rfu.RfuFunc = sub_80FA2B0;
+ }
+ }
+ else
+ {
+ playerCount = GetLinkPlayerCount();
+ for (i = 1; i < playerCount; i++)
+ {
+ if (Rfu.unk_e9[i] == 0)
+ break;
+ }
+ if (i == playerCount)
+ {
+ if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
+ {
+ sub_80F9D04(0x6600);
+ Rfu.RfuFunc = sub_80FA350;
+ }
+ }
+ }
+}
+
+void sub_80FA42C(void)
+{
+ if (Rfu.RfuFunc == NULL)
+ {
+ Rfu.RfuFunc = sub_80FA388;
+ Rfu.unk_fe = 0;
+ }
+}
+
+bool32 sub_80FA44C(u32 a0)
+{
+ s32 i;
+ for (i = 0; gUnknown_843EC8C[i] != a0; i++)
+ {
+ if (gUnknown_843EC8C[i] == 0xFFFF)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+u8 sub_80FA484(bool32 a0)
+{
+ if (a0 == FALSE)
+ return sub_80FEA34(0, 0);
+ sub_80FEA34(1, 0x258);
+ return 0;
+}
+
+void sub_80FA4A8(void)
+{
+ Rfu.unk_cd9 = 1;
+ sub_80FD760(FALSE);
+}
+
+u8 rfu_get_multiplayer_id(void)
+{
+ if (Rfu.unk_0c == 1)
+ return 0;
+ return Rfu.unk_cce;
+}
+
+u8 GetRfuPlayerCount(void)
+{
+ return Rfu.playerCount;
+}
+
+bool8 IsLinkRfuTaskFinished(void)
+{
+ return Rfu.RfuFunc ? FALSE : TRUE;
+}
+
+static void CallRfuFunc(void)
+{
+ if (Rfu.RfuFunc)
+ Rfu.RfuFunc();
+}
+
+static bool8 sub_80FA528(void)
+{
+ s32 i;
+ bool8 retval = FALSE;
+ for (i = 0; i < RFU_CHILD_MAX; i++)
+ {
+ if (Rfu.unk_cd1[i] < 5 || Rfu.unk_cd1[i] > 6)
+ {
+ if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
+ {
+ if (Rfu.unk_cd5[i] == 8)
+ {
+ Rfu.unk_cd1[i] = 9;
+ Rfu.unk_cd5[i] = 10;
+ rfu_clearSlot(8, i);
+ rfu_NI_setSendData(1 << i, 8, Rfu.unk_cd1 + i, 1);
+ retval = TRUE;
+ }
+
+ }
+ else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED)
+ {
+ rfu_clearSlot(8, i);
+ }
+ }
+ }
+ return retval;
+}
+
+bool32 sub_80FA5D4(void)
+{
+ u8 flags = 0;
+ s32 i;
+ for (i = 0; i < 4; i++)
+ {
+ if (Rfu.unk_cd5[i] == 11)
+ {
+ flags |= (1 << i);
+ Rfu.unk_cd5[i] = 0;
+ }
+ }
+ if (flags)
+ {
+ rfu_REQ_disconnect(flags);
+ rfu_waitREQComplete();
+ }
+ for (i = 0; i < 4; i++)
+ {
+ if (Rfu.unk_cd5[i] == 10 || Rfu.unk_cd5[i] == 11)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool32 sub_80FA634(u16 a0, const u8 *a1)
+{
+ u8 r1 = sub_80FBC70(a1, a0);
+ if (r1 == 0xFF)
+ return TRUE;
+ if (Rfu.unk_cd1[r1] == 9)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_80FA670(u8 a0, u16 a1, const u8 *a2)
+{
+ u8 r4 = sub_80FBC70(a2, a1);
+ Rfu.unk_cd1[r4] = a0;
+ rfu_clearSlot(4, r4);
+ rfu_NI_setSendData(1 << r4, 8, Rfu.unk_cd1 + r4, 1);
+}
+
+void sub_80FA6BC(void)
+{
+ Rfu.unk_c85 = 8;
+ rfu_clearSlot(4, Rfu.unk_c3e);
+ rfu_NI_setSendData(1 << Rfu.unk_c3e, 8, &Rfu.unk_c85, 1);
+}
+
+u32 sub_80FA6FC(u16 a0, const u8 *a1)
+{
+ u8 r0 = sub_80FBC70(a1, a0);
+ if (r0 == 0xFF)
+ return 2;
+ if (gRfuSlotStatusNI[r0]->send.state == 0)
+ return 1;
+ return 0;
+}
+
+static void sub_80FA738(void)
+{
+ s32 i;
+
+ sub_80FA528();
+ for (i = 0; i < 4; i++)
+ {
+ if (gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[i]->send.state == SLOT_STATE_SEND_FAILED)
+ {
+ if (Rfu.unk_cd5[i] == 10)
+ Rfu.unk_cd5[i] = 11;
+ rfu_clearSlot(4, i);
+ }
+ }
+}
+
+static s32 sub_80FA788(void)
+{
+ s32 retval = 0;
+ if (Rfu.unk_c85 == 8)
+ {
+ if (gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_FAILED)
+ rfu_clearSlot(4, Rfu.unk_c3e);
+ }
+ if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN)
+ {
+ rfu_clearSlot(8, Rfu.unk_c3e);
+ sub_80FB9E4(Rfu.unk_c86, 0);
+ retval = Rfu.unk_c86;
+ }
+ else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED)
+ {
+ rfu_clearSlot(8, Rfu.unk_c3e);
+ retval = 6;
+ }
+ return retval;
+}
+
+static void sub_80FA834(u8 taskId)
+{
+ s32 i;
+
+ if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
+ {
+ Rfu.unk_ce8 = 0;
+ DestroyTask(taskId);
+ }
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (sub_80F9C50())
+ {
+ ResetBlockReceivedFlags();
+ sub_800B0B4();
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (Rfu.unk_0c == 1)
+ {
+ if (gReceivedRemoteLinkPlayers)
+ sub_80F9D04(0x7800);
+ else
+ sub_80F9D04(0x7700);
+ gTasks[taskId].data[0] = 101;
+ }
+ else
+ gTasks[taskId].data[0] = 2;
+ break;
+ case 101:
+ if (gSendCmd[0] == 0)
+ gTasks[taskId].data[0] = 2;
+ break;
+ case 2:
+ if (Rfu.playerCount)
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (Rfu.unk_0c == 1)
+ {
+ if (sub_80F9C50())
+ {
+ Rfu.unk_5a = 0;
+ sub_80F9D04(0xa100);
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else
+ gTasks[taskId].data[0]++;
+ break;
+ case 4:
+ if (sub_80F9C78())
+ gTasks[taskId].data[0]++;
+ break;
+ case 5:
+ for (i = 0; i < Rfu.playerCount; i++)
+ {
+ sub_800B110(i);
+ Rfu_ResetBlockReceivedFlag(i);
+ }
+ gTasks[taskId].data[0]++;
+ break;
+ case 6:
+ DestroyTask(taskId);
+ gReceivedRemoteLinkPlayers = 1;
+ Rfu.unk_ce8 = 0;
+ sub_80FEA34(1, 0x258);
+ if (Rfu.unk_ce6)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if ((Rfu.unk_ce6 >> i) & 1)
+ {
+ Rfu.unk_ce5 = 1 << i;
+ Rfu.unk_ce6 ^= (1 << i);
+ }
+ }
+ }
+ break;
+ }
+}
+
+static void sub_80FA9D0(u16 a0)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if ((a0 >> i) & 1)
+ Rfu.unk_cde[i] = 0;
+ }
+}
+
+static void sub_80FA9FC(const struct UnkRfuStruct_8010A14 *a0)
+{
+ s32 i;
+ Rfu.playerCount = a0->unk_0f;
+ for (i = 0; i < 4; i++)
+ Rfu.unk_cde[i] = a0->unk_10[i];
+ for (i = 0; i < MAX_RFU_PLAYERS; i++)
+ {
+ gLinkPlayers[i] = a0->unk_14[i];
+ sub_800B284(gLinkPlayers + i);
+ }
+}
+
+static void sub_80FAA58(void *a0)
+{
+ if (strcmp("PokemonSioInfo", ((struct UnkRfuStruct_8010A14 *)a0)->unk_00) == 0)
+ {
+ sub_80FA9FC(a0);
+ CpuFill16(0, a0, sizeof(struct UnkRfuStruct_8010A14));
+ ResetBlockReceivedFlag(0);
+ }
+}
+
+static void sub_80FAA94(u8 taskId)
+{
+ s32 i;
+ struct LinkPlayerBlock *r2;
+ struct UnkRfuStruct_8010A14 *r5;
+ u8 r4 = Rfu.unk_cde[gUnknown_843EC38[Rfu.unk_ce9]];
+ if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
+ {
+ Rfu.unk_ce8 = 0;
+ DestroyTask(taskId);
+ }
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (gSendCmd[0] == 0)
+ {
+ ResetBlockReceivedFlag(r4);
+ sub_80F9D04(0x7800);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (gSendCmd[0] == 0)
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ if ((GetBlockReceivedStatus() >> r4) & 1)
+ {
+ ResetBlockReceivedFlag(r4);
+ r2 = (struct LinkPlayerBlock *)gBlockRecvBuffer[r4];
+ gLinkPlayers[r4] = r2->linkPlayer;
+ sub_800B284(gLinkPlayers + r4);
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 3:
+ r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer;
+ memcpy(r5->unk_00, "PokemonSioInfo", sizeof("PokemonSioInfo"));
+ r5->unk_0f = Rfu.playerCount;
+ for (i = 0; i < 4; i++)
+ r5->unk_10[i] = Rfu.unk_cde[i];
+ memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers);
+ gTasks[taskId].data[0]++;
+ // fallthrough
+ case 4:
+ r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer;
+ r5->unk_0f = Rfu.playerCount;
+ for (i = 0; i < 4; i++)
+ r5->unk_10[i] = Rfu.unk_cde[i];
+ memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers);
+ if (SendBlock(0, gBlockSendBuffer, 0xa0))
+ gTasks[taskId].data[0]++;
+ break;
+ case 5:
+ if (IsLinkTaskFinished() && GetBlockReceivedStatus() & 1)
+ {
+ CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14));
+ ResetBlockReceivedFlag(0);
+ Rfu.unk_ce8 = 0;
+ if (Rfu.unk_ce6)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if ((Rfu.unk_ce6 >> i) & 1)
+ {
+ Rfu.unk_ce5 = 1 << i;
+ Rfu.unk_ce6 ^= (1 << i);
+ Rfu.unk_ce8 = 1;
+ break;
+ }
+ }
+ }
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+static void sub_80FACF0(u8 taskId)
+{
+ if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2)
+ DestroyTask(taskId);
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (Rfu.playerCount)
+ {
+ sub_800B0B4();
+ SendBlock(0, gBlockSendBuffer, sizeof(struct LinkPlayerBlock));
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (IsLinkTaskFinished())
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ if (GetBlockReceivedStatus() & 1)
+ {
+ sub_80FA9FC((const struct UnkRfuStruct_8010A14 *)gBlockRecvBuffer);
+ ResetBlockReceivedFlag(0);
+ gReceivedRemoteLinkPlayers = 1;
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+static void sub_80FAD98(void)
+{
+ if (Rfu.unk_ee == 1 && gUnknown_3005E10.unk_02 == 0)
+ {
+ if (gMain.callback2 == c2_mystery_gift_e_reader_run)
+ gWirelessCommType = 2;
+ SetMainCallback2(CB2_LinkError);
+ gMain.savedCallback = CB2_LinkError;
+ sub_800ACBC((Rfu.unk_0a << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.unk_124.unk_8c2, Rfu.unk_9e8.unk_232, sub_80FB9F4() == 2);
+ Rfu.unk_ee = 2;
+ CloseLink();
+ }
+ else if (Rfu.unk_9e8.unk_233 == 1 || Rfu.unk_124.unk_8c3 == 1)
+ {
+ if (gUnknown_3005E10.unk_02)
+ sub_80FEB14();
+ sub_80FB9E4(1, 0x7000);
+ sub_80FB0E8(0x7000);
+ }
+}
+
+static void rfu_REQ_recvData_then_sendData(void)
+{
+ if (gUnknown_3005E10.unk_06 == 1)
+ {
+ rfu_REQ_recvData();
+ rfu_waitREQComplete();
+ LinkRfu_REQ_SendData_HandleParentRelationship(0);
+ }
+}
+
+bool32 sub_80FAE94(void)
+{
+ bool32 retval = FALSE;
+ Rfu.unk_ccd = 0;
+ sub_80FDA30(Random());
+ if (Rfu.unk_ef == 0)
+ {
+ switch (Rfu.unk_0c)
+ {
+ case 1:
+ sub_80F911C();
+ break;
+ case 0:
+ retval = sub_80F9514();
+ break;
+ case 2:
+ rfu_REQ_recvData_then_sendData();
+ break;
+ }
+ }
+ return retval;
+}
+
+bool32 sub_80FAEF0(void)
+{
+ bool32 retval = FALSE;
+ if (Rfu.unk_ef == 0)
+ {
+ if (Rfu.unk_0c == 1)
+ retval = sub_80F9204();
+ sub_80FAD98();
+ }
+ return retval;
+}
+
+static void sub_80FAF1C(void)
+{
+ StringCopy(gUnknown_3005E00, gSaveBlock2Ptr->playerName);
+}
+
+void sub_80FAF34(void)
+{
+ memset(&gUnknown_3005440, 0, 0xD);
+ sub_80FCB54(&gUnknown_3005440, 0, 0, 0);
+}
+
+void sub_80FAF58(u8 a0, u32 a1, u32 a2)
+{
+ sub_80FCB54(&gUnknown_3005440, a0, a2, a1);
+}
+
+void sub_80FAF74(bool32 a0, bool32 a1)
+{
+ gUnknown_3005440.unk_00.unk_00_4 = a0;
+ gUnknown_3005440.unk_00.unk_00_5 = a1;
+}
+
+void sub_80FAFA0(u32 type, u32 species, u32 level)
+{
+ gUnknown_3005440.type = type;
+ gUnknown_3005440.species = species;
+ gUnknown_3005440.level = level;
+}
+
+void sub_80FAFE0(u8 a0)
+{
+ gUnknown_3005440.unk_0a_7 = a0;
+ rfu_REQ_configGameData(0, 2, (void *)&gUnknown_3005440, gUnknown_3005E00);
+}
+
+void sub_80FB008(u8 a0, u32 a1, u32 a2)
+{
+ if (a0)
+ sub_80FAF58(a0, a1, a2);
+ rfu_REQ_configGameData(0, 2, (void *)&gUnknown_3005440, gUnknown_3005E00);
+}
+
+void sub_80FB030(u32 a0)
+{
+ s32 i;
+ u32 r5;
+ u32 r7;
+ s32 r8;
+
+ if (sub_80F9800()->unk_0a_0 == 0x45)
+ {
+ r5 = 0;
+ r7 = 0;
+ r8 = Rfu.unk_ce2 ^ Rfu.unk_ce3;
+ for (i = 0; i < 4; i++)
+ {
+ if ((r8 >> i) & 1)
+ {
+ r7 |= ((0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3));
+ r5++;
+ if (r5 == a0 - 1)
+ break;
+ }
+ }
+ sub_80FB008(0x45, r7, 0);
+ }
+}
+
+static void sub_80FB0E8(u32 a0)
+{
+ if (Rfu.unk_ee == 0)
+ {
+ Rfu.unk_10 = gUnknown_3005E10.unk_14;
+ Rfu.unk_12 = gUnknown_3005E10.unk_16;
+ Rfu.unk_0a = a0;
+ Rfu.unk_ee = 1;
+ }
+}
+
+static void sub_80FB118(void)
+{
+ Rfu.unk_ee = 0;
+}
+
+void sub_80FB128(bool32 a0)
+{
+ if (!a0)
+ Rfu.unk_ee = 0;
+ else
+ Rfu.unk_ee = 4;
+}
+
+static void sub_80FB154(void)
+{
+ sub_80FBE20(gUnknown_3005E10.unk_00, 1);
+ Rfu.RfuFunc = NULL;
+}
+
+static void sub_80FB174(void)
+{
+ Rfu.RfuFunc = sub_80FB154;
+}
+
+static void sub_80FB184(u8 a0, u8 unused1)
+{
+ u8 i;
+ u8 r6 = 0;
+ switch (a0)
+ {
+ case 0x00:
+ Rfu.unk_04 = 2;
+ break;
+ case 0x10:
+ break;
+ case 0x11:
+ sub_80FB564(gUnknown_3005E10.unk_14);
+ for (i = 0; i < 4; i++)
+ {
+ if ((gUnknown_3005E10.unk_14 >> i) & 1)
+ {
+ struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)&gRfuLinkStatus->partner[i].gname;
+ if (structPtr->unk_0a_0 == sub_80F9800()->unk_0a_0)
+ {
+ Rfu.unk_cd1[i] = 0;
+ Rfu.unk_cd5[i] = 0;
+ rfu_setRecvBuffer(0x20, i, Rfu.unk_cd5 + i, 1);
+ }
+ else
+ {
+ r6 |= (1 << i);
+ }
+ }
+ }
+ if (r6)
+ {
+ rfu_REQ_disconnect(r6);
+ rfu_waitREQComplete();
+ }
+ break;
+ case 0x12:
+ break;
+ case 0x13:
+ break;
+ case 0x14:
+ if (Rfu.unk_ce7 != gUnknown_3005E10.unk_00)
+ {
+ rfu_REQ_disconnect(Rfu.unk_ce7 ^ gUnknown_3005E10.unk_00);
+ rfu_waitREQComplete();
+ }
+ Rfu.unk_04 = 0x11;
+ break;
+ case 0x31:
+ Rfu.unk_f0 = 1;
+ break;
+ case 0x32:
+ Rfu.unk_f0 = 3;
+ break;
+ case 0x30:
+ case 0x33:
+ Rfu.unk_f0 = 4;
+ Rfu.unk_ce2 &= ~gUnknown_3005E10.unk_14;
+ if (gReceivedRemoteLinkPlayers == 1)
+ {
+ if (Rfu.unk_ce2 == 0)
+ sub_80FB0E8(a0);
+ else
+ sub_80FB174();
+ }
+ sub_80FB9E4(2, a0);
+ break;
+ case 0x34:
+ break;
+ case 0x42 ... 0x44:
+ break;
+ case 0xf3:
+ sub_80FB9E4(1, a0);
+ sub_80FB0E8(a0);
+ Rfu.unk_ef = 1;
+ break;
+ case 0xf0 ... 0xf2:
+ case 0xff:
+ sub_80FB0E8(a0);
+ sub_80FB9E4(1, a0);
+ Rfu.unk_cdb = 1;
+ break;
+ }
+}
+
+static const u8 unref_843EDF3[] = _(" あきと");
+
+static void sub_80FB37C(u8 a0, u8 unused1)
+{
+ switch (a0)
+ {
+ case 0x00:
+ Rfu.unk_04 = 6;
+ break;
+ case 0x20:
+ Rfu.unk_ccd = gUnknown_3005E10.unk_14;
+ break;
+ case 0x21:
+ break;
+ case 0x22:
+ Rfu.unk_c3e = gUnknown_3005E10.unk_14;
+ break;
+ case 0x23:
+ sub_80FB9E4(2, a0);
+ break;
+ case 0x24:
+ Rfu.unk_04 = 11;
+ Rfu.unk_c85 = 0;
+ Rfu.unk_c86 = 0;
+ rfu_setRecvBuffer(0x20, Rfu.unk_c3e, &Rfu.unk_c86, 1);
+ rfu_setRecvBuffer(0x10, Rfu.unk_c3e, Rfu.unk_c3f, 70);
+ break;
+ case 0x25:
+ sub_80FB9E4(2, 0x25);
+ break;
+ case 0x30:
+ Rfu.unk_f0 = 2;
+ if (Rfu.unk_c86 == 6)
+ break;
+ case 0x33:
+ if (Rfu.unk_f0 != 2)
+ Rfu.unk_f0 = 4;
+ if (Rfu.unk_c86 != 9)
+ sub_80FB9E4(2, a0);
+ nullsub_87("LINK LOSS DISCONNECT!", 5, 5);
+ if (gReceivedRemoteLinkPlayers == 1)
+ sub_80FB0E8(a0);
+ break;
+ case 0x31:
+ Rfu.unk_f0 = 1;
+ nullsub_87("LINK LOSS RECOVERY NOW", 5, 5);
+ break;
+ case 0x32:
+ Rfu.unk_f0 = 3;
+ Rfu.unk_c3c = 1;
+ break;
+ case 0x34:
+ break;
+ case 0x42 ... 0x44:
+ break;
+ case 0xF3:
+ sub_80FB9E4(1, a0);
+ sub_80FB0E8(a0);
+ Rfu.unk_ef = 1;
+ break;
+ case 0xF0 ... 0xF2:
+ case 0xFF:
+ sub_80FB9E4(1, a0);
+ sub_80FB0E8(a0);
+ Rfu.unk_cdb = 1;
+ break;
+ }
+}
+
+static void sub_80FB564(s32 a0)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if ((a0 >> i) & 1)
+ {
+ Rfu.unk_cea[i] = 0;
+ Rfu.unk_cee[i] = 0xFF;
+ }
+ }
+}
+
+static u8 sub_80FB5A0(s32 a0)
+{
+ u8 ret = 0;
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if ((a0 >> i) & 1)
+ {
+ struct UnkLinkRfuStruct_02022B14 *structPtr = (void *)&gRfuLinkStatus->partner[i].gname;
+ if (structPtr->unk_0a_0 == 0x45)
+ ret |= (1 << i);
+ }
+ }
+
+ return ret;
+}
+
+static void sub_80FB5EC(u8 a0, u8 unused1)
+{
+ u8 r1;
+
+ switch (a0)
+ {
+ case 0x00:
+ Rfu.unk_04 = 0x11;
+ break;
+ case 0x10:
+ sub_80FB9E4(4, 0);
+ break;
+ case 0x11:
+ if (sub_80F9800()->unk_0a_0 == 0x45 && Rfu.unk_cd9 == 0)
+ {
+ u8 idx = sub_80FB5A0(gUnknown_3005E10.unk_14);
+ if (idx != 0)
+ {
+ r1 = 1 << sub_80F886C(idx);
+ if (Rfu.unk_ce6 == 0 && Rfu.unk_ce8 == 0)
+ {
+ Rfu.unk_ce5 = r1;
+ Rfu.unk_ce6 |= (r1 ^ idx);
+ Rfu.unk_ce8 = 1;
+ }
+ else
+ {
+ Rfu.unk_ce6 |= idx;
+ }
+ }
+ if (idx != gUnknown_3005E10.unk_14)
+ {
+ Rfu.unk_ce3 |= (idx ^ gUnknown_3005E10.unk_14);
+ Rfu.unk_ce4 = 2;
+ }
+ }
+ else if (sub_80F9800()->unk_0a_0 == 0x54)
+ {
+ rfu_REQ_disconnect(gUnknown_3005E10.unk_00);
+ rfu_waitREQComplete();
+ }
+ sub_80FB564(gUnknown_3005E10.unk_14);
+ break;
+ case 0x12:
+ break;
+ case 0x13:
+ break;
+ case 0x14:
+ if (sub_80F9800()->unk_0a_0 != 0x45 && gUnknown_3005E10.unk_01 > 1)
+ {
+ r1 = 1 << sub_80F886C(gUnknown_3005E10.unk_14);
+ rfu_REQ_disconnect(gUnknown_3005E10.unk_00 ^ r1);
+ rfu_waitREQComplete();
+ }
+ if (Rfu.unk_04 == 0xF)
+ Rfu.unk_04 = 0x10;
+ break;
+ case 0x20:
+ Rfu.unk_ccd = gUnknown_3005E10.unk_14;
+ break;
+ case 0x21:
+ break;
+ case 0x22:
+ Rfu.unk_c3e = gUnknown_3005E10.unk_14;
+ break;
+ case 0x23:
+ Rfu.unk_04 = 0x12;
+ if (Rfu.unk_ccf < 2)
+ {
+ Rfu.unk_ccf++;
+ CreateTask(sub_80FC028, 2);
+ }
+ else
+ {
+ sub_80FB9E4(2, a0);
+ }
+ break;
+ case 0x24:
+ Rfu.unk_04 = 0xD;
+ sub_80FB9E4(3, 0);
+ rfu_setRecvBuffer(0x10, Rfu.unk_c3e, Rfu.unk_c3f, 70);
+ break;
+ case 0x25:
+ sub_80FB9E4(2, a0);
+ break;
+ case 0x31:
+ if (gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14)
+ Rfu.unk_f0 = 1;
+ break;
+ case 0x32:
+ Rfu.unk_f0 = 3;
+ if (gRfuLinkStatus->parentChild == MODE_CHILD)
+ Rfu.unk_c3c = 1;
+ break;
+ case 0x30:
+ Rfu.unk_f0 = 2;
+ case 0x33:
+ if (Rfu.unk_f0 != 2)
+ Rfu.unk_f0 = 4;
+ if (Rfu.unk_0c == 1)
+ {
+ if (gReceivedRemoteLinkPlayers == 1)
+ {
+ Rfu.unk_ce2 &= ~(gUnknown_3005E10.unk_14);
+ if (Rfu.unk_ce2 == 0)
+ sub_80FB0E8(a0);
+ else
+ sub_80FB174();
+ }
+ }
+ else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1)
+ {
+ sub_80FB0E8(a0);
+ sub_80FD760(0);
+ }
+
+ if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && gUnknown_3005E10.unk_07 == 0 && FuncIsActiveTask(sub_80F8B34) == TRUE)
+ Rfu.unk_04 = 0x11;
+
+ sub_80FB9E4(2, a0);
+ break;
+ case 0x40:
+ Rfu.unk_ce3 = 0;
+ break;
+ case 0x42 ... 0x44:
+ break;
+ case 0xF3:
+ sub_80FB9E4(1, a0);
+ sub_80FB0E8(a0);
+ Rfu.unk_ef = 1;
+ break;
+ case 0xF0 ... 0xF2:
+ case 0xFF:
+ sub_80FB0E8(a0);
+ sub_80FB9E4(1, a0);
+ Rfu.unk_cdb = 0;
+ break;
+ }
+}
+
+void sub_80FB9D0(void)
+{
+ Rfu.unk_ce4 = 2;
+}
+
+void sub_80FB9E4(u8 a0, u16 a1)
+{
+ Rfu.unk_f1 = a0;
+ Rfu.unk_0a = a1;
+}
+
+u8 sub_80FB9F4(void)
+{
+ return Rfu.unk_f1;
+}
+
+bool32 sub_80FBA00(void)
+{
+ u32 var = sub_80FB9F4() - 1;
+ if (var < 2)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 sub_80FBA1C(void)
+{
+ return Rfu.unk_ce8;
+}
+
+bool8 Rfu_IsMaster(void)
+{
+ return Rfu.unk_0c;
+}
+
+void RFUVSync(void)
+{
+ rfu_syncVBlank_();
+}
+
+void sub_80FBA44(void)
+{
+ CpuFill32(0, gRecvCmds, sizeof(gRecvCmds));
+}
+
+static void sub_80FBA64(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void sub_80FBA78(void)
+{
+ s32 i;
+
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ ResetPaletteFade();
+ SetVBlankCallback(sub_80FBA64);
+ if (IsWirelessAdapterConnected())
+ {
+ gLinkType = LINKTYPE_0x1111;
+ sub_800B1F4();
+ OpenLink();
+ SeedRng(gMain.vblankCounter2);
+ for (i = 0; i < 4; i++)
+ gSaveBlock2Ptr->playerTrainerId[i] = Random() % 256;
+
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_1D_MAP);
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ sub_80FBB20();
+ SetMainCallback2(sub_80FBB74);
+ }
+}
+
+bool32 sub_80FBB0C(void)
+{
+ return FuncIsActiveTask(sub_80F8B34);
+}
+
+void sub_80FBB20(void)
+{
+ if (!FuncIsActiveTask(nullsub_89))
+ Rfu.unk_66 = CreateTask(nullsub_89, 0);
+}
+
+void sub_80FBB4C(void)
+{
+ if (FuncIsActiveTask(nullsub_89) == TRUE)
+ DestroyTask(Rfu.unk_66);
+}
+
+static void sub_80FBB74(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_80FBB8C(u32 a0)
+{
+ Rfu.unk_0c = 1;
+ sub_80FAF1C();
+ sub_80FD430(sub_80FB184, NULL);
+ gUnknown_203ABF0 = gUnknown_843EBB4;
+ gUnknown_203ABF0.unk_02 = gUnknown_843EBCC[a0 - 1];
+ sub_80F8E74();
+}
+
+void sub_80FBBD8(void)
+{
+ Rfu.unk_0c = 0;
+ sub_80FAF1C();
+ sub_80FD430(sub_80FB37C, sub_80F8D20);
+ sub_80F8F10();
+}
+
+void sub_80FBC00(void)
+{
+ if (gUnknown_203ADFA == 2 || gUnknown_203ADFA == 3)
+ return;
+ Rfu.unk_0c = 2;
+ sub_80FAF1C();
+ sub_80FD430(sub_80FB5EC, NULL);
+ gUnknown_203ABF0 = gUnknown_843EBB4;
+ gUnknown_203ABF0.unk_11 = 0;
+ gUnknown_203ABF0.unk_12 = 0x258;
+ Rfu.unk_67 = CreateTask(sub_80F8B34, 1);
+}
+
+static u16 ReadU16(const void *ptr)
+{
+ const u8 *ptr_ = ptr;
+ return (ptr_[1] << 8) | (ptr_[0]);
+}
+
+static u8 sub_80FBC70(const u8 *a0, u16 a1)
+{
+ u8 i;
+ u8 ret = 0xFF;
+
+ for (i = 0; i < 4; i++)
+ {
+ u16 trainerId = ReadU16(((struct UnkLinkRfuStruct_02022B14 *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId);
+ if (sub_80FA44C(gRfuLinkStatus->partner[i].serialNo)
+ && !StringCompare(a0, gRfuLinkStatus->partner[i].uname)
+ && a1 == trainerId)
+ {
+ ret = i;
+ if (gRfuLinkStatus->partner[i].slot != 0xFF)
+ break;
+ }
+ }
+
+ return ret;
+}
+
+static void sub_80FBCF8(u32 a0)
+{
+ rfu_REQ_disconnect(a0);
+ rfu_waitREQComplete();
+ Rfu.unk_ce2 &= ~(a0);
+ rfu_clearSlot(1, Rfu.unk_cda);
+ rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, 70);
+ Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2);
+}
+
+void sub_80FBD4C(const u8 *ptr, u16 a1)
+{
+ u8 var = sub_80FBC70(ptr, a1);
+ if (var != 0xFF)
+ sub_80FBCF8(1 << var);
+}
+
+void sub_80FBD6C(u32 a0)
+{
+ if (a0 != 0)
+ {
+ s32 i;
+ u8 var = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (Rfu.unk_cde[i] == a0 && (Rfu.unk_ce2 >> i) & 1)
+ var |= 1 << i;
+ }
+ if (var)
+ sub_80FBE20(var, 2);
+ }
+}
+
+static void sub_80FBDB8(u8 taskId)
+{
+ if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
+ {
+ sub_80F9D04(0xED00);
+ gSendCmd[1] = gTasks[taskId].data[0];
+ gSendCmd[2] = gTasks[taskId].data[1];
+ Rfu.playerCount -= gUnknown_843EC41[gTasks[taskId].data[0]];
+ gSendCmd[3] = Rfu.playerCount;
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_80FBE20(u32 a0, u32 a1)
+{
+ u8 taskId = FindTaskIdByFunc(sub_80FBDB8);
+ if (taskId == 0xFF)
+ {
+ taskId = CreateTask(sub_80FBDB8, 5);
+ gTasks[taskId].data[0] = a0;
+ }
+ else
+ {
+ gTasks[taskId].data[0] |= a0;
+ }
+
+ gTasks[taskId].data[1] = a1;
+}
+
+static void sub_80FBE80(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (sub_80F8EA4())
+ {
+ u8 id = sub_80FBC70((u8*)data, ReadU16(&data[8]));
+ if (id != 0xFF)
+ {
+ if (gRfuLinkStatus->partner[id].slot != 0xFF)
+ {
+ Rfu.unk_c3d = id;
+ if (sub_80F8ECC())
+ DestroyTask(taskId);
+ }
+ else if (sub_80F9800()->unk_0a_0 == 0x15 || sub_80F9800()->unk_0a_0 == 0x16)
+ {
+ data[15]++;
+ }
+ else
+ {
+ sub_80FB9E4(2, 0x7000);
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ data[15]++;
+ Rfu.unk_c3d = id;
+ }
+ }
+ else
+ {
+ data[15]++;
+ }
+
+ if (data[15] > 240)
+ {
+ sub_80FB9E4(2, 0x7000);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_80FBF54(const u8 *src, u16 trainerId)
+{
+ u8 taskId;
+ s16 *data;
+
+ Rfu.unk_f1 = 0;
+ taskId = CreateTask(sub_80FBE80, 3);
+ data = gTasks[taskId].data;
+ StringCopy((u8*)(data), src);
+ data[8] = trainerId;
+}
+
+static bool32 sub_80FBF98(s16 a1, struct UnkLinkRfuStruct_02022B14 *structPtr)
+{
+ if (sub_80F9800()->unk_0a_0 == 0x45)
+ {
+ if (structPtr->unk_0a_0 != 0x45)
+ return TRUE;
+ }
+ else if (structPtr->unk_0a_0 != 0x40)
+ {
+ return TRUE;
+ }
+ else if (a1 == 0x44)
+ {
+ struct UnkLinkRfuStruct_02022B14 *structPtr2 = &Rfu.unk_10A;
+ if (structPtr2->species == SPECIES_EGG)
+ {
+ if (structPtr->species == structPtr2->species)
+ return FALSE;
+ else
+ return TRUE;
+ }
+ else if (structPtr->species != structPtr2->species
+ || structPtr->level != structPtr2->level
+ || structPtr->type != structPtr2->type)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static void sub_80FC028(u8 taskId)
+{
+ if (Rfu.unk_f1 == 4)
+ DestroyTask(taskId);
+
+ if (++gTasks[taskId].data[0] > 300)
+ {
+ sub_80FB9E4(2, 0x7000);
+ DestroyTask(taskId);
+ }
+
+ if (Rfu.unk_ccd != 0 && gUnknown_3005E10.unk_06 == 0)
+ {
+ u16 trainerId = ReadU16(Rfu.unk_10A.unk_00.playerTrainerId);
+ u8 id = sub_80FBC70(Rfu.playerName, trainerId);
+ if (id != 0xFF)
+ {
+ if (!sub_80FBF98(gTasks[taskId].data[1], (struct UnkLinkRfuStruct_02022B14 *)&gRfuLinkStatus->partner[id].gname))
+ {
+ if (gRfuLinkStatus->partner[id].slot != 0xFF && !sub_80FD610(gRfuLinkStatus->partner[id].id, 0x5A))
+ {
+ Rfu.unk_04 = 0xA;
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ sub_80FB9E4(2, 0x7000);
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+
+void sub_80FC114(const u8 *name, struct UnkLinkRfuStruct_02022B14 *structPtr, u8 a2)
+{
+ u8 taskId, taskId2;
+
+ Rfu.unk_ccf = 0;
+ Rfu.unk_f1 = 0;
+ StringCopy(Rfu.playerName, name);
+ memcpy(&Rfu.unk_10A, structPtr, 0xD);
+ sub_80FEB3C();
+ taskId = CreateTask(sub_80FC028, 2);
+ gTasks[taskId].data[1] = a2;
+ taskId2 = FindTaskIdByFunc(sub_80F8B34);
+ if (a2 == 0x45)
+ {
+ if (taskId2 != 0xFF)
+ gTasks[taskId2].data[7] = 1;
+ }
+ else
+ {
+ if (taskId2 != 0xFF)
+ gTasks[taskId2].data[7] = 0;
+ }
+}
+
+bool8 sub_80FC1B0(void)
+{
+ if (Rfu.unk_f0 == 1)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 sub_80FC1CC(void)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if ((gUnknown_3005E10.unk_00 >> i) & 1 && Rfu.unk_cd1[i] == 0)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void sub_80FC208(void)
+{
+ s32 i;
+
+ for (i = 0; i < 20; i++)
+ nullsub_87(" ", 0, i);
+}
+
+static const char gUnknown_843EE47[16] = {
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
+ '\0'
+};
+
+static const char gUnknown_843EE57[9] = {
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
+ '\0'
+};
+
+static const char gUnknown_843EE60[] = {' ', '\0'};
+static const char gUnknown_843EE62[] = {'*', '\0'};
+
+static void sub_80FC228(void)
+{
+ s32 i, j;
+
+ nullsub_88(GetBlockReceivedStatus(), 0x1C, 0x13, 2);
+ nullsub_88(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1);
+ nullsub_88(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1);
+ if (Rfu.unk_0c == 1)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if ((gRfuLinkStatus->getNameFlag >> i) & 1)
+ {
+ nullsub_88(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
+ nullsub_87((void*) &gRfuLinkStatus->partner[i].gname, 6, i + 3);
+ nullsub_87(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
+ }
+ }
+ for (i = 0; i < 4; i++)
+ {
+ for (j = 0; j < 14; j++)
+ {
+ nullsub_88(Rfu.unk_14[i][j], j * 2, i + 11, 2);
+ }
+ }
+ nullsub_87("NOWSLOT", 1, 0xF);
+ }
+ else if (gRfuLinkStatus->connSlotFlag != 0 && gRfuLinkStatus->getNameFlag != 0)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ nullsub_88(0, 1, i + 3, 4);
+ nullsub_87(gUnknown_843EE47, 6, i + 3);
+ nullsub_87(gUnknown_843EE57, 0x16, i + 3);
+ }
+ nullsub_88(gRfuLinkStatus->partner[Rfu.unk_c3e].serialNo, 1, 3, 4);
+ nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].gname, 6, 3);
+ nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].uname, 0x16, 3);
+ }
+ else
+ {
+ for (i = 0; i < gRfuLinkStatus->findParentCount; i++)
+ {
+ if (gRfuLinkStatus->partner[i].slot != 0xFF)
+ {
+ nullsub_88(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4);
+ nullsub_88(gRfuLinkStatus->partner[i].id, 6, i + 3, 4);
+ nullsub_87(gRfuLinkStatus->partner[i].uname, 0x16, i + 3);
+ }
+ }
+ for (; i < 4; i++)
+ {
+ nullsub_88(0, 1, i + 3, 4);
+ nullsub_87(gUnknown_843EE47, 6, i + 3);
+ nullsub_87(gUnknown_843EE57, 0x16, i + 3);
+ }
+ }
+}
+
+static const char gUnknown_843EE6C[][12] = {
+ " ",
+ "CLOCK DRIFT",
+ "BUSY SEND ",
+ "CMD REJECT ",
+ "CLOCK SLAVE"
+};
+
+static const char gUnknown_843EEA8[][8] = {
+ "CHILD ",
+ "PARENT",
+ "SEARCH"
+};
+
+static u32 sub_80FC44C(void)
+{
+ return Rfu.unk_9e8.unk_232;
+}
+
+u32 GetRfuRecvQueueLength(void)
+{
+ return Rfu.unk_124.unk_8c2;
+}
+
+static void nullsub_89(u8 taskId)
+{
+
+}
diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c
index 6df5207f0..94c01c081 100644
--- a/src/mevent_server_helpers.c
+++ b/src/mevent_server_helpers.c
@@ -96,12 +96,12 @@ static bool32 mevent_receive_func(struct mevent_srv_sub * svr)
svr->recvCRC = header.crc;
if (svr->recvSize > ME_SEND_BUF_SIZE)
{
- sub_80FA190();
+ LinkRfu_FatalError();
return FALSE;
}
else if (svr->recvIdent != header.ident)
{
- sub_80FA190();
+ LinkRfu_FatalError();
return FALSE;
}
else
@@ -133,7 +133,7 @@ static bool32 mevent_receive_func(struct mevent_srv_sub * svr)
case 2:
if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC)
{
- sub_80FA190();
+ LinkRfu_FatalError();
return FALSE;
}
else
@@ -192,7 +192,7 @@ static bool32 mevent_send_func(struct mevent_srv_sub * svr)
if (IsLinkTaskFinished())
{
if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC)
- sub_80FA190();
+ LinkRfu_FatalError();
else
++svr->seqno;
}
diff --git a/sym_common.txt b/sym_common.txt
index 848c19613..9f39f9f2b 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -75,17 +75,8 @@ gUnknown_3005078: @ 3005078
gUnknown_3005430: @ 3005430
.space 0x10
-gUnknown_3005440: @ 3005440
- .space 0x10
-
-@ This name is necessary to match assert statements in link_rfu_2
-Rfu: @ 3005450
- .space 0x9AC
-
.align 4
-gUnknown_3005E00: @ 3005E00
- .space 0x10
-
+ .include "link_rfu_2.o"
.align 4
.include "link_rfu.o"
.align 4
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 9e5e91782..2647ced8c 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -330,14 +330,10 @@ gUnknown_203ABE8: @ 203ABE8
.align 2
.include "src/map_preview_screen.o"
-
.align 2
-gUnknown_203ABF0: @ 203ABF0
- .space 0x18
-
-gUnknown_203AC08: @ 203AC08
- .space 0xDC
+ .include "src/link_rfu_2.o"
+ .align 2
gUnknown_203ACE4: @ 203ACE4
.space 0x4