summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2020-02-29 14:30:01 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2020-02-29 14:30:01 -0500
commit9b9ae3d3374dd61870d47f025ffc0346a0b6839c (patch)
treeb3bb8a00adf53de8aabc7acede5191ab944ca8d3
parent43f66fce5574592ac1c37b9452fe858e482156bb (diff)
through sub_8080E6C
-rw-r--r--asm/cable_club.s1024
-rw-r--r--data/cable_club.s15
-rw-r--r--include/event_scripts.h5
-rw-r--r--include/field_message_box.h1
-rw-r--r--include/link.h5
-rw-r--r--include/strings.h7
-rw-r--r--include/trainer_card.h7
-rw-r--r--ld_script.txt3
-rw-r--r--src/battle_records.c6
-rw-r--r--src/cable_club.c397
-rw-r--r--src/link.c8
-rw-r--r--src/trainer_card.c248
-rw-r--r--src/union_room.c20
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);
}
}