summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/rom_8011DC0.s1200
-rw-r--r--include/cable_club.h1
-rw-r--r--include/link.h2
-rw-r--r--include/link_rfu.h4
-rw-r--r--include/party_menu.h1
-rw-r--r--include/trainer_card.h1
-rw-r--r--ld_script.txt2
-rw-r--r--src/load_save.c2
-rw-r--r--src/rom_8011DC0.c509
9 files changed, 510 insertions, 1212 deletions
diff --git a/asm/rom_8011DC0.s b/asm/rom_8011DC0.s
index e811bb428..bd5131e2f 100644
--- a/asm/rom_8011DC0.s
+++ b/asm/rom_8011DC0.s
@@ -7,1206 +7,6 @@
-
- thumb_func_start sub_8014384
-sub_8014384: @ 8014384
- push {r4,lr}
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r4, r0, r1
- ldrb r0, [r4]
- cmp r0, 0
- beq _080143A0
- cmp r0, 0x1
- beq _080143B4
- b _080143C6
- .pool
-_080143A0:
- ldr r0, =sub_80140E0
- movs r1, 0x5
- bl CreateTask
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _080143C6
- .pool
-_080143B4:
- ldr r0, =sub_80140E0
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080143C6
- ldr r0, =sub_8086074
- bl SetMainCallback2
-_080143C6:
- bl RunTasks
- bl RunTextPrinters
- bl AnimateSprites
- bl BuildOamBuffer
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8014384
-
- thumb_func_start sub_80143E4
-sub_80143E4: @ 80143E4
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl sub_80C30A4
- cmp r5, 0
- beq _080143FE
- bl sub_801B39C
- adds r1, r4, 0
- adds r1, 0x60
- strh r0, [r1]
- b _08014404
-_080143FE:
- adds r0, r4, 0
- adds r0, 0x60
- strh r5, [r0]
-_08014404:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80143E4
-
- thumb_func_start sub_801440C
-sub_801440C: @ 801440C
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_801B940
- ldr r0, =gUnknown_02022C2C
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r0, 0xE
- bhi _08014474
- lsls r0, 2
- ldr r1, =_08014434
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08014434:
- .4byte _08014470
- .4byte _08014470
- .4byte _08014470
- .4byte _08014470
- .4byte _08014474
- .4byte _08014474
- .4byte _08014474
- .4byte _08014474
- .4byte _08014470
- .4byte _08014470
- .4byte _08014470
- .4byte _08014474
- .4byte _08014470
- .4byte _08014474
- .4byte _08014470
-_08014470:
- bl sub_800E3A8
-_08014474:
- ldr r0, =gUnknown_02022C2C
- ldrb r0, [r0]
- subs r0, 0x1
- cmp r0, 0x50
- bls _08014480
- b _08014764
-_08014480:
- lsls r0, 2
- ldr r1, =_08014494
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08014494:
- .4byte _080145F4
- .4byte _08014620
- .4byte _0801464C
- .4byte _08014678
- .4byte _080146D8
- .4byte _08014764
- .4byte _08014764
- .4byte _080146FC
- .4byte _08014714
- .4byte _08014734
- .4byte _0801474C
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014698
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _080145D8
- .4byte _08014764
- .4byte _08014764
- .4byte _080146C4
- .4byte _080146D8
- .4byte _08014764
- .4byte _08014764
- .4byte _080146FC
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _08014764
- .4byte _080145D8
-_080145D8:
- bl overworld_free_bg_tilemaps
- ldr r1, =gMain
- ldr r0, =sub_801AC54
- str r0, [r1, 0x8]
- movs r0, 0x3
- bl sub_81B8518
- b _08014764
- .pool
-_080145F4:
- bl overworld_free_bg_tilemaps
- ldr r0, =gBlockSendBuffer
- movs r1, 0x1
- bl sub_80143E4
- bl HealPlayerParty
- bl SavePlayerParty
- bl LoadPlayerBag
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x19
- movs r1, 0x18
- movs r2, 0x6
- movs r3, 0x8
- b _080146B0
- .pool
-_08014620:
- bl overworld_free_bg_tilemaps
- bl HealPlayerParty
- bl SavePlayerParty
- bl LoadPlayerBag
- ldr r0, =gBlockSendBuffer
- movs r1, 0x1
- bl sub_80143E4
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x19
- movs r1, 0x18
- movs r2, 0x6
- movs r3, 0x8
- b _080146B0
- .pool
-_0801464C:
- bl overworld_free_bg_tilemaps
- bl HealPlayerParty
- bl SavePlayerParty
- bl LoadPlayerBag
- ldr r0, =gBlockSendBuffer
- movs r1, 0x1
- bl sub_80143E4
- movs r0, 0x5
- str r0, [sp]
- movs r0, 0x19
- movs r1, 0x1B
- movs r2, 0x5
- movs r3, 0x8
- b _080146B0
- .pool
-_08014678:
- ldr r0, =gBlockSendBuffer
- movs r1, 0x1
- bl sub_80143E4
- bl overworld_free_bg_tilemaps
- movs r0, 0x3
- str r0, [sp]
- movs r0, 0x19
- movs r1, 0x19
- movs r2, 0x5
- movs r3, 0x8
- b _080146B0
- .pool
-_08014698:
- ldr r0, =gBlockSendBuffer
- movs r1, 0x1
- bl sub_80143E4
- bl overworld_free_bg_tilemaps
- movs r0, 0x4
- str r0, [sp]
- movs r0, 0x19
- movs r1, 0x1A
- movs r2, 0x8
- movs r3, 0x9
-_080146B0:
- bl sub_8014304
- ldr r0, =sub_8014384
- bl SetMainCallback2
- b _08014764
- .pool
-_080146C4:
- bl overworld_free_bg_tilemaps
- ldr r0, =sub_8013F90
- movs r1, 0
- bl CreateTask
- b _08014764
- .pool
-_080146D8:
- bl GetMultiplayerId
- lsls r0, 24
- cmp r0, 0
- bne _080146E8
- bl sub_800ED10
- b _080146F6
-_080146E8:
- bl sub_800ED28
- movs r0, 0x45
- movs r1, 0
- movs r2, 0x1
- bl sub_8010F84
-_080146F6:
- bl sub_801DD98
- b _08014764
-_080146FC:
- ldr r0, =gBlockSendBuffer
- movs r1, 0
- bl sub_80143E4
- ldr r0, =sub_80141A4
- bl SetMainCallback2
- b _08014764
- .pool
-_08014714:
- movs r0, 0x8
- movs r1, 0x5
- movs r2, 0x1
- bl sub_8014290
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =CB2_LoadMap
- bl sub_802A9A8
- b _08014764
- .pool
-_08014734:
- movs r0, 0x7
- movs r1, 0x9
- movs r2, 0x1
- bl sub_8014290
- ldr r0, =CB2_LoadMap
- bl sub_8020C70
- b _08014764
- .pool
-_0801474C:
- movs r0, 0x8
- movs r1, 0x5
- movs r2, 0x1
- bl sub_8014290
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =CB2_LoadMap
- bl sub_802493C
-_08014764:
- adds r0, r4, 0
- bl DestroyTask
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
- ldr r0, =gUnknown_02022C2C
- ldrb r0, [r0]
- cmp r0, 0x44
- beq _0801477C
- bl ScriptContext2_Disable
-_0801477C:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_801440C
-
- thumb_func_start sub_8014790
-sub_8014790: @ 8014790
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r7, r0, r1
- ldr r0, =gBlockSendBuffer
- mov r9, r0
- movs r1, 0
- ldrsh r0, [r7, r1]
- mov r2, r9
- cmp r0, 0x8
- bls _080147B6
- b _080149B2
-_080147B6:
- lsls r0, 2
- ldr r1, =_080147CC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080147CC:
- .4byte _080147F0
- .4byte _080148CC
- .4byte _080148E4
- .4byte _0801491E
- .4byte _08014934
- .4byte _0801494A
- .4byte _08014986
- .4byte _08014992
- .4byte _0801499C
-_080147F0:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
- ldr r0, =gUnknown_02022C2C
- ldrb r0, [r0]
- subs r0, 0xE
- cmp r0, 0xE
- bhi _080148C2
- lsls r0, 2
- ldr r1, =_08014818
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08014818:
- .4byte _08014854
- .4byte _080148C2
- .4byte _080148B8
- .4byte _080148C2
- .4byte _080148C2
- .4byte _080148C2
- .4byte _080148C2
- .4byte _080148C2
- .4byte _080148C2
- .4byte _080148B8
- .4byte _080148B8
- .4byte _080148B8
- .4byte _080148B8
- .4byte _080148B8
- .4byte _08014854
-_08014854:
- ldr r1, =gLinkPlayers
- ldr r0, =0x00002211
- str r0, [r1, 0x14]
- movs r2, 0
- mov r8, r2
- mov r0, r8
- strh r0, [r1, 0x18]
- movs r0, 0x2
- strh r0, [r1, 0x34]
- ldr r6, =gUnknown_0203CEF8
- ldrb r0, [r6]
- movs r5, 0x64
- muls r0, r5
- ldr r4, =gBattleScripting + 0x14
- adds r0, r4
- movs r1, 0xB
- bl GetMonData
- mov r1, r9
- strh r0, [r1]
- ldrb r0, [r6, 0x1]
- muls r0, r5
- adds r0, r4
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- mov r2, r9
- strh r0, [r2, 0x2]
- ldr r0, =gMain
- mov r1, r8
- str r1, [r0, 0x8]
- movs r0, 0x4
- strh r0, [r7]
- bl sub_800E3A8
- bl ResetBlockReceivedFlags
- b _080149B2
- .pool
-_080148B8:
- bl sub_800E3A8
- adds r0, r4, 0
- bl DestroyTask
-_080148C2:
- bl EnableBothScriptContexts
- movs r0, 0x1
- strh r0, [r7]
- b _080149B2
-_080148CC:
- bl ScriptContext1_IsScriptSetUp
- lsls r0, 24
- cmp r0, 0
- bne _080149B2
- movs r0, 0x1
- movs r1, 0
- bl FadeScreen
- movs r0, 0x2
- strh r0, [r7]
- b _080149B2
-_080148E4:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080149B2
- ldr r0, =gUnknown_02022C2C
- ldrb r0, [r0]
- cmp r0, 0x1D
- bne _08014914
- adds r0, r4, 0
- bl DestroyTask
- ldr r0, =sub_80773AC
- bl SetMainCallback2
- b _080149B2
- .pool
-_08014914:
- bl sub_800ADF8
- movs r0, 0x3
- strh r0, [r7]
- b _080149B2
-_0801491E:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _080149B2
- adds r0, r4, 0
- bl DestroyTask
- bl sub_80149D8
- b _080149B2
-_08014934:
- movs r0, 0
- adds r1, r2, 0
- movs r2, 0xE
- bl SendBlock
- lsls r0, 24
- cmp r0, 0
- beq _080149B2
- movs r0, 0x5
- strh r0, [r7]
- b _080149B2
-_0801494A:
- bl GetBlockReceivedStatus
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _080149B2
- bl ResetBlockReceivedFlags
- ldr r0, =gBlockRecvBuffer
- movs r2, 0x80
- lsls r2, 1
- adds r1, r0, r2
- bl sub_80B2AF4
- cmp r0, 0
- beq _08014980
- ldr r0, =gSpecialVar_Result
- movs r1, 0xB
- strh r1, [r0]
- movs r0, 0x7
- strh r0, [r7]
- b _080149B2
- .pool
-_08014980:
- movs r0, 0x6
- strh r0, [r7]
- b _080149B2
-_08014986:
- bl EnableBothScriptContexts
- adds r0, r4, 0
- bl DestroyTask
- b _080149B2
-_08014992:
- bl sub_800AC34
- movs r0, 0x8
- strh r0, [r7]
- b _080149B2
-_0801499C:
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _080149B2
- bl sub_800E084
- bl EnableBothScriptContexts
- adds r0, r4, 0
- bl DestroyTask
-_080149B2:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8014790
-
- thumb_func_start sub_80149C4
-sub_80149C4: @ 80149C4
- push {lr}
- ldr r0, =sub_8014790
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80149C4
-
- thumb_func_start sub_80149D8
-sub_80149D8: @ 80149D8
- push {lr}
- ldr r0, =sub_801440C
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x8]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80149D8
-
- thumb_func_start sub_8014A00
-sub_8014A00: @ 8014A00
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =sub_8014A40
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_02022C30
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- str r1, [r2]
- movs r2, 0
- strb r2, [r1, 0xC]
- strb r2, [r1, 0xD]
- strb r4, [r1, 0x18]
- ldr r0, =gSpecialVar_Result
- strh r2, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8014A00
-
- thumb_func_start sub_8014A40
-sub_8014A40: @ 8014A40
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_02022C30
- ldr r5, [r0]
- ldrb r0, [r5, 0xC]
- cmp r0, 0x11
- bls _08014A54
- b _08014EF2
-_08014A54:
- lsls r0, 2
- ldr r1, =_08014A68
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08014A68:
- .4byte _08014AB0
- .4byte _08014AEC
- .4byte _08014BBC
- .4byte _08014BEC
- .4byte _08014BFC
- .4byte _08014C4C
- .4byte _08014C24
- .4byte _08014C52
- .4byte _08014CF2
- .4byte _08014DBC
- .4byte _08014DCC
- .4byte _08014DE2
- .4byte _08014DFA
- .4byte _08014E16
- .4byte _08014E4E
- .4byte _08014E74
- .4byte _08014EA8
- .4byte _08014EE2
-_08014AB0:
- ldr r1, =gUnknown_02022C2C
- ldrb r0, [r5, 0x18]
- strb r0, [r1]
- ldr r1, =gUnknown_02022C2D
- movs r0, 0x2
- strb r0, [r1]
- ldrb r0, [r5, 0x18]
- movs r1, 0
- movs r2, 0
- bl sub_8010F84
- movs r0, 0
- movs r1, 0
- bl sub_8010FA0
- bl sub_800B488
- bl OpenLink
- movs r0, 0x2
- bl sub_8011C10
- movs r0, 0x1
- strb r0, [r5, 0xC]
- b _08014EF2
- .pool
-_08014AEC:
- movs r0, 0x70
- bl AllocZeroed
- str r0, [r5, 0x4]
- movs r0, 0xA0
- bl AllocZeroed
- str r0, [r5]
- movs r0, 0xA0
- bl AllocZeroed
- str r0, [r5, 0x8]
- ldr r0, [r5, 0x4]
- movs r1, 0x4
- bl sub_80175EC
- ldr r0, [r5]
- movs r1, 0x5
- bl sub_8017580
- ldr r0, [r5]
- adds r1, r0, 0
- adds r1, 0x10
- bl sub_800DF90
- ldr r1, [r5]
- movs r3, 0
- movs r0, 0
- strh r0, [r1, 0x18]
- ldr r2, [r5]
- ldrb r1, [r2, 0x1A]
- subs r0, 0x4
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1A]
- ldr r2, [r5]
- ldrb r1, [r2, 0x1A]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x1A]
- ldr r0, [r5]
- strb r3, [r0, 0x1B]
- ldr r0, [r5, 0x4]
- movs r1, 0xFF
- bl sub_8016FC0
- strb r0, [r5, 0x17]
- ldr r0, =gUnknown_082F011C
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp]
- str r1, [sp, 0x4]
- bl sub_8019930
- lsls r0, 16
- ldr r2, =0x0000ffff
- ldr r1, [sp, 0x4]
- ands r1, r2
- orrs r1, r0
- ldr r0, =0xffff00ff
- ands r1, r0
- movs r0, 0xC0
- lsls r0, 4
- orrs r1, r0
- str r1, [sp, 0x4]
- mov r0, sp
- bl AddWindow
- strb r0, [r5, 0xF]
- ldrb r0, [r5, 0xF]
- bl sub_8018784
- ldr r0, =gMultiuseListMenuTemplate
- adds r2, r0, 0
- ldr r1, =gUnknown_082F015C
- ldm r1!, {r3,r4,r6}
- stm r2!, {r3,r4,r6}
- ldm r1!, {r3,r4,r6}
- stm r2!, {r3,r4,r6}
- ldrb r1, [r5, 0xF]
- strb r1, [r0, 0x10]
- movs r1, 0
- movs r2, 0
- bl ListMenuInit
- strb r0, [r5, 0x12]
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- movs r0, 0x1
- strb r0, [r5, 0x13]
- b _08014C42
- .pool
-_08014BBC:
- ldr r0, =gStringVar1
- ldr r2, =gUnknown_082F0048
- ldr r4, =gUnknown_02022C2C
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- ldr r0, =gStringVar4
- ldrb r1, [r4]
- bl sub_801262C
- movs r0, 0x3
- strb r0, [r5, 0xC]
- b _08014EF2
- .pool
-_08014BEC:
- ldr r0, =gStringVar4
- bl sub_8018884
- movs r0, 0x4
- strb r0, [r5, 0xC]
- b _08014EF2
- .pool
-_08014BFC:
- adds r0, r5, 0
- movs r1, 0x5
- movs r2, 0x6
- bl sub_801320C
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08014C14
- b _08014EF2
-_08014C14:
- movs r0, 0xD
- strb r0, [r5, 0xC]
- bl sub_800E084
- b _08014EF2
- .pool
-_08014C24:
- adds r0, r5, 0
- adds r0, 0xD
- ldr r1, =gUnknown_082EDF40
- bl mevent_0814257C
- cmp r0, 0
- bne _08014C34
- b _08014EF2
-_08014C34:
- ldr r0, [r5]
- bl sub_8013398
- strb r0, [r5, 0x13]
- ldrb r0, [r5, 0x12]
- bl sub_81AE70C
-_08014C42:
- movs r0, 0x2
- strb r0, [r5, 0xC]
- b _08014EF2
- .pool
-_08014C4C:
- movs r0, 0x7
- strb r0, [r5, 0xC]
- b _08014EF2
-_08014C52:
- adds r0, r5, 0
- adds r0, 0xD
- adds r1, r5, 0
- adds r1, 0x14
- ldr r3, =gStringVar4
- movs r2, 0
- bl sub_8018B08
- lsls r0, 24
- asrs r4, r0, 24
- cmp r4, 0
- beq _08014C82
- cmp r4, 0
- bgt _08014C7C
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- beq _08014CC4
- b _08014EF2
- .pool
-_08014C7C:
- cmp r4, 0x1
- beq _08014CC4
- b _08014EF2
-_08014C82:
- bl sub_800E0E8
- movs r0, 0
- movs r1, 0
- bl CreateWirelessStatusIndicatorSprite
- ldr r1, [r5]
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- adds r1, r0
- strb r4, [r1, 0x1B]
- ldrb r0, [r5, 0x12]
- bl sub_81AE70C
- movs r0, 0x5
- strb r0, [r5, 0x19]
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x2
- bl ReadAsU16
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- ldr r2, [r5]
- adds r2, r0
- adds r2, 0x10
- movs r0, 0x5
- b _08014CE8
-_08014CC4:
- movs r0, 0x6
- strb r0, [r5, 0x19]
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x2
- bl ReadAsU16
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- ldr r2, [r5]
- adds r2, r0
- adds r2, 0x10
- movs r0, 0x6
-_08014CE8:
- bl sub_8010688
- movs r0, 0x8
- strb r0, [r5, 0xC]
- b _08014EF2
-_08014CF2:
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r0, r1
- adds r0, 0x2
- bl ReadAsU16
- lsls r0, 16
- lsrs r0, 16
- ldrb r2, [r5, 0x13]
- lsls r2, 5
- ldr r1, [r5]
- adds r1, r2
- adds r1, 0x10
- bl sub_8010714
- adds r4, r0, 0
- cmp r4, 0x1
- bne _08014DAA
- ldrb r0, [r5, 0x19]
- cmp r0, 0x5
- bne _08014D64
- ldr r1, [r5]
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- adds r1, r0
- movs r0, 0
- strb r0, [r1, 0x1B]
- ldrb r0, [r5, 0x12]
- bl sub_81AE70C
- ldrb r0, [r5, 0x13]
- adds r0, 0x1
- strb r0, [r5, 0x13]
- ldr r0, =gStringVar1
- ldrb r2, [r5, 0x13]
- lsls r2, 5
- subs r2, 0x20
- ldr r1, [r5]
- adds r1, r2
- bl sub_8018404
- ldr r0, =gStringVar4
- ldr r1, =gUnknown_082EDC9C
- bl StringExpandPlaceholders
- movs r0, 0x9
- strb r0, [r5, 0xC]
- bl sub_800EF38
- b _08014DA4
- .pool
-_08014D64:
- ldrb r1, [r5, 0x13]
- lsls r1, 5
- ldr r0, [r5]
- adds r0, r1
- adds r4, r0, 0
- adds r4, 0x10
- adds r0, 0x2
- bl ReadAsU16
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8011DC0
- ldr r1, [r5]
- ldrb r0, [r5, 0x13]
- lsls r0, 5
- adds r1, r0
- ldrb r2, [r1, 0x1A]
- movs r0, 0x4
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1A]
- ldr r0, [r5]
- bl sub_8013398
- ldrb r0, [r5, 0x12]
- bl sub_81AE70C
- movs r0, 0x2
- strb r0, [r5, 0xC]
-_08014DA4:
- movs r0, 0
- strb r0, [r5, 0x19]
- b _08014EF2
-_08014DAA:
- cmp r4, 0x2
- beq _08014DB0
- b _08014EF2
-_08014DB0:
- movs r0, 0
- movs r1, 0
- bl sub_8011A64
- strb r4, [r5, 0xC]
- b _08014EF2
-_08014DBC:
- ldr r0, =gStringVar4
- bl sub_8018884
- movs r0, 0xA
- strb r0, [r5, 0xC]
- b _08014EF2
- .pool
-_08014DCC:
- ldrb r0, [r5, 0xE]
- adds r0, 0x1
- strb r0, [r5, 0xE]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x78
- bhi _08014DDC
- b _08014EF2
-_08014DDC:
- movs r0, 0xB
- strb r0, [r5, 0xC]
- b _08014EF2
-_08014DE2:
- adds r0, r5, 0
- movs r1, 0x5
- movs r2, 0x6
- bl sub_801320C
- lsls r0, 24
- cmp r0, 0
- beq _08014DF4
- b _08014EF2
-_08014DF4:
- movs r0, 0xC
- strb r0, [r5, 0xC]
- b _08014EF2
-_08014DFA:
- bl sub_800EF1C
- lsls r0, 24
- cmp r0, 0
- beq _08014E10
- movs r0, 0
- bl sub_800EF58
- movs r0, 0xF
- strb r0, [r5, 0xC]
- b _08014EF2
-_08014E10:
- movs r0, 0x6
- strb r0, [r5, 0xC]
- b _08014EF2
-_08014E16:
- bl sub_800E084
- bl sub_800EDD4
- ldrb r0, [r5, 0x12]
- movs r1, 0
- movs r2, 0
- bl DestroyListMenuTask
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldrb r0, [r5, 0xF]
- bl RemoveWindow
- ldrb r0, [r5, 0x17]
- bl DestroyTask
- ldr r0, [r5, 0x8]
- bl Free
- ldr r0, [r5]
- bl Free
- ldr r0, [r5, 0x4]
- bl Free
- b _08014EDA
-_08014E4E:
- adds r0, r5, 0
- adds r0, 0xD
- ldr r1, =gText_PleaseStartOver
- bl mevent_0814257C
- cmp r0, 0
- beq _08014EF2
- adds r0, r4, 0
- bl DestroyTask
- ldr r1, =gSpecialVar_Result
- movs r0, 0x5
- strh r0, [r1]
- b _08014EF2
- .pool
-_08014E74:
- bl sub_8011A74
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08014E8C
- bl sub_8011A74
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _08014E92
-_08014E8C:
- movs r0, 0xD
- strb r0, [r5, 0xC]
- b _08014EF2
-_08014E92:
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08014EF2
- movs r0, 0x1
- bl sub_8011068
- b _08014EDA
- .pool
-_08014EA8:
- ldrb r0, [r5, 0x12]
- movs r1, 0
- movs r2, 0
- bl DestroyListMenuTask
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- ldrb r0, [r5, 0xF]
- bl RemoveWindow
- ldrb r0, [r5, 0x17]
- bl DestroyTask
- ldr r0, [r5, 0x8]
- bl Free
- ldr r0, [r5]
- bl Free
- ldr r0, [r5, 0x4]
- bl Free
- bl sub_800ADF8
-_08014EDA:
- ldrb r0, [r5, 0xC]
- adds r0, 0x1
- strb r0, [r5, 0xC]
- b _08014EF2
-_08014EE2:
- bl sub_800A520
- lsls r0, 24
- cmp r0, 0
- beq _08014EF2
- adds r0, r4, 0
- bl DestroyTask
-_08014EF2:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8014A40
-
- thumb_func_start sub_8014EFC
-sub_8014EFC: @ 8014EFC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =sub_8014F48
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_02022C30
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- str r1, [r2]
- ldr r0, =gUnknown_03000DA4
- str r1, [r0]
- movs r2, 0
- strb r2, [r1, 0x8]
- strb r2, [r1, 0x9]
- subs r4, 0x15
- strb r4, [r1, 0x12]
- ldr r0, =gSpecialVar_Result
- strh r2, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8014EFC
-
thumb_func_start sub_8014F48
sub_8014F48: @ 8014F48
push {r4-r7,lr}
diff --git a/include/cable_club.h b/include/cable_club.h
index 7b47c9f73..734a4f070 100644
--- a/include/cable_club.h
+++ b/include/cable_club.h
@@ -10,5 +10,6 @@
void sub_80B37D4(TaskFunc taskFunc);
u8 sub_80B3050(void);
void sub_80B360C(void);
+bool32 sub_80B2AF4(u16 *arg0, u16 *arg1);
#endif //GUARD_CABLE_CLUB_H
diff --git a/include/link.h b/include/link.h
index 5ef1dca4c..5fe614ab3 100644
--- a/include/link.h
+++ b/include/link.h
@@ -122,7 +122,7 @@ struct LinkPlayer
/* 0x08 */ u8 name[11];
/* 0x13 */ u8 gender;
/* 0x14 */ u32 linkType;
- /* 0x18 */ u16 lp_field_18; // battler id in battles
+ /* 0x18 */ u16 id; // battler id in battles
/* 0x1A */ u16 language;
};
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 95bae9d06..7a3254632 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -248,7 +248,11 @@ void sub_800E084(void);
void sub_801103C(void);
void sub_8011C5C(void);
void sub_80106D4(void);
+void sub_800E3A8(void);
+void sub_800ED10(void);
+void sub_800ED28(void);
void sub_8011090(u8 a0, u32 a1, u32 a2);
void sub_8011FC8(u8 *a0, u16 a1);
+void sub_8010FA0(bool32 a0, bool32 a1);
#endif //GUARD_LINK_RFU_H
diff --git a/include/party_menu.h b/include/party_menu.h
index c96eb0d9d..b67633c2b 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -38,5 +38,6 @@ void sub_81B1F18(u8 taskId, u8 pokemonIdx, s8 a, s16 hp, TaskFunc func);
void sub_81B1B5C(void *a, u8 b);
u8 sub_81B1BD4();
void sub_81B8448();
+void sub_81B8518(u8 unused);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/trainer_card.h b/include/trainer_card.h
index 6afcba5b1..af603444f 100644
--- a/include/trainer_card.h
+++ b/include/trainer_card.h
@@ -34,5 +34,6 @@ extern struct TrainerCard gTrainerCards[4];
void sub_80C3120(struct TrainerCard *arg0, u16 *arg1, u8 gameVersion);
void sub_80C4E74(u8 arg0, void (*callback)(void));
+void sub_80C30A4(u16 *arg0);
#endif // GUARD_TRAINER_CARD_H
diff --git a/ld_script.txt b/ld_script.txt
index f7e531fce..9ca645de4 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -55,6 +55,7 @@ SECTIONS {
src/link.o(.text);
src/link_rfu.o(.text);
asm/link_rfu.o(.text);
+ src/rom_8011DC0.o(.text);
asm/rom_8011DC0.o(.text);
src/rtc.o(.text);
src/main_menu.o(.text);
@@ -367,6 +368,7 @@ SECTIONS {
src/string_util.o(.rodata);
src/link.o(.rodata);
src/link_rfu.o(.rodata);
+ src/rom_8011DC0.o(.rodata);
data/rom_8011DC0.o(.rodata);
src/rtc.o(.rodata);
src/main_menu.o(.rodata);
diff --git a/src/load_save.c b/src/load_save.c
index 917c1dfe1..ead4c7bb2 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -38,7 +38,7 @@ EWRAM_DATA struct PokemonStorage gPokemonStorage = {0};
EWRAM_DATA u8 gSaveblock3_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0};
-EWRAM_DATA u32 gLastEncryptionKey = {0};
+EWRAM_DATA u32 gLastEncryptionKey = 0;
// IWRAM common
IWRAM_DATA bool32 gFlashMemoryPresent;
diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c
index 514fd49a7..dd162c4a0 100644
--- a/src/rom_8011DC0.c
+++ b/src/rom_8011DC0.c
@@ -15,6 +15,7 @@
#include "sound.h"
#include "constants/songs.h"
#include "constants/game_stat.h"
+#include "constants/maps.h"
#include "trade.h"
#include "trainer_card.h"
#include "overworld.h"
@@ -22,6 +23,9 @@
#include "load_save.h"
#include "cable_club.h"
#include "field_control_avatar.h"
+#include "party_menu.h"
+#include "field_weather.h"
+#include "palette.h"
extern void HealPlayerParty(void);
@@ -30,7 +34,7 @@ struct UnkStruct_Shared
struct UnkLinkRfuStruct_02022B14 field_0;
u8 field_xD;
u8 field_E;
- u8 field_F;
+ u8 field_xF;
u8 playerName[PLAYER_NAME_LENGTH];
};
@@ -75,7 +79,7 @@ struct UnkStruct_Leader
u8 state;
u8 textState;
u8 field_E;
- u8 field_F;
+ u8 listWindowId;
u8 field_10;
u8 field_11;
u8 listTaskId;
@@ -152,6 +156,8 @@ u16 ReadAsU16(const u8 *ptr);
void sub_8012780(u8 taskId);
void sub_80134E8(u8 taskId);
void sub_8013C7C(u8 taskId);
+void sub_8014A40(u8 taskId);
+void sub_8014F48(u8 taskId);
void sub_80175EC(struct UnkStruct_Main4 *arg0, u8 count);
void sub_8017580(struct UnkStruct_Main0 *arg0, u8 count);
u8 sub_8016FC0(struct UnkStruct_Main4 *arg0, u32 arg1);
@@ -176,6 +182,18 @@ u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId);
void sub_801807C(struct TradeUnkStruct *arg0);
void sub_801B940(void);
void sub_801B94C(u16);
+u16 sub_801B39C(void);
+void sub_801AC54(void);
+void sub_801DD98(void);
+void sub_802A9A8(u8 monId, MainCallback callback);
+void sub_802493C(u8 monId, MainCallback callback);
+void sub_8020C70(MainCallback callback);
+void sub_80149D8(void);
+u16 sub_8019930(void);
+void sub_8018784(u8 windowId);
+void sub_8018884(const u8 *src);
+bool32 mevent_0814257C(u8 *textState, const u8 *str);
+s8 sub_8018B08(u8 *textState, u8 *arg1, u8 arg2, const u8 *str);
// const rom data
extern const u8 *const gUnknown_082EDB60[][5];
@@ -200,6 +218,8 @@ extern const u8 gUnknown_082EDDF4[];
extern const u8 gUnknown_082EF7DC[];
extern const u8 gUnknown_082EDE48[];
extern const u8 gUnknown_082EDE64[];
+extern const u8 gUnknown_082EDF40[];
+extern const u8 gText_PleaseStartOver[];
extern const u32 gUnknown_082F00C4[];
@@ -342,10 +362,10 @@ void sub_8012780(u8 taskId)
case 2:
case 3:
case 4:
- data->field_F = AddWindow(&gUnknown_082F011C);
+ data->listWindowId = AddWindow(&gUnknown_082F011C);
break;
case 5:
- data->field_F = AddWindow(&gUnknown_082F0124);
+ data->listWindowId = AddWindow(&gUnknown_082F0124);
break;
}
data->field_11 = AddWindow(&gUnknown_082F012C);
@@ -355,9 +375,9 @@ void sub_8012780(u8 taskId)
PutWindowTilemap(data->field_10);
CopyWindowToVram(data->field_10, 2);
- NewMenuHelpers_DrawStdWindowFrame(data->field_F, FALSE);
+ NewMenuHelpers_DrawStdWindowFrame(data->listWindowId, FALSE);
gMultiuseListMenuTemplate = gUnknown_082F015C;
- gMultiuseListMenuTemplate.windowId = data->field_F;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
NewMenuHelpers_DrawStdWindowFrame(data->field_11, FALSE);
@@ -633,10 +653,10 @@ void sub_8012F64(struct UnkStruct_Leader *data)
sub_819746C(data->field_11, FALSE);
DestroyListMenuTask(data->listTaskId, 0, 0);
ClearWindowTilemap(data->field_10);
- sub_819746C(data->field_F, FALSE);
+ sub_819746C(data->listWindowId, FALSE);
CopyBgTilemapBufferToVram(0);
RemoveWindow(data->field_11);
- RemoveWindow(data->field_F);
+ RemoveWindow(data->listWindowId);
RemoveWindow(data->field_10);
DestroyTask(data->field_17);
@@ -1470,8 +1490,8 @@ void sub_8014210(u16 battleFlags)
SavePlayerParty();
LoadPlayerBag();
gLinkPlayers[0].linkType = 0x2211;
- gLinkPlayers[GetMultiplayerId()].lp_field_18 = GetMultiplayerId();
- gLinkPlayers[GetMultiplayerId() ^ 1].lp_field_18 = GetMultiplayerId() ^ 1;
+ gLinkPlayers[GetMultiplayerId()].id = GetMultiplayerId();
+ gLinkPlayers[GetMultiplayerId() ^ 1].id = GetMultiplayerId() ^ 1;
gMain.savedCallback = sub_80B360C;
gBattleTypeFlags = battleFlags;
PlayBattleBGM();
@@ -1495,3 +1515,472 @@ void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 arg4)
Overworld_SetWarpDestination(mapGroup, mapNum, -1, x, y);
warp_in();
}
+
+void sub_8014384(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ CreateTask(sub_80140E0, 5);
+ gMain.state++;
+ break;
+ case 1:
+ if (!FuncIsActiveTask(sub_80140E0))
+ SetMainCallback2(sub_8086074);
+ break;
+ }
+
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+}
+
+void sub_80143E4(void *arg0, bool32 arg1)
+{
+ u16 *argAsU16Ptr = arg0;
+
+ sub_80C30A4(argAsU16Ptr);
+ if (arg1)
+ argAsU16Ptr[48] = sub_801B39C();
+ else
+ argAsU16Ptr[48] = 0;
+}
+
+void sub_801440C(u8 taskId)
+{
+ sub_801B940();
+ switch (gUnknown_02022C2C)
+ {
+ case 1 ... 4:
+ case 9 ... 11:
+ case 13:
+ case 15:
+ sub_800E3A8();
+ break;
+ }
+
+ switch (gUnknown_02022C2C)
+ {
+ case 65:
+ case 81:
+ overworld_free_bg_tilemaps();
+ gMain.savedCallback = sub_801AC54;
+ sub_81B8518(3);
+ break;
+ case 1:
+ overworld_free_bg_tilemaps();
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ HealPlayerParty();
+ SavePlayerParty();
+ LoadPlayerBag();
+ sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, 1);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 2:
+ overworld_free_bg_tilemaps();
+ HealPlayerParty();
+ SavePlayerParty();
+ LoadPlayerBag();
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, 2);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 3:
+ overworld_free_bg_tilemaps();
+ HealPlayerParty();
+ SavePlayerParty();
+ LoadPlayerBag();
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ sub_8014304(MAP_GROUP(DOUBLE_BATTLE_COLOSSEUM), MAP_NUM(DOUBLE_BATTLE_COLOSSEUM), 5, 8, 5);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 4:
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ overworld_free_bg_tilemaps();
+ sub_8014304(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, 3);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 15:
+ sub_80143E4(gBlockSendBuffer, TRUE);
+ overworld_free_bg_tilemaps();
+ sub_8014304(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, 4);
+ SetMainCallback2(sub_8014384);
+ break;
+ case 68:
+ overworld_free_bg_tilemaps();
+ CreateTask(sub_8013F90, 0);
+ break;
+ case 5:
+ case 69:
+ if (GetMultiplayerId() == 0)
+ {
+ sub_800ED10();
+ }
+ else
+ {
+ sub_800ED28();
+ sub_8010F84(69, 0, 1);
+ }
+ sub_801DD98();
+ break;
+ case 8:
+ case 72:
+ sub_80143E4(gBlockSendBuffer, FALSE);
+ SetMainCallback2(sub_80141A4);
+ break;
+ case 9:
+ sub_8014290(8, 5, 1);
+ sub_802A9A8(GetCursorSelectionMonId(), CB2_LoadMap);
+ break;
+ case 10:
+ sub_8014290(7, 9, 1);
+ sub_8020C70(CB2_LoadMap);
+ break;
+ case 11:
+ sub_8014290(8, 5, 1);
+ sub_802493C(GetCursorSelectionMonId(), CB2_LoadMap);
+ break;
+ }
+
+ DestroyTask(taskId);
+ gSpecialVar_Result = 1;
+ if (gUnknown_02022C2C != 68)
+ ScriptContext2_Disable();
+}
+
+extern u8 gUnknown_0203CEF8[];
+
+void sub_8014790(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u16 *sendBuff = (u16*)(gBlockSendBuffer);
+
+ switch (data[0])
+ {
+ case 0:
+ gSpecialVar_Result = 1;
+ switch (gUnknown_02022C2C)
+ {
+ case 14:
+ case 28:
+ gLinkPlayers[0].linkType = 0x2211;
+ gLinkPlayers[0].id = 0;
+ gLinkPlayers[1].id = 2;
+ sendBuff[0] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[0] - 1], MON_DATA_SPECIES);
+ sendBuff[1] = GetMonData(&gPlayerParty[gUnknown_0203CEF8[1] - 1], MON_DATA_SPECIES, NULL);
+ gMain.savedCallback = NULL;
+ data[0] = 4;
+ sub_800E3A8();
+ ResetBlockReceivedFlags();
+ break;
+ case 16:
+ case 23 ... 27:
+ sub_800E3A8();
+ DestroyTask(taskId);
+ default:
+ EnableBothScriptContexts();
+ data[0] = 1;
+ break;
+ }
+ break;
+ case 1:
+ if (!ScriptContext1_IsScriptSetUp())
+ {
+ FadeScreen(1, 0);
+ data[0] = 2;
+ }
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_02022C2C == 29)
+ {
+ DestroyTask(taskId);
+ SetMainCallback2(sub_80773AC);
+ }
+ else
+ {
+ sub_800ADF8();
+ data[0] = 3;
+ }
+ }
+ break;
+ case 3:
+ if (sub_800A520())
+ {
+ DestroyTask(taskId);
+ sub_80149D8();
+ }
+ break;
+ case 4:
+ if (SendBlock(0, gBlockSendBuffer, 0xE))
+ data[0] = 5;
+ break;
+ case 5:
+ if (GetBlockReceivedStatus() == 3)
+ {
+ ResetBlockReceivedFlags();
+ if (sub_80B2AF4(gBlockRecvBuffer[0], gBlockRecvBuffer[1]))
+ {
+ gSpecialVar_Result = 11;
+ data[0] = 7;
+ }
+ else
+ {
+ data[0] = 6;
+ }
+ }
+ break;
+ case 6:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ break;
+ case 7:
+ sub_800AC34();
+ data[0] = 8;
+ break;
+ case 8:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ sub_800E084();
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80149C4(void)
+{
+ CreateTask(sub_8014790, 0);
+}
+
+void sub_80149D8(void)
+{
+ u8 taskId = CreateTask(sub_801440C, 0);
+ gTasks[taskId].data[0] = 0;
+}
+
+void sub_8014A00(u32 arg0)
+{
+ u8 taskId;
+ struct UnkStruct_Leader *dataPtr;
+
+ taskId = CreateTask(sub_8014A40, 0);
+ gUnknown_02022C30.leader = dataPtr = (void*)(gTasks[taskId].data);
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_18 = arg0;
+ gSpecialVar_Result = 0;
+}
+
+void sub_8014A40(u8 taskId)
+{
+ struct UnkStruct_Leader *data = gUnknown_02022C30.leader;
+ struct WindowTemplate winTemplate;
+ s32 val;
+
+ switch (data->state)
+ {
+ case 0:
+ gUnknown_02022C2C = data->field_18;
+ gUnknown_02022C2D = 2;
+ sub_8010F84(data->field_18, 0, 0);
+ sub_8010FA0(FALSE, FALSE);
+ sub_800B488();
+ OpenLink();
+ sub_8011C10(2);
+ data->state = 1;
+ break;
+ case 1:
+ data->field_4 = AllocZeroed(0x70);
+ data->field_0 = AllocZeroed(0xA0);
+ data->field_8 = AllocZeroed(0xA0);
+ sub_80175EC(data->field_4, 4);
+ sub_8017580(data->field_0, 5);
+ sub_800DF90(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName);
+ data->field_0->arr[0].field_18 = 0;
+ data->field_0->arr[0].field_1A_0 = 1;
+ data->field_0->arr[0].field_1A_1 = 0;
+ data->field_0->arr[0].field_1B = 0;
+ data->field_17 = sub_8016FC0(data->field_4, 0xFF);
+
+ winTemplate = gUnknown_082F011C;
+ winTemplate.baseBlock = sub_8019930();
+ winTemplate.paletteNum = 0xC;
+ data->listWindowId = AddWindow(&winTemplate);
+ sub_8018784(data->listWindowId);
+ gMultiuseListMenuTemplate = gUnknown_082F015C;
+ gMultiuseListMenuTemplate.windowId = data->listWindowId;
+ data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+
+ CopyBgTilemapBufferToVram(0);
+ data->field_13 = 1;
+ data->state = 2;
+ break;
+ case 2:
+ StringCopy(gStringVar1, gUnknown_082F0048[gUnknown_02022C2C]);
+ sub_801262C(gStringVar4, gUnknown_02022C2C);
+ data->state = 3;
+ break;
+ case 3:
+ sub_8018884(gStringVar4);
+ data->state = 4;
+ break;
+ case 4:
+ sub_801320C(data, 5, 6);
+ if (gMain.newKeys & B_BUTTON)
+ {
+ data->state = 13;
+ sub_800E084();
+ }
+ break;
+ case 6:
+ if (mevent_0814257C(&data->textState, gUnknown_082EDF40))
+ {
+ data->field_13 = sub_8013398(data->field_0);
+ sub_81AE70C(data->listTaskId);
+ data->state = 2;
+ }
+ break;
+ case 5:
+ data->state = 7;
+ break;
+ case 7:
+ switch (sub_8018B08(&data->textState, &data->field_14, 0, gStringVar4))
+ {
+ case 0:
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ data->field_0->arr[data->field_13].field_1B = 0;
+ sub_81AE70C(data->listTaskId);
+ data->field_19 = 5;
+ sub_8010688(5, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->state = 8;
+ break;
+ case 1:
+ case -1:
+ data->field_19 = 6;
+ sub_8010688(6, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ data->state = 8;
+ break;
+ }
+ break;
+ case 8:
+ val = sub_8010714(ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName);
+ if (val == 1)
+ {
+ if (data->field_19 == 5)
+ {
+ data->field_0->arr[data->field_13].field_1B = 0;
+ sub_81AE70C(data->listTaskId);
+ data->field_13++;
+ sub_8018404(gStringVar1, &data->field_0->arr[data->field_13 - 1]);
+ StringExpandPlaceholders(gStringVar4, gUnknown_082EDC9C);
+ data->state = 9;
+ sub_800EF38();
+ }
+ else
+ {
+ sub_8011DC0(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.field_0.playerTrainerId));
+ data->field_0->arr[data->field_13].field_1A_0 = 0;
+ sub_8013398(data->field_0);
+ sub_81AE70C(data->listTaskId);
+ data->state = 2;
+ }
+
+ data->field_19 = 0;
+ }
+ else if (val == 2)
+ {
+ sub_8011A64(0, 0);
+ data->state = 2;
+ }
+ break;
+ case 9:
+ sub_8018884(gStringVar4);
+ data->state = 10;
+ break;
+ case 10:
+ if (++data->field_E > 120)
+ data->state = 11;
+ break;
+ case 11:
+ if (!sub_801320C(data, 5, 6))
+ data->state = 12;
+ break;
+ case 12:
+ if (sub_800EF1C())
+ {
+ sub_800EF58(FALSE);
+ data->state = 15;
+ }
+ else
+ {
+ data->state = 6;
+ }
+ break;
+ case 13:
+ sub_800E084();
+ sub_800EDD4();
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->listWindowId);
+ DestroyTask(data->field_17);
+ Free(data->field_8);
+ Free(data->field_0);
+ Free(data->field_4);
+ data->state++;
+ break;
+ case 14:
+ if (mevent_0814257C(&data->textState, gText_PleaseStartOver))
+ {
+ DestroyTask(taskId);
+ gSpecialVar_Result = 5;
+ }
+ break;
+ case 15:
+ if (sub_8011A74() == 1 || sub_8011A74() == 2)
+ {
+ data->state = 13;
+ }
+ else if (gReceivedRemoteLinkPlayers != 0)
+ {
+ sub_8011068(1);
+ data->state++;
+ }
+ break;
+ case 16:
+ DestroyListMenuTask(data->listTaskId, 0, 0);
+ CopyBgTilemapBufferToVram(0);
+ RemoveWindow(data->listWindowId);
+ DestroyTask(data->field_17);
+ Free(data->field_8);
+ Free(data->field_0);
+ Free(data->field_4);
+ sub_800ADF8();
+ data->state++;
+ break;
+ case 17:
+ if (sub_800A520())
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_8014EFC(u32 arg0)
+{
+ u8 taskId;
+ struct UnkStruct_Group *dataPtr;
+
+ taskId = CreateTask(sub_8014F48, 0);
+ gUnknown_02022C30.group = dataPtr = (void*)(gTasks[taskId].data);
+ gUnknown_03000DA4 = dataPtr;
+
+ dataPtr->state = 0;
+ dataPtr->textState = 0;
+ dataPtr->field_12 = arg0 - 21;
+ gSpecialVar_Result = 0;
+}