diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-02-29 16:31:57 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-02-29 16:31:57 -0500 |
commit | 21dddd57605cf4cbc31f0a903cc50a8f588817ff (patch) | |
tree | dd7975a6335fc837530b10dfdbe190da5d135137 | |
parent | 9b9ae3d3374dd61870d47f025ffc0346a0b6839c (diff) |
Finish cable_club.c
-rw-r--r-- | asm/cable_club.s | 1504 | ||||
-rw-r--r-- | common_syms/cable_club.txt | 1 | ||||
-rw-r--r-- | data/specials.inc | 2 | ||||
-rw-r--r-- | include/battle_records.h | 1 | ||||
-rw-r--r-- | include/event_scripts.h | 1 | ||||
-rw-r--r-- | include/link.h | 7 | ||||
-rw-r--r-- | include/overworld.h | 6 | ||||
-rw-r--r-- | include/quest_log.h | 1 | ||||
-rw-r--r-- | include/union_room.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/cable_club.c | 579 | ||||
-rw-r--r-- | sym_common.txt | 6 |
12 files changed, 595 insertions, 1515 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s deleted file mode 100644 index 9bf812bf0..000000000 --- a/asm/cable_club.s +++ /dev/null @@ -1,1504 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8080F78 -sub_8080F78: @ 8080F78 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _08080FAC @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08080FA6 - ldr r0, _08080FB0 @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r0 - ldrh r0, [r4, 0x12] - bl sub_80807E8 - bl EnableBothScriptContexts - ldrb r0, [r4, 0x12] - bl RemoveWindow - adds r0, r5, 0 - bl DestroyTask -_08080FA6: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08080FAC: .4byte gReceivedRemoteLinkPlayers -_08080FB0: .4byte gTasks - thumb_func_end sub_8080F78 - - thumb_func_start sub_8080FB4 -sub_8080FB4: @ 8080FB4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08080FE8 @ =gSpecialVar_Result - movs r0, 0x5 - strh r0, [r1] - ldr r1, _08080FEC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0, 0x12] - bl sub_80807E8 - bl HideFieldMessageBox - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08080FE8: .4byte gSpecialVar_Result -_08080FEC: .4byte gTasks - thumb_func_end sub_8080FB4 - - thumb_func_start sub_8080FF0 -sub_8080FF0: @ 8080FF0 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _08081024 @ =gSpecialVar_Result - movs r0, 0x6 - strh r0, [r1] - ldr r1, _08081028 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrh r0, [r0, 0x12] - bl sub_80807E8 - bl HideFieldMessageBox - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08081024: .4byte gSpecialVar_Result -_08081028: .4byte gTasks - thumb_func_end sub_8080FF0 - - thumb_func_start sub_808102C -sub_808102C: @ 808102C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08081050 @ =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 _08081054 - movs r0, 0 - b _0808105A - .align 2, 0 -_08081050: .4byte gTasks -_08081054: - ldr r0, _08081060 @ =sub_8080FF0 - str r0, [r2] - movs r0, 0x1 -_0808105A: - pop {r1} - bx r1 - .align 2, 0 -_08081060: .4byte sub_8080FF0 - thumb_func_end sub_808102C - - thumb_func_start TryBattleLinkup -TryBattleLinkup: @ 8081064 - push {r4,lr} - movs r3, 0x2 - movs r2, 0x2 - ldr r0, _0808107C @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x2 - beq _08081098 - cmp r0, 0x2 - bgt _08081080 - cmp r0, 0x1 - beq _08081086 - b _080810B4 - .align 2, 0 -_0808107C: .4byte gSpecialVar_0x8004 -_08081080: - cmp r0, 0x5 - beq _080810A8 - b _080810B4 -_08081086: - movs r3, 0x2 - ldr r1, _08081090 @ =gLinkType - ldr r4, _08081094 @ =0x00002233 - b _080810B0 - .align 2, 0 -_08081090: .4byte gLinkType -_08081094: .4byte 0x00002233 -_08081098: - movs r3, 0x2 - ldr r1, _080810A0 @ =gLinkType - ldr r4, _080810A4 @ =0x00002244 - b _080810B0 - .align 2, 0 -_080810A0: .4byte gLinkType -_080810A4: .4byte 0x00002244 -_080810A8: - movs r3, 0x4 - movs r2, 0x4 - ldr r1, _080810C4 @ =gLinkType - ldr r4, _080810C8 @ =0x00002255 -_080810B0: - adds r0, r4, 0 - strh r0, [r1] -_080810B4: - adds r0, r3, 0 - adds r1, r2, 0 - bl sub_8080748 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080810C4: .4byte gLinkType -_080810C8: .4byte 0x00002255 - thumb_func_end TryBattleLinkup - - thumb_func_start TryTradeLinkup -TryTradeLinkup: @ 80810CC - push {lr} - ldr r1, _080810E8 @ =gLinkType - ldr r2, _080810EC @ =0x00001133 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _080810F0 @ =gBattleTypeFlags - movs r0, 0 - str r0, [r1] - movs r0, 0x2 - movs r1, 0x2 - bl sub_8080748 - pop {r0} - bx r0 - .align 2, 0 -_080810E8: .4byte gLinkType -_080810EC: .4byte 0x00001133 -_080810F0: .4byte gBattleTypeFlags - thumb_func_end TryTradeLinkup - - thumb_func_start sub_80810F4 -sub_80810F4: @ 80810F4 - push {lr} - ldr r1, _08081118 @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] - ldr r1, _0808111C @ =gLinkType - ldr r2, _08081120 @ =0x00003311 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08081124 @ =gBattleTypeFlags - movs r0, 0 - str r0, [r1] - movs r0, 0x2 - movs r1, 0x4 - bl sub_8080748 - pop {r0} - bx r0 - .align 2, 0 -_08081118: .4byte gSpecialVar_Result -_0808111C: .4byte gLinkType -_08081120: .4byte 0x00003311 -_08081124: .4byte gBattleTypeFlags - thumb_func_end sub_80810F4 - - thumb_func_start sub_8081128 -sub_8081128: @ 8081128 - push {lr} - ldr r1, _08081144 @ =gLinkType - ldr r2, _08081148 @ =0x00006601 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _0808114C @ =gBattleTypeFlags - movs r0, 0 - str r0, [r1] - movs r0, 0x4 - movs r1, 0x4 - bl sub_8080748 - pop {r0} - bx r0 - .align 2, 0 -_08081144: .4byte gLinkType -_08081148: .4byte 0x00006601 -_0808114C: .4byte gBattleTypeFlags - thumb_func_end sub_8081128 - - thumb_func_start sub_8081150 -sub_8081150: @ 8081150 - push {lr} - ldr r0, _08081164 @ =sub_80811FC - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _08081168 - movs r0, 0xFF - b _080811EC - .align 2, 0 -_08081164: .4byte sub_80811FC -_08081168: - ldr r0, _0808117C @ =gSpecialVar_0x8004 - ldrh r0, [r0] - subs r0, 0x1 - cmp r0, 0x4 - bhi _080811E0 - lsls r0, 2 - ldr r1, _08081180 @ =_08081184 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0808117C: .4byte gSpecialVar_0x8004 -_08081180: .4byte _08081184 - .align 2, 0 -_08081184: - .4byte _08081198 - .4byte _080811A8 - .4byte _080811C8 - .4byte _080811D8 - .4byte _080811B8 -_08081198: - ldr r1, _080811A0 @ =gLinkType - ldr r2, _080811A4 @ =0x00002233 - b _080811DC - .align 2, 0 -_080811A0: .4byte gLinkType -_080811A4: .4byte 0x00002233 -_080811A8: - ldr r1, _080811B0 @ =gLinkType - ldr r2, _080811B4 @ =0x00002244 - b _080811DC - .align 2, 0 -_080811B0: .4byte gLinkType -_080811B4: .4byte 0x00002244 -_080811B8: - ldr r1, _080811C0 @ =gLinkType - ldr r2, _080811C4 @ =0x00002255 - b _080811DC - .align 2, 0 -_080811C0: .4byte gLinkType -_080811C4: .4byte 0x00002255 -_080811C8: - ldr r1, _080811D0 @ =gLinkType - ldr r2, _080811D4 @ =0x00001111 - b _080811DC - .align 2, 0 -_080811D0: .4byte gLinkType -_080811D4: .4byte 0x00001111 -_080811D8: - ldr r1, _080811F0 @ =gLinkType - ldr r2, _080811F4 @ =0x00003322 -_080811DC: - adds r0, r2, 0 - strh r0, [r1] -_080811E0: - ldr r0, _080811F8 @ =sub_80811FC - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 -_080811EC: - pop {r1} - bx r1 - .align 2, 0 -_080811F0: .4byte gLinkType -_080811F4: .4byte 0x00003322 -_080811F8: .4byte sub_80811FC - thumb_func_end sub_8081150 - - thumb_func_start sub_80811FC -sub_80811FC: @ 80811FC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08081228 @ =gTasks+0x8 - adds r4, r1, r0 - movs r3, 0 - ldrsh r2, [r4, r3] - cmp r2, 0 - bne _08081230 - bl OpenLink - bl ResetLinkPlayers - ldr r0, _0808122C @ =sub_8081A90 - movs r1, 0x50 - bl CreateTask - b _0808123C - .align 2, 0 -_08081228: .4byte gTasks+0x8 -_0808122C: .4byte sub_8081A90 -_08081230: - cmp r2, 0x9 - ble _0808123C - subs r0, 0x8 - adds r0, r1, r0 - ldr r1, _08081248 @ =sub_808124C - str r1, [r0] -_0808123C: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08081248: .4byte sub_808124C - thumb_func_end sub_80811FC - - thumb_func_start sub_808124C -sub_808124C: @ 808124C - 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 _08081292 - bl IsLinkMaster - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08081284 - ldr r0, _0808127C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _08081280 @ =sub_80812A0 - b _08081290 - .align 2, 0 -_0808127C: .4byte gTasks -_08081280: .4byte sub_80812A0 -_08081284: - ldr r0, _08081298 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _0808129C @ =sub_80812D8 -_08081290: - str r0, [r1] -_08081292: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08081298: .4byte gTasks -_0808129C: .4byte sub_80812D8 - thumb_func_end sub_808124C - - thumb_func_start sub_80812A0 -sub_80812A0: @ 80812A0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - bl GetSavedPlayerCount - adds r4, r0, 0 - bl GetLinkPlayerCount_2 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _080812CA - bl CheckShouldAdvanceLinkState - ldr r0, _080812D0 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080812D4 @ =sub_80812D8 - str r0, [r1] -_080812CA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080812D0: .4byte gTasks -_080812D4: .4byte sub_80812D8 - thumb_func_end sub_80812A0 - - thumb_func_start sub_80812D8 -sub_80812D8: @ 80812D8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08081308 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0x1 - bne _08081300 - bl IsLinkPlayerDataExchangeComplete - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08081300 - bl sub_800A9A4 - bl sub_8009FE8 - adds r0, r4, 0 - bl DestroyTask -_08081300: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08081308: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_80812D8 - - thumb_func_start sub_808130C -sub_808130C: @ 808130C - push {lr} - bl Field_AskSaveTheGame - pop {r0} - bx r0 - thumb_func_end sub_808130C - - thumb_func_start sub_8081318 -sub_8081318: @ 8081318 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0808133C @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x5 - bls _08081332 - b _0808143A -_08081332: - lsls r0, 2 - ldr r1, _08081340 @ =_08081344 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0808133C: .4byte gTasks -_08081340: .4byte _08081344 - .align 2, 0 -_08081344: - .4byte _0808135C - .4byte _0808137C - .4byte _0808138C - .4byte _0808139C - .4byte _080813A2 - .4byte _080813B8 -_0808135C: - movs r0, 0x1 - movs r1, 0 - bl FadeScreen - ldr r1, _08081374 @ =gLinkType - ldr r2, _08081378 @ =0x00002211 - adds r0, r2, 0 - strh r0, [r1] - bl ClearLinkCallback_2 - b _080813AA - .align 2, 0 -_08081374: .4byte gLinkType -_08081378: .4byte 0x00002211 -_0808137C: - ldr r0, _08081388 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - b _080813A6 - .align 2, 0 -_08081388: .4byte gPaletteFade -_0808138C: - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _0808143A - b _080813AA -_0808139C: - bl Link_TryStartSend5FFF - b _080813AA -_080813A2: - ldr r0, _080813B4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] -_080813A6: - cmp r0, 0 - bne _0808143A -_080813AA: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0808143A - .align 2, 0 -_080813B4: .4byte gReceivedRemoteLinkPlayers -_080813B8: - ldr r0, _080813CC @ =gLinkPlayers - ldr r0, [r0, 0x4] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080813D4 - ldr r0, _080813D0 @ =0x00000109 - bl PlayMapChosenOrBattleBGM - b _080813DC - .align 2, 0 -_080813CC: .4byte gLinkPlayers -_080813D0: .4byte 0x00000109 -_080813D4: - movs r0, 0x85 - lsls r0, 1 - bl PlayMapChosenOrBattleBGM -_080813DC: - ldr r0, _080813F0 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x2 - beq _08081404 - cmp r0, 0x2 - bgt _080813F4 - cmp r0, 0x1 - beq _080813FA - b _0808141A - .align 2, 0 -_080813F0: .4byte gSpecialVar_0x8004 -_080813F4: - cmp r0, 0x5 - beq _08081410 - b _0808141A -_080813FA: - ldr r1, _08081400 @ =gBattleTypeFlags - movs r0, 0xA - b _08081418 - .align 2, 0 -_08081400: .4byte gBattleTypeFlags -_08081404: - ldr r1, _0808140C @ =gBattleTypeFlags - movs r0, 0xB - b _08081418 - .align 2, 0 -_0808140C: .4byte gBattleTypeFlags -_08081410: - bl ReducePlayerPartyToThree - ldr r1, _08081440 @ =gBattleTypeFlags - movs r0, 0x4B -_08081418: - str r0, [r1] -_0808141A: - bl CleanupOverworldWindowsAndTilemaps - ldr r1, _08081444 @ =gTrainerBattleOpponent_A - movs r2, 0x80 - lsls r2, 4 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08081448 @ =CB2_InitBattle - bl SetMainCallback2 - ldr r1, _0808144C @ =gMain - ldr r0, _08081450 @ =sub_8081668 - str r0, [r1, 0x8] - adds r0, r5, 0 - bl DestroyTask -_0808143A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08081440: .4byte gBattleTypeFlags -_08081444: .4byte gTrainerBattleOpponent_A -_08081448: .4byte CB2_InitBattle -_0808144C: .4byte gMain -_08081450: .4byte sub_8081668 - thumb_func_end sub_8081318 - - thumb_func_start sub_8081454 -sub_8081454: @ 8081454 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _08081478 @ =gTasks+0x8 - adds r6, r0, r1 - movs r1, 0 - ldrsh r0, [r6, r1] - cmp r0, 0x7 - bls _0808146E - b _0808160A -_0808146E: - lsls r0, 2 - ldr r1, _0808147C @ =_08081480 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08081478: .4byte gTasks+0x8 -_0808147C: .4byte _08081480 - .align 2, 0 -_08081480: - .4byte _080814A0 - .4byte _080814C4 - .4byte _080814DC - .4byte _080814F0 - .4byte _0808154C - .4byte _08081560 - .4byte _0808156A - .4byte _0808157A -_080814A0: - movs r0, 0x1 - movs r1, 0 - bl FadeScreen - ldr r0, _080814BC @ =gLinkType - ldr r2, _080814C0 @ =0x00002211 - adds r1, r2, 0 - strh r1, [r0] - bl ClearLinkCallback_2 - movs r0, 0x1 - strh r0, [r6] - b _0808160A - .align 2, 0 -_080814BC: .4byte gLinkType -_080814C0: .4byte 0x00002211 -_080814C4: - ldr r0, _080814D8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080814D2 - b _0808160A -_080814D2: - movs r0, 0x2 - strh r0, [r6] - b _0808160A - .align 2, 0 -_080814D8: .4byte gPaletteFade -_080814DC: - ldr r1, _080814EC @ =gLocalLinkPlayer - movs r0, 0 - movs r2, 0x1C - bl SendBlock - movs r0, 0x3 - strh r0, [r6] - b _0808160A - .align 2, 0 -_080814EC: .4byte gLocalLinkPlayer -_080814F0: - bl GetBlockReceivedStatus - adds r4, r0, 0 - bl sub_800A8D4 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _08081504 - b _0808160A -_08081504: - movs r4, 0 - ldr r5, _0808150C @ =gLinkPlayers - b _08081536 - .align 2, 0 -_0808150C: .4byte gLinkPlayers -_08081510: - lsls r1, r4, 8 - ldr r2, _08081548 @ =gBlockRecvBuffer - adds r0, r5, 0 - adds r1, r2 - ldm r1!, {r2,r3,r7} - stm r0!, {r2,r3,r7} - ldm r1!, {r2,r3,r7} - stm r0!, {r2,r3,r7} - ldr r1, [r1] - str r1, [r0] - adds r0, r5, 0 - bl IntlConvertLinkPlayerName - lsls r0, r4, 24 - lsrs r0, 24 - bl ResetBlockReceivedFlag - adds r5, 0x1C - adds r4, 0x1 -_08081536: - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - blt _08081510 - movs r0, 0x4 - strh r0, [r6] - b _0808160A - .align 2, 0 -_08081548: .4byte gBlockRecvBuffer -_0808154C: - ldrh r0, [r6, 0x2] - adds r0, 0x1 - strh r0, [r6, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x14 - ble _0808160A - movs r0, 0x5 - strh r0, [r6] - b _0808160A -_08081560: - bl PrepareSendLinkCmd2FFE_or_RfuCmd6600 - movs r0, 0x6 - strh r0, [r6] - b _0808160A -_0808156A: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0808160A - movs r0, 0x7 - strh r0, [r6] - b _0808160A -_0808157A: - ldr r0, _08081590 @ =gLinkPlayers - ldr r0, [r0, 0x4] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08081598 - ldr r0, _08081594 @ =0x00000109 - bl PlayMapChosenOrBattleBGM - b _080815A0 - .align 2, 0 -_08081590: .4byte gLinkPlayers -_08081594: .4byte 0x00000109 -_08081598: - movs r0, 0x85 - lsls r0, 1 - bl PlayMapChosenOrBattleBGM -_080815A0: - ldr r0, _080815B8 @ =gLinkPlayers - ldr r1, _080815BC @ =0x00002211 - str r1, [r0, 0x14] - ldr r0, _080815C0 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x2 - beq _080815D4 - cmp r0, 0x2 - bgt _080815C4 - cmp r0, 0x1 - beq _080815CA - b _080815EA - .align 2, 0 -_080815B8: .4byte gLinkPlayers -_080815BC: .4byte 0x00002211 -_080815C0: .4byte gSpecialVar_0x8004 -_080815C4: - cmp r0, 0x5 - beq _080815E0 - b _080815EA -_080815CA: - ldr r1, _080815D0 @ =gBattleTypeFlags - movs r0, 0xA - b _080815E8 - .align 2, 0 -_080815D0: .4byte gBattleTypeFlags -_080815D4: - ldr r1, _080815DC @ =gBattleTypeFlags - movs r0, 0xB - b _080815E8 - .align 2, 0 -_080815DC: .4byte gBattleTypeFlags -_080815E0: - bl ReducePlayerPartyToThree - ldr r1, _08081610 @ =gBattleTypeFlags - movs r0, 0x4B -_080815E8: - str r0, [r1] -_080815EA: - bl CleanupOverworldWindowsAndTilemaps - ldr r1, _08081614 @ =gTrainerBattleOpponent_A - movs r3, 0x80 - lsls r3, 4 - adds r0, r3, 0 - strh r0, [r1] - ldr r0, _08081618 @ =CB2_InitBattle - bl SetMainCallback2 - ldr r1, _0808161C @ =gMain - ldr r0, _08081620 @ =sub_8081668 - str r0, [r1, 0x8] - adds r0, r4, 0 - bl DestroyTask -_0808160A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08081610: .4byte gBattleTypeFlags -_08081614: .4byte gTrainerBattleOpponent_A -_08081618: .4byte CB2_InitBattle -_0808161C: .4byte gMain -_08081620: .4byte sub_8081668 - thumb_func_end sub_8081454 - - thumb_func_start sub_8081624 -sub_8081624: @ 8081624 - push {r4,lr} - ldr r0, _0808163C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r4, r0, r1 - ldrb r0, [r4] - cmp r0, 0 - beq _08081640 - cmp r0, 0x1 - beq _0808164C - b _0808165C - .align 2, 0 -_0808163C: .4byte gMain -_08081640: - bl Link_TryStartSend5FFF - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0808165C -_0808164C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0808165C - ldr r0, _08081664 @ =CB2_ReturnToField - bl SetMainCallback2 -_0808165C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08081664: .4byte CB2_ReturnToField - thumb_func_end sub_8081624 - - thumb_func_start sub_8081668 -sub_8081668: @ 8081668 - push {r4,r5,lr} - ldr r2, _080816B0 @ =gBattleTypeFlags - ldr r0, [r2] - ldr r1, _080816B4 @ =0x0000ffdf - ands r0, r1 - str r0, [r2] - bl sub_8055DB8 - bl LoadPlayerParty - bl SavePlayerBag - bl Special_UpdateTrainerFansAfterLinkBattle - ldr r0, _080816B8 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x5 - beq _0808170A - ldr r0, _080816BC @ =gLocalLinkPlayerId - ldrb r0, [r0] - movs r5, 0x1 - eors r0, r5 - bl TryRecordLinkBattleOutcome - ldr r0, _080816C0 @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _0808170A - ldr r0, _080816C4 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0x1 @ B_OUTCOME_WON - beq _080816C8 - cmp r0, 0x2 @ B_OUTCOME_LOST - beq _080816EC - b _0808170A - .align 2, 0 -_080816B0: .4byte gBattleTypeFlags -_080816B4: .4byte 0x0000ffdf -_080816B8: .4byte gSpecialVar_0x8004 -_080816BC: .4byte gLocalLinkPlayerId -_080816C0: .4byte gWirelessCommType -_080816C4: .4byte gBattleOutcome -_080816C8: - @ MEvent_RecordIdOfWonderCardSenderByEventType(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); - ldr r4, _080816E8 @ =gLinkPlayers - bl GetMultiplayerId - eors r0, r5 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r4, 0x4 - adds r1, r4 - ldr r1, [r1] - movs r0, 0 - bl MEvent_RecordIdOfWonderCardSenderByEventType - b _0808170A - .align 2, 0 -_080816E8: .4byte gLinkPlayers -_080816EC: - @ MEvent_RecordIdOfWonderCardSenderByEventType(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); - ldr r4, _08081718 @ =gLinkPlayers - bl GetMultiplayerId - eors r0, r5 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r4, 0x4 - adds r1, r4 - ldr r1, [r1] - movs r0, 0x1 - bl MEvent_RecordIdOfWonderCardSenderByEventType -_0808170A: - bl InUnionRoom - cmp r0, 0x1 - bne _08081724 - ldr r1, _0808171C @ =gMain - ldr r0, _08081720 @ =sub_8081624 - b _08081728 - .align 2, 0 -_08081718: .4byte gLinkPlayers -_0808171C: .4byte gMain -_08081720: .4byte sub_8081624 -_08081724: - ldr r1, _08081738 @ =gMain - ldr r0, _0808173C @ =c2_8056854 -_08081728: - str r0, [r1, 0x8] - ldr r0, _08081740 @ =CB2_SetUpSaveAfterLinkBattle - bl SetMainCallback2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08081738: .4byte gMain -_0808173C: .4byte c2_8056854 -_08081740: .4byte CB2_SetUpSaveAfterLinkBattle - thumb_func_end sub_8081668 - - thumb_func_start CleanupLinkRoomState -CleanupLinkRoomState: @ 8081744 - push {lr} - ldr r0, _0808176C @ =gSpecialVar_0x8004 - ldrh r1, [r0] - subs r0, r1, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _08081758 - cmp r1, 0x5 - bne _08081760 -_08081758: - bl LoadPlayerParty - bl SavePlayerBag -_08081760: - movs r0, 0x7F - bl copy_saved_warp2_bank_and_enter_x_to_warp1 - pop {r0} - bx r0 - .align 2, 0 -_0808176C: .4byte gSpecialVar_0x8004 - thumb_func_end CleanupLinkRoomState - - thumb_func_start sub_8081770 -sub_8081770: @ 8081770 - push {lr} - bl sub_8057F5C - pop {r0} - bx r0 - thumb_func_end sub_8081770 - - thumb_func_start sub_808177C -sub_808177C: @ 808177C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _080817A0 @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - beq _080817C0 - cmp r0, 0x1 - bgt _080817A4 - cmp r0, 0 - beq _080817AE - b _08081820 - .align 2, 0 -_080817A0: .4byte gTasks -_080817A4: - cmp r0, 0x2 - beq _080817E0 - cmp r0, 0x3 - beq _0808180C - b _08081820 -_080817AE: - ldr r0, _080817BC @ =CableClub_Text_PleaseWaitBCancel - bl ShowFieldMessage - movs r0, 0x1 - strh r0, [r5, 0x8] - b _08081820 - .align 2, 0 -_080817BC: .4byte CableClub_Text_PleaseWaitBCancel -_080817C0: - bl IsFieldMessageBoxHidden - lsls r0, 24 - cmp r0, 0 - beq _08081820 - bl sub_8057F34 - ldr r0, _080817DC @ =gSpecialVar_0x8005 - ldrb r0, [r0] - bl SetLocalLinkPlayerId - movs r0, 0x2 - strh r0, [r5, 0x8] - b _08081820 - .align 2, 0 -_080817DC: .4byte gSpecialVar_0x8005 -_080817E0: - bl sub_8057EC0 - cmp r0, 0x1 - beq _080817F2 - cmp r0, 0x1 - bcc _08081820 - cmp r0, 0x2 - beq _08081806 - b _08081820 -_080817F2: - bl HideFieldMessageBox - movs r0, 0 - strh r0, [r5, 0x8] - bl sub_8057F70 - adds r0, r4, 0 - bl SwitchTaskToFollowupFunc - b _08081820 -_08081806: - movs r0, 0x3 - strh r0, [r5, 0x8] - b _08081820 -_0808180C: - bl sub_8057F48 - movs r0, 0x1 - bl sub_80F771C - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_08081820: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_808177C - - thumb_func_start sub_8081828 -sub_8081828: @ 8081828 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r4, _0808184C @ =sub_808177C - 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 -_0808184C: .4byte sub_808177C - thumb_func_end sub_8081828 - - thumb_func_start sub_8081850 -sub_8081850: @ 8081850 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08081874 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _08081894 - cmp r0, 0x1 - bgt _08081878 - cmp r0, 0 - beq _08081882 - b _080818D8 - .align 2, 0 -_08081874: .4byte gTasks -_08081878: - cmp r0, 0x2 - beq _080818A8 - cmp r0, 0x3 - beq _080818C4 - b _080818D8 -_08081882: - bl ScriptContext2_Enable - movs r0, 0x1 - movs r1, 0 - bl FadeScreen - bl ClearLinkCallback_2 - b _080818B8 -_08081894: - ldr r0, _080818A4 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080818D8 - b _080818B8 - .align 2, 0 -_080818A4: .4byte gPaletteFade -_080818A8: - ldr r1, _080818C0 @ =gSelectedTradeMonPositions - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] - bl m4aMPlayAllStop - bl Link_TryStartSend5FFF -_080818B8: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080818D8 - .align 2, 0 -_080818C0: .4byte gSelectedTradeMonPositions -_080818C4: - ldr r0, _080818E0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _080818D8 - ldr r0, _080818E4 @ =CB2_ReturnFromLinkTrade - bl SetMainCallback2 - adds r0, r5, 0 - bl DestroyTask -_080818D8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080818E0: .4byte gReceivedRemoteLinkPlayers -_080818E4: .4byte CB2_ReturnFromLinkTrade - thumb_func_end sub_8081850 - - thumb_func_start sub_80818E8 -sub_80818E8: @ 80818E8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0808190C @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0808192C - cmp r0, 0x1 - bgt _08081910 - cmp r0, 0 - beq _0808191A - b _08081970 - .align 2, 0 -_0808190C: .4byte gTasks+0x8 -_08081910: - cmp r0, 0x2 - beq _08081940 - cmp r0, 0x3 - beq _0808195C - b _08081970 -_0808191A: - bl ScriptContext2_Enable - movs r0, 0x1 - movs r1, 0 - bl FadeScreen - bl Rfu_set_zero - b _08081950 -_0808192C: - ldr r0, _0808193C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08081970 - b _08081950 - .align 2, 0 -_0808193C: .4byte gPaletteFade -_08081940: - ldr r1, _08081958 @ =gSelectedTradeMonPositions - movs r0, 0 - strb r0, [r1] - strb r0, [r1, 0x1] - bl m4aMPlayAllStop - bl PrepareSendLinkCmd2FFE_or_RfuCmd6600 -_08081950: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _08081970 - .align 2, 0 -_08081958: .4byte gSelectedTradeMonPositions -_0808195C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08081970 - bl UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade - adds r0, r5, 0 - bl DestroyTask -_08081970: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80818E8 - - thumb_func_start EnterTradeSeat -EnterTradeSeat: @ 8081978 - push {lr} - ldr r0, _0808198C @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _08081994 - ldr r0, _08081990 @ =sub_80818E8 - bl sub_8081828 - b _0808199A - .align 2, 0 -_0808198C: .4byte gWirelessCommType -_08081990: .4byte sub_80818E8 -_08081994: - ldr r0, _080819A0 @ =sub_8081850 - bl sub_8081828 -_0808199A: - pop {r0} - bx r0 - .align 2, 0 -_080819A0: .4byte sub_8081850 - thumb_func_end EnterTradeSeat - - thumb_func_start sub_80819A4 -sub_80819A4: @ 80819A4 - push {lr} - ldr r0, _080819B4 @ =sub_8081850 - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080819B4: .4byte sub_8081850 - thumb_func_end sub_80819A4 - - thumb_func_start sub_80819B8 -sub_80819B8: @ 80819B8 - push {lr} - bl sub_80819A4 - bl ScriptContext1_Stop - pop {r0} - bx r0 - thumb_func_end sub_80819B8 - - thumb_func_start EnterColosseumPlayerSpot -EnterColosseumPlayerSpot: @ 80819C8 - push {lr} - ldr r1, _080819E4 @ =gLinkType - ldr r2, _080819E8 @ =0x00002211 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _080819EC @ =gWirelessCommType - ldrb r0, [r0] - cmp r0, 0 - beq _080819F4 - ldr r0, _080819F0 @ =sub_8081454 - bl sub_8081828 - b _080819FA - .align 2, 0 -_080819E4: .4byte gLinkType -_080819E8: .4byte 0x00002211 -_080819EC: .4byte gWirelessCommType -_080819F0: .4byte sub_8081454 -_080819F4: - ldr r0, _08081A00 @ =sub_8081318 - bl sub_8081828 -_080819FA: - pop {r0} - bx r0 - .align 2, 0 -_08081A00: .4byte sub_8081318 - thumb_func_end EnterColosseumPlayerSpot - - thumb_func_start sub_8081A04 -sub_8081A04: @ 8081A04 - push {lr} - ldr r0, _08081A18 @ =sub_808177C - movs r1, 0x50 - bl CreateTask - bl ScriptContext1_Stop - pop {r0} - bx r0 - .align 2, 0 -_08081A18: .4byte sub_808177C - thumb_func_end sub_8081A04 - - thumb_func_start Script_ShowLinkTrainerCard -Script_ShowLinkTrainerCard: @ 8081A1C - push {lr} - ldr r0, _08081A2C @ =gSpecialVar_0x8006 - ldrb r0, [r0] - ldr r1, _08081A30 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic - bl ShowTrainerCardInLink - pop {r0} - bx r0 - .align 2, 0 -_08081A2C: .4byte gSpecialVar_0x8006 -_08081A30: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_end Script_ShowLinkTrainerCard - - thumb_func_start sub_8081A34 -sub_8081A34: @ 8081A34 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08081A74 @ =gSpecialVar_0x8006 - strh r4, [r0] - ldr r0, _08081A78 @ =gStringVar1 - lsls r1, r4, 3 - subs r1, r4 - lsls r1, 2 - ldr r2, _08081A7C @ =gLinkPlayers + 8 - adds r1, r2 - bl StringCopy - adds r0, r4, 0 - bl GetTrainerCardStars - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _08081A88 - ldr r0, _08081A80 @ =gStringVar2 - ldr r2, _08081A84 @ =gUnknown_83C6AB8 - subs r1, 0x1 - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl StringCopy - movs r0, 0x1 - b _08081A8A - .align 2, 0 -_08081A74: .4byte gSpecialVar_0x8006 -_08081A78: .4byte gStringVar1 -_08081A7C: .4byte gLinkPlayers + 8 -_08081A80: .4byte gStringVar2 -_08081A84: .4byte gUnknown_83C6AB8 -_08081A88: - movs r0, 0 -_08081A8A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8081A34 - - thumb_func_start sub_8081A90 -sub_8081A90: @ 8081A90 - 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, _08081AD8 @ =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 _08081AC2 - bl CloseLink - ldr r0, _08081ADC @ =CB2_LinkError - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_08081AC2: - ldr r0, _08081AE0 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - beq _08081AD0 - adds r0, r5, 0 - bl DestroyTask -_08081AD0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08081AD8: .4byte gTasks -_08081ADC: .4byte CB2_LinkError -_08081AE0: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_8081A90 - - thumb_func_start sub_8081AE4 -sub_8081AE4: @ 8081AE4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08081B04 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08081AFC - bl EnableBothScriptContexts - adds r0, r4, 0 - bl DestroyTask -_08081AFC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08081B04: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_8081AE4 - - thumb_func_start sub_8081B08 -sub_8081B08: @ 8081B08 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl Link_TryStartSend5FFF - ldr r1, _08081B28 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08081B2C @ =sub_8081AE4 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08081B28: .4byte gTasks -_08081B2C: .4byte sub_8081AE4 - thumb_func_end sub_8081B08 - - .align 2, 0 @ Don't pad with nop. diff --git a/common_syms/cable_club.txt b/common_syms/cable_club.txt new file mode 100644 index 000000000..9cdf633b5 --- /dev/null +++ b/common_syms/cable_club.txt @@ -0,0 +1 @@ +UnusedVarNeededToMatch diff --git a/data/specials.inc b/data/specials.inc index 19ea756a7..2e1ba68ac 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -38,7 +38,7 @@ gSpecials:: @ 815FD60 def_special nullsub_75 def_special TryBattleLinkup def_special TryTradeLinkup - def_special sub_80810F4 + def_special TryRecordMixLinkup def_special CloseLink def_special EnterColosseumPlayerSpot def_special EnterTradeSeat diff --git a/include/battle_records.h b/include/battle_records.h index 97f28a3b0..b66fbd686 100644 --- a/include/battle_records.h +++ b/include/battle_records.h @@ -2,5 +2,6 @@ #define GUARD_BATTLE_RECORDS_H void ClearPlayerLinkBattleRecords(void); +void TryRecordLinkBattleOutcome(s32 battlerId); #endif // GUARD_BATTLE_RECORDS_H diff --git a/include/event_scripts.h b/include/event_scripts.h index 7cd51fa98..91fba4e1e 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1208,5 +1208,6 @@ extern const u8 EventScript_FldEffCut[]; extern const u8 CableClub_Text_WhenAllPlayersReadyAConfirmBCancel[]; extern const u8 CableClub_Text_AwaitingLinkupBCancel[]; extern const u8 CableClub_Text_StartLinkWithXPlayersAConfirmBCancel[]; +extern const u8 CableClub_Text_PleaseWaitBCancel[]; #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/link.h b/include/link.h index 820e03e6c..e5a40d6a5 100644 --- a/include/link.h +++ b/include/link.h @@ -77,6 +77,10 @@ #define LINKTYPE_BATTLE_TOWER_50 0x2266 #define LINKTYPE_BATTLE_TOWER_OPEN 0x2277 #define LINKTYPE_BATTLE_TOWER 0x2288 +#define LINKTYPE_0x3311 0x3311 +#define LINKTYPE_0x3322 0x3322 +#define LINKTYPE_0x4411 0x4411 +#define LINKTYPE_0x6601 0x6601 #define MASTER_HANDSHAKE 0x8FFF #define SLAVE_HANDSHAKE 0xB9A0 @@ -199,6 +203,7 @@ extern u16 word_3002910[]; extern bool8 gReceivedRemoteLinkPlayers; extern bool8 gLinkVSyncDisabled; extern u8 gWirelessCommType; +extern struct LinkPlayer gLocalLinkPlayer; extern u8 gShouldAdvanceLinkState; extern u16 gLinkPartnersHeldKeys[6]; @@ -282,5 +287,7 @@ u8 sub_800A8D4(void); void sub_800AA24(void); void sub_800A900(u8 a0); u8 sub_800A8A4(void); +void sub_800A9A4(void); +void SetLocalLinkPlayerId(u8 playerId); #endif // GUARD_LINK_H diff --git a/include/overworld.h b/include/overworld.h index f0a168052..60bf34ae7 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -177,6 +177,12 @@ void sub_805546C(u8 a0); bool32 sub_80582E0(void); bool32 sub_8058274(void); u8 GetCurrentMapBattleScene(void); +void sub_8055DB8(void); +void sub_8057F5C(void); +void sub_8057F34(void); +u32 sub_8057EC0(void); +void sub_8057F70(void); +void sub_8057F48(void); extern u16 gHeldKeyCodeToSend; diff --git a/include/quest_log.h b/include/quest_log.h index 25d0d5871..6497ef69c 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -50,5 +50,6 @@ void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value); void sub_8110840(void *oldSave); void sub_8112F18(u8 windowId); bool8 sub_8111C2C(void); +void Special_UpdateTrainerFansAfterLinkBattle(void); #endif //GUARD_QUEST_LOG_H diff --git a/include/union_room.h b/include/union_room.h index e24bcd480..e4cdef561 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -163,5 +163,6 @@ extern u16 gUnionRoomOfferedSpecies; extern u8 gUnionRoomRequestedMonType; void StartUnionRoomBattle(u16 battleFlags); +u8 UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade(void); #endif //GUARD_UNION_ROOM_H diff --git a/ld_script.txt b/ld_script.txt index 2223413db..8a5964872 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -121,7 +121,6 @@ SECTIONS { src/field_screen_effect.o(.text); src/battle_setup.o(.text); src/cable_club.o(.text); - asm/cable_club.o(.text); src/trainer_see.o(.text); src/wild_encounter.o(.text); asm/field_effect.o(.text); diff --git a/src/cable_club.c b/src/cable_club.c index 348a2a83d..246e08a3b 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -1,16 +1,32 @@ #include "global.h" #include "gflib.h" +#include "battle.h" +#include "battle_records.h" +#include "cable_club.h" #include "event_data.h" #include "event_scripts.h" #include "field_message_box.h" +#include "field_weather.h" #include "link.h" -#include "overworld.h" +#include "load_save.h" +#include "m4a.h" +#include "mevent.h" #include "new_menu_helpers.h" +#include "overworld.h" +#include "quest_log.h" #include "script.h" +#include "script_pokemon_util.h" +#include "start_menu.h" #include "strings.h" #include "task.h" +#include "trade.h" #include "trainer_card.h" +#include "union_room.h" #include "constants/songs.h" +#include "constants/cable_club.h" +#include "constants/field_weather.h" + +u32 UnusedVarNeededToMatch; void sub_80809F8(u8 taskId); void sub_8080A4C(u8 taskId); @@ -25,6 +41,10 @@ void sub_8080F78(u8 taskId); void sub_8080FB4(u8 taskId); void sub_8080FF0(u8 taskId); bool8 sub_808102C(u8 taskId); +void sub_80811FC(u8 taskId); +void sub_808124C(u8 taskId); +void sub_80812A0(u8 taskId); +void sub_80812D8(u8 taskId); static const struct WindowTemplate gUnknown_83C6AB0 = { .bg = 0, @@ -43,14 +63,14 @@ const u8 *const gUnknown_83C6AB8[] = { gUnknown_841DFA0 }; -void sub_8080748(u8 a0, u8 a1) +void sub_8080748(u8 lower, u8 higher) { u8 taskId; if (FindTaskIdByFunc(sub_80809F8) == 0xFF) { taskId = CreateTask(sub_80809F8, 80); - gTasks[taskId].data[1] = a0; - gTasks[taskId].data[2] = a1; + gTasks[taskId].data[1] = lower; + gTasks[taskId].data[2] = higher; } } @@ -382,8 +402,8 @@ void sub_8080E6C(u8 taskId) if (gSpecialVar_Result == 1) { // Dumb trick required to match - if (gLinkType == 0x4411) - gFieldLinkPlayerCount += 0; + if (gLinkType == LINKTYPE_0x4411) + UnusedVarNeededToMatch += 0; sub_80807E8(gTasks[taskId].data[5]); EnableBothScriptContexts(); DestroyTask(taskId); @@ -395,3 +415,550 @@ void sub_8080E6C(u8 taskId) } } } + +void sub_8080F78(u8 taskId) +{ + if (!gReceivedRemoteLinkPlayers) + { + sub_80807E8(gTasks[taskId].data[5]); + EnableBothScriptContexts(); + RemoveWindow(gTasks[taskId].data[5]); + DestroyTask(taskId); + } +} + +void sub_8080FB4(u8 taskId) +{ + gSpecialVar_Result = 5; + sub_80807E8(gTasks[taskId].data[5]); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +void sub_8080FF0(u8 taskId) +{ + gSpecialVar_Result = 6; + sub_80807E8(gTasks[taskId].data[5]); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +bool8 sub_808102C(u8 taskId) +{ + gTasks[taskId].data[4]++; + if (gTasks[taskId].data[4] > 600) + { + gTasks[taskId].func = sub_8080FF0; + return TRUE; + } + return FALSE; +} + +void TryBattleLinkup(void) +{ + u8 lower, higher; + higher = lower = 2; + switch (gSpecialVar_0x8004) + { + case USING_SINGLE_BATTLE: + higher = lower = 2; + gLinkType = LINKTYPE_SINGLE_BATTLE; + break; + case USING_DOUBLE_BATTLE: + higher = lower = 2; + gLinkType = LINKTYPE_DOUBLE_BATTLE; + break; + case USING_MULTI_BATTLE: + higher = lower = 4; + gLinkType = LINKTYPE_MULTI_BATTLE; + break; + } + sub_8080748(lower, higher); +} + +void TryTradeLinkup(void) +{ + gLinkType = LINKTYPE_0x1133; + gBattleTypeFlags = 0; + sub_8080748(2, 2); +} + +void TryRecordMixLinkup(void) +{ + gSpecialVar_Result = 0; + gLinkType = LINKTYPE_0x3311; + gBattleTypeFlags = 0; + sub_8080748(2, 4); +} + +void sub_8081128(void) +{ + gLinkType = LINKTYPE_0x6601; + gBattleTypeFlags = 0; + sub_8080748(4, 4); +} + +u8 sub_8081150(void) +{ + if (FuncIsActiveTask(sub_80811FC)) + return 0xFF; + switch (gSpecialVar_0x8004) + { + case USING_SINGLE_BATTLE: + gLinkType = LINKTYPE_SINGLE_BATTLE; + break; + case USING_DOUBLE_BATTLE: + gLinkType = LINKTYPE_DOUBLE_BATTLE; + break; + case USING_MULTI_BATTLE: + gLinkType = LINKTYPE_MULTI_BATTLE; + break; + case USING_TRADE_CENTER: + gLinkType = LINKTYPE_0x1111; + break; + case USING_RECORD_CORNER: + gLinkType = LINKTYPE_0x3322; + break; + } + return CreateTask(sub_80811FC, 80); +} + +void sub_80811FC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (data[0] == 0) + { + OpenLink(); + ResetLinkPlayers(); + CreateTask(sub_8081A90, 80); + } + else if (data[0] > 9) + gTasks[taskId].func = sub_808124C; + data[0]++; +} + +void sub_808124C(u8 taskId) +{ + if (GetLinkPlayerCount_2() >= 2) + { + if (IsLinkMaster() == TRUE) + { + gTasks[taskId].func = sub_80812A0; + } + else + { + gTasks[taskId].func = sub_80812D8; + } + } +} + +void sub_80812A0(u8 taskId) +{ + if (GetSavedPlayerCount() == GetLinkPlayerCount_2()) + { + CheckShouldAdvanceLinkState(); + gTasks[taskId].func = sub_80812D8; + } +} + +void sub_80812D8(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) + { + sub_800A9A4(); + sub_8009FE8(); + DestroyTask(taskId); + } +} + +void sub_808130C(void) +{ + Field_AskSaveTheGame(); +} + +void sub_8081318(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + FadeScreen(FADE_TO_BLACK, 0); + gLinkType = LINKTYPE_BATTLE; + 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: + Link_TryStartSend5FFF(); + task->data[0]++; + break; + case 4: + if (!gReceivedRemoteLinkPlayers) + task->data[0]++; + break; + case 5: + if (gLinkPlayers[0].trainerId & 1) + PlayMapChosenOrBattleBGM(MUS_BATTLE32); + else + PlayMapChosenOrBattleBGM(MUS_BATTLE20); + switch (gSpecialVar_0x8004) + { + case USING_SINGLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK; + break; + case USING_DOUBLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE; + break; + case USING_MULTI_BATTLE: + ReducePlayerPartyToThree(); + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI; + break; + } + CleanupOverworldWindowsAndTilemaps(); + gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; + SetMainCallback2(CB2_InitBattle); + gMain.savedCallback = sub_8081668; + DestroyTask(taskId); + break; + } +} + +void sub_8081454(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + int i; + switch (data[0]) + { + case 0: + FadeScreen(FADE_TO_BLACK, 0); + gLinkType = LINKTYPE_BATTLE; + ClearLinkCallback_2(); + data[0] = 1; + break; + case 1: + if (!gPaletteFade.active) + data[0] = 2; + break; + case 2: + SendBlock(0, &gLocalLinkPlayer, sizeof(struct LinkPlayer)); + data[0] = 3; + break; + case 3: + if (GetBlockReceivedStatus() == sub_800A8D4()) + { + for (i = 0; i < GetLinkPlayerCount(); i++) + { + gLinkPlayers[i] = *(struct LinkPlayer *)gBlockRecvBuffer[i]; + IntlConvertLinkPlayerName(&gLinkPlayers[i]); + ResetBlockReceivedFlag(i); + } + data[0] = 4; + } + break; + case 4: + data[1]++; + if (data[1] > 20) + data[0] = 5; + break; + case 5: + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + data[0] = 6; + break; + case 6: + if (IsLinkTaskFinished()) + data[0] = 7; + break; + case 7: + if (gLinkPlayers[0].trainerId & 1) + PlayMapChosenOrBattleBGM(MUS_BATTLE32); + else + PlayMapChosenOrBattleBGM(MUS_BATTLE20); + gLinkPlayers[0].linkType = LINKTYPE_BATTLE; + switch (gSpecialVar_0x8004) + { + case USING_SINGLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK; + break; + case USING_DOUBLE_BATTLE: + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE; + break; + case USING_MULTI_BATTLE: + ReducePlayerPartyToThree(); + gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI; + break; + } + CleanupOverworldWindowsAndTilemaps(); + gTrainerBattleOpponent_A = TRAINER_LINK_OPPONENT; + SetMainCallback2(CB2_InitBattle); + gMain.savedCallback = sub_8081668; + DestroyTask(taskId); + break; + } +} + +void sub_8081624(void) +{ + switch (gMain.state) + { + case 0: + Link_TryStartSend5FFF(); + gMain.state++; + break; + case 1: + if (IsLinkTaskFinished()) + SetMainCallback2(CB2_ReturnToField); + break; + } +} + +void sub_8081668(void) +{ + gBattleTypeFlags &= (u16)~BATTLE_TYPE_20; + sub_8055DB8(); + LoadPlayerParty(); + SavePlayerBag(); + Special_UpdateTrainerFansAfterLinkBattle(); + if (gSpecialVar_0x8004 != USING_MULTI_BATTLE) + { + TryRecordLinkBattleOutcome(gLocalLinkPlayerId ^ 1); + if (gWirelessCommType != 0) + { + switch (gBattleOutcome) + { + case B_OUTCOME_WON: + MEvent_RecordIdOfWonderCardSenderByEventType(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + break; + case B_OUTCOME_LOST: + MEvent_RecordIdOfWonderCardSenderByEventType(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + break; + } + } + } + if (InUnionRoom() == TRUE) + { + gMain.savedCallback = sub_8081624; + } + else + { + gMain.savedCallback = c2_8056854; + } + SetMainCallback2(CB2_SetUpSaveAfterLinkBattle); +} + +void CleanupLinkRoomState(void) +{ + if (gSpecialVar_0x8004 == USING_SINGLE_BATTLE || gSpecialVar_0x8004 == USING_DOUBLE_BATTLE || gSpecialVar_0x8004 == USING_MULTI_BATTLE) + { + LoadPlayerParty(); + SavePlayerBag(); + } + copy_saved_warp2_bank_and_enter_x_to_warp1(127); +} + +void sub_8081770(void) +{ + sub_8057F5C(); +} + +void sub_808177C(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + ShowFieldMessage(CableClub_Text_PleaseWaitBCancel); + task->data[0] = 1; + break; + case 1: + if (IsFieldMessageBoxHidden()) + { + sub_8057F34(); + SetLocalLinkPlayerId(gSpecialVar_0x8005); + task->data[0] = 2; + } + break; + case 2: + switch (sub_8057EC0()) + { + case 0: + break; + case 1: + HideFieldMessageBox(); + task->data[0] = 0; + sub_8057F70(); + SwitchTaskToFollowupFunc(taskId); + break; + case 2: + task->data[0] = 3; + break; + } + break; + case 3: + sub_8057F48(); + sub_80F771C(TRUE); + DestroyTask(taskId); + EnableBothScriptContexts(); + break; + } +} + +void sub_8081828(TaskFunc followUpFunc) +{ + u8 taskId = CreateTask(sub_808177C, 80); + SetTaskFuncWithFollowupFunc(taskId, sub_808177C, followUpFunc); + ScriptContext1_Stop(); +} + +void sub_8081850(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + ScriptContext2_Enable(); + FadeScreen(FADE_TO_BLACK, 0); + ClearLinkCallback_2(); + task->data[0]++; + break; + case 1: + if (!gPaletteFade.active) + task->data[0]++; + break; + case 2: + gSelectedTradeMonPositions[0] = 0; + gSelectedTradeMonPositions[1] = 0; + m4aMPlayAllStop(); + Link_TryStartSend5FFF(); + task->data[0]++; + break; + case 3: + if (!gReceivedRemoteLinkPlayers) + { + SetMainCallback2(CB2_ReturnFromLinkTrade); + DestroyTask(taskId); + } + break; + } +} + +void sub_80818E8(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + switch (data[0]) + { + case 0: + ScriptContext2_Enable(); + FadeScreen(FADE_TO_BLACK, 0); + Rfu_set_zero(); + data[0]++; + break; + case 1: + if (!gPaletteFade.active) + data[0]++; + break; + case 2: + gSelectedTradeMonPositions[0] = 0; + gSelectedTradeMonPositions[1] = 0; + m4aMPlayAllStop(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + data[0]++; + break; + case 3: + if (IsLinkTaskFinished()) + { + UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade(); + DestroyTask(taskId); + } + break; + } +} + +void EnterTradeSeat(void) +{ + if (gWirelessCommType) + sub_8081828(sub_80818E8); + else + sub_8081828(sub_8081850); +} + +void sub_80819A4(void) +{ + CreateTask(sub_8081850, 80); +} + +void sub_80819B8(void) +{ + sub_80819A4(); + ScriptContext1_Stop(); +} + +void EnterColosseumPlayerSpot(void) +{ + gLinkType = LINKTYPE_BATTLE; + if (gWirelessCommType) + sub_8081828(sub_8081454); + else + sub_8081828(sub_8081318); +} + +void sub_8081A04(void) +{ + CreateTask(sub_808177C, 80); + ScriptContext1_Stop(); +} + +void Script_ShowLinkTrainerCard(void) +{ + ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +bool32 sub_8081A34(u8 who) +{ + u8 stars; + gSpecialVar_0x8006 = who; + StringCopy(gStringVar1, gLinkPlayers[who].name); + stars = GetTrainerCardStars(who); + if (stars == 0) + return FALSE; + StringCopy(gStringVar2, gUnknown_83C6AB8[stars - 1]); + return TRUE; +} + +void sub_8081A90(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); +} + +void sub_8081AE4(u8 taskId) +{ + if (!gReceivedRemoteLinkPlayers) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +void sub_8081B08(u8 taskId) +{ + Link_TryStartSend5FFF(); + gTasks[taskId].func = sub_8081AE4; +} diff --git a/sym_common.txt b/sym_common.txt index e729f5515..fe2924fc9 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -73,9 +73,9 @@ gUnknown_3005078: @ 3005078 .include "sound.o" .align 2 .include "task.o" - - @ what is this? - .space 0x20 + .align 2 + .include "cable_club.o" + .space 0x1C .align 2 .include "image_processing_effects.o" .align 2 |