summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-02-29 16:31:57 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2020-02-29 16:31:57 -0500
commit21dddd57605cf4cbc31f0a903cc50a8f588817ff (patch)
treedd7975a6335fc837530b10dfdbe190da5d135137
parent9b9ae3d3374dd61870d47f025ffc0346a0b6839c (diff)
Finish cable_club.c
-rw-r--r--asm/cable_club.s1504
-rw-r--r--common_syms/cable_club.txt1
-rw-r--r--data/specials.inc2
-rw-r--r--include/battle_records.h1
-rw-r--r--include/event_scripts.h1
-rw-r--r--include/link.h7
-rw-r--r--include/overworld.h6
-rw-r--r--include/quest_log.h1
-rw-r--r--include/union_room.h1
-rw-r--r--ld_script.txt1
-rw-r--r--src/cable_club.c579
-rw-r--r--sym_common.txt6
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