diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-02-29 14:30:01 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-02-29 14:30:01 -0500 |
commit | 9b9ae3d3374dd61870d47f025ffc0346a0b6839c (patch) | |
tree | b3bb8a00adf53de8aabc7acede5191ab944ca8d3 | |
parent | 43f66fce5574592ac1c37b9452fe858e482156bb (diff) |
through sub_8080E6C
-rw-r--r-- | asm/cable_club.s | 1024 | ||||
-rw-r--r-- | data/cable_club.s | 15 | ||||
-rw-r--r-- | include/event_scripts.h | 5 | ||||
-rw-r--r-- | include/field_message_box.h | 1 | ||||
-rw-r--r-- | include/link.h | 5 | ||||
-rw-r--r-- | include/strings.h | 7 | ||||
-rw-r--r-- | include/trainer_card.h | 7 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/battle_records.c | 6 | ||||
-rw-r--r-- | src/cable_club.c | 397 | ||||
-rw-r--r-- | src/link.c | 8 | ||||
-rw-r--r-- | src/trainer_card.c | 248 | ||||
-rw-r--r-- | src/union_room.c | 20 |
13 files changed, 565 insertions, 1181 deletions
diff --git a/asm/cable_club.s b/asm/cable_club.s index 92f14461a..9bf812bf0 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -5,1030 +5,6 @@ .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} 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/include/event_scripts.h b/include/event_scripts.h index bf16ed2ec..7cd51fa98 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1204,4 +1204,9 @@ 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[]; + #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..820e03e6c 100644 --- a/include/link.h +++ b/include/link.h @@ -272,12 +272,15 @@ 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); #endif // GUARD_LINK_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/ld_script.txt b/ld_script.txt index aed18fed9..2223413db 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -120,6 +120,7 @@ SECTIONS { src/field_fadetransition.o(.text); src/field_screen_effect.o(.text); src/battle_setup.o(.text); + src/cable_club.o(.text); asm/cable_club.o(.text); src/trainer_see.o(.text); src/wild_encounter.o(.text); @@ -441,7 +442,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); data/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..348a2a83d --- /dev/null +++ b/src/cable_club.c @@ -0,0 +1,397 @@ +#include "global.h" +#include "gflib.h" +#include "event_data.h" +#include "event_scripts.h" +#include "field_message_box.h" +#include "link.h" +#include "overworld.h" +#include "new_menu_helpers.h" +#include "script.h" +#include "strings.h" +#include "task.h" +#include "trainer_card.h" +#include "constants/songs.h" + +void sub_80809F8(u8 taskId); +void sub_8080A4C(u8 taskId); +void sub_8080AD0(u8 taskId); +void sub_8080B20(u8 taskId); +void sub_8080BC8(u8 taskId); +void sub_8080C6C(u8 taskId); +void sub_8080CDC(u8 taskId); +void sub_8080DC0(u8 taskId); +void sub_8080E6C(u8 taskId); +void sub_8080F78(u8 taskId); +void sub_8080FB4(u8 taskId); +void sub_8080FF0(u8 taskId); +bool8 sub_808102C(u8 taskId); + +static const struct WindowTemplate gUnknown_83C6AB0 = { + .bg = 0, + .tilemapLeft = 16, + .tilemapTop = 11, + .width = 11, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x125 +}; + +const u8 *const gUnknown_83C6AB8[] = { + gUnknown_841DF8B, + gUnknown_841DF92, + gUnknown_841DF99, + gUnknown_841DFA0 +}; + +void sub_8080748(u8 a0, u8 a1) +{ + u8 taskId; + if (FindTaskIdByFunc(sub_80809F8) == 0xFF) + { + taskId = CreateTask(sub_80809F8, 80); + gTasks[taskId].data[1] = a0; + gTasks[taskId].data[2] = a1; + } +} + +void sub_808078C(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); +} + +void sub_80807E8(u16 windowId) +{ + ClearStdWindowAndFrame(windowId, FALSE); + CopyWindowToVram(windowId, 3); +} + +void sub_8080808(u8 taskId, u8 num) +{ + s16 *data = gTasks[taskId].data; + if (num != data[3]) + { + if (num < 2) + sub_80807E8(data[5]); + else + sub_808078C(data[5], num); + data[3] = num; + } +} + +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; + } +} + +bool32 sub_80808BC(u8 taskId) +{ + if (HasLinkErrorOccurred() == TRUE) + { + gTasks[taskId].func = sub_8080FF0; + return TRUE; + } + return FALSE; +} + +bool32 sub_80808F0(u8 taskId) +{ + if (JOY_NEW(B_BUTTON) && !IsLinkConnectionEstablished()) + { + gLinkType = 0; + gTasks[taskId].func = sub_8080FB4; + return TRUE; + } + return FALSE; +} + +bool32 sub_808093C(u8 taskId) +{ + if (IsLinkConnectionEstablished()) + { + SetSuppressLinkErrorMessage(TRUE); + } + if (JOY_NEW(B_BUTTON)) + { + gLinkType = 0; + gTasks[taskId].func = sub_8080FB4; + return TRUE; + } + return FALSE; +} + +bool32 sub_8080990(u8 taskId) +{ + if (GetSioMultiSI() == TRUE) + { + gTasks[taskId].func = sub_8080FF0; + return TRUE; + } + return FALSE; +} + +void sub_80809C4(u8 taskId) +{ + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0] == 10) + { + sub_800A474(2); + DestroyTask(taskId); + } +} + +void sub_80809F8(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 = sub_8080A4C; + } + data[0]++; +} + +void sub_8080A4C(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 = sub_8080AD0; + } + else + { + PlaySE(SE_BOO); + ShowFieldAutoScrollMessage(CableClub_Text_AwaitingLinkupBCancel); + gTasks[taskId].func = sub_8080CDC; + } + } +} + +void sub_8080AD0(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 = sub_8080B20; + } +} + +void sub_8080B20(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s32 linkPlayerCount = GetLinkPlayerCount_2(); + if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE) + { + sub_8080808(taskId, linkPlayerCount); + if (JOY_NEW(A_BUTTON) && linkPlayerCount >= data[1]) + { + sub_800A900(linkPlayerCount); + sub_80807E8(data[5]); + ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); + ShowFieldAutoScrollMessage(CableClub_Text_StartLinkWithXPlayersAConfirmBCancel); + gTasks[taskId].func = sub_8080BC8; + } + } +} + +void sub_8080BC8(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 = sub_8080AD0; + } + else if (JOY_HELD(B_BUTTON)) + { + ShowFieldAutoScrollMessage(CableClub_Text_WhenAllPlayersReadyAConfirmBCancel); + gTasks[taskId].func = sub_8080AD0; + } + else if (JOY_HELD(A_BUTTON)) + { + PlaySE(SE_SELECT); + CheckShouldAdvanceLinkState(); + gTasks[taskId].func = sub_8080C6C; + } + } +} + +void sub_8080C6C(u8 taskId) +{ + u8 lower = gTasks[taskId].data[1]; + u8 higher = gTasks[taskId].data[2]; + u16 *res; + if (sub_80808BC(taskId) != TRUE && sub_808102C(taskId) != TRUE) + { + if (GetLinkPlayerCount_2() != GetSavedPlayerCount()) + { + gTasks[taskId].func = sub_8080FF0; + } + else + { + res = &gSpecialVar_Result; + *res = sub_8080844(lower, higher); + if (*res) + gTasks[taskId].func = sub_8080DC0; + } + } +} + +void sub_8080CDC(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 = sub_8080F78; + } + else if (*res == 7 || *res == 9) + { + CloseLink(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_8080F78; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gLocalLinkPlayerId = GetMultiplayerId(); + sub_800A900(gFieldLinkPlayerCount); + TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer); + gTasks[taskId].func = sub_8080E6C; + } + } + } +} + +bool32 sub_8080D8C(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; +} + +void sub_8080DC0(u8 taskId) +{ + if (sub_80808BC(taskId) != TRUE) + { + if (gSpecialVar_Result == 4) + { + if (sub_8080D8C() == TRUE) + CloseLink(); + else + Link_TryStartSend5FFF(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_8080F78; + } + else if (gSpecialVar_Result == 3) + { + Link_TryStartSend5FFF(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_8080F78; + } + else if (gSpecialVar_Result == 7 || gSpecialVar_Result == 9) + { + CloseLink(); + HideFieldMessageBox(); + gTasks[taskId].func = sub_8080F78; + } + else + { + gFieldLinkPlayerCount = GetLinkPlayerCount_2(); + gLocalLinkPlayerId = GetMultiplayerId(); + sub_800A900(gFieldLinkPlayerCount); + TrainerCard_GenerateCardForLinkPlayer((void*)gBlockSendBuffer); + gTasks[taskId].func = sub_8080E6C; + sub_800A474(2); + } + } +} + +void sub_8080E6C(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 == 0x4411) + gFieldLinkPlayerCount += 0; + sub_80807E8(gTasks[taskId].data[5]); + EnableBothScriptContexts(); + DestroyTask(taskId); + } + else + { + Link_TryStartSend5FFF(); + gTasks[taskId].func = sub_8080F78; + } + } +} 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..40582ef0d 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -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); } } |