diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-03-02 10:15:07 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-03-02 10:15:07 -0500 |
commit | d758ae0dc2b91f1233872f6950b8f2d121bf961c (patch) | |
tree | c7607e2d703583286c11bfc8936bb473a6fe4883 | |
parent | 2f8ac698c8a03954d3bf0d05a9ef13dd447eaf53 (diff) | |
parent | fc51c579d4a422b168a4efb88b5f15164fbb7db0 (diff) |
Merge branch 'master' of github.com:pret/pokefirered into field_effect
-rw-r--r-- | asm/cable_club.s | 2528 | ||||
-rw-r--r-- | asm/overworld.s | 6 | ||||
-rw-r--r-- | common_syms/cable_club.txt | 1 | ||||
-rw-r--r-- | data/cable_club.s | 15 | ||||
-rw-r--r-- | data/specials.inc | 6 | ||||
-rw-r--r-- | include/battle_records.h | 1 | ||||
-rw-r--r-- | include/cable_club.h | 4 | ||||
-rw-r--r-- | include/event_scripts.h | 6 | ||||
-rw-r--r-- | include/field_message_box.h | 1 | ||||
-rw-r--r-- | include/link.h | 12 | ||||
-rw-r--r-- | include/overworld.h | 6 | ||||
-rw-r--r-- | include/quest_log.h | 1 | ||||
-rw-r--r-- | include/strings.h | 7 | ||||
-rw-r--r-- | include/trainer_card.h | 7 | ||||
-rw-r--r-- | include/union_room.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/battle_records.c | 6 | ||||
-rw-r--r-- | src/cable_club.c | 964 | ||||
-rw-r--r-- | src/field_fadetransition.c | 4 | ||||
-rw-r--r-- | src/link.c | 8 | ||||
-rw-r--r-- | src/trainer_card.c | 248 | ||||
-rw-r--r-- | src/union_room.c | 24 | ||||
-rw-r--r-- | sym_common.txt | 5 |
23 files changed, 1164 insertions, 2701 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s deleted file mode 100644 index 92f14461a..000000000 --- a/asm/cable_club.s +++ /dev/null @@ -1,2528 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8080748 -sub_8080748: @ 8080748 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r4, _08080784 @ =sub_80809F8 - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _0808077C - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08080788 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r6, [r1, 0xA] - strh r5, [r1, 0xC] -_0808077C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08080784: .4byte sub_80809F8 -_08080788: .4byte gTasks - thumb_func_end sub_8080748 - - thumb_func_start sub_808078C -sub_808078C: @ 808078C - push {r4,r5,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _080807DC @ =gStringVar1 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - bl SetStdWindowBorderStyle - ldr r5, _080807E0 @ =gStringVar4 - ldr r1, _080807E4 @ =gUnknown_841DF82 - adds r0, r5, 0 - bl StringExpandPlaceholders - movs r1, 0 - str r1, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r1, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0 - bl AddTextPrinterParameterized - adds r0, r4, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080807DC: .4byte gStringVar1 -_080807E0: .4byte gStringVar4 -_080807E4: .4byte gUnknown_841DF82 - thumb_func_end sub_808078C - - thumb_func_start sub_80807E8 -sub_80807E8: @ 80807E8 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - bl ClearStdWindowAndFrame - adds r0, r4, 0 - movs r1, 0x3 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80807E8 - - thumb_func_start sub_8080808 -sub_8080808: @ 8080808 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08080830 @ =gTasks+0x8 - adds r4, r1, r0 - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r5, r0 - beq _0808083E - cmp r5, 0x1 - bhi _08080834 - ldrh r0, [r4, 0xA] - bl sub_80807E8 - b _0808083C - .align 2, 0 -_08080830: .4byte gTasks+0x8 -_08080834: - ldrh r0, [r4, 0xA] - adds r1, r5, 0 - bl sub_808078C -_0808083C: - strh r5, [r4, 0x6] -_0808083E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8080808 - - thumb_func_start sub_8080844 -sub_8080844: @ 8080844 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - bl GetLinkPlayerDataExchangeStatusTimed - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - cmp r0, 0x5 - bhi _080808B4 - lsls r0, 2 - ldr r1, _08080868 @ =_0808086C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08080868: .4byte _0808086C - .align 2, 0 -_0808086C: - .4byte _08080884 - .4byte _080808B4 - .4byte _08080888 - .4byte _0808088C - .4byte _08080890 - .4byte _08080894 -_08080884: - movs r0, 0x1 - b _080808B6 -_08080888: - movs r0, 0x3 - b _080808B6 -_0808088C: - movs r0, 0x7 - b _080808B6 -_08080890: - movs r0, 0x9 - b _080808B6 -_08080894: - ldr r4, _080808B0 @ =gStringVar1 - bl GetLinkPlayerCount_2 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - movs r0, 0x4 - b _080808B6 - .align 2, 0 -_080808B0: .4byte gStringVar1 -_080808B4: - movs r0, 0 -_080808B6: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8080844 - - thumb_func_start sub_80808BC -sub_80808BC: @ 80808BC - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl HasLinkErrorOccurred - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080808D2 - movs r0, 0 - b _080808E2 -_080808D2: - ldr r0, _080808E8 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080808EC @ =sub_8080FF0 - str r0, [r1] - movs r0, 0x1 -_080808E2: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080808E8: .4byte gTasks -_080808EC: .4byte sub_8080FF0 - thumb_func_end sub_80808BC - - thumb_func_start sub_80808F0 -sub_80808F0: @ 80808F0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08080924 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08080934 - bl IsLinkConnectionEstablished - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _08080934 - ldr r0, _08080928 @ =gLinkType - strh r1, [r0] - ldr r1, _0808092C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08080930 @ =sub_8080FB4 - str r1, [r0] - movs r0, 0x1 - b _08080936 - .align 2, 0 -_08080924: .4byte gMain -_08080928: .4byte gLinkType -_0808092C: .4byte gTasks -_08080930: .4byte sub_8080FB4 -_08080934: - movs r0, 0 -_08080936: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80808F0 - - thumb_func_start sub_808093C -sub_808093C: @ 808093C - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsLinkConnectionEstablished - lsls r0, 24 - cmp r0, 0 - beq _08080952 - movs r0, 0x1 - bl SetSuppressLinkErrorMessage -_08080952: - ldr r0, _08080964 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _08080968 - movs r0, 0 - b _0808097E - .align 2, 0 -_08080964: .4byte gMain -_08080968: - ldr r1, _08080984 @ =gLinkType - movs r0, 0 - strh r0, [r1] - ldr r1, _08080988 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0808098C @ =sub_8080FB4 - str r1, [r0] - movs r0, 0x1 -_0808097E: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08080984: .4byte gLinkType -_08080988: .4byte gTasks -_0808098C: .4byte sub_8080FB4 - thumb_func_end sub_808093C - - thumb_func_start sub_8080990 -sub_8080990: @ 8080990 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl GetSioMultiSI - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080809A6 - movs r0, 0 - b _080809B6 -_080809A6: - ldr r0, _080809BC @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080809C0 @ =sub_8080FF0 - str r0, [r1] - movs r0, 0x1 -_080809B6: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080809BC: .4byte gTasks -_080809C0: .4byte sub_8080FF0 - thumb_func_end sub_8080990 - - thumb_func_start sub_80809C4 -sub_80809C4: @ 80809C4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080809F4 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA - bne _080809EE - movs r0, 0x2 - bl sub_800A474 - adds r0, r4, 0 - bl DestroyTask -_080809EE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080809F4: .4byte gTasks - thumb_func_end sub_80809C4 - - thumb_func_start sub_80809F8 -sub_80809F8: @ 80809F8 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08080A28 @ =gTasks+0x8 - adds r4, r1, r0 - movs r3, 0 - ldrsh r2, [r4, r3] - cmp r2, 0 - bne _08080A30 - bl OpenLinkTimed - bl sub_800AA24 - bl ResetLinkPlayers - ldr r0, _08080A2C @ =gUnknown_83C6AB0 - bl AddWindow - strh r0, [r4, 0xA] - b _08080A3C - .align 2, 0 -_08080A28: .4byte gTasks+0x8 -_08080A2C: .4byte gUnknown_83C6AB0 -_08080A30: - cmp r2, 0x9 - ble _08080A3C - subs r0, 0x8 - adds r0, r1, r0 - ldr r1, _08080A48 @ =sub_8080A4C - str r1, [r0] -_08080A3C: - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08080A48: .4byte sub_8080A4C - thumb_func_end sub_80809F8 - - thumb_func_start sub_8080A4C -sub_8080A4C: @ 8080A4C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - bl sub_80808F0 - cmp r0, 0x1 - beq _08080AC0 - adds r0, r4, 0 - bl sub_808093C - cmp r0, 0x1 - beq _08080AC0 - cmp r5, 0x1 - bls _08080AC0 - movs r0, 0x1 - bl SetSuppressLinkErrorMessage - ldr r1, _08080AA4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r4, r0, r1 - movs r0, 0 - strh r0, [r4, 0xE] - bl IsLinkMaster - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08080AB0 - movs r0, 0x15 - bl PlaySE - ldr r0, _08080AA8 @ =CableClub_Text_WhenAllPlayersReadyAConfirmBCancel - bl ShowFieldAutoScrollMessage - ldr r0, _08080AAC @ =sub_8080AD0 - b _08080ABE - .align 2, 0 -_08080AA4: .4byte gTasks -_08080AA8: .4byte CableClub_Text_WhenAllPlayersReadyAConfirmBCancel -_08080AAC: .4byte sub_8080AD0 -_08080AB0: - movs r0, 0x16 - bl PlaySE - ldr r0, _08080AC8 @ =CableClub_Text_AwaitingLinkupBCancel - bl ShowFieldAutoScrollMessage - ldr r0, _08080ACC @ =sub_8080CDC -_08080ABE: - str r0, [r4] -_08080AC0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08080AC8: .4byte CableClub_Text_AwaitingLinkupBCancel -_08080ACC: .4byte sub_8080CDC - thumb_func_end sub_8080A4C - - thumb_func_start sub_8080AD0 -sub_8080AD0: @ 8080AD0 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_80808F0 - cmp r0, 0x1 - beq _08080B10 - adds r0, r4, 0 - bl sub_8080990 - cmp r0, 0x1 - beq _08080B10 - adds r0, r4, 0 - bl sub_80808BC - cmp r0, 0x1 - beq _08080B10 - bl textbox_any_visible - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _08080B10 - ldr r0, _08080B18 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - strh r2, [r1, 0xE] - ldr r0, _08080B1C @ =sub_8080B20 - str r0, [r1] -_08080B10: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08080B18: .4byte gTasks -_08080B1C: .4byte sub_8080B20 - thumb_func_end sub_8080AD0 - - thumb_func_start sub_8080B20 -sub_8080B20: @ 8080B20 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - mov r8, r0 - ldr r0, _08080BB4 @ =gTasks+0x8 - mov r9, r0 - mov r7, r8 - add r7, r9 - bl GetLinkPlayerCount_2 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - bl sub_80808F0 - cmp r0, 0x1 - beq _08080BA8 - adds r0, r4, 0 - bl sub_8080990 - cmp r0, 0x1 - beq _08080BA8 - adds r0, r4, 0 - bl sub_80808BC - cmp r0, 0x1 - beq _08080BA8 - adds r6, r5, 0 - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_8080808 - ldr r0, _08080BB8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08080BA8 - movs r1, 0x2 - ldrsh r0, [r7, r1] - cmp r5, r0 - blt _08080BA8 - adds r0, r6, 0 - bl sub_800A900 - ldrh r0, [r7, 0xA] - bl sub_80807E8 - ldr r0, _08080BBC @ =gStringVar1 - adds r1, r5, 0 - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - ldr r0, _08080BC0 @ =CableClub_Text_StartLinkWithXPlayersAConfirmBCancel - bl ShowFieldAutoScrollMessage - mov r0, r9 - subs r0, 0x8 - add r0, r8 - ldr r1, _08080BC4 @ =sub_8080BC8 - str r1, [r0] -_08080BA8: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08080BB4: .4byte gTasks+0x8 -_08080BB8: .4byte gMain -_08080BBC: .4byte gStringVar1 -_08080BC0: .4byte CableClub_Text_StartLinkWithXPlayersAConfirmBCancel -_08080BC4: .4byte sub_8080BC8 - thumb_func_end sub_8080B20 - - thumb_func_start sub_8080BC8 -sub_8080BC8: @ 8080BC8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - adds r0, r5, 0 - bl sub_80808F0 - cmp r0, 0x1 - beq _08080C5C - adds r0, r5, 0 - bl sub_8080990 - cmp r0, 0x1 - beq _08080C5C - adds r0, r5, 0 - bl sub_80808BC - cmp r0, 0x1 - beq _08080C5C - bl textbox_any_visible - lsls r0, 24 - cmp r0, 0 - bne _08080C5C - bl GetSavedPlayerCount - adds r4, r0, 0 - bl GetLinkPlayerCount_2 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _08080C16 - ldr r0, _08080C2C @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08080C3C -_08080C16: - ldr r0, _08080C30 @ =CableClub_Text_WhenAllPlayersReadyAConfirmBCancel - bl ShowFieldAutoScrollMessage - ldr r1, _08080C34 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _08080C38 @ =sub_8080AD0 - str r1, [r0] - b _08080C5C - .align 2, 0 -_08080C2C: .4byte gMain -_08080C30: .4byte CableClub_Text_WhenAllPlayersReadyAConfirmBCancel -_08080C34: .4byte gTasks -_08080C38: .4byte sub_8080AD0 -_08080C3C: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08080C5C - movs r0, 0x5 - bl PlaySE - bl CheckShouldAdvanceLinkState - ldr r0, _08080C64 @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _08080C68 @ =sub_8080C6C - str r0, [r1] -_08080C5C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08080C64: .4byte gTasks -_08080C68: .4byte sub_8080C6C - thumb_func_end sub_8080BC8 - - thumb_func_start sub_8080C6C -sub_8080C6C: @ 8080C6C - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _08080CB0 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r5, r0, r1 - ldrb r7, [r5, 0xA] - ldrb r6, [r5, 0xC] - adds r0, r4, 0 - bl sub_80808BC - cmp r0, 0x1 - beq _08080CCE - adds r0, r4, 0 - bl sub_808102C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08080CCE - bl GetLinkPlayerCount_2 - adds r4, r0, 0 - bl GetSavedPlayerCount - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - beq _08080CB8 - ldr r0, _08080CB4 @ =sub_8080FF0 - b _08080CCC - .align 2, 0 -_08080CB0: .4byte gTasks -_08080CB4: .4byte sub_8080FF0 -_08080CB8: - ldr r4, _08080CD4 @ =gSpecialVar_Result - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_8080844 - strh r0, [r4] - lsls r0, 16 - cmp r0, 0 - beq _08080CCE - ldr r0, _08080CD8 @ =sub_8080DC0 -_08080CCC: - str r0, [r5] -_08080CCE: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08080CD4: .4byte gSpecialVar_Result -_08080CD8: .4byte sub_8080DC0 - thumb_func_end sub_8080C6C - - thumb_func_start sub_8080CDC -sub_8080CDC: @ 8080CDC - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _08080D30 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r5, r0, r1 - ldrb r7, [r5, 0xA] - ldrb r6, [r5, 0xC] - adds r0, r4, 0 - bl sub_80808F0 - cmp r0, 0x1 - beq _08080D74 - adds r0, r4, 0 - bl sub_80808BC - cmp r0, 0x1 - beq _08080D74 - ldr r4, _08080D34 @ =gSpecialVar_Result - adds r0, r7, 0 - adds r1, r6, 0 - bl sub_8080844 - adds r1, r0, 0 - strh r1, [r4] - lsls r0, r1, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _08080D74 - subs r0, r1, 0x3 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _08080D3C - bl Link_TryStartSend5FFF - bl HideFieldMessageBox - ldr r0, _08080D38 @ =sub_8080F78 - b _08080D72 - .align 2, 0 -_08080D30: .4byte gTasks -_08080D34: .4byte gSpecialVar_Result -_08080D38: .4byte sub_8080F78 -_08080D3C: - cmp r2, 0x7 - beq _08080D44 - cmp r2, 0x9 - bne _08080D54 -_08080D44: - bl CloseLink - bl HideFieldMessageBox - ldr r0, _08080D50 @ =sub_8080F78 - b _08080D72 - .align 2, 0 -_08080D50: .4byte sub_8080F78 -_08080D54: - bl GetLinkPlayerCount_2 - ldr r4, _08080D7C @ =gFieldLinkPlayerCount - strb r0, [r4] - bl GetMultiplayerId - ldr r1, _08080D80 @ =gLocalLinkPlayerId - strb r0, [r1] - ldrb r0, [r4] - bl sub_800A900 - ldr r0, _08080D84 @ =gBlockSendBuffer - bl TrainerCard_GenerateCardForLinkPlayer - ldr r0, _08080D88 @ =sub_8080E6C -_08080D72: - str r0, [r5] -_08080D74: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08080D7C: .4byte gFieldLinkPlayerCount -_08080D80: .4byte gLocalLinkPlayerId -_08080D84: .4byte gBlockSendBuffer -_08080D88: .4byte sub_8080E6C - thumb_func_end sub_8080CDC - - thumb_func_start sub_8080D8C -sub_8080D8C: @ 8080D8C - push {r4,r5,lr} - movs r5, 0 - ldr r4, _08080D94 @ =gLinkPlayers - b _08080DAC - .align 2, 0 -_08080D94: .4byte gLinkPlayers -_08080D98: - ldrb r0, [r4] - subs r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bhi _08080DA8 - movs r0, 0x1 - b _08080DBA -_08080DA8: - adds r4, 0x1C - adds r5, 0x1 -_08080DAC: - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - blt _08080D98 - movs r0, 0 -_08080DBA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8080D8C - - thumb_func_start sub_8080DC0 -sub_8080DC0: @ 8080DC0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl sub_80808BC - cmp r0, 0x1 - beq _08080E50 - ldr r0, _08080DE8 @ =gSpecialVar_Result - ldrh r0, [r0] - cmp r0, 0x4 - bne _08080DEC - bl sub_8080D8C - cmp r0, 0x1 - beq _08080DFE - bl Link_TryStartSend5FFF - b _08080E02 - .align 2, 0 -_08080DE8: .4byte gSpecialVar_Result -_08080DEC: - cmp r0, 0x3 - bne _08080DF6 - bl Link_TryStartSend5FFF - b _08080E02 -_08080DF6: - cmp r0, 0x7 - beq _08080DFE - cmp r0, 0x9 - bne _08080E20 -_08080DFE: - bl CloseLink -_08080E02: - bl HideFieldMessageBox - ldr r0, _08080E18 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _08080E1C @ =sub_8080F78 - str r0, [r1] - b _08080E50 - .align 2, 0 -_08080E18: .4byte gTasks -_08080E1C: .4byte sub_8080F78 -_08080E20: - bl GetLinkPlayerCount_2 - ldr r4, _08080E58 @ =gFieldLinkPlayerCount - strb r0, [r4] - bl GetMultiplayerId - ldr r1, _08080E5C @ =gLocalLinkPlayerId - strb r0, [r1] - ldrb r0, [r4] - bl sub_800A900 - ldr r0, _08080E60 @ =gBlockSendBuffer - bl TrainerCard_GenerateCardForLinkPlayer - ldr r1, _08080E64 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _08080E68 @ =sub_8080E6C - str r1, [r0] - movs r0, 0x2 - bl sub_800A474 -_08080E50: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08080E58: .4byte gFieldLinkPlayerCount -_08080E5C: .4byte gLocalLinkPlayerId -_08080E60: .4byte gBlockSendBuffer -_08080E64: .4byte gTasks -_08080E68: .4byte sub_8080E6C - thumb_func_end sub_8080DC0 - - thumb_func_start sub_8080E6C -sub_8080E6C: @ 8080E6C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r7, 0 - bl sub_80808BC - cmp r0, 0x1 - beq _08080F66 - bl GetBlockReceivedStatus - adds r4, r0, 0 - bl sub_800A8A4 - lsls r4, 24 - lsls r0, 24 - cmp r4, r0 - bne _08080F66 - movs r5, 0 - lsls r0, r7, 2 - mov r8, r0 - b _08080EF8 -_08080E9A: - ldr r1, _08080ED0 @ =gLinkPlayers - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - adds r6, r0, r1 - ldrb r0, [r6] - subs r0, 0x4 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _08080EDC - lsls r1, r5, 8 - ldr r0, _08080ED4 @ =gBlockRecvBuffer - adds r1, r0 - ldr r0, _08080ED8 @ =gTrainerCards - lsls r4, r5, 1 - adds r4, r5 - lsls r4, 5 - adds r4, r0 - adds r0, r4, 0 - movs r2, 0x38 - bl memcpy - ldrh r0, [r6] - adds r4, 0x38 - strb r0, [r4] - b _08080EF2 - .align 2, 0 -_08080ED0: .4byte gLinkPlayers -_08080ED4: .4byte gBlockRecvBuffer -_08080ED8: .4byte gTrainerCards -_08080EDC: - lsls r1, r5, 8 - ldr r0, _08080F3C @ =gBlockRecvBuffer - adds r1, r0 - ldr r2, _08080F40 @ =gTrainerCards - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 5 - adds r0, r2 - movs r2, 0x60 - bl memcpy -_08080EF2: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 -_08080EF8: - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - cmp r5, r0 - bcc _08080E9A - movs r0, 0 - bl SetSuppressLinkErrorMessage - bl ResetBlockReceivedFlags - bl HideFieldMessageBox - ldr r0, _08080F44 @ =gSpecialVar_Result - ldrh r0, [r0] - cmp r0, 0x1 - bne _08080F54 - ldr r0, _08080F48 @ =gLinkType - ldrh r1, [r0] - ldr r0, _08080F4C @ =0x00004411 - ldr r0, _08080F50 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x12] - bl sub_80807E8 - bl EnableBothScriptContexts - adds r0, r7, 0 - bl DestroyTask - b _08080F66 - .align 2, 0 -_08080F3C: .4byte gBlockRecvBuffer -_08080F40: .4byte gTrainerCards -_08080F44: .4byte gSpecialVar_Result -_08080F48: .4byte gLinkType -_08080F4C: .4byte 0x00004411 -_08080F50: .4byte gTasks -_08080F54: - bl Link_TryStartSend5FFF - ldr r0, _08080F70 @ =gTasks - mov r2, r8 - adds r1, r2, r7 - lsls r1, 3 - adds r1, r0 - ldr r0, _08080F74 @ =sub_8080F78 - str r0, [r1] -_08080F66: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08080F70: .4byte gTasks -_08080F74: .4byte sub_8080F78 - thumb_func_end sub_8080E6C - - 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/asm/overworld.s b/asm/overworld.s index 301b1e01d..2e469cec2 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3741,7 +3741,7 @@ _08056880: .4byte gFieldCallback _08056884: .4byte FieldCB_ReturnToFieldWirelessLink _08056888: ldr r1, _080568A0 @ =gFieldCallback - ldr r0, _080568A4 @ =sub_807DDD0 + ldr r0, _080568A4 @ =FieldCB_ReturnToFieldWiredLink _0805688C: str r0, [r1] bl ScriptContext1_Init @@ -3751,7 +3751,7 @@ _0805688C: bx r0 .align 2, 0 _080568A0: .4byte gFieldCallback -_080568A4: .4byte sub_807DDD0 +_080568A4: .4byte FieldCB_ReturnToFieldWiredLink thumb_func_end c2_8056854 thumb_func_start CB2_ReturnToFieldWithOpenMenu @@ -6809,7 +6809,7 @@ _080580F4: .4byte gUnknown_3000E80 _080580F8: .4byte CableClub_EventScript_TooBusyToNotice _080580FC: adds r0, r2, 0 - bl sub_8081A34 + bl GetSeeingLinkPlayerCardMsg cmp r0, 0 bne _08058110 ldr r0, _0805810C @ =CableClub_EventScript_ReadTrainerCard 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/cable_club.s b/data/cable_club.s deleted file mode 100644 index 8ea8b9167..000000000 --- a/data/cable_club.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83C6AB0:: @ 83C6AB0 - .byte 0, 16, 11, 11, 2, 15 - .2byte 0x125 - -gUnknown_83C6AB8:: @ 83C6AB8 - .4byte gUnknown_841DF8B - .4byte gUnknown_841DF92 - .4byte gUnknown_841DF99 - .4byte gUnknown_841DFA0 diff --git a/data/specials.inc b/data/specials.inc index 19ea756a7..028be3a41 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -38,12 +38,12 @@ 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 - def_special sub_80819B8 - def_special sub_808130C + def_special Special_WiredCableClubTrade + def_special Special_CableClub_AskSaveTheGame def_special nullsub_75 def_special nullsub_75 def_special nullsub_75 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/cable_club.h b/include/cable_club.h index c1dbab1a5..57515efc7 100644 --- a/include/cable_club.h +++ b/include/cable_club.h @@ -9,7 +9,7 @@ // Exported ROM declarations void sub_8081A90(u8 taskId); -u8 sub_8081150(void); -void sub_8081668(void); +u8 CreateTask_ReestablishLinkInCableClubRoom(void); +void CB2_ReturnFromCableClubBattle(void); #endif //GUARD_CABLE_CLUB_H diff --git a/include/event_scripts.h b/include/event_scripts.h index bf16ed2ec..91fba4e1e 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1204,4 +1204,10 @@ extern const u8 EventScript_BagItemCanBeRegistered[]; // fldeff_cut extern const u8 EventScript_FldEffCut[]; +// cable_club +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/field_message_box.h b/include/field_message_box.h index 5777921b7..a6ef14aae 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -8,5 +8,6 @@ bool8 sub_8098238(const u8 *message); bool8 ShowFieldAutoScrollMessage(const u8 *message); void HideFieldMessageBox(void); bool8 IsFieldMessageBoxHidden(void); +bool8 textbox_any_visible(void); #endif // GUARD_FIELD_MESSAGE_BOX_H diff --git a/include/link.h b/include/link.h index e36ac8078..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]; @@ -272,12 +277,17 @@ void ClearLinkCallback_2(void); void LinkRfu_SetRfuFuncToSend6600(void); void IntlConvertLinkPlayerName(struct LinkPlayer * linkPlayer); bool8 IsWirelessAdapterConnected(void); -bool8 sub_800A474(u8 a0); +bool8 sub_800A474(u8 blockRequestType); void LinkVSync(void); bool8 HandleLinkConnection(void); void PrepareLocalLinkPlayerBlock(void); void LinkPlayerFromBlock(u32 who); void SetLinkErrorFromRfu(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06); 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 4fceee38b..1775a6896 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -183,6 +183,12 @@ bool32 sub_8058274(void); u8 GetCurrentMapBattleScene(void); void Overworld_ResetStateAfterFly(void); bool8 sub_8055B38(u16 metatileBehavior); +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 6cee34bbb..3241046bc 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -52,5 +52,6 @@ void sub_8112F18(u8 windowId); bool8 sub_8111C2C(void); void sub_81128BC(u8 a0); void sub_811278C(u8, u8); +void Special_UpdateTrainerFansAfterLinkBattle(void); #endif //GUARD_QUEST_LOG_H diff --git a/include/strings.h b/include/strings.h index 8c19ea5cb..ec5965b75 100644 --- a/include/strings.h +++ b/include/strings.h @@ -1141,4 +1141,11 @@ extern const u8 gText_BestScore2[]; extern const u8 gText_ExcellentsInARow[]; extern const u8 gText_PkmnJumpRecords[]; +// cable_club +extern const u8 gUnknown_841DF82[]; +extern const u8 gUnknown_841DF8B[]; +extern const u8 gUnknown_841DF92[]; +extern const u8 gUnknown_841DF99[]; +extern const u8 gUnknown_841DFA0[]; + #endif //GUARD_STRINGS_H diff --git a/include/trainer_card.h b/include/trainer_card.h index ed3e803d5..2bf20b045 100644 --- a/include/trainer_card.h +++ b/include/trainer_card.h @@ -1,7 +1,7 @@ #ifndef GUARD_TRAINER_CARD_H #define GUARD_TRAINER_CARD_H -struct TrainerCard +struct TrainerCardRSE { /*0x00*/ u8 gender; /*0x01*/ u8 stars; @@ -25,6 +25,11 @@ struct TrainerCard /*0x24*/ u32 money; /*0x28*/ u16 var_28[4]; /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; +}; + +struct TrainerCard +{ + /*0x00*/ struct TrainerCardRSE rse; /*0x38*/ u8 version; /*0x3A*/ u16 var_3A; /*0x3C*/ u32 berryCrushPoints; diff --git a/include/union_room.h b/include/union_room.h index e24bcd480..d520e8763 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_CallCB2ReturnFromLinkTrade(void); #endif //GUARD_UNION_ROOM_H diff --git a/ld_script.txt b/ld_script.txt index a56593731..e16e57209 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -120,7 +120,7 @@ SECTIONS { src/field_fadetransition.o(.text); src/field_screen_effect.o(.text); src/battle_setup.o(.text); - asm/cable_club.o(.text); + src/cable_club.o(.text); src/trainer_see.o(.text); src/wild_encounter.o(.text); src/field_effect.o(.text); @@ -441,7 +441,7 @@ SECTIONS { data/field_weather.o(.rodata); src/field_screen_effect.o(.rodata); src/battle_setup.o(.rodata); - data/cable_club.o(.rodata); + src/cable_club.o(.rodata); src/trainer_see.o(.rodata); src/wild_encounter.o(.rodata); src/field_effect.o(.rodata); diff --git a/src/battle_records.c b/src/battle_records.c index 07ff665d9..e2ae94f65 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -419,7 +419,7 @@ void ClearPlayerLinkBattleRecords(void) static void IncTrainerCardWinCount(s32 battlerId) { - u16 *wins = &gTrainerCards[battlerId].linkBattleWins; + u16 *wins = &gTrainerCards[battlerId].rse.linkBattleWins; (*wins)++; if (*wins > 9999) *wins = 9999; @@ -427,7 +427,7 @@ static void IncTrainerCardWinCount(s32 battlerId) static void IncTrainerCardLossCount(s32 battlerId) { - u16 *losses = &gTrainerCards[battlerId].linkBattleLosses; + u16 *losses = &gTrainerCards[battlerId].rse.linkBattleLosses; (*losses)++; if (*losses > 9999) *losses = 9999; @@ -453,7 +453,7 @@ void TryRecordLinkBattleOutcome(s32 battlerId) if (gSaveBlock1Ptr->location.mapGroup != MAP_GROUP(UNION_ROOM) || gSaveBlock1Ptr->location.mapNum != MAP_NUM(UNION_ROOM)) { UpdateBattleOutcomeOnTrainerCards(battlerId); - AddOpponentLinkBattleRecord(&gSaveBlock2Ptr->linkBattleRecords, gTrainerCards[battlerId].playerName, gTrainerCards[battlerId].trainerId, gBattleOutcome, gLinkPlayers[battlerId].language); + AddOpponentLinkBattleRecord(&gSaveBlock2Ptr->linkBattleRecords, gTrainerCards[battlerId].rse.playerName, gTrainerCards[battlerId].rse.trainerId, gBattleOutcome, gLinkPlayers[battlerId].language); } } diff --git a/src/cable_club.c b/src/cable_club.c new file mode 100644 index 000000000..e7277ed07 --- /dev/null +++ b/src/cable_club.c @@ -0,0 +1,964 @@ +#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 "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[8]; + +static void Task_Linkup0(u8 taskId); +static void Task_Linkup1(u8 taskId); +static void Task_LinkupMaster_2(u8 taskId); +static void Task_LinkupMaster_3(u8 taskId); +static void Task_LinkupMaster_4(u8 taskId); +static void Task_LinkupMaster_5(u8 taskId); +static void Task_LinkupSlave_2(u8 taskId); +static void Task_LinkupMaster_6(u8 taskId); +static void Task_Linkup_6a(u8 taskId); +static void Task_Linkup_7(u8 taskId); +static void Task_Linkup_Canceled(u8 taskId); +static void Task_Linkup_ErroredOut(u8 taskId); +static bool8 Task_Linkup_TimedOut(u8 taskId); +static void Task_ReestablishLinkInCableClubRoom_0(u8 taskId); +static void Task_ReestablishLinkInCableClubRoom_1(u8 taskId); +static void Task_ReestablishLinkInCableClubRoom_Master(u8 taskId); +static void Task_ReestablishLinkInCableClubRoom_2(u8 taskId); + +static const struct WindowTemplate gUnknown_83C6AB0 = { + .bg = 0, + .tilemapLeft = 16, + .tilemapTop = 11, + .width = 11, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x125 +}; + +static const u8 *const sStarsMessagePtrs[] = { + gUnknown_841DF8B, + gUnknown_841DF92, + gUnknown_841DF99, + gUnknown_841DFA0 +}; + +static void CreateLinkupTask(u8 lower, u8 higher) +{ + u8 taskId; + if (FindTaskIdByFunc(Task_Linkup0) == 0xFF) + { + taskId = CreateTask(Task_Linkup0, 80); + gTasks[taskId].data[1] = lower; + gTasks[taskId].data[2] = higher; + } +} + +static void PrintNewCountOnLinkPlayerCountDisplayWindow(u16 windowId, s32 num) +{ + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_LEFT_ALIGN, 1); + SetStdWindowBorderStyle(windowId, FALSE); + StringExpandPlaceholders(gStringVar4, gUnknown_841DF82); + AddTextPrinterParameterized(windowId, 2, gStringVar4, 0, 0, TEXT_SPEED_FF, NULL); + CopyWindowToVram(windowId, 3); +} + +static void DestroyLinkPlayerCountDisplayWindow(u16 windowId) +{ + ClearStdWindowAndFrame(windowId, FALSE); + CopyWindowToVram(windowId, 3); +} + +static void UpdateLinkPlayerCountDisplay(u8 taskId, u8 num) +{ + s16 *data = gTasks[taskId].data; + if (num != data[3]) + { + if (num < 2) + DestroyLinkPlayerCountDisplayWindow(data[5]); + else + PrintNewCountOnLinkPlayerCountDisplayWindow(data[5], num); + data[3] = num; + } +} + +static u16 sub_8080844(u8 lower, u8 higher) +{ + switch (GetLinkPlayerDataExchangeStatusTimed(lower, higher)) + { + case EXCHANGE_COMPLETE: + return 1; + case EXCHANGE_IN_PROGRESS: + return 3; + case EXCHANGE_STAT_4: + return 7; + case EXCHANGE_STAT_5: + return 9; + case EXCHANGE_STAT_6: + ConvertIntToDecimalStringN(gStringVar1, GetLinkPlayerCount_2(), STR_CONV_MODE_LEFT_ALIGN, 1); + return 4; + default: + return 0; + } +} + +static bool32 sub_80808BC(u8 taskId) +{ + if (HasLinkErrorOccurred() == TRUE) + { + gTasks[taskId].func = Task_Linkup_ErroredOut; + return TRUE; + } + return FALSE; +} + +static bool32 sub_80808F0(u8 taskId) +{ + if (JOY_NEW(B_BUTTON) && !IsLinkConnectionEstablished()) + { + gLinkType = 0; + gTasks[taskId].func = Task_Linkup_Canceled; + return TRUE; + } + return FALSE; +} + +static bool32 sub_808093C(u8 taskId) +{ + if (IsLinkConnectionEstablished()) + { + SetSuppressLinkErrorMessage(TRUE); + } + if (JOY_NEW(B_BUTTON)) + { + gLinkType = 0; + gTasks[taskId].func = Task_Linkup_Canceled; + return TRUE; + } + return FALSE; +} + +static bool32 sub_8080990(u8 taskId) +{ + if (GetSioMultiSI() == TRUE) + { + gTasks[taskId].func = Task_Linkup_ErroredOut; + return TRUE; + } + return FALSE; +} + +static void sub_80809C4(u8 taskId) +{ + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 10) + { + sub_800A474(2); + DestroyTask(taskId); + } +} + +static void Task_Linkup0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (data[0] == 0) + { + OpenLinkTimed(); + sub_800AA24(); + ResetLinkPlayers(); + data[5] = AddWindow(&gUnknown_83C6AB0); + } + else if (data[0] > 9) + { + gTasks[taskId].func = Task_Linkup1; + } + data[0]++; +} + +static void Task_Linkup1(u8 taskId) +{ + u8 linkPlayerCount = GetLinkPlayerCount_2(); + if (sub_80808F0(taskId) != TRUE && sub_808093C(taskId) != TRUE && linkPlayerCount >= 2) + { + SetSuppressLinkErrorMessage(TRUE); + gTasks[taskId].data[3] = 0; + if (IsLinkMaster() == TRUE) + { + PlaySE(SE_PIN); + ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); + gTasks[taskId].func = Task_LinkupMaster_2; + } + else + { + PlaySE(SE_BOO); + ShowFieldAutoScrollMessage(CableClub_Text_AwaitingLinkupBCancel); + gTasks[taskId].func = Task_LinkupSlave_2; + } + } +} + +static void Task_LinkupMaster_2(u8 taskId) +{ + if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) + { + gTasks[taskId].data[3] = 0; + gTasks[taskId].func = Task_LinkupMaster_3; + } +} + +static void Task_LinkupMaster_3(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s32 linkPlayerCount = GetLinkPlayerCount_2(); + if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE) + { + UpdateLinkPlayerCountDisplay(taskId, linkPlayerCount); + if (JOY_NEW(A_BUTTON) && linkPlayerCount >= data[1]) + { + sub_800A900(linkPlayerCount); + DestroyLinkPlayerCountDisplayWindow(data[5]); + ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); + ShowFieldAutoScrollMessage(CableClub_Text_StartLinkWithXPlayersAConfirmBCancel); + gTasks[taskId].func = Task_LinkupMaster_4; + } + } +} + +static void Task_LinkupMaster_4(u8 taskId) +{ + if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) + { + if (GetSavedPlayerCount() != GetLinkPlayerCount_2()) + { + ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); + gTasks[taskId].func = Task_LinkupMaster_2; + } + else if (JOY_HELD(B_BUTTON)) + { + ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); + gTasks[taskId].func = Task_LinkupMaster_2; + } + else if (JOY_HELD(A_BUTTON)) + { + PlaySE(SE_SELECT); + CheckShouldAdvanceLinkState(); + gTasks[taskId].func = Task_LinkupMaster_5; + } + } +} + +static void Task_LinkupMaster_5(u8 taskId) +{ + u8 lower = gTasks[taskId].data[1]; + u8 higher = gTasks[taskId].data[2]; + u16 *res; + if (sub_80808BC(taskId) != TRUE && Task_Linkup_TimedOut(taskId) != TRUE) + { + if (GetLinkPlayerCount_2() != GetSavedPlayerCount()) + { + gTasks[taskId].func = Task_Linkup_ErroredOut; + } + else + { + res = &gSpecialVar_Result; + *res = sub_8080844(lower, higher); + if (*res) + gTasks[taskId].func = Task_LinkupMaster_6; + } + } +} + +static void Task_LinkupSlave_2(u8 taskId) +{ + u8 lower = gTasks[taskId].data[1]; + u8 higher = gTasks[taskId].data[2]; + u16 *res; + if (sub_80808F0(taskId) != TRUE && sub_80808BC(taskId) != TRUE) + { + res = &gSpecialVar_Result; + *res = sub_8080844(lower, higher); + if (*res) + { + if (*res == 3 || *res == 4) + { + Link_TryStartSend5FFF(); + HideFieldMessageBox(); + gTasks[taskId].func = Task_Linkup_7; + } + else if (*res == 7 || *res == 9) + { + CloseLink(); + HideFieldMessageBox(); + gTasks[taskId].func = Task_Linkup_7; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gLocalLinkPlayerId = GetMultiplayerId(); + sub_800A900(gFieldLinkPlayerCount); + TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer); + gTasks[taskId].func = Task_Linkup_6a; + } + } + } +} + +static bool32 AnyConnectedPartnersPlayingRS(void) +{ + int i; + u16 version; + + for (i = 0; i < GetLinkPlayerCount(); i++) + { + version = gLinkPlayers[i].version & 0xFF; + if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) + return TRUE; + } + return FALSE; +} + +static void Task_LinkupMaster_6(u8 taskId) +{ + if (sub_80808BC(taskId) != TRUE) + { + if (gSpecialVar_Result == 4) + { + if (AnyConnectedPartnersPlayingRS() == TRUE) + CloseLink(); + else + Link_TryStartSend5FFF(); + HideFieldMessageBox(); + gTasks[taskId].func = Task_Linkup_7; + } + else if (gSpecialVar_Result == 3) + { + Link_TryStartSend5FFF(); + HideFieldMessageBox(); + gTasks[taskId].func = Task_Linkup_7; + } + else if (gSpecialVar_Result == 7 || gSpecialVar_Result == 9) + { + CloseLink(); + HideFieldMessageBox(); + gTasks[taskId].func = Task_Linkup_7; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gLocalLinkPlayerId = GetMultiplayerId(); + sub_800A900(gFieldLinkPlayerCount); + TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer); + gTasks[taskId].func = Task_Linkup_6a; + sub_800A474(2); + } + } +} + +static void Task_Linkup_6a(u8 taskId) +{ + u8 i; + u16 version; + u8 * dest; + if (sub_80808BC(taskId) != TRUE && GetBlockReceivedStatus() == sub_800A8A4()) + { + for(i = 0; i < GetLinkPlayerCount(); i++) + { + version = gLinkPlayers[i].version & 0xFF; + if (version != VERSION_FIRE_RED && version != VERSION_LEAF_GREEN) + { + const struct TrainerCardRSE * src = (const struct TrainerCardRSE *)gBlockRecvBuffer[i]; + gTrainerCards[i].rse = *src; + gTrainerCards[i].version = gLinkPlayers[i].version; + } + else + { + const struct TrainerCard * src = (const struct TrainerCard *)gBlockRecvBuffer[i]; + gTrainerCards[i] = *src; + } + } + SetSuppressLinkErrorMessage(FALSE); + ResetBlockReceivedFlags(); + HideFieldMessageBox(); + if (gSpecialVar_Result == 1) + { + // Dumb trick required to match + if (gLinkType == LINKTYPE_0x4411) + *UnusedVarNeededToMatch += 0; + DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]); + EnableBothScriptContexts(); + DestroyTask(taskId); + } + else + { + Link_TryStartSend5FFF(); + gTasks[taskId].func = Task_Linkup_7; + } + } +} + +static void Task_Linkup_7(u8 taskId) +{ + if (!gReceivedRemoteLinkPlayers) + { + DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]); + EnableBothScriptContexts(); + RemoveWindow(gTasks[taskId].data[5]); + DestroyTask(taskId); + } +} + +static void Task_Linkup_Canceled(u8 taskId) +{ + gSpecialVar_Result = 5; + DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +static void Task_Linkup_ErroredOut(u8 taskId) +{ + gSpecialVar_Result = 6; + DestroyLinkPlayerCountDisplayWindow(gTasks[taskId].data[5]); + HideFieldMessageBox(); + EnableBothScriptContexts(); + DestroyTask(taskId); +} + +static bool8 Task_Linkup_TimedOut(u8 taskId) +{ + gTasks[taskId].data[4]++; + if (gTasks[taskId].data[4] > 600) + { + gTasks[taskId].func = Task_Linkup_ErroredOut; + 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; + } + CreateLinkupTask(lower, higher); +} + +void TryTradeLinkup(void) +{ + gLinkType = LINKTYPE_0x1133; + gBattleTypeFlags = 0; + CreateLinkupTask(2, 2); +} + +void TryRecordMixLinkup(void) +{ + gSpecialVar_Result = 0; + gLinkType = LINKTYPE_0x3311; + gBattleTypeFlags = 0; + CreateLinkupTask(2, 4); +} + +void sub_8081128(void) +{ + gLinkType = LINKTYPE_0x6601; + gBattleTypeFlags = 0; + CreateLinkupTask(4, 4); +} + +u8 CreateTask_ReestablishLinkInCableClubRoom(void) +{ + if (FuncIsActiveTask(Task_ReestablishLinkInCableClubRoom_0)) + 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(Task_ReestablishLinkInCableClubRoom_0, 80); +} + +static void Task_ReestablishLinkInCableClubRoom_0(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 = Task_ReestablishLinkInCableClubRoom_1; + data[0]++; +} + +static void Task_ReestablishLinkInCableClubRoom_1(u8 taskId) +{ + if (GetLinkPlayerCount_2() >= 2) + { + if (IsLinkMaster() == TRUE) + { + gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_Master; + } + else + { + gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_2; + } + } +} + +static void Task_ReestablishLinkInCableClubRoom_Master(u8 taskId) +{ + if (GetSavedPlayerCount() == GetLinkPlayerCount_2()) + { + CheckShouldAdvanceLinkState(); + gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_2; + } +} + +static void Task_ReestablishLinkInCableClubRoom_2(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) + { + sub_800A9A4(); + sub_8009FE8(); + DestroyTask(taskId); + } +} + +void Special_CableClub_AskSaveTheGame(void) +{ + Field_AskSaveTheGame(); +} + +static void Task_StartWiredCableClubBattle(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 = CB2_ReturnFromCableClubBattle; + DestroyTask(taskId); + break; + } +} + +static void Task_StartWirelessCableClubBattle(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 = CB2_ReturnFromCableClubBattle; + DestroyTask(taskId); + break; + } +} + +static void sub_8081624(void) +{ + switch (gMain.state) + { + case 0: + Link_TryStartSend5FFF(); + gMain.state++; + break; + case 1: + if (IsLinkTaskFinished()) + SetMainCallback2(CB2_ReturnToField); + break; + } +} + +void CB2_ReturnFromCableClubBattle(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(); +} + +static void Task_EnterCableClubSeat(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; + } +} + +static void CreateEnterCableClubSeatTaskWithFollowupFunc(TaskFunc followUpFunc) +{ + u8 taskId = CreateTask(Task_EnterCableClubSeat, 80); + SetTaskFuncWithFollowupFunc(taskId, Task_EnterCableClubSeat, followUpFunc); + ScriptContext1_Stop(); +} + +static void Task_StartWiredCableClubTrade(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; + } +} + +static void Task_StartWirelessCableClubTrade(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_CallCB2ReturnFromLinkTrade(); + DestroyTask(taskId); + } + break; + } +} + +void EnterTradeSeat(void) +{ + if (gWirelessCommType) + CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWirelessCableClubTrade); + else + CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWiredCableClubTrade); +} + +static void CreateTask_StartWiredCableClubTrade(void) +{ + CreateTask(Task_StartWiredCableClubTrade, 80); +} + +void Special_WiredCableClubTrade(void) +{ + CreateTask_StartWiredCableClubTrade(); + ScriptContext1_Stop(); +} + +void EnterColosseumPlayerSpot(void) +{ + gLinkType = LINKTYPE_BATTLE; + if (gWirelessCommType) + CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWirelessCableClubBattle); + else + CreateEnterCableClubSeatTaskWithFollowupFunc(Task_StartWiredCableClubBattle); +} + +static void Debug_CreateTaskEnterCableClubSeat(void) +{ + CreateTask(Task_EnterCableClubSeat, 80); + ScriptContext1_Stop(); +} + +void Script_ShowLinkTrainerCard(void) +{ + ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +bool32 GetSeeingLinkPlayerCardMsg(u8 who) +{ + u8 stars; + gSpecialVar_0x8006 = who; + StringCopy(gStringVar1, gLinkPlayers[who].name); + stars = GetTrainerCardStars(who); + if (stars == 0) + return FALSE; + StringCopy(gStringVar2, sStarsMessagePtrs[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); +} + +static void sub_8081AE4(u8 taskId) +{ + if (!gReceivedRemoteLinkPlayers) + { + EnableBothScriptContexts(); + DestroyTask(taskId); + } +} + +static void sub_8081B08(u8 taskId) +{ + Link_TryStartSend5FFF(); + gTasks[taskId].func = sub_8081AE4; +} diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 02a51087f..4ff105056 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -172,7 +172,7 @@ static void task_mpl_807DD60(u8 taskId) switch (task->data[0]) { case 0: - task->data[1] = sub_8081150(); + task->data[1] = CreateTask_ReestablishLinkInCableClubRoom(); task->data[0]++; break; case 1: @@ -192,7 +192,7 @@ static void task_mpl_807DD60(u8 taskId) } } -void sub_807DDD0(void) +void FieldCB_ReturnToFieldWiredLink(void) { ScriptContext2_Enable(); Overworld_PlaySpecialMapMusic(); diff --git a/src/link.c b/src/link.c index 26e223153..cb46a50ff 100644 --- a/src/link.c +++ b/src/link.c @@ -796,7 +796,7 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) if (lower > cmpVal || cmpVal > upper) { sPlayerDataExchangeStatus = EXCHANGE_STAT_6; - return 6; + return EXCHANGE_STAT_6; } else { @@ -1006,15 +1006,15 @@ bool8 SendBlock(u8 unused, const void *src, u16 size) return InitBlockSend(src, size); } -bool8 sub_800A474(u8 a0) +bool8 sub_800A474(u8 blockRequestType) { if (gWirelessCommType == 1) { - return sub_80FA0F8(a0); + return sub_80FA0F8(blockRequestType); } if (gLinkCallback == NULL) { - gBlockRequestType = a0; + gBlockRequestType = blockRequestType; BuildSendCmd(LINKCMD_0xCCCC); return TRUE; } diff --git a/src/trainer_card.c b/src/trainer_card.c index d60738ee6..c35b09386 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -348,28 +348,30 @@ static const u8 sUnknown_83CD95C[] = {7, 6, 0, 0}; static const struct TrainerCard sLinkPlayerTrainerCardTemplate1 = { - .gender = MALE, - .stars = 4, - .hasPokedex = TRUE, - .caughtAllHoenn = TRUE, - .hasAllPaintings = TRUE, - .hofDebutHours = 999, - .hofDebutMinutes = 59, - .hofDebutSeconds = 59, - .caughtMonsCount = 200, - .trainerId = 0x6072, - .playTimeHours = 999, - .playTimeMinutes = 59, - .linkBattleWins = 5535, - .linkBattleLosses = 5535, - .battleTowerWins = 5535, - .battleTowerStraightWins = 5535, - .contestsWithFriends = 55555, - .pokeblocksWithFriends = 44444, - .pokemonTrades = 33333, - .money = 999999, - .var_28 = {0, 0, 0, 0}, - .playerName = _("あかみ どりお"), + .rse = { + .gender = MALE, + .stars = 4, + .hasPokedex = TRUE, + .caughtAllHoenn = TRUE, + .hasAllPaintings = TRUE, + .hofDebutHours = 999, + .hofDebutMinutes = 59, + .hofDebutSeconds = 59, + .caughtMonsCount = 200, + .trainerId = 0x6072, + .playTimeHours = 999, + .playTimeMinutes = 59, + .linkBattleWins = 5535, + .linkBattleLosses = 5535, + .battleTowerWins = 5535, + .battleTowerStraightWins = 5535, + .contestsWithFriends = 55555, + .pokeblocksWithFriends = 44444, + .pokemonTrades = 33333, + .money = 999999, + .var_28 = {0, 0, 0, 0}, + .playerName = _("あかみ どりお") + }, .version = VERSION_FIRE_RED, .var_3A = 0, .berryCrushPoints = 5555, @@ -386,28 +388,30 @@ static const struct TrainerCard sLinkPlayerTrainerCardTemplate1 = static const struct TrainerCard sLinkPlayerTrainerCardTemplate2 = { - .gender = FEMALE, - .stars = 2, - .hasPokedex = TRUE, - .caughtAllHoenn = TRUE, - .hasAllPaintings = TRUE, - .hofDebutHours = 999, - .hofDebutMinutes = 59, - .hofDebutSeconds = 59, - .caughtMonsCount = 200, - .trainerId = 0x6072, - .playTimeHours = 999, - .playTimeMinutes = 59, - .linkBattleWins = 5535, - .linkBattleLosses = 5535, - .battleTowerWins = 65535, - .battleTowerStraightWins = 65535, - .contestsWithFriends = 55555, - .pokeblocksWithFriends = 44444, - .pokemonTrades = 33333, - .money = 999999, - .var_28 = {0, 0, 0, 0}, - .playerName = _("るびさふぁこ!"), + .rse = { + .gender = FEMALE, + .stars = 2, + .hasPokedex = TRUE, + .caughtAllHoenn = TRUE, + .hasAllPaintings = TRUE, + .hofDebutHours = 999, + .hofDebutMinutes = 59, + .hofDebutSeconds = 59, + .caughtMonsCount = 200, + .trainerId = 0x6072, + .playTimeHours = 999, + .playTimeMinutes = 59, + .linkBattleWins = 5535, + .linkBattleLosses = 5535, + .battleTowerWins = 65535, + .battleTowerStraightWins = 65535, + .contestsWithFriends = 55555, + .pokeblocksWithFriends = 44444, + .pokemonTrades = 33333, + .money = 999999, + .var_28 = {0, 0, 0, 0}, + .playerName = _("るびさふぁこ!") + }, .version = 0, .var_3A = 0, .berryCrushPoints = 555, @@ -744,16 +748,16 @@ static u8 GetTrainerStarCount(struct TrainerCard *trainerCard) { u8 stars = 0; - if (trainerCard->hofDebutHours != 0 || trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0) + if (trainerCard->rse.hofDebutHours != 0 || trainerCard->rse.hofDebutMinutes != 0 || trainerCard->rse.hofDebutSeconds != 0) stars++; - if (trainerCard->caughtAllHoenn) + if (trainerCard->rse.caughtAllHoenn) stars++; - if (trainerCard->battleTowerStraightWins > 49) + if (trainerCard->rse.battleTowerStraightWins > 49) stars++; - if (trainerCard->hasAllPaintings) + if (trainerCard->rse.hasAllPaintings) stars++; return stars; @@ -764,63 +768,63 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType) u32 playTime; u8 i; - trainerCard->gender = gSaveBlock2Ptr->playerGender; - trainerCard->playTimeHours = gSaveBlock2Ptr->playTimeHours; - trainerCard->playTimeMinutes = gSaveBlock2Ptr->playTimeMinutes; + trainerCard->rse.gender = gSaveBlock2Ptr->playerGender; + trainerCard->rse.playTimeHours = gSaveBlock2Ptr->playTimeHours; + trainerCard->rse.playTimeMinutes = gSaveBlock2Ptr->playTimeMinutes; playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME); if (!GetGameStat(GAME_STAT_ENTERED_HOF)) playTime = 0; - trainerCard->hofDebutHours = playTime >> 16; - trainerCard->hofDebutMinutes = (playTime >> 8) & 0xFF; - trainerCard->hofDebutSeconds = playTime & 0xFF; + trainerCard->rse.hofDebutHours = playTime >> 16; + trainerCard->rse.hofDebutMinutes = (playTime >> 8) & 0xFF; + trainerCard->rse.hofDebutSeconds = playTime & 0xFF; if ((playTime >> 16) > 999) { - trainerCard->hofDebutHours = 999; - trainerCard->hofDebutMinutes = 59; - trainerCard->hofDebutSeconds = 59; + trainerCard->rse.hofDebutHours = 999; + trainerCard->rse.hofDebutMinutes = 59; + trainerCard->rse.hofDebutSeconds = 59; } - trainerCard->hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET); - trainerCard->caughtAllHoenn = HasAllHoennMons(); - trainerCard->caughtMonsCount = GetCaughtMonsCount(); + trainerCard->rse.hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET); + trainerCard->rse.caughtAllHoenn = HasAllHoennMons(); + trainerCard->rse.caughtMonsCount = GetCaughtMonsCount(); - trainerCard->trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]; + trainerCard->rse.trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]; - trainerCard->linkBattleWins = GetCappedGameStat(GAME_STAT_LINK_BATTLE_WINS, 9999); - trainerCard->linkBattleLosses = GetCappedGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 9999); - trainerCard->pokemonTrades = GetCappedGameStat(GAME_STAT_POKEMON_TRADES, 0xFFFF); + trainerCard->rse.linkBattleWins = GetCappedGameStat(GAME_STAT_LINK_BATTLE_WINS, 9999); + trainerCard->rse.linkBattleLosses = GetCappedGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 9999); + trainerCard->rse.pokemonTrades = GetCappedGameStat(GAME_STAT_POKEMON_TRADES, 0xFFFF); - trainerCard->battleTowerWins = 0; - trainerCard->battleTowerStraightWins = 0; - trainerCard->contestsWithFriends = 0; - trainerCard->pokeblocksWithFriends = 0; + trainerCard->rse.battleTowerWins = 0; + trainerCard->rse.battleTowerStraightWins = 0; + trainerCard->rse.contestsWithFriends = 0; + trainerCard->rse.pokeblocksWithFriends = 0; - trainerCard->hasAllPaintings = FALSE; + trainerCard->rse.hasAllPaintings = FALSE; - trainerCard->money = GetMoney(&gSaveBlock1Ptr->money); + trainerCard->rse.money = GetMoney(&gSaveBlock1Ptr->money); for (i = 0; i < 4; i++) - trainerCard->var_28[i] = gSaveBlock1Ptr->easyChatProfile[i]; + trainerCard->rse.var_28[i] = gSaveBlock1Ptr->easyChatProfile[i]; - StringCopy(trainerCard->playerName, gSaveBlock2Ptr->playerName); + StringCopy(trainerCard->rse.playerName, gSaveBlock2Ptr->playerName); if (cardType == CARD_TYPE_FRLG) { - trainerCard->stars = GetTrainerStarCount(trainerCard); + trainerCard->rse.stars = GetTrainerStarCount(trainerCard); } else if (cardType == CARD_TYPE_EMERALD) { - trainerCard->stars = 0; - if (trainerCard->hofDebutHours != 0 || (trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0)) - trainerCard->stars = cardType; + trainerCard->rse.stars = 0; + if (trainerCard->rse.hofDebutHours != 0 || (trainerCard->rse.hofDebutMinutes != 0 || trainerCard->rse.hofDebutSeconds != 0)) + trainerCard->rse.stars = cardType; if (HasAllKantoMons()) - trainerCard->stars++; + trainerCard->rse.stars++; if (HasAllMons()) - trainerCard->stars++; + trainerCard->rse.stars++; } } @@ -833,11 +837,11 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) if (GetCardType() != CARD_TYPE_FRLG) return; - trainerCard->stars = id; - if (trainerCard->hofDebutHours != 0 || trainerCard->hofDebutMinutes != 0 || trainerCard->hofDebutSeconds != 0) - trainerCard->stars = 1; + trainerCard->rse.stars = id; + if (trainerCard->rse.hofDebutHours != 0 || trainerCard->rse.hofDebutMinutes != 0 || trainerCard->rse.hofDebutSeconds != 0) + trainerCard->rse.stars = 1; - trainerCard->caughtAllHoenn = HasAllKantoMons(); + trainerCard->rse.caughtAllHoenn = HasAllKantoMons(); trainerCard->hasAllMons = HasAllMons(); trainerCard->berriesPicked = gSaveBlock2Ptr->berryPick.berriesPicked; trainerCard->jumpsInRow = gSaveBlock2Ptr->pokeJump.jumpsInRow; @@ -846,17 +850,17 @@ void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) trainerCard->unionRoomNum = GetCappedGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES, 0xFFFF); trainerCard->var_4C = TRUE; - if (trainerCard->caughtAllHoenn) - trainerCard->stars++; + if (trainerCard->rse.caughtAllHoenn) + trainerCard->rse.stars++; if (trainerCard->hasAllMons) - trainerCard->stars++; + trainerCard->rse.stars++; if (trainerCard->berriesPicked >= 200 && trainerCard->jumpsInRow >= 200) - trainerCard->stars++; + trainerCard->rse.stars++; - id = ((u16)trainerCard->trainerId) % 8; - if (trainerCard->gender == FEMALE) + id = ((u16)trainerCard->rse.trainerId) % 8; + if (trainerCard->rse.gender == FEMALE) trainerCard->var_4F = sLinkTrainerCardFacilityClasses[1][id]; else trainerCard->var_4F = sLinkTrainerCardFacilityClasses[0][id]; @@ -889,18 +893,18 @@ static void SetDataFromTrainerCard(void) sTrainerCardDataPtr->hasTrades = FALSE; memset(&sTrainerCardDataPtr->hasBadge, FALSE, BADGE_COUNT); - if (sTrainerCardDataPtr->trainerCard.hasPokedex) + if (sTrainerCardDataPtr->trainerCard.rse.hasPokedex) sTrainerCardDataPtr->hasPokedex++; - if (sTrainerCardDataPtr->trainerCard.hofDebutHours != 0 - || sTrainerCardDataPtr->trainerCard.hofDebutMinutes != 0 - || sTrainerCardDataPtr->trainerCard.hofDebutSeconds != 0) + if (sTrainerCardDataPtr->trainerCard.rse.hofDebutHours != 0 + || sTrainerCardDataPtr->trainerCard.rse.hofDebutMinutes != 0 + || sTrainerCardDataPtr->trainerCard.rse.hofDebutSeconds != 0) sTrainerCardDataPtr->hasHofResult++; - if (sTrainerCardDataPtr->trainerCard.linkBattleWins != 0 || sTrainerCardDataPtr->trainerCard.linkBattleLosses != 0) + if (sTrainerCardDataPtr->trainerCard.rse.linkBattleWins != 0 || sTrainerCardDataPtr->trainerCard.rse.linkBattleLosses != 0) sTrainerCardDataPtr->hasLinkResults++; - if (sTrainerCardDataPtr->trainerCard.pokemonTrades != 0) + if (sTrainerCardDataPtr->trainerCard.rse.pokemonTrades != 0) sTrainerCardDataPtr->hasTrades++; for (i = 0, badgeFlag = FLAG_BADGE01_GET; badgeFlag <= FLAG_BADGE08_GET; badgeFlag++, i++) @@ -1094,7 +1098,7 @@ static void PrintNameOnCard(void) txtPtr = StringCopy(buffer[0], gText_TrainerCardName); txtPtr = buffer[1]; - StringCopy(txtPtr, sTrainerCardDataPtr->trainerCard.playerName); + StringCopy(txtPtr, sTrainerCardDataPtr->trainerCard.rse.playerName); ConvertInternationalString(txtPtr, sTrainerCardDataPtr->language); StringAppend(buffer[0], txtPtr); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardPlayerNameXPositions[sTrainerCardDataPtr->cardType], sTrainerCardPlayerNameYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer[0]); @@ -1106,7 +1110,7 @@ static void PrintIdOnCard(void) u8* txtPtr; txtPtr = StringCopy(buffer, gText_TrainerCardIDNo); - ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); + ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.rse.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); AddTextPrinterParameterized3(1, sTrainerCardFontIds[1], sTrainerCardIdXPositions[sTrainerCardDataPtr->cardType], sTrainerCardIdYPositions[sTrainerCardDataPtr->cardType], sFireRedTrainerCardPage1TextColors, TEXT_SPEED_FF, buffer); } @@ -1117,7 +1121,7 @@ static void PrintMoneyOnCard(void) u8 x; txtPtr = StringCopy(buffer, gText_TrainerCardYen); - ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6); + ConvertIntToDecimalStringN(txtPtr, sTrainerCardDataPtr->trainerCard.rse.money, STR_CONV_MODE_LEFT_ALIGN, 6); if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) { x = -122 - 6 * StringLength(buffer); @@ -1147,7 +1151,7 @@ static void PrintPokedexOnCard(void) if (FlagGet(FLAG_SYS_POKEDEX_GET)) { - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.caughtMonsCount, 0, 3); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.caughtMonsCount, 0, 3); if (sTrainerCardDataPtr->cardType != CARD_TYPE_EMERALD) { x = -120 - 6 * StringLength(buffer); @@ -1175,8 +1179,8 @@ static void PrintTimeOnCard(void) minutes = gSaveBlock2Ptr->playTimeMinutes; if (sTrainerCardDataPtr->isLink) { - hours = sTrainerCardDataPtr->trainerCard.playTimeHours; - minutes = sTrainerCardDataPtr->trainerCard.playTimeMinutes; + hours = sTrainerCardDataPtr->trainerCard.rse.playTimeHours; + minutes = sTrainerCardDataPtr->trainerCard.rse.playTimeMinutes; } if (hours > 999) @@ -1221,7 +1225,7 @@ static void PrintProfilePhraseOnCard(void) static void PrintNameOnCard2(void) { - StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->trainerCard.playerName); + StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->trainerCard.rse.playerName); ConvertInternationalString(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_NAME], sTrainerCardDataPtr->language); if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) { @@ -1254,13 +1258,13 @@ static void PrintHofTimeOnCard(void) if (sTrainerCardDataPtr->hasHofResult) { - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3); txtPtr = StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer); StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], gText_Colon2, 2); - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer, 3); StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], gText_Colon2, 2); - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppendN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_HOF_TIME], buffer, 3); } } @@ -1282,9 +1286,9 @@ static void PrintLinkResultsNumsOnCard(void) { StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_RECORD], sLinkTrainerCardRecordStrings[sTrainerCardDataPtr->cardType]); StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_WIN_LOSS], gText_WinLossRatio); - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.linkBattleWins, STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.linkBattleWins, STR_CONV_MODE_RIGHT_ALIGN, 4); StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_WINS], buffer); - ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.linkBattleLosses, STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(buffer, sTrainerCardDataPtr->trainerCard.rse.linkBattleLosses, STR_CONV_MODE_RIGHT_ALIGN, 4); StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_LINK_LOSSES], buffer); } } @@ -1306,7 +1310,7 @@ static void PrintTradesNumOnCard(void) if (sTrainerCardDataPtr->hasTrades) { StringCopy(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADES], gText_PokemonTrades); - ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT], sTrainerCardDataPtr->trainerCard.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); + ConvertIntToDecimalStringN(sTrainerCardDataPtr->strings[TRAINER_CARD_STRING_TRADE_COUNT], sTrainerCardDataPtr->trainerCard.rse.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); } } @@ -1447,9 +1451,9 @@ static bool8 SetTrainerCardBgsAndPals(void) break; case 2: if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) - LoadPalette(sEmeraldTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); + LoadPalette(sEmeraldTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.rse.stars], 0, 96); else - LoadPalette(sFireRedTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.stars], 0, 96); + LoadPalette(sFireRedTrainerCardStarPals[sTrainerCardDataPtr->trainerCard.rse.stars], 0, 96); break; case 3: if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD) @@ -1458,9 +1462,9 @@ static bool8 SetTrainerCardBgsAndPals(void) LoadPalette(sFireRedTrainerCardBadges_Pal, 48, 32); break; case 4: - if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.gender != MALE) + if (sTrainerCardDataPtr->cardType == CARD_TYPE_EMERALD && sTrainerCardDataPtr->trainerCard.rse.gender != MALE) LoadPalette(sEmeraldTrainerCardFemaleBackground_Pal, 16, 32); - else if (sTrainerCardDataPtr->trainerCard.gender != MALE) + else if (sTrainerCardDataPtr->trainerCard.rse.gender != MALE) LoadPalette(sFireRedTrainerCardFemaleBackground_Pal, 16, 32); break; case 5: @@ -1525,7 +1529,7 @@ static void TrainerCard_PrintStarsAndBadgesOnCard(void) u16 tileNum = 192; u8 palNum = 3; - FillBgTilemapBufferRect(3, 143, 15, sUnknown_83CD95C[sTrainerCardDataPtr->cardType], sTrainerCardDataPtr->trainerCard.stars, 1, 4); + FillBgTilemapBufferRect(3, 143, 15, sUnknown_83CD95C[sTrainerCardDataPtr->cardType], sTrainerCardDataPtr->trainerCard.rse.stars, 1, 4); if (!sTrainerCardDataPtr->isLink) { x = 4; @@ -1590,7 +1594,7 @@ static void sub_808B180(void) u8 GetTrainerCardStars(u8 cardId) { - return gTrainerCards[cardId].stars; + return gTrainerCards[cardId].rse.stars; } static void sub_808B1D4(void) @@ -1855,7 +1859,7 @@ static void sub_808B774(void) for (i = 0; i < 4; i++) { - CopyEasyChatWord(sTrainerCardDataPtr->var_19[i], sTrainerCardDataPtr->trainerCard.var_28[i]); + CopyEasyChatWord(sTrainerCardDataPtr->var_19[i], sTrainerCardDataPtr->trainerCard.rse.var_28[i]); } } @@ -1879,26 +1883,26 @@ static u8 GetCardType(void) static void sub_808B838(void) { - u8 val = sLinkTrainerCardFrontPics[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender]; + u8 val = sLinkTrainerCardFrontPics[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender]; if (InUnionRoom() == TRUE && gReceivedRemoteLinkPlayers == 1) { val = sTrainerCardDataPtr->trainerCard.var_4F; - sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2); + sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0], + sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1], 8, 2); } else { if (sTrainerCardDataPtr->cardType != CARD_TYPE_FRLG) { - sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], 8, 2); + sub_810C330(FacilityClassToPicIndex(val), TRUE, sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0], + sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1], 8, 2); } else { - sub_810C330(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.gender, TRUE), TRUE, - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][0], - sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.gender][1], + sub_810C330(PlayerGenderToFrontTrainerPicId_Debug(sTrainerCardDataPtr->trainerCard.rse.gender, TRUE), TRUE, + sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][0], + sTrainerCardPicPositions[sTrainerCardDataPtr->cardType][sTrainerCardDataPtr->trainerCard.rse.gender][1], 8, 2); } } diff --git a/src/union_room.c b/src/union_room.c index f3aeeebc5..f4169b65b 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1735,7 +1735,7 @@ static void Task_CallCB2ReturnFromLinkTrade(u8 taskId) DestroyTask(taskId); } -u8 UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade(void) +u8 UnionRoom_CreateTask_CallCB2ReturnFromLinkTrade(void) { u8 taskId = CreateTask(Task_CallCB2ReturnFromLinkTrade, 0); @@ -1848,7 +1848,7 @@ void StartUnionRoomBattle(u16 battleFlags) gLinkPlayers[0].linkType = LINKTYPE_BATTLE; gLinkPlayers[GetMultiplayerId()].id = GetMultiplayerId(); gLinkPlayers[GetMultiplayerId() ^ 1].id = GetMultiplayerId() ^ 1; - gMain.savedCallback = sub_8081668; + gMain.savedCallback = CB2_ReturnFromCableClubBattle; gBattleTypeFlags = battleFlags; PlayBattleBGM(); } @@ -4692,23 +4692,23 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro StringCopy(uroom->trainerCardStrbufs[0], gTrainerClassNames[sub_80447F0()]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->rse.playerName); - StringCopy(uroom->field_174, gUnknown_84594B0[trainerCard->stars]); + StringCopy(uroom->field_174, gUnknown_84594B0[trainerCard->rse.stars]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->field_174); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->rse.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[3], trainerCard->rse.playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[4], trainerCard->rse.playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, uroom->trainerCardStrbufs[3]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, uroom->trainerCardStrbufs[4]); DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_84594C4); StringCopy(gStringVar4, uroom->field_1A4); - n = trainerCard->linkBattleWins; + n = trainerCard->rse.linkBattleWins; if (n > 9999) { n = 9999; @@ -4716,7 +4716,7 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]); - n = trainerCard->linkBattleLosses; + n = trainerCard->rse.linkBattleLosses; if (n > 9999) { n = 9999; @@ -4724,12 +4724,12 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->trainerCardStrbufs[1]); - ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->rse.pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]); for (i = 0; i < 4; i++) { - CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->var_28[i]); + CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->rse.var_28[i]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, uroom->trainerCardStrbufs[i + 3]); } @@ -4743,7 +4743,7 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro } else if (parent_child == MODE_CHILD) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459580[trainerCard->gender]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459580[trainerCard->rse.gender]); StringAppend(gStringVar4, uroom->field_1A4); } } diff --git a/sym_common.txt b/sym_common.txt index b20ad7411..37fa1cf7c 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -73,9 +73,8 @@ gUnknown_3005078: @ 3005078 .include "sound.o" .align 2 .include "task.o" - - @ what is this? - .space 0x20 + .align 2 + .include "cable_club.o" .align 2 .include "image_processing_effects.o" .align 2 |