diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-09-08 14:57:42 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-08 14:57:42 -0500 |
commit | 105bc09c52192fbf2f6389399d995be1014f3807 (patch) | |
tree | 20de5b7ca3842001427c7562793d2e0a853a6fe0 | |
parent | 2df2b6280c69d6cd80f4f03be86cdc5628365bf5 (diff) | |
parent | a6811cb0890dfd9eedb22b714e13d894f95b3f42 (diff) |
Merge pull request #425 from hlorenzi/master
Decompile cable_club.s
-rw-r--r-- | asm/cable_club.s | 1671 | ||||
-rw-r--r-- | include/cable_club.h | 30 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/cable_club.c | 922 |
4 files changed, 771 insertions, 1854 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s deleted file mode 100644 index 68804ca21..000000000 --- a/asm/cable_club.s +++ /dev/null @@ -1,1671 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8082CD4 -sub_8082CD4: @ 8082CD4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r4, _08082D10 @ =sub_8082F20 - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _08082D08 - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08082D14 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r6, [r1, 0xA] - strh r5, [r1, 0xC] -_08082D08: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08082D10: .4byte sub_8082F20 -_08082D14: .4byte gTasks - thumb_func_end sub_8082CD4 - - thumb_func_start sub_8082D18 -sub_8082D18: @ 8082D18 - push {lr} - adds r1, r0, 0 - ldr r0, _08082D44 @ =gStringVar1 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - movs r0, 0x12 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0xD - bl MenuDrawTextWindow - ldr r0, _08082D48 @ =gOtherText_PLink - movs r1, 0x13 - movs r2, 0xB - movs r3, 0x48 - bl sub_8072BD8 - pop {r0} - bx r0 - .align 2, 0 -_08082D44: .4byte gStringVar1 -_08082D48: .4byte gOtherText_PLink - thumb_func_end sub_8082D18 - - thumb_func_start sub_8082D4C -sub_8082D4C: @ 8082D4C - push {lr} - movs r0, 0x12 - movs r1, 0xA - movs r2, 0x1C - movs r3, 0xD - bl MenuZeroFillWindowRect - pop {r0} - bx r0 - thumb_func_end sub_8082D4C - - thumb_func_start sub_8082D60 -sub_8082D60: @ 8082D60 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08082D88 @ =gTasks + 0x8 - adds r1, r0 - adds r5, r1, 0x6 - movs r2, 0x6 - ldrsh r0, [r1, r2] - cmp r4, r0 - beq _08082D94 - cmp r4, 0x1 - bhi _08082D8C - bl sub_8082D4C - b _08082D92 - .align 2, 0 -_08082D88: .4byte gTasks + 0x8 -_08082D8C: - adds r0, r4, 0 - bl sub_8082D18 -_08082D92: - strh r4, [r5] -_08082D94: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8082D60 - - thumb_func_start sub_8082D9C -sub_8082D9C: @ 8082D9C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - bl GetLinkPlayerDataExchangeStatusTimed - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - beq _08082DEC - cmp r0, 0x2 - bgt _08082DBC - cmp r0, 0x1 - beq _08082DC2 - b _08082DEC -_08082DBC: - cmp r0, 0x3 - beq _08082DE8 - b _08082DEC -_08082DC2: - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r4, r1 - bgt _08082DD6 - cmp r1, r5 - bgt _08082DD6 - movs r0, 0x1 - b _08082DEE -_08082DD6: - ldr r0, _08082DE4 @ =gStringVar1 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - movs r0, 0x4 - b _08082DEE - .align 2, 0 -_08082DE4: .4byte gStringVar1 -_08082DE8: - movs r0, 0x3 - b _08082DEE -_08082DEC: - movs r0, 0 -_08082DEE: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8082D9C - - thumb_func_start sub_8082DF4 -sub_8082DF4: @ 8082DF4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl HasLinkErrorOccurred - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08082E0A - movs r0, 0 - b _08082E1A -_08082E0A: - ldr r0, _08082E20 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08082E24 @ =sub_8083418 - str r0, [r1] - movs r0, 0x1 -_08082E1A: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08082E20: .4byte gTasks -_08082E24: .4byte sub_8083418 - thumb_func_end sub_8082DF4 - - thumb_func_start sub_8082E28 -sub_8082E28: @ 8082E28 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08082E58 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08082E64 - bl IsLinkConnectionEstablished - lsls r0, 24 - cmp r0, 0 - bne _08082E64 - ldr r0, _08082E5C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08082E60 @ =sub_80833EC - str r0, [r1] - movs r0, 0x1 - b _08082E66 - .align 2, 0 -_08082E58: .4byte gMain -_08082E5C: .4byte gTasks -_08082E60: .4byte sub_80833EC -_08082E64: - movs r0, 0 -_08082E66: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8082E28 - - thumb_func_start sub_8082E6C -sub_8082E6C: @ 8082E6C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsLinkConnectionEstablished - lsls r0, 24 - cmp r0, 0 - beq _08082E82 - movs r0, 0x1 - bl SetSuppressLinkErrorMessage -_08082E82: - ldr r0, _08082E94 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08082E98 - movs r0, 0 - b _08082EA8 - .align 2, 0 -_08082E94: .4byte gMain -_08082E98: - ldr r0, _08082EB0 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08082EB4 @ =sub_80833EC - str r0, [r1] - movs r0, 0x1 -_08082EA8: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08082EB0: .4byte gTasks -_08082EB4: .4byte sub_80833EC - thumb_func_end sub_8082E6C - - thumb_func_start sub_8082EB8 -sub_8082EB8: @ 8082EB8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl GetSioMultiSI - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08082ECE - movs r0, 0 - b _08082EDE -_08082ECE: - ldr r0, _08082EE4 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08082EE8 @ =sub_8083418 - str r0, [r1] - movs r0, 0x1 -_08082EDE: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08082EE4: .4byte gTasks -_08082EE8: .4byte sub_8083418 - thumb_func_end sub_8082EB8 - - thumb_func_start unref_sub_8082EEC -unref_sub_8082EEC: @ 8082EEC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08082F1C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _08082F16 - movs r0, 0x2 - bl sub_8007E9C - adds r0, r4, 0 - bl DestroyTask -_08082F16: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08082F1C: .4byte gTasks - thumb_func_end unref_sub_8082EEC - - thumb_func_start sub_8082F20 -sub_8082F20: @ 8082F20 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08082F48 @ =gTasks + 0x8 - adds r4, r1, r0 - movs r3, 0 - ldrsh r2, [r4, r3] - cmp r2, 0 - bne _08082F4C - bl OpenLinkTimed - bl sub_80082EC - bl ResetLinkPlayers - b _08082F58 - .align 2, 0 -_08082F48: .4byte gTasks + 0x8 -_08082F4C: - cmp r2, 0x9 - ble _08082F58 - subs r0, 0x8 - adds r0, r1, r0 - ldr r1, _08082F64 @ =sub_8082F68 - str r1, [r0] -_08082F58: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08082F64: .4byte sub_8082F68 - thumb_func_end sub_8082F20 - - thumb_func_start sub_8082F68 -sub_8082F68: @ 8082F68 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - bl sub_8082E28 - cmp r0, 0x1 - beq _08082FDC - adds r0, r4, 0 - bl sub_8082E6C - cmp r0, 0x1 - beq _08082FDC - cmp r5, 0x1 - bls _08082FDC - movs r0, 0x1 - bl SetSuppressLinkErrorMessage - ldr r1, _08082FC0 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r4, r0, r1 - movs r0, 0 - strh r0, [r4, 0xE] - bl IsLinkMaster - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08082FCC - movs r0, 0x15 - bl PlaySE - ldr r0, _08082FC4 @ =gUnknown_081A4932 - bl ShowFieldAutoScrollMessage - ldr r0, _08082FC8 @ =sub_8082FEC - b _08082FDA - .align 2, 0 -_08082FC0: .4byte gTasks -_08082FC4: .4byte gUnknown_081A4932 -_08082FC8: .4byte sub_8082FEC -_08082FCC: - movs r0, 0x16 - bl PlaySE - ldr r0, _08082FE4 @ =gUnknown_081A49B6 - bl ShowFieldAutoScrollMessage - ldr r0, _08082FE8 @ =sub_80831F8 -_08082FDA: - str r0, [r4] -_08082FDC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08082FE4: .4byte gUnknown_081A49B6 -_08082FE8: .4byte sub_80831F8 - thumb_func_end sub_8082F68 - - thumb_func_start sub_8082FEC -sub_8082FEC: @ 8082FEC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_8082E28 - cmp r0, 0x1 - beq _0808302C - adds r0, r4, 0 - bl sub_8082EB8 - cmp r0, 0x1 - beq _0808302C - adds r0, r4, 0 - bl sub_8082DF4 - cmp r0, 0x1 - beq _0808302C - bl GetFieldMessageBoxMode - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _0808302C - ldr r0, _08083034 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - strh r2, [r1, 0xE] - ldr r0, _08083038 @ =sub_808303C - str r0, [r1] -_0808302C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083034: .4byte gTasks -_08083038: .4byte sub_808303C - thumb_func_end sub_8082FEC - -.section .text_80830E4 - - - - - - - - - - thumb_func_start sub_80833C4 -sub_80833C4: @ 80833C4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080833E8 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _080833E0 - bl sub_8082D4C - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask -_080833E0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080833E8: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_80833C4 - - thumb_func_start sub_80833EC -sub_80833EC: @ 80833EC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08083414 @ =gScriptResult - movs r0, 0x5 - strh r0, [r1] - bl sub_8082D4C - bl HideFieldMessageBox - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083414: .4byte gScriptResult - thumb_func_end sub_80833EC - - thumb_func_start sub_8083418 -sub_8083418: @ 8083418 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08083440 @ =gScriptResult - movs r0, 0x6 - strh r0, [r1] - bl sub_8082D4C - bl HideFieldMessageBox - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083440: .4byte gScriptResult - thumb_func_end sub_8083418 - - thumb_func_start sub_8083444 -sub_8083444: @ 8083444 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08083468 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r2, r1, r2 - ldrh r0, [r2, 0x10] - adds r0, 0x1 - strh r0, [r2, 0x10] - lsls r0, 16 - movs r1, 0x96 - lsls r1, 18 - cmp r0, r1 - bgt _0808346C - movs r0, 0 - b _08083472 - .align 2, 0 -_08083468: .4byte gTasks -_0808346C: - ldr r0, _08083478 @ =sub_8083418 - str r0, [r2] - movs r0, 0x1 -_08083472: - pop {r1} - bx r1 - .align 2, 0 -_08083478: .4byte sub_8083418 - thumb_func_end sub_8083444 - - thumb_func_start sub_808347C -sub_808347C: @ 808347C - push {r4,lr} - movs r3, 0x2 - movs r2, 0x2 - ldr r0, _08083494 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x2 - beq _080834B0 - cmp r0, 0x2 - bgt _08083498 - cmp r0, 0x1 - beq _0808349E - b _080834CC - .align 2, 0 -_08083494: .4byte gSpecialVar_0x8004 -_08083498: - cmp r0, 0x5 - beq _080834C0 - b _080834CC -_0808349E: - movs r3, 0x2 - ldr r1, _080834A8 @ =gLinkType - ldr r4, _080834AC @ =0x00002233 - b _080834C8 - .align 2, 0 -_080834A8: .4byte gLinkType -_080834AC: .4byte 0x00002233 -_080834B0: - movs r3, 0x2 - ldr r1, _080834B8 @ =gLinkType - ldr r4, _080834BC @ =0x00002244 - b _080834C8 - .align 2, 0 -_080834B8: .4byte gLinkType -_080834BC: .4byte 0x00002244 -_080834C0: - movs r3, 0x4 - movs r2, 0x4 - ldr r1, _080834DC @ =gLinkType - ldr r4, _080834E0 @ =0x00002255 -_080834C8: - adds r0, r4, 0 - strh r0, [r1] -_080834CC: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8082CD4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080834DC: .4byte gLinkType -_080834E0: .4byte 0x00002255 - thumb_func_end sub_808347C - - thumb_func_start sub_80834E4 -sub_80834E4: @ 80834E4 - push {lr} - ldr r1, _08083500 @ =gLinkType - ldr r2, _08083504 @ =0x00001133 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08083508 @ =gBattleTypeFlags - movs r0, 0 - strh r0, [r1] - movs r0, 0x2 - movs r1, 0x2 - bl sub_8082CD4 - pop {r0} - bx r0 - .align 2, 0 -_08083500: .4byte gLinkType -_08083504: .4byte 0x00001133 -_08083508: .4byte gBattleTypeFlags - thumb_func_end sub_80834E4 - - thumb_func_start sub_808350C -sub_808350C: @ 808350C - push {lr} - ldr r0, _0808352C @ =gScriptResult - movs r2, 0 - strh r2, [r0] - ldr r1, _08083530 @ =gLinkType - ldr r3, _08083534 @ =0x00003311 - adds r0, r3, 0 - strh r0, [r1] - ldr r0, _08083538 @ =gBattleTypeFlags - strh r2, [r0] - movs r0, 0x2 - movs r1, 0x4 - bl sub_8082CD4 - pop {r0} - bx r0 - .align 2, 0 -_0808352C: .4byte gScriptResult -_08083530: .4byte gLinkType -_08083534: .4byte 0x00003311 -_08083538: .4byte gBattleTypeFlags - thumb_func_end sub_808350C - - thumb_func_start sub_808353C -sub_808353C: @ 808353C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0808355C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - movs r1, 0x8 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08083560 - cmp r0, 0x1 - beq _080835BC - b _080835CE - .align 2, 0 -_0808355C: .4byte gTasks -_08083560: - ldr r0, _08083594 @ =gScriptResult - ldrh r0, [r0] - cmp r0, 0x1 - bne _08083586 - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - cmp r1, r0 - bge _08083586 - ldr r2, _08083598 @ =gLinkPlayers -_08083578: - ldrh r4, [r2, 0x1A] - cmp r4, 0x1 - beq _0808359C - adds r2, 0x1C - adds r1, 0x1 - cmp r1, r0 - blt _08083578 -_08083586: - bl EnableBothScriptContexts - adds r0, r5, 0 - bl DestroyTask - b _080835CE - .align 2, 0 -_08083594: .4byte gScriptResult -_08083598: .4byte gLinkPlayers -_0808359C: - ldr r1, _080835B4 @ =gScriptResult - movs r0, 0x7 - strh r0, [r1] - bl sub_8008480 - ldr r1, _080835B8 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - strh r4, [r0, 0x8] - b _080835CE - .align 2, 0 -_080835B4: .4byte gScriptResult -_080835B8: .4byte gTasks -_080835BC: - ldr r0, _080835D4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _080835CE - bl EnableBothScriptContexts - adds r0, r5, 0 - bl DestroyTask -_080835CE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080835D4: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_808353C - - thumb_func_start sub_80835D8 -sub_80835D8: @ 80835D8 - push {r4,lr} - ldr r4, _0808360C @ =sub_808353C - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - bne _08083604 - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _08083610 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0x8] -_08083604: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808360C: .4byte sub_808353C -_08083610: .4byte gTasks - thumb_func_end sub_80835D8 - - thumb_func_start sub_8083614 -sub_8083614: @ 8083614 - push {lr} - ldr r1, _08083630 @ =gLinkType - ldr r2, _08083634 @ =0x00004411 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08083638 @ =gBattleTypeFlags - movs r0, 0 - strh r0, [r1] - movs r0, 0x2 - movs r1, 0x4 - bl sub_8082CD4 - pop {r0} - bx r0 - .align 2, 0 -_08083630: .4byte gLinkType -_08083634: .4byte 0x00004411 -_08083638: .4byte gBattleTypeFlags - thumb_func_end sub_8083614 - - thumb_func_start sub_808363C -sub_808363C: @ 808363C - push {lr} - ldr r1, _08083658 @ =gLinkType - ldr r2, _0808365C @ =0x00006601 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08083660 @ =gBattleTypeFlags - movs r0, 0 - strh r0, [r1] - movs r0, 0x4 - movs r1, 0x4 - bl sub_8082CD4 - pop {r0} - bx r0 - .align 2, 0 -_08083658: .4byte gLinkType -_0808365C: .4byte 0x00006601 -_08083660: .4byte gBattleTypeFlags - thumb_func_end sub_808363C - - thumb_func_start sub_8083664 -sub_8083664: @ 8083664 - push {lr} - ldr r0, _08083678 @ =sub_8083710 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _0808367C - movs r0, 0xFF - b _08083700 - .align 2, 0 -_08083678: .4byte sub_8083710 -_0808367C: - ldr r0, _08083690 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - subs r0, 0x1 - cmp r0, 0x4 - bhi _080836F4 - lsls r0, 2 - ldr r1, _08083694 @ =_08083698 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08083690: .4byte gSpecialVar_0x8004 -_08083694: .4byte _08083698 - .align 2, 0 -_08083698: - .4byte _080836AC - .4byte _080836BC - .4byte _080836DC - .4byte _080836EC - .4byte _080836CC -_080836AC: - ldr r1, _080836B4 @ =gLinkType - ldr r2, _080836B8 @ =0x00002233 - b _080836F0 - .align 2, 0 -_080836B4: .4byte gLinkType -_080836B8: .4byte 0x00002233 -_080836BC: - ldr r1, _080836C4 @ =gLinkType - ldr r2, _080836C8 @ =0x00002244 - b _080836F0 - .align 2, 0 -_080836C4: .4byte gLinkType -_080836C8: .4byte 0x00002244 -_080836CC: - ldr r1, _080836D4 @ =gLinkType - ldr r2, _080836D8 @ =0x00002255 - b _080836F0 - .align 2, 0 -_080836D4: .4byte gLinkType -_080836D8: .4byte 0x00002255 -_080836DC: - ldr r1, _080836E4 @ =gLinkType - ldr r2, _080836E8 @ =0x00001111 - b _080836F0 - .align 2, 0 -_080836E4: .4byte gLinkType -_080836E8: .4byte 0x00001111 -_080836EC: - ldr r1, _08083704 @ =gLinkType - ldr r2, _08083708 @ =0x00003322 -_080836F0: - adds r0, r2, 0 - strh r0, [r1] -_080836F4: - ldr r0, _0808370C @ =sub_8083710 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 -_08083700: - pop {r1} - bx r1 - .align 2, 0 -_08083704: .4byte gLinkType -_08083708: .4byte 0x00003322 -_0808370C: .4byte sub_8083710 - thumb_func_end sub_8083664 - - thumb_func_start sub_8083710 -sub_8083710: @ 8083710 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0808373C @ =gTasks + 0x8 - adds r4, r1, r0 - movs r3, 0 - ldrsh r2, [r4, r3] - cmp r2, 0 - bne _08083744 - bl OpenLink - bl ResetLinkPlayers - ldr r0, _08083740 @ =sub_8083C50 - movs r1, 0x50 - bl CreateTask - b _08083750 - .align 2, 0 -_0808373C: .4byte gTasks + 0x8 -_08083740: .4byte sub_8083C50 -_08083744: - cmp r2, 0x9 - ble _08083750 - subs r0, 0x8 - adds r0, r1, r0 - ldr r1, _0808375C @ =sub_8083760 - str r1, [r0] -_08083750: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808375C: .4byte sub_8083760 - thumb_func_end sub_8083710 - - thumb_func_start sub_8083760 -sub_8083760: @ 8083760 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _080837A6 - bl IsLinkMaster - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08083798 - ldr r0, _08083790 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08083794 @ =sub_80837B4 - b _080837A4 - .align 2, 0 -_08083790: .4byte gTasks -_08083794: .4byte sub_80837B4 -_08083798: - ldr r0, _080837AC @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080837B0 @ =sub_80837EC -_080837A4: - str r0, [r1] -_080837A6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080837AC: .4byte gTasks -_080837B0: .4byte sub_80837EC - thumb_func_end sub_8083760 - - thumb_func_start sub_80837B4 -sub_80837B4: @ 80837B4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_800820C - adds r4, r0, 0 - bl GetLinkPlayerCount_2 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080837DE - bl sub_8007F4C - ldr r0, _080837E4 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080837E8 @ =sub_80837EC - str r0, [r1] -_080837DE: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080837E4: .4byte gTasks -_080837E8: .4byte sub_80837EC - thumb_func_end sub_80837B4 - - thumb_func_start sub_80837EC -sub_80837EC: @ 80837EC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0808381C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - bne _08083814 - bl IsLinkPlayerDataExchangeComplete - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08083814 - bl sub_800826C - bl sub_8007B14 - adds r0, r4, 0 - bl DestroyTask -_08083814: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808381C: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_80837EC - - thumb_func_start sub_8083820 -sub_8083820: @ 8083820 - push {lr} - bl InitSaveDialog - pop {r0} - bx r0 - thumb_func_end sub_8083820 - - thumb_func_start sub_808382C -sub_808382C: @ 808382C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08083850 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bls _08083846 - b _08083940 -_08083846: - lsls r0, 2 - ldr r1, _08083854 @ =_08083858 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08083850: .4byte gTasks -_08083854: .4byte _08083858 - .align 2, 0 -_08083858: - .4byte _08083870 - .4byte _08083890 - .4byte _080838A0 - .4byte _080838B0 - .4byte _080838B6 - .4byte _080838CC -_08083870: - movs r0, 0x1 - movs r1, 0 - bl fade_screen - ldr r1, _08083888 @ =gLinkType - ldr r2, _0808388C @ =0x00002211 - adds r0, r2, 0 - strh r0, [r1] - bl ClearLinkCallback_2 - b _080838BE - .align 2, 0 -_08083888: .4byte gLinkType -_0808388C: .4byte 0x00002211 -_08083890: - ldr r0, _0808389C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - b _080838BA - .align 2, 0 -_0808389C: .4byte gPaletteFade -_080838A0: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _08083940 - b _080838BE -_080838B0: - bl sub_800832C - b _080838BE -_080838B6: - ldr r0, _080838C8 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] -_080838BA: - cmp r0, 0 - bne _08083940 -_080838BE: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _08083940 - .align 2, 0 -_080838C8: .4byte gReceivedRemoteLinkPlayers -_080838CC: - ldr r0, _080838E4 @ =gLinkPlayers - ldr r0, [r0, 0x4] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080838E8 - movs r0, 0xE6 - lsls r0, 1 - bl current_map_music_set__default_for_battle - b _080838EE - .align 2, 0 -_080838E4: .4byte gLinkPlayers -_080838E8: - ldr r0, _08083900 @ =0x000001cb - bl current_map_music_set__default_for_battle -_080838EE: - ldr r0, _08083904 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x2 - beq _08083918 - cmp r0, 0x2 - bgt _08083908 - cmp r0, 0x1 - beq _0808390E - b _0808392E - .align 2, 0 -_08083900: .4byte 0x000001cb -_08083904: .4byte gSpecialVar_0x8004 -_08083908: - cmp r0, 0x5 - beq _08083924 - b _0808392E -_0808390E: - ldr r1, _08083914 @ =gBattleTypeFlags - movs r0, 0xA - b _0808392C - .align 2, 0 -_08083914: .4byte gBattleTypeFlags -_08083918: - ldr r1, _08083920 @ =gBattleTypeFlags - movs r0, 0xB - b _0808392C - .align 2, 0 -_08083920: .4byte gBattleTypeFlags -_08083924: - bl ReducePlayerPartyToThree - ldr r1, _08083948 @ =gBattleTypeFlags - movs r0, 0x4B -_0808392C: - strh r0, [r1] -_0808392E: - ldr r0, _0808394C @ =sub_800E7C4 - bl SetMainCallback2 - ldr r1, _08083950 @ =gMain - ldr r0, _08083954 @ =sub_8083958 - str r0, [r1, 0x8] - adds r0, r5, 0 - bl DestroyTask -_08083940: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083948: .4byte gBattleTypeFlags -_0808394C: .4byte sub_800E7C4 -_08083950: .4byte gMain -_08083954: .4byte sub_8083958 - thumb_func_end sub_808382C - - thumb_func_start sub_8083958 -sub_8083958: @ 8083958 - push {lr} - bl call_map_music_set_to_zero - bl LoadPlayerParty - bl SavePlayerBag - bl sub_810FEFC - ldr r0, _08083990 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x5 - beq _0808397E - ldr r0, _08083994 @ =gUnknown_03004860 - ldrb r1, [r0] - movs r0, 0x1 - eors r0, r1 - bl UpdateLinkBattleRecords -_0808397E: - ldr r0, _08083998 @ =gMain - ldr r1, _0808399C @ =sub_805465C - str r1, [r0, 0x8] - ldr r0, _080839A0 @ =sub_8071B28 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_08083990: .4byte gSpecialVar_0x8004 -_08083994: .4byte gUnknown_03004860 -_08083998: .4byte gMain -_0808399C: .4byte sub_805465C -_080839A0: .4byte sub_8071B28 - thumb_func_end sub_8083958 - - thumb_func_start sub_80839A4 -sub_80839A4: @ 80839A4 - push {lr} - ldr r0, _080839CC @ =gSpecialVar_0x8004 - ldrh r1, [r0] - subs r0, r1, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _080839B8 - cmp r1, 0x5 - bne _080839C0 -_080839B8: - bl LoadPlayerParty - bl SavePlayerBag -_080839C0: - movs r0, 0x7F - bl copy_saved_warp2_bank_and_enter_x_to_warp1 - pop {r0} - bx r0 - .align 2, 0 -_080839CC: .4byte gSpecialVar_0x8004 - thumb_func_end sub_80839A4 - - thumb_func_start sub_80839D0 -sub_80839D0: @ 80839D0 - push {lr} - bl sub_805559C - pop {r0} - bx r0 - thumb_func_end sub_80839D0 - - thumb_func_start sub_80839DC -sub_80839DC: @ 80839DC - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08083A00 @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _08083A20 - cmp r0, 0x1 - bgt _08083A04 - cmp r0, 0 - beq _08083A0E - b _08083A7E - .align 2, 0 -_08083A00: .4byte gTasks -_08083A04: - cmp r0, 0x2 - beq _08083A40 - cmp r0, 0x3 - beq _08083A68 - b _08083A7E -_08083A0E: - ldr r0, _08083A1C @ =gUnknown_081A490C - bl ShowFieldMessage - movs r0, 0x1 - strh r0, [r5, 0x8] - b _08083A7E - .align 2, 0 -_08083A1C: .4byte gUnknown_081A490C -_08083A20: - bl IsFieldMessageBoxHidden - lsls r0, 24 - cmp r0, 0 - beq _08083A7E - bl sub_8055574 - ldr r0, _08083A3C @ =gSpecialVar_0x8005 - ldrb r0, [r0] - bl sub_8007270 - movs r0, 0x2 - strh r0, [r5, 0x8] - b _08083A7E - .align 2, 0 -_08083A3C: .4byte gSpecialVar_0x8005 -_08083A40: - bl sub_80554F8 - cmp r0, 0x1 - beq _08083A52 - cmp r0, 0x1 - ble _08083A7E - cmp r0, 0x2 - beq _08083A62 - b _08083A7E -_08083A52: - bl HideFieldMessageBox - movs r0, 0 - strh r0, [r5, 0x8] - adds r0, r4, 0 - bl SwitchTaskToFollowupFunc - b _08083A7E -_08083A62: - movs r0, 0x3 - strh r0, [r5, 0x8] - b _08083A7E -_08083A68: - bl sub_8055588 - bl HideFieldMessageBox - bl MenuZeroFillScreen - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_08083A7E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80839DC - - thumb_func_start sub_8083A84 -sub_8083A84: @ 8083A84 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _08083AA8 @ =sub_80839DC - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - adds r2, r5, 0 - bl SetTaskFuncWithFollowupFunc - bl ScriptContext1_Stop - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083AA8: .4byte sub_80839DC - thumb_func_end sub_8083A84 - - thumb_func_start sub_8083AAC -sub_8083AAC: @ 8083AAC - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08083AD0 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08083AF0 - cmp r0, 0x1 - bgt _08083AD4 - cmp r0, 0 - beq _08083ADE - b _08083B34 - .align 2, 0 -_08083AD0: .4byte gTasks -_08083AD4: - cmp r0, 0x2 - beq _08083B04 - cmp r0, 0x3 - beq _08083B20 - b _08083B34 -_08083ADE: - bl ScriptContext2_Enable - movs r0, 0x1 - movs r1, 0 - bl fade_screen - bl ClearLinkCallback_2 - b _08083B14 -_08083AF0: - ldr r0, _08083B00 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08083B34 - b _08083B14 - .align 2, 0 -_08083B00: .4byte gPaletteFade -_08083B04: - ldr r1, _08083B1C @ =gUnknown_020297D8 - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] - bl m4aMPlayAllStop - bl sub_800832C -_08083B14: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _08083B34 - .align 2, 0 -_08083B1C: .4byte gUnknown_020297D8 -_08083B20: - ldr r0, _08083B3C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08083B34 - ldr r0, _08083B40 @ =sub_8047CD8 - bl SetMainCallback2 - adds r0, r5, 0 - bl DestroyTask -_08083B34: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083B3C: .4byte gReceivedRemoteLinkPlayers -_08083B40: .4byte sub_8047CD8 - thumb_func_end sub_8083AAC - - thumb_func_start sub_8083B44 -sub_8083B44: @ 8083B44 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8083B6C - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8083B44 - - thumb_func_start sub_8083B5C -sub_8083B5C: @ 8083B5C - push {lr} - ldr r0, _08083B68 @ =sub_8083B44 - bl sub_8083A84 - pop {r0} - bx r0 - .align 2, 0 -_08083B68: .4byte sub_8083B44 - thumb_func_end sub_8083B5C - - thumb_func_start sub_8083B6C -sub_8083B6C: @ 8083B6C - push {lr} - ldr r0, _08083B7C @ =sub_8083AAC - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08083B7C: .4byte sub_8083AAC - thumb_func_end sub_8083B6C - - thumb_func_start sub_8083B80 -sub_8083B80: @ 8083B80 - push {lr} - bl sub_8083B6C - bl ScriptContext1_Stop - pop {r0} - bx r0 - thumb_func_end sub_8083B80 - - thumb_func_start sub_8083B90 -sub_8083B90: @ 8083B90 - push {lr} - ldr r0, _08083BA4 @ =gLinkType - ldr r2, _08083BA8 @ =0x00002211 - adds r1, r2, 0 - strh r1, [r0] - ldr r0, _08083BAC @ =sub_808382C - bl sub_8083A84 - pop {r0} - bx r0 - .align 2, 0 -_08083BA4: .4byte gLinkType -_08083BA8: .4byte 0x00002211 -_08083BAC: .4byte sub_808382C - thumb_func_end sub_8083B90 - - thumb_func_start unref_sub_8083BB0 -unref_sub_8083BB0: @ 8083BB0 - push {r4,lr} - ldr r4, _08083BD4 @ =sub_80839DC - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08083BD8 @ =Task_RecordMixing_Main - adds r1, r4, 0 - bl SetTaskFuncWithFollowupFunc - bl ScriptContext1_Stop - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083BD4: .4byte sub_80839DC -_08083BD8: .4byte Task_RecordMixing_Main - thumb_func_end unref_sub_8083BB0 - - thumb_func_start sub_8083BDC -sub_8083BDC: @ 8083BDC - push {lr} - ldr r0, _08083BEC @ =gSpecialVar_0x8006 - ldrb r0, [r0] - ldr r1, _08083BF0 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl sub_8093130 - pop {r0} - bx r0 - .align 2, 0 -_08083BEC: .4byte gSpecialVar_0x8006 -_08083BF0: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music - thumb_func_end sub_8083BDC - - thumb_func_start sub_8083BF4 -sub_8083BF4: @ 8083BF4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08083C34 @ =gSpecialVar_0x8006 - strh r4, [r0] - ldr r0, _08083C38 @ =gStringVar1 - lsls r1, r4, 3 - subs r1, r4 - lsls r1, 2 - ldr r2, _08083C3C @ =gLinkPlayers + 0x8 - adds r1, r2 - bl StringCopy - adds r0, r4, 0 - bl sub_80934C4 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _08083C48 - ldr r0, _08083C40 @ =gStringVar2 - ldr r2, _08083C44 @ =gTrainerCardColorNames - subs r1, 0x1 - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl StringCopy - movs r0, 0x1 - b _08083C4A - .align 2, 0 -_08083C34: .4byte gSpecialVar_0x8006 -_08083C38: .4byte gStringVar1 -_08083C3C: .4byte gLinkPlayers + 0x8 -_08083C40: .4byte gStringVar2 -_08083C44: .4byte gTrainerCardColorNames -_08083C48: - movs r0, 0 -_08083C4A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8083BF4 - - thumb_func_start sub_8083C50 -sub_8083C50: @ 8083C50 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08083C98 @ =gTasks - adds r0, r1 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - lsls r1, 16 - movs r0, 0x96 - lsls r0, 17 - cmp r1, r0 - ble _08083C82 - bl CloseLink - ldr r0, _08083C9C @ =CB2_LinkError - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_08083C82: - ldr r0, _08083CA0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - beq _08083C90 - adds r0, r5, 0 - bl DestroyTask -_08083C90: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08083C98: .4byte gTasks -_08083C9C: .4byte CB2_LinkError -_08083CA0: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_8083C50 - - thumb_func_start sub_8083CA4 -sub_8083CA4: @ 8083CA4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08083CC4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08083CBC - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask -_08083CBC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083CC4: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_8083CA4 - - thumb_func_start unref_sub_8083CC8 -unref_sub_8083CC8: @ 8083CC8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_800832C - ldr r1, _08083CE8 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08083CEC @ =sub_8083CA4 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083CE8: .4byte gTasks -_08083CEC: .4byte sub_8083CA4 - thumb_func_end unref_sub_8083CC8 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/cable_club.h b/include/cable_club.h index 9e6a703e3..a2fe46b30 100644 --- a/include/cable_club.h +++ b/include/cable_club.h @@ -3,20 +3,22 @@ #include "task.h" -void sub_8082D4C(); -void sub_8082D60(u8, u8); -u16 sub_8082D9C(u8, u8); -u32 sub_8082DF4(u8); -u32 sub_8082E28(u8); -u32 sub_8082EB8(u8); -void sub_8082FEC(u8 taskId); -void sub_80833C4(u8 taskId); -void sub_8083418(u8 taskId); -u8 sub_8083444(u8 taskId); +void sub_808347C(u8 arg0); +void sub_80834E4(void); +void sub_808350C(void); +void sub_80835D8(void); +void sub_8083614(void); +void sub_808363C(void); u8 sub_8083664(void); -void sub_8083A84(TaskFunc); -s32 sub_8083BF4(u8 id); -void sub_8083C50(u8); -void sub_8083188(u8 taskId); +void sub_8083820(void); +void sub_80839A4(void); +void sub_80839D0(void); +void sub_8083A84(TaskFunc followupFunc); +void sub_8083B5C(void); +void sub_8083B80(void); +void sub_8083B90(void); +void sub_8083BDC(void); +bool32 sub_8083BF4(u8 linkPlayerIndex); +void sub_8083C50(u8 taskId); #endif // GUARD_CABLE_CLUB_H diff --git a/ld_script.txt b/ld_script.txt index 4f3ff093d..c640ad5cc 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -128,9 +128,7 @@ SECTIONS { src/field_fadetransition.o(.text); src/field_screen_effect.o(.text); src/battle_setup.o(.text); - asm/cable_club.o(.text); src/cable_club.o(.text); - asm/cable_club.o(.text_80830E4); src/mori_debug_menu.o(.text); src/trainer_see.o(.text); src/wild_encounter.o(.text); diff --git a/src/cable_club.c b/src/cable_club.c index 20b087f4e..b81905cc5 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -1,229 +1,350 @@ #include "global.h" +#include "battle.h" +#include "battle_records.h" #include "cable_club.h" #include "field_message_box.h" +#include "field_weather.h" #include "link.h" +#include "load_save.h" +#include "m4a.h" #include "main.h" +#include "menu.h" +#include "palette.h" +#include "record_mixing.h" +#include "rom4.h" #include "script.h" +#include "script_pokemon_80C4.h" #include "songs.h" #include "sound.h" +#include "start_menu.h" #include "string_util.h" +#include "strings2.h" #include "task.h" #include "text.h" #include "trainer_card.h" extern u16 gScriptResult; extern struct TrainerCard gTrainerCards[4]; - extern u8 gUnknown_03004860; extern u8 gFieldLinkPlayerCount; - -extern u8 gUnknown_081A4932[]; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; +extern u16 gBattleTypeFlags; +extern const u8 gUnknown_081A4932[]; extern const u8 gUnknown_081A4975[]; - +extern const u8 gUnknown_081A49B6[]; +extern const u8 gUnknown_081A490C[]; +extern const u8* const gTrainerCardColorNames[]; +extern struct +{ + u8 field0; + u8 field1; +} gUnknown_020297D8; + +static void sub_8082F20(u8 taskId); +static void sub_8082F68(u8 taskId); +static void sub_8082FEC(u8 taskId); +static void sub_808303C(u8 taskId); static void sub_80830E4(u8 taskId); +static void sub_8083188(u8 taskId); static void sub_8083288(u8 taskId); static void sub_8083314(u8 taskId); +static void sub_80833C4(u8 taskId); +static void sub_80833EC(u8 taskId); +static void sub_8083418(u8 taskId); +static bool8 sub_8083444(u8 taskId); +static void sub_808353C(u8 taskId); +static void sub_8083710(u8 taskId); +static void sub_8083760(u8 taskId); +static void sub_80837B4(u8 taskId); +static void sub_80837EC(u8 taskId); +static void sub_808382C(u8 taskId); +static void sub_8083958(void); +static void sub_80839DC(u8 taskId); +static void sub_8083AAC(u8 taskId); +static void sub_8083B44(u8 taskId); +static void sub_8083B6C(void); +static void sub_8083CA4(u8 taskId); + +extern void sub_80831F8(u8 taskId); +extern void call_map_music_set_to_zero(void); +extern void sub_810FEFC(void); +extern void sub_8047CD8(void); +extern void sub_805559C(void); +extern void sub_8055574(void); +extern s32 sub_80554F8(void); +extern void sub_805465C(void); + +static void sub_8082CD4(u8 arg0, u8 arg1) +{ + if (FindTaskIdByFunc(sub_8082F20) == 0xFF) + { + u8 taskId = CreateTask(sub_8082F20, 80); + + gTasks[taskId].data[1] = arg0; + gTasks[taskId].data[2] = arg1; + } +} + +static void sub_8082D18(u32 value) +{ + ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEFT_ALIGN, 1); + MenuDrawTextWindow(18, 10, 28, 13); + sub_8072BD8(gOtherText_PLink, 19, 11, 72); +} + +static void sub_8082D4C() +{ + MenuZeroFillWindowRect(18, 10, 28, 13); +} + +static void sub_8082D60(u8 taskId, u8 arg1) +{ + s16 *data = &gTasks[taskId].data[3]; + + if (arg1 != *data) + { + if (arg1 <= 1) + sub_8082D4C(); + else + sub_8082D18(arg1); + *data = arg1; + } +} + +static u32 sub_8082D9C(u8 minPlayers, u8 maxPlayers) +{ + int playerCount; + + switch (GetLinkPlayerDataExchangeStatusTimed()) + { + case EXCHANGE_COMPLETE: + playerCount = GetLinkPlayerCount_2(); + if (minPlayers <= playerCount && playerCount <= maxPlayers) + return 1; + ConvertIntToDecimalStringN(gStringVar1, playerCount, STR_CONV_MODE_LEFT_ALIGN, 1); + return 4; + case EXCHANGE_TIMED_OUT: + return 0; + case EXCHANGE_IN_PROGRESS: + return 3; + default: + return 0; + } +} + +static bool32 sub_8082DF4(u8 taskId) +{ + if (HasLinkErrorOccurred() == TRUE) + { + gTasks[taskId].func = sub_8083418; + return TRUE; + } + return FALSE; +} + +static bool32 sub_8082E28(u8 taskId) +{ + if ((gMain.newKeys & B_BUTTON) + && IsLinkConnectionEstablished() == FALSE) + { + gTasks[taskId].func = sub_80833EC; + return TRUE; + } + return FALSE; +} + +static bool32 sub_8082E6C(u8 taskId) +{ + if (IsLinkConnectionEstablished()) + SetSuppressLinkErrorMessage(TRUE); + + if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].func = sub_80833EC; + return TRUE; + } + return FALSE; +} -void sub_808303C(u8 taskId) { - s32 linkPlayerCount; - s16 *taskData; +static bool32 sub_8082EB8(u8 taskId) +{ + if (GetSioMultiSI() == 1) + { + gTasks[taskId].func = sub_8083418; + return TRUE; + } + return FALSE; +} + +void unref_sub_8082EEC(u8 taskId) +{ + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 10) + { + sub_8007E9C(2); + DestroyTask(taskId); + } +} + +static void sub_8082F20(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + OpenLinkTimed(); + sub_80082EC(); + ResetLinkPlayers(); + } + else if (data[0] > 9) + { + gTasks[taskId].func = sub_8082F68; + } + data[0]++; +} - taskData = gTasks[taskId].data; +static void sub_8082F68(u8 taskId) +{ + u32 playerCount = GetLinkPlayerCount_2(); - linkPlayerCount = GetLinkPlayerCount_2(); + if (sub_8082E28(taskId) == TRUE + || sub_8082E6C(taskId) == TRUE + || playerCount < 2) + return; - if (sub_8082E28(taskId) == 1 || - sub_8082EB8(taskId) == 1 || - sub_8082DF4(taskId) == 1) + SetSuppressLinkErrorMessage(TRUE); + gTasks[taskId].data[3] = 0; + if (IsLinkMaster() == TRUE) { + PlaySE(SE_PIN); + ShowFieldAutoScrollMessage(gUnknown_081A4932); + gTasks[taskId].func = sub_8082FEC; + } + else + { + PlaySE(SE_BOO); + ShowFieldAutoScrollMessage(gUnknown_081A49B6); + gTasks[taskId].func = sub_80831F8; + } +} + +static void sub_8082FEC(u8 taskId) +{ + if (sub_8082E28(taskId) == TRUE + || sub_8082EB8(taskId) == TRUE + || sub_8082DF4(taskId) == TRUE) return; + + if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) + { + gTasks[taskId].data[3] = 0; + gTasks[taskId].func = sub_808303C; } +} + +static void sub_808303C(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + s32 linkPlayerCount = GetLinkPlayerCount_2(); + + if (sub_8082E28(taskId) == TRUE + || sub_8082EB8(taskId) == TRUE + || sub_8082DF4(taskId) == TRUE) + return; sub_8082D60(taskId, linkPlayerCount); if (!(gMain.newKeys & A_BUTTON)) - { return; - } #if ENGLISH if (linkPlayerCount < taskData[1]) - { return; - } sub_80081C8(linkPlayerCount); sub_8082D4C(); - ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5 - ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975); + ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); + ShowFieldAutoScrollMessage((u8 *)gUnknown_081A4975); gTasks[taskId].func = sub_80830E4; #elif GERMAN - if ((gLinkType == 0x2255 && (u32) linkPlayerCount > 1) || - (gLinkType != 0x2255 && taskData[1] <= linkPlayerCount)) + if ((gLinkType == 0x2255 && (u32)linkPlayerCount > 1) + || (gLinkType != 0x2255 && taskData[1] <= linkPlayerCount)) { sub_80081C8(linkPlayerCount); sub_8082D4C(); - ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5 - ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975); + ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); + ShowFieldAutoScrollMessage((u8 *)gUnknown_081A4975); gTasks[taskId].func = sub_80830E4; } #endif } -#ifdef NONMATCHING -static void sub_80830E4(u8 taskId) { - if (sub_8082E28(taskId) == 1 || - sub_8082EB8(taskId) == 1 || - sub_8082DF4(taskId) == 1 || - GetFieldMessageBoxMode()) - { +static void sub_80830E4(u8 taskId) +{ + if (sub_8082E28(taskId) == TRUE + || sub_8082EB8(taskId) == TRUE + || sub_8082DF4(taskId) == TRUE) return; - } - if (sub_800820C() == GetLinkPlayerCount_2() && - !(gMain.heldKeys & B_BUTTON)) + if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN) { - ShowFieldAutoScrollMessage(gUnknown_081A4932); - gTasks[taskId].func = sub_8082FEC; - return; + if (sub_800820C() != GetLinkPlayerCount_2()) + { + ShowFieldAutoScrollMessage(gUnknown_081A4932); + gTasks[taskId].func = sub_8082FEC; + } + else if (gMain.heldKeys & B_BUTTON) + { + ShowFieldAutoScrollMessage(gUnknown_081A4932); + gTasks[taskId].func = sub_8082FEC; + } + else if (gMain.heldKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_8007F4C(); + gTasks[taskId].func = sub_8083188; + } } - - if (gMain.heldKeys & A_BUTTON) - { - PlaySE(SE_SELECT); - sub_8007F4C(); - gTasks[(u32) taskId].func = sub_8083188; - } -} -#else -__attribute__((naked)) -static void sub_80830E4(u8 taskId) { - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - adds r6, r5, 0\n\ - adds r0, r5, 0\n\ - bl sub_8082E28\n\ - cmp r0, 0x1\n\ - beq _08083178\n\ - adds r0, r5, 0\n\ - bl sub_8082EB8\n\ - cmp r0, 0x1\n\ - beq _08083178\n\ - adds r0, r5, 0\n\ - bl sub_8082DF4\n\ - cmp r0, 0x1\n\ - beq _08083178\n\ - bl GetFieldMessageBoxMode\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _08083178\n\ - bl sub_800820C\n\ - adds r4, r0, 0\n\ - bl GetLinkPlayerCount_2\n\ - lsls r4, 24\n\ - lsls r0, 24\n\ - cmp r4, r0\n\ - bne _08083132\n\ - ldr r0, _08083148 @ =gMain\n\ - ldrh r1, [r0, 0x2C]\n\ - movs r0, 0x2\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08083158\n\ -_08083132:\n\ - ldr r0, _0808314C @ =gUnknown_081A4932\n\ - bl ShowFieldAutoScrollMessage\n\ - ldr r1, _08083150 @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _08083154 @ =sub_8082FEC\n\ - str r1, [r0]\n\ - b _08083178\n\ - .align 2, 0\n\ -_08083148: .4byte gMain\n\ -_0808314C: .4byte gUnknown_081A4932\n\ -_08083150: .4byte gTasks\n\ -_08083154: .4byte sub_8082FEC\n\ -_08083158:\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08083178\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - bl sub_8007F4C\n\ - ldr r0, _08083180 @ =gTasks\n\ - lsls r1, r6, 2\n\ - adds r1, r6\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _08083184 @ =sub_8083188\n\ - str r0, [r1]\n\ -_08083178:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08083180: .4byte gTasks\n\ -_08083184: .4byte sub_8083188\n\ - .syntax divided\n"); } -#endif - -void sub_8083188(u8 taskId) { - u8 local1, local2; - u16 *result; - local1 = gTasks[taskId].data[1]; - local2 = gTasks[taskId].data[2]; +static void sub_8083188(u8 taskId) +{ + u8 local1 = gTasks[taskId].data[1]; + u8 local2 = gTasks[taskId].data[2]; - - if (sub_8082DF4(taskId) == 1 || - sub_8083444(taskId) == 1) - { + if (sub_8082DF4(taskId) == TRUE + || sub_8083444(taskId) == TRUE) return; - } if (GetLinkPlayerCount_2() != sub_800820C()) { gTasks[taskId].func = sub_8083418; - return; } - - result = &gScriptResult; - *result = sub_8082D9C(local1, local2); - if (*result) + else { - gTasks[taskId].func = sub_8083288; + gScriptResult = sub_8082D9C(local1, local2); + if (gScriptResult != 0) + gTasks[taskId].func = sub_8083288; } } -void sub_80831F8(u8 taskId) { +void sub_80831F8(u8 taskId) +{ u8 local1, local2; - u16 *result; local1 = gTasks[taskId].data[1]; local2 = gTasks[taskId].data[2]; - if (sub_8082E28(taskId) == 1 || - sub_8082DF4(taskId) == 1) - { + if (sub_8082E28(taskId) == TRUE + || sub_8082DF4(taskId) == TRUE) return; - } - result = &gScriptResult; - *result = sub_8082D9C(local1, local2); - if (*result == 0) - { + gScriptResult = sub_8082D9C(local1, local2); + if (gScriptResult == 0) return; - } - - - if (*result == 3) + if (gScriptResult == 3) { sub_800832C(); HideFieldMessageBox(); @@ -234,16 +355,15 @@ void sub_80831F8(u8 taskId) { gFieldLinkPlayerCount = GetLinkPlayerCount_2(); gUnknown_03004860 = GetMultiplayerId(); sub_80081C8(gFieldLinkPlayerCount); - sub_8093390((struct TrainerCard *) gBlockSendBuffer); + sub_8093390((struct TrainerCard *)gBlockSendBuffer); gTasks[taskId].func = sub_8083314; } } -static void sub_8083288(u8 taskId) { - if (sub_8082DF4(taskId) == 1) - { +static void sub_8083288(u8 taskId) +{ + if (sub_8082DF4(taskId) == TRUE) return; - } if (gScriptResult == 3) { @@ -256,26 +376,22 @@ static void sub_8083288(u8 taskId) { gFieldLinkPlayerCount = GetLinkPlayerCount_2(); gUnknown_03004860 = GetMultiplayerId(); sub_80081C8(gFieldLinkPlayerCount); - sub_8093390((struct TrainerCard *) gBlockSendBuffer); + sub_8093390((struct TrainerCard *)gBlockSendBuffer); gTasks[taskId].func = sub_8083314; sub_8007E9C(2); } } -static void sub_8083314(u8 taskId) { +static void sub_8083314(u8 taskId) +{ u8 index; - struct TrainerCard *trainerCards; - if (sub_8082DF4(taskId) == 1) - { + if (sub_8082DF4(taskId) == TRUE) return; - } if (GetBlockReceivedStatus() != sub_8008198()) - { return; - } index = 0; trainerCards = gTrainerCards; @@ -296,14 +412,12 @@ static void sub_8083314(u8 taskId) { u16 linkType; linkType = gLinkType; // FIXME: sub_8082D4C doesn't take any arguments - sub_8082D4C(0x00004411, linkType); + sub_8082D4C(0x4411, linkType); #elif GERMAN if (gLinkType != 0x4411) { if (gLinkType == 0x6601) - { deUnkValue2 = 1; - } } sub_8082D4C(); #endif @@ -315,3 +429,477 @@ static void sub_8083314(u8 taskId) { sub_800832C(); gTasks[taskId].func = sub_80833C4; } + +static void sub_80833C4(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers == FALSE) + { + sub_8082D4C(); + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +static void sub_80833EC(u8 taskId) +{ + gScriptResult = 5; + sub_8082D4C(); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +static void sub_8083418(u8 taskId) +{ + gScriptResult = 6; + sub_8082D4C(); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +static bool8 sub_8083444(u8 taskId) +{ + gTasks[taskId].data[4]++; + if (gTasks[taskId].data[4] > 600) + { + gTasks[taskId].func = sub_8083418; + return TRUE; + } + + return FALSE; +} + +void sub_808347C(u8 arg0) +{ + u32 r3 = 2; + u32 r2 = 2; + + switch (gSpecialVar_0x8004) + { + case 1: + r3 = 2; + gLinkType = 0x2233; + break; + case 2: + r3 = 2; + gLinkType = 0x2244; + break; + case 5: + r3 = 4; + r2 = 4; + gLinkType = 0x2255; + break; + } + + sub_8082CD4(r3, r2); +} + +void sub_80834E4(void) +{ + gLinkType = 0x1133; + gBattleTypeFlags = 0; + sub_8082CD4(2, 2); +} + +void sub_808350C(void) +{ + gScriptResult = 0; + gLinkType = 0x3311; + gBattleTypeFlags = 0; + sub_8082CD4(2, 4); +} + +static void sub_808353C(u8 taskId) +{ + int playerCount; + int i; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (gScriptResult == 1) + { + playerCount = GetLinkPlayerCount(); + for (i = 0; i < playerCount; i++) + { + if (gLinkPlayers[i].language == LANGUAGE_JAPANESE) + { + gScriptResult = 7; + sub_8008480(); + gTasks[taskId].data[0] = 1; + return; + } + } + } + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + case 1: + if (gReceivedRemoteLinkPlayers == FALSE) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } + break; + } +} + +void sub_80835D8(void) +{ + int taskId = FindTaskIdByFunc(sub_808353C); + + if (taskId == 0xFF) + { + taskId = CreateTask(sub_808353C, 80); + gTasks[taskId].data[0] = 0; + } +} + +void sub_8083614(void) +{ + gLinkType = 0x4411; + gBattleTypeFlags = 0; + sub_8082CD4(2, 4); +} + +void sub_808363C(void) +{ + gLinkType = 0x6601; + gBattleTypeFlags = 0; + sub_8082CD4(4, 4); +} + +u8 sub_8083664(void) +{ + if (FuncIsActiveTask(sub_8083710) != FALSE) + return 0xFF; + + switch (gSpecialVar_0x8004) + { + case 1: + gLinkType = 0x2233; + break; + case 2: + gLinkType = 0x2244; + break; + case 5: + gLinkType = 0x2255; + break; + case 3: + gLinkType = 0x1111; + break; + case 4: + gLinkType = 0x3322; + break; + } + + return CreateTask(sub_8083710, 80); +} + +static void sub_8083710(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + OpenLink(); + ResetLinkPlayers(); + CreateTask(sub_8083C50, 80); + } + else if (data[0] >= 10) + { + gTasks[taskId].func = sub_8083760; + } + data[0]++; +} + +static void sub_8083760(u8 taskId) +{ + if (GetLinkPlayerCount_2() >= 2) + { + if (IsLinkMaster() == TRUE) + gTasks[taskId].func = sub_80837B4; + else + gTasks[taskId].func = sub_80837EC; + } +} + +static void sub_80837B4(u8 taskId) +{ + if (sub_800820C() == GetLinkPlayerCount_2()) + { + sub_8007F4C(); + gTasks[taskId].func = sub_80837EC; + } +} + +static void sub_80837EC(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers == TRUE + && IsLinkPlayerDataExchangeComplete() == TRUE) + { + sub_800826C(); + sub_8007B14(); + DestroyTask(taskId); + } +} + +void sub_8083820(void) +{ + InitSaveDialog(); +} + +static void sub_808382C(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + fade_screen(1, 0); + gLinkType = 0x2211; + ClearLinkCallback_2(); + task->data[0]++; + break; + case 1: + if (!gPaletteFade.active) + task->data[0]++; + break; + case 2: + task->data[1]++; + if (task->data[1] > 20) + task->data[0]++; + break; + case 3: + sub_800832C(); + task->data[0]++; + break; + case 4: + if (!gReceivedRemoteLinkPlayers) + task->data[0]++; + break; + case 5: + if (gLinkPlayers[0].trainerId & 1) + current_map_music_set__default_for_battle(BGM_BATTLE32); + else + current_map_music_set__default_for_battle(BGM_BATTLE20); + + switch (gSpecialVar_0x8004) + { + case 1: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK; + break; + case 2: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE; + break; + case 5: + ReducePlayerPartyToThree(); + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI; + break; + } + + SetMainCallback2(sub_800E7C4); + gMain.savedCallback = sub_8083958; + DestroyTask(taskId); + break; + } +} + +static void sub_8083958(void) +{ + call_map_music_set_to_zero(); + LoadPlayerParty(); + SavePlayerBag(); + sub_810FEFC(); + + if (gSpecialVar_0x8004 != 5) + UpdateLinkBattleRecords(gUnknown_03004860 ^ 1); + + gMain.savedCallback = sub_805465C; + SetMainCallback2(sub_8071B28); +} + +void sub_80839A4(void) +{ + if (gSpecialVar_0x8004 == 1 || gSpecialVar_0x8004 == 2 || gSpecialVar_0x8004 == 5) + { + LoadPlayerParty(); + SavePlayerBag(); + } + copy_saved_warp2_bank_and_enter_x_to_warp1(0x7F); +} + +void sub_80839D0(void) +{ + sub_805559C(); +} + +static void sub_80839DC(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + ShowFieldMessage(gUnknown_081A490C); + task->data[0] = 1; + break; + case 1: + if (IsFieldMessageBoxHidden()) + { + sub_8055574(); + sub_8007270(gSpecialVar_0x8005); + task->data[0] = 2; + } + break; + case 2: + switch (sub_80554F8()) + { + case 0: + break; + case 1: + HideFieldMessageBox(); + task->data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 2: + task->data[0] = 3; + break; + } + break; + case 3: + sub_8055588(); + HideFieldMessageBox(); + MenuZeroFillScreen(); + DestroyTask(taskId); + EnableBothScriptContexts(); + break; + } +} + +void sub_8083A84(TaskFunc followupFunc) +{ + u8 taskId = CreateTask(sub_80839DC, 80); + SetTaskFuncWithFollowupFunc(taskId, sub_80839DC, followupFunc); + ScriptContext1_Stop(); +} + +static void sub_8083AAC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + ScriptContext2_Enable(); + fade_screen(1, 0); + ClearLinkCallback_2(); + task->data[0]++; + break; + case 1: + if (!gPaletteFade.active) + task->data[0]++; + break; + case 2: + gUnknown_020297D8.field0 = 0; + gUnknown_020297D8.field1 = 0; + m4aMPlayAllStop(); + sub_800832C(); + task->data[0]++; + break; + case 3: + if (!gReceivedRemoteLinkPlayers) + { + SetMainCallback2(sub_8047CD8); + DestroyTask(taskId); + } + break; + } +} + +static void sub_8083B44(u8 taskId) +{ + sub_8083B6C(); + DestroyTask(taskId); +} + +void sub_8083B5C(void) +{ + sub_8083A84(sub_8083B44); +} + +static void sub_8083B6C(void) +{ + CreateTask(sub_8083AAC, 80); +} + +void sub_8083B80(void) +{ + sub_8083B6C(); + ScriptContext1_Stop(); +} + +void sub_8083B90(void) +{ + gLinkType = 0x2211; + sub_8083A84(sub_808382C); +} + +void unref_sub_8083BB0(void) +{ + u8 taskId = CreateTask(sub_80839DC, 80); + SetTaskFuncWithFollowupFunc(taskId, sub_80839DC, Task_RecordMixing_Main); + ScriptContext1_Stop(); +} + +void sub_8083BDC(void) +{ + sub_8093130(gSpecialVar_0x8006, c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +bool32 sub_8083BF4(u8 linkPlayerIndex) +{ + u32 trainerCardColorIndex; + + gSpecialVar_0x8006 = linkPlayerIndex; + StringCopy(gStringVar1, gLinkPlayers[linkPlayerIndex].name); + + trainerCardColorIndex = sub_80934C4(linkPlayerIndex); + if (trainerCardColorIndex == 0) + return FALSE; + + StringCopy(gStringVar2, gTrainerCardColorNames[trainerCardColorIndex - 1]); + return TRUE; +} + +void sub_8083C50(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[0]++; + if (task->data[0] > 300) + { + CloseLink(); + SetMainCallback2(CB2_LinkError); + DestroyTask(taskId); + } + + if (gReceivedRemoteLinkPlayers) + DestroyTask(taskId); +} + +static void sub_8083CA4(u8 taskId) +{ + if (!gReceivedRemoteLinkPlayers) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +void unref_sub_8083CC8(u8 taskId) +{ + sub_800832C(); + gTasks[taskId].func = sub_8083CA4; +}
\ No newline at end of file |