link through CheckErrorStatus
This commit is contained in:
+1
-1
@@ -1645,7 +1645,7 @@ _08010B2A:
|
|||||||
ldrb r0, [r0]
|
ldrb r0, [r0]
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
beq _08010B64
|
beq _08010B64
|
||||||
bl IsNoOneConnected
|
bl IsRfuTaskFinished
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
beq _08010B82
|
beq _08010B82
|
||||||
|
|||||||
+11
-11
@@ -142,7 +142,7 @@ sub_8080844: @ 8080844
|
|||||||
lsrs r0, 24
|
lsrs r0, 24
|
||||||
lsls r1, 24
|
lsls r1, 24
|
||||||
lsrs r1, 24
|
lsrs r1, 24
|
||||||
bl sub_800A0D0
|
bl GetLinkPlayerDataExchangeStatusTimed
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
lsrs r0, 24
|
lsrs r0, 24
|
||||||
subs r0, 0x1
|
subs r0, 0x1
|
||||||
@@ -384,9 +384,9 @@ sub_80809F8: @ 80809F8
|
|||||||
ldrsh r2, [r4, r3]
|
ldrsh r2, [r4, r3]
|
||||||
cmp r2, 0
|
cmp r2, 0
|
||||||
bne _08080A30
|
bne _08080A30
|
||||||
bl sub_800A0B4
|
bl OpenLinkTimed
|
||||||
bl sub_800AA24
|
bl sub_800AA24
|
||||||
bl sub_800A270
|
bl ResetLinkPlayers
|
||||||
ldr r0, _08080A2C @ =gUnknown_83C6AB0
|
ldr r0, _08080A2C @ =gUnknown_83C6AB0
|
||||||
bl AddWindow
|
bl AddWindow
|
||||||
strh r0, [r4, 0xA]
|
strh r0, [r4, 0xA]
|
||||||
@@ -608,7 +608,7 @@ sub_8080BC8: @ 8080BC8
|
|||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
bne _08080C5C
|
bne _08080C5C
|
||||||
bl sub_800A944
|
bl GetSavedPlayerCount
|
||||||
adds r4, r0, 0
|
adds r4, r0, 0
|
||||||
bl GetLinkPlayerCount_2
|
bl GetLinkPlayerCount_2
|
||||||
lsls r4, 24
|
lsls r4, 24
|
||||||
@@ -685,7 +685,7 @@ sub_8080C6C: @ 8080C6C
|
|||||||
beq _08080CCE
|
beq _08080CCE
|
||||||
bl GetLinkPlayerCount_2
|
bl GetLinkPlayerCount_2
|
||||||
adds r4, r0, 0
|
adds r4, r0, 0
|
||||||
bl sub_800A944
|
bl GetSavedPlayerCount
|
||||||
lsls r4, 24
|
lsls r4, 24
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
cmp r4, r0
|
cmp r4, r0
|
||||||
@@ -1368,7 +1368,7 @@ sub_80811FC: @ 80811FC
|
|||||||
cmp r2, 0
|
cmp r2, 0
|
||||||
bne _08081230
|
bne _08081230
|
||||||
bl OpenLink
|
bl OpenLink
|
||||||
bl sub_800A270
|
bl ResetLinkPlayers
|
||||||
ldr r0, _0808122C @ =sub_8081A90
|
ldr r0, _0808122C @ =sub_8081A90
|
||||||
movs r1, 0x50
|
movs r1, 0x50
|
||||||
bl CreateTask
|
bl CreateTask
|
||||||
@@ -1443,7 +1443,7 @@ sub_80812A0: @ 80812A0
|
|||||||
push {r4,r5,lr}
|
push {r4,r5,lr}
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
lsrs r5, r0, 24
|
lsrs r5, r0, 24
|
||||||
bl sub_800A944
|
bl GetSavedPlayerCount
|
||||||
adds r4, r0, 0
|
adds r4, r0, 0
|
||||||
bl GetLinkPlayerCount_2
|
bl GetLinkPlayerCount_2
|
||||||
lsls r4, 24
|
lsls r4, 24
|
||||||
@@ -1541,7 +1541,7 @@ _0808135C:
|
|||||||
ldr r2, _08081378 @ =0x00002211
|
ldr r2, _08081378 @ =0x00002211
|
||||||
adds r0, r2, 0
|
adds r0, r2, 0
|
||||||
strh r0, [r1]
|
strh r0, [r1]
|
||||||
bl sub_800A068
|
bl ClearLinkCallback_2
|
||||||
b _080813AA
|
b _080813AA
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
_08081374: .4byte gLinkType
|
_08081374: .4byte gLinkType
|
||||||
@@ -1698,7 +1698,7 @@ _080814A0:
|
|||||||
ldr r2, _080814C0 @ =0x00002211
|
ldr r2, _080814C0 @ =0x00002211
|
||||||
adds r1, r2, 0
|
adds r1, r2, 0
|
||||||
strh r1, [r0]
|
strh r1, [r0]
|
||||||
bl sub_800A068
|
bl ClearLinkCallback_2
|
||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
strh r0, [r6]
|
strh r0, [r6]
|
||||||
b _0808160A
|
b _0808160A
|
||||||
@@ -2180,7 +2180,7 @@ _08081882:
|
|||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
movs r1, 0
|
movs r1, 0
|
||||||
bl fade_screen
|
bl fade_screen
|
||||||
bl sub_800A068
|
bl ClearLinkCallback_2
|
||||||
b _080818B8
|
b _080818B8
|
||||||
_08081894:
|
_08081894:
|
||||||
ldr r0, _080818A4 @ =gPaletteFade
|
ldr r0, _080818A4 @ =gPaletteFade
|
||||||
@@ -2256,7 +2256,7 @@ _0808191A:
|
|||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
movs r1, 0
|
movs r1, 0
|
||||||
bl fade_screen
|
bl fade_screen
|
||||||
bl sub_80F985C
|
bl Rfu_set_zero
|
||||||
b _08081950
|
b _08081950
|
||||||
_0808192C:
|
_0808192C:
|
||||||
ldr r0, _0808193C @ =gPaletteFade
|
ldr r0, _0808193C @ =gPaletteFade
|
||||||
|
|||||||
-1787
File diff suppressed because it is too large
Load Diff
+30
-30
@@ -2148,8 +2148,8 @@ _080F9718: .4byte gUnknown_3005AF0
|
|||||||
_080F971C: .4byte gUnknown_30054BE
|
_080F971C: .4byte gUnknown_30054BE
|
||||||
thumb_func_end sub_80F965C
|
thumb_func_end sub_80F965C
|
||||||
|
|
||||||
thumb_func_start sub_80F9720
|
thumb_func_start Rfu_SetBlockReceivedFlag
|
||||||
sub_80F9720: @ 80F9720
|
Rfu_SetBlockReceivedFlag: @ 80F9720
|
||||||
push {lr}
|
push {lr}
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
lsrs r1, r0, 24
|
lsrs r1, r0, 24
|
||||||
@@ -2173,10 +2173,10 @@ _080F9740:
|
|||||||
_080F9748:
|
_080F9748:
|
||||||
pop {r0}
|
pop {r0}
|
||||||
bx r0
|
bx r0
|
||||||
thumb_func_end sub_80F9720
|
thumb_func_end Rfu_SetBlockReceivedFlag
|
||||||
|
|
||||||
thumb_func_start sub_80F974C
|
thumb_func_start Rfu_ResetBlockReceivedFlag
|
||||||
sub_80F974C: @ 80F974C
|
Rfu_ResetBlockReceivedFlag: @ 80F974C
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
lsrs r0, 24
|
lsrs r0, 24
|
||||||
ldr r3, _080F976C @ =gUnknown_3005450
|
ldr r3, _080F976C @ =gUnknown_3005450
|
||||||
@@ -2194,7 +2194,7 @@ sub_80F974C: @ 80F974C
|
|||||||
bx lr
|
bx lr
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
_080F976C: .4byte gUnknown_3005450
|
_080F976C: .4byte gUnknown_3005450
|
||||||
thumb_func_end sub_80F974C
|
thumb_func_end Rfu_ResetBlockReceivedFlag
|
||||||
|
|
||||||
thumb_func_start sub_80F9770
|
thumb_func_start sub_80F9770
|
||||||
sub_80F9770: @ 80F9770
|
sub_80F9770: @ 80F9770
|
||||||
@@ -2281,8 +2281,8 @@ sub_80F9800: @ 80F9800
|
|||||||
_080F9804: .4byte gUnknown_3005440
|
_080F9804: .4byte gUnknown_3005440
|
||||||
thumb_func_end sub_80F9800
|
thumb_func_end sub_80F9800
|
||||||
|
|
||||||
thumb_func_start sub_80F9808
|
thumb_func_start IsSendingKeysToRfu
|
||||||
sub_80F9808: @ 80F9808
|
IsSendingKeysToRfu: @ 80F9808
|
||||||
push {lr}
|
push {lr}
|
||||||
movs r2, 0
|
movs r2, 0
|
||||||
ldr r0, _080F9820 @ =gUnknown_3005450
|
ldr r0, _080F9820 @ =gUnknown_3005450
|
||||||
@@ -2298,7 +2298,7 @@ _080F9818:
|
|||||||
.align 2, 0
|
.align 2, 0
|
||||||
_080F9820: .4byte gUnknown_3005450
|
_080F9820: .4byte gUnknown_3005450
|
||||||
_080F9824: .4byte rfu_func_080F97B8
|
_080F9824: .4byte rfu_func_080F97B8
|
||||||
thumb_func_end sub_80F9808
|
thumb_func_end IsSendingKeysToRfu
|
||||||
|
|
||||||
thumb_func_start sub_80F9828
|
thumb_func_start sub_80F9828
|
||||||
sub_80F9828: @ 80F9828
|
sub_80F9828: @ 80F9828
|
||||||
@@ -2326,15 +2326,15 @@ _080F9854: .4byte gUnknown_843EDC4
|
|||||||
_080F9858: .4byte rfu_func_080F97B8
|
_080F9858: .4byte rfu_func_080F97B8
|
||||||
thumb_func_end sub_80F9828
|
thumb_func_end sub_80F9828
|
||||||
|
|
||||||
thumb_func_start sub_80F985C
|
thumb_func_start Rfu_set_zero
|
||||||
sub_80F985C: @ 80F985C
|
Rfu_set_zero: @ 80F985C
|
||||||
ldr r1, _080F9864 @ =gUnknown_3005450
|
ldr r1, _080F9864 @ =gUnknown_3005450
|
||||||
movs r0, 0
|
movs r0, 0
|
||||||
str r0, [r1]
|
str r0, [r1]
|
||||||
bx lr
|
bx lr
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
_080F9864: .4byte gUnknown_3005450
|
_080F9864: .4byte gUnknown_3005450
|
||||||
thumb_func_end sub_80F985C
|
thumb_func_end Rfu_set_zero
|
||||||
|
|
||||||
thumb_func_start sub_80F9868
|
thumb_func_start sub_80F9868
|
||||||
sub_80F9868: @ 80F9868
|
sub_80F9868: @ 80F9868
|
||||||
@@ -2597,7 +2597,7 @@ _080F9A4C:
|
|||||||
mov r1, r8
|
mov r1, r8
|
||||||
lsls r0, r1, 24
|
lsls r0, r1, 24
|
||||||
lsrs r0, 24
|
lsrs r0, 24
|
||||||
bl sub_80F9720
|
bl Rfu_SetBlockReceivedFlag
|
||||||
bl sub_80F9800
|
bl sub_80F9800
|
||||||
ldrb r1, [r0, 0xA]
|
ldrb r1, [r0, 0xA]
|
||||||
movs r0, 0x7F
|
movs r0, 0x7F
|
||||||
@@ -2637,7 +2637,7 @@ _080F9A9C:
|
|||||||
adds r2, 0x4
|
adds r2, 0x4
|
||||||
adds r1, r2
|
adds r1, r2
|
||||||
ldrh r1, [r1]
|
ldrh r1, [r1]
|
||||||
bl sub_80F9E60
|
bl Rfu_InitBlockSend
|
||||||
b _080F9BF4
|
b _080F9BF4
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
_080F9AB8: .4byte gUnknown_843EC64
|
_080F9AB8: .4byte gUnknown_843EC64
|
||||||
@@ -2909,8 +2909,8 @@ sub_80F9CB4: @ 80F9CB4
|
|||||||
bx lr
|
bx lr
|
||||||
thumb_func_end sub_80F9CB4
|
thumb_func_end sub_80F9CB4
|
||||||
|
|
||||||
thumb_func_start sub_80F9CC8
|
thumb_func_start Rfu_GetBlockReceivedStatus
|
||||||
sub_80F9CC8: @ 80F9CC8
|
Rfu_GetBlockReceivedStatus: @ 80F9CC8
|
||||||
push {r4,lr}
|
push {r4,lr}
|
||||||
movs r2, 0
|
movs r2, 0
|
||||||
movs r1, 0
|
movs r1, 0
|
||||||
@@ -2942,7 +2942,7 @@ _080F9CEE:
|
|||||||
bx r1
|
bx r1
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
_080F9D00: .4byte gUnknown_3005450
|
_080F9D00: .4byte gUnknown_3005450
|
||||||
thumb_func_end sub_80F9CC8
|
thumb_func_end Rfu_GetBlockReceivedStatus
|
||||||
|
|
||||||
thumb_func_start sub_80F9D04
|
thumb_func_start sub_80F9D04
|
||||||
sub_80F9D04: @ 80F9D04
|
sub_80F9D04: @ 80F9D04
|
||||||
@@ -3126,8 +3126,8 @@ _080F9E58: .4byte gSendCmd
|
|||||||
_080F9E5C: .4byte gUnknown_3005542
|
_080F9E5C: .4byte gUnknown_3005542
|
||||||
thumb_func_end sub_80F9E2C
|
thumb_func_end sub_80F9E2C
|
||||||
|
|
||||||
thumb_func_start sub_80F9E60
|
thumb_func_start Rfu_InitBlockSend
|
||||||
sub_80F9E60: @ 80F9E60
|
Rfu_InitBlockSend: @ 80F9E60
|
||||||
push {r4-r7,lr}
|
push {r4-r7,lr}
|
||||||
mov r7, r9
|
mov r7, r9
|
||||||
mov r6, r8
|
mov r6, r8
|
||||||
@@ -3235,7 +3235,7 @@ _080F9F2A:
|
|||||||
_080F9F38: .4byte gBlockSendBuffer
|
_080F9F38: .4byte gBlockSendBuffer
|
||||||
_080F9F3C: .4byte gUnknown_3005450
|
_080F9F3C: .4byte gUnknown_3005450
|
||||||
_080F9F40: .4byte rfufunc_80F9F44
|
_080F9F40: .4byte rfufunc_80F9F44
|
||||||
thumb_func_end sub_80F9E60
|
thumb_func_end Rfu_InitBlockSend
|
||||||
|
|
||||||
thumb_func_start rfufunc_80F9F44
|
thumb_func_start rfufunc_80F9F44
|
||||||
rfufunc_80F9F44: @ 80F9F44
|
rfufunc_80F9F44: @ 80F9F44
|
||||||
@@ -4003,17 +4003,17 @@ _080FA4E6:
|
|||||||
bx r1
|
bx r1
|
||||||
thumb_func_end rfu_get_multiplayer_id
|
thumb_func_end rfu_get_multiplayer_id
|
||||||
|
|
||||||
thumb_func_start sub_80FA4EC
|
thumb_func_start GetRfuPlayerCount
|
||||||
sub_80FA4EC: @ 80FA4EC
|
GetRfuPlayerCount: @ 80FA4EC
|
||||||
ldr r0, _080FA4F4 @ =gUnknown_3005450
|
ldr r0, _080FA4F4 @ =gUnknown_3005450
|
||||||
ldrb r0, [r0, 0xD]
|
ldrb r0, [r0, 0xD]
|
||||||
bx lr
|
bx lr
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
_080FA4F4: .4byte gUnknown_3005450
|
_080FA4F4: .4byte gUnknown_3005450
|
||||||
thumb_func_end sub_80FA4EC
|
thumb_func_end GetRfuPlayerCount
|
||||||
|
|
||||||
thumb_func_start IsNoOneConnected
|
thumb_func_start IsRfuTaskFinished
|
||||||
IsNoOneConnected: @ 80FA4F8
|
IsRfuTaskFinished: @ 80FA4F8
|
||||||
push {lr}
|
push {lr}
|
||||||
movs r1, 0
|
movs r1, 0
|
||||||
ldr r0, _080FA50C @ =gUnknown_3005450
|
ldr r0, _080FA50C @ =gUnknown_3005450
|
||||||
@@ -4027,7 +4027,7 @@ _080FA506:
|
|||||||
bx r1
|
bx r1
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
_080FA50C: .4byte gUnknown_3005450
|
_080FA50C: .4byte gUnknown_3005450
|
||||||
thumb_func_end IsNoOneConnected
|
thumb_func_end IsRfuTaskFinished
|
||||||
|
|
||||||
thumb_func_start sub_80FA510
|
thumb_func_start sub_80FA510
|
||||||
sub_80FA510: @ 80FA510
|
sub_80FA510: @ 80FA510
|
||||||
@@ -4590,7 +4590,7 @@ _080FA940:
|
|||||||
bl sub_800B110
|
bl sub_800B110
|
||||||
lsls r0, r4, 24
|
lsls r0, r4, 24
|
||||||
lsrs r0, 24
|
lsrs r0, 24
|
||||||
bl sub_80F974C
|
bl Rfu_ResetBlockReceivedFlag
|
||||||
adds r4, 0x1
|
adds r4, 0x1
|
||||||
ldrb r2, [r5, 0xD]
|
ldrb r2, [r5, 0xD]
|
||||||
cmp r4, r2
|
cmp r4, r2
|
||||||
@@ -6812,14 +6812,14 @@ sub_80FBA1C: @ 80FBA1C
|
|||||||
_080FBA28: .4byte gUnknown_3005450
|
_080FBA28: .4byte gUnknown_3005450
|
||||||
thumb_func_end sub_80FBA1C
|
thumb_func_end sub_80FBA1C
|
||||||
|
|
||||||
thumb_func_start sub_80FBA2C
|
thumb_func_start Rfu_IsMaster
|
||||||
sub_80FBA2C: @ 80FBA2C
|
Rfu_IsMaster: @ 80FBA2C
|
||||||
ldr r0, _080FBA34 @ =gUnknown_3005450
|
ldr r0, _080FBA34 @ =gUnknown_3005450
|
||||||
ldrb r0, [r0, 0xC]
|
ldrb r0, [r0, 0xC]
|
||||||
bx lr
|
bx lr
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
_080FBA34: .4byte gUnknown_3005450
|
_080FBA34: .4byte gUnknown_3005450
|
||||||
thumb_func_end sub_80FBA2C
|
thumb_func_end Rfu_IsMaster
|
||||||
|
|
||||||
thumb_func_start RFUVSync
|
thumb_func_start RFUVSync
|
||||||
RFUVSync: @ 80FBA38
|
RFUVSync: @ 80FBA38
|
||||||
|
|||||||
+5
-5
@@ -5643,7 +5643,7 @@ c1_link_related: @ 8057884
|
|||||||
bl sub_80F90DC
|
bl sub_80F90DC
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
beq _0805789E
|
beq _0805789E
|
||||||
bl sub_800A00C
|
bl IsSendingKeysToLink
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
bne _080578C0
|
bne _080578C0
|
||||||
_0805789E:
|
_0805789E:
|
||||||
@@ -6147,7 +6147,7 @@ _08057C72:
|
|||||||
bl IsUpdateLinkStateCBActive
|
bl IsUpdateLinkStateCBActive
|
||||||
cmp r0, 0x1
|
cmp r0, 0x1
|
||||||
bne _08057CA8
|
bne _08057CA8
|
||||||
bl sub_800A00C
|
bl IsSendingKeysToLink
|
||||||
cmp r0, 0x1
|
cmp r0, 0x1
|
||||||
bne _08057CA8
|
bne _08057CA8
|
||||||
cmp r4, 0x11
|
cmp r4, 0x11
|
||||||
@@ -7012,7 +7012,7 @@ sub_8058274: @ 8058274
|
|||||||
bl IsUpdateLinkStateCBActive
|
bl IsUpdateLinkStateCBActive
|
||||||
cmp r0, 0x1
|
cmp r0, 0x1
|
||||||
bne _080582D8
|
bne _080582D8
|
||||||
bl sub_800A00C
|
bl IsSendingKeysToLink
|
||||||
cmp r0, 0x1
|
cmp r0, 0x1
|
||||||
bne _080582D8
|
bne _080582D8
|
||||||
ldr r0, _080582C4 @ =gUnknown_3000E84
|
ldr r0, _080582C4 @ =gUnknown_3000E84
|
||||||
@@ -7065,7 +7065,7 @@ sub_80582E0: @ 80582E0
|
|||||||
bl IsUpdateLinkStateCBActive
|
bl IsUpdateLinkStateCBActive
|
||||||
cmp r0, 0x1
|
cmp r0, 0x1
|
||||||
bne _08058304
|
bne _08058304
|
||||||
bl sub_800A00C
|
bl IsSendingKeysToLink
|
||||||
cmp r0, 0x1
|
cmp r0, 0x1
|
||||||
bne _08058304
|
bne _08058304
|
||||||
ldr r0, _08058308 @ =gUnknown_3000E84
|
ldr r0, _08058308 @ =gUnknown_3000E84
|
||||||
@@ -7093,7 +7093,7 @@ sub_8058318: @ 8058318
|
|||||||
ldrb r0, [r0]
|
ldrb r0, [r0]
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
bne _08058334
|
bne _08058334
|
||||||
bl sub_800A00C
|
bl IsSendingKeysToLink
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
beq _08058334
|
beq _08058334
|
||||||
movs r0, 0x1
|
movs r0, 0x1
|
||||||
|
|||||||
+5
-5
@@ -334,7 +334,7 @@ _0804C8F0: .4byte gUnknown_2031DA8
|
|||||||
_0804C8F4:
|
_0804C8F4:
|
||||||
bl GetLinkPlayerCount_2
|
bl GetLinkPlayerCount_2
|
||||||
adds r4, r0, 0
|
adds r4, r0, 0
|
||||||
bl sub_800A944
|
bl GetSavedPlayerCount
|
||||||
lsls r4, 24
|
lsls r4, 24
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
cmp r4, r0
|
cmp r4, r0
|
||||||
@@ -422,7 +422,7 @@ _0804C9B0:
|
|||||||
ldrb r0, [r0]
|
ldrb r0, [r0]
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
beq _0804C9E8
|
beq _0804C9E8
|
||||||
bl IsNoOneConnected
|
bl IsRfuTaskFinished
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
bne _0804C9C4
|
bne _0804C9C4
|
||||||
@@ -1832,7 +1832,7 @@ sub_804D5A4: @ 804D5A4
|
|||||||
ldrb r0, [r0]
|
ldrb r0, [r0]
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
beq _0804D5FC
|
beq _0804D5FC
|
||||||
bl IsNoOneConnected
|
bl IsRfuTaskFinished
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
beq _0804D620
|
beq _0804D620
|
||||||
@@ -7557,7 +7557,7 @@ _080502A8:
|
|||||||
_080502B4:
|
_080502B4:
|
||||||
bl GetLinkPlayerCount_2
|
bl GetLinkPlayerCount_2
|
||||||
adds r4, r0, 0
|
adds r4, r0, 0
|
||||||
bl sub_800A944
|
bl GetSavedPlayerCount
|
||||||
lsls r4, 24
|
lsls r4, 24
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
cmp r4, r0
|
cmp r4, r0
|
||||||
@@ -14745,7 +14745,7 @@ _0805434C:
|
|||||||
ldr r0, _08054378 @ =sub_804C718
|
ldr r0, _08054378 @ =sub_804C718
|
||||||
cmp r1, r0
|
cmp r1, r0
|
||||||
bne _08054384
|
bne _08054384
|
||||||
bl IsNoOneConnected
|
bl IsRfuTaskFinished
|
||||||
lsls r0, 24
|
lsls r0, 24
|
||||||
cmp r0, 0
|
cmp r0, 0
|
||||||
beq _08054396
|
beq _08054396
|
||||||
|
|||||||
+24
-3
@@ -19,6 +19,20 @@
|
|||||||
#define LINK_STAT_RECEIVED_NOTHING 0x00000100
|
#define LINK_STAT_RECEIVED_NOTHING 0x00000100
|
||||||
#define LINK_STAT_RECEIVED_NOTHING_SHIFT 8
|
#define LINK_STAT_RECEIVED_NOTHING_SHIFT 8
|
||||||
#define LINK_STAT_ERRORS 0x0007F000
|
#define LINK_STAT_ERRORS 0x0007F000
|
||||||
|
#define LINK_STAT_ERRORS_SHIFT 12
|
||||||
|
|
||||||
|
#define LINK_STAT_ERROR_HARDWARE 0x00001000
|
||||||
|
#define LINK_STAT_ERROR_HARDWARE_SHIFT 12
|
||||||
|
#define LINK_STAT_ERROR_CHECKSUM 0x00002000
|
||||||
|
#define LINK_STAT_ERROR_CHECKSUM_SHIFT 13
|
||||||
|
#define LINK_STAT_ERROR_QUEUE_FULL 0x00004000
|
||||||
|
#define LINK_STAT_ERROR_QUEUE_FULL_SHIFT 14
|
||||||
|
#define LINK_STAT_ERROR_LAG_MASTER 0x00010000
|
||||||
|
#define LINK_STAT_ERROR_LAG_MASTER_SHIFT 16
|
||||||
|
#define LINK_STAT_ERROR_INVALID_ID 0x00020000
|
||||||
|
#define LINK_STAT_ERROR_INVALID_ID_SHIFT 17
|
||||||
|
#define LINK_STAT_ERROR_LAG_SLAVE 0x00040000
|
||||||
|
#define LINK_STAT_ERROR_LAG_SLAVE_SHIFT 18
|
||||||
|
|
||||||
#define EXTRACT_PLAYER_COUNT(status) \
|
#define EXTRACT_PLAYER_COUNT(status) \
|
||||||
(((status) & LINK_STAT_PLAYER_COUNT) >> LINK_STAT_PLAYER_COUNT_SHIFT)
|
(((status) & LINK_STAT_PLAYER_COUNT) >> LINK_STAT_PLAYER_COUNT_SHIFT)
|
||||||
@@ -28,6 +42,8 @@
|
|||||||
(((status) >> LINK_STAT_CONN_ESTABLISHED_SHIFT) & 1)
|
(((status) >> LINK_STAT_CONN_ESTABLISHED_SHIFT) & 1)
|
||||||
#define EXTRACT_RECEIVED_NOTHING(status) \
|
#define EXTRACT_RECEIVED_NOTHING(status) \
|
||||||
(((status) >> LINK_STAT_RECEIVED_NOTHING_SHIFT) & 1)
|
(((status) >> LINK_STAT_RECEIVED_NOTHING_SHIFT) & 1)
|
||||||
|
#define EXTRACT_LINK_ERRORS(status) \
|
||||||
|
(((status) & LINK_STAT_ERRORS) >> LINK_STAT_ERRORS_SHIFT)
|
||||||
|
|
||||||
#define LINKCMD_SEND_LINK_TYPE 0x2222
|
#define LINKCMD_SEND_LINK_TYPE 0x2222
|
||||||
#define LINKCMD_0x2FFE 0x2FFE
|
#define LINKCMD_0x2FFE 0x2FFE
|
||||||
@@ -62,6 +78,10 @@ enum
|
|||||||
EXCHANGE_COMPLETE,
|
EXCHANGE_COMPLETE,
|
||||||
EXCHANGE_TIMED_OUT,
|
EXCHANGE_TIMED_OUT,
|
||||||
EXCHANGE_IN_PROGRESS,
|
EXCHANGE_IN_PROGRESS,
|
||||||
|
EXCHANGE_STAT_4,
|
||||||
|
EXCHANGE_STAT_5,
|
||||||
|
EXCHANGE_STAT_6,
|
||||||
|
EXCHANGE_STAT_7
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -174,7 +194,7 @@ void ClearLinkCallback(void);
|
|||||||
void ClearLinkCallback_2(void);
|
void ClearLinkCallback_2(void);
|
||||||
u8 GetLinkPlayerCount(void);
|
u8 GetLinkPlayerCount(void);
|
||||||
void OpenLinkTimed(void);
|
void OpenLinkTimed(void);
|
||||||
u8 GetLinkPlayerDataExchangeStatusTimed(void);
|
u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int higher);
|
||||||
bool8 IsLinkPlayerDataExchangeComplete(void);
|
bool8 IsLinkPlayerDataExchangeComplete(void);
|
||||||
u32 GetLinkPlayerTrainerId(u8);
|
u32 GetLinkPlayerTrainerId(u8);
|
||||||
void ResetLinkPlayers(void);
|
void ResetLinkPlayers(void);
|
||||||
@@ -217,7 +237,7 @@ void sub_800AAC0(void);
|
|||||||
void OpenLink(void);
|
void OpenLink(void);
|
||||||
bool8 IsLinkMaster(void);
|
bool8 IsLinkMaster(void);
|
||||||
void CheckShouldAdvanceLinkState(void);
|
void CheckShouldAdvanceLinkState(void);
|
||||||
void sub_800AA80(u8);
|
void sub_800AA80(u16 a0);
|
||||||
void sub_80098D8(void);
|
void sub_80098D8(void);
|
||||||
void CloseLink(void);
|
void CloseLink(void);
|
||||||
bool8 IsLinkTaskFinished(void);
|
bool8 IsLinkTaskFinished(void);
|
||||||
@@ -228,6 +248,7 @@ void sub_800B1F4(void);
|
|||||||
void LoadWirelessStatusIndicatorSpriteGfx(void);
|
void LoadWirelessStatusIndicatorSpriteGfx(void);
|
||||||
void CreateWirelessStatusIndicatorSprite(u8, u8);
|
void CreateWirelessStatusIndicatorSprite(u8, u8);
|
||||||
void sub_8009FE8(void);
|
void sub_8009FE8(void);
|
||||||
void sub_800A068(void);
|
void ClearLinkCallback_2(void);
|
||||||
|
void sub_80FA42C(void);
|
||||||
|
|
||||||
#endif // GUARD_LINK_H
|
#endif // GUARD_LINK_H
|
||||||
|
|||||||
+12
-1
@@ -11,7 +11,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
|
|||||||
void sub_80FA190(void);
|
void sub_80FA190(void);
|
||||||
void MG_DrawCheckerboardPattern(void);
|
void MG_DrawCheckerboardPattern(void);
|
||||||
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
|
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
|
||||||
bool8 IsNoOneConnected(void);
|
bool8 IsRfuTaskFinished(void);
|
||||||
void DestroyWirelessStatusIndicatorSprite(void);
|
void DestroyWirelessStatusIndicatorSprite(void);
|
||||||
void MEvent_CreateTask_CardOrNewsWithFriend(u8);
|
void MEvent_CreateTask_CardOrNewsWithFriend(u8);
|
||||||
void MEvent_CreateTask_CardOrNewsOverWireless(u8);
|
void MEvent_CreateTask_CardOrNewsOverWireless(u8);
|
||||||
@@ -22,5 +22,16 @@ void sub_80FBB4C(void);
|
|||||||
void sub_80F86F4(void);
|
void sub_80F86F4(void);
|
||||||
void sub_80FB128(bool32 a0);
|
void sub_80FB128(bool32 a0);
|
||||||
u32 sub_80FD3A4(void);
|
u32 sub_80FD3A4(void);
|
||||||
|
bool32 IsSendingKeysToRfu(void);
|
||||||
|
void Rfu_set_zero(void);
|
||||||
|
u8 GetRfuPlayerCount(void);
|
||||||
|
void sub_80F9828(void);
|
||||||
|
u8 rfu_get_multiplayer_id(void);
|
||||||
|
bool8 Rfu_InitBlockSend(const void * src, u16 size);
|
||||||
|
bool8 sub_80FA0F8(u8 a0);
|
||||||
|
u8 Rfu_GetBlockReceivedStatus(void);
|
||||||
|
void Rfu_SetBlockReceivedFlag(u8 who);
|
||||||
|
void Rfu_ResetBlockReceivedFlag(u8 who);
|
||||||
|
bool8 Rfu_IsMaster(void);
|
||||||
|
|
||||||
#endif //GUARD_LINK_RFU_H
|
#endif //GUARD_LINK_RFU_H
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#ifndef GUARD_TRADE_H
|
||||||
|
#define GUARD_TRADE_H
|
||||||
|
|
||||||
|
s32 sub_804FB34(void);
|
||||||
|
|
||||||
|
#endif //GUARD_TRADE_H
|
||||||
@@ -654,7 +654,7 @@ static void sub_807E678(u8 taskId)
|
|||||||
switch (data[0])
|
switch (data[0])
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
sub_800A068();
|
ClearLinkCallback_2();
|
||||||
fade_screen(1, 0);
|
fade_screen(1, 0);
|
||||||
sub_8055F88();
|
sub_8055F88();
|
||||||
PlaySE(SE_KAIDAN);
|
PlaySE(SE_KAIDAN);
|
||||||
|
|||||||
+750
-7
@@ -5,6 +5,7 @@
|
|||||||
#include "decompress.h"
|
#include "decompress.h"
|
||||||
#include "malloc.h"
|
#include "malloc.h"
|
||||||
#include "save.h"
|
#include "save.h"
|
||||||
|
#include "battle.h"
|
||||||
#include "quest_log.h"
|
#include "quest_log.h"
|
||||||
#include "link_rfu.h"
|
#include "link_rfu.h"
|
||||||
#include "librfu.h"
|
#include "librfu.h"
|
||||||
@@ -13,7 +14,9 @@
|
|||||||
#include "event_data.h"
|
#include "event_data.h"
|
||||||
#include "string_util.h"
|
#include "string_util.h"
|
||||||
#include "item_menu.h"
|
#include "item_menu.h"
|
||||||
|
#include "trade.h"
|
||||||
#include "link.h"
|
#include "link.h"
|
||||||
|
#include "constants/battle.h"
|
||||||
|
|
||||||
extern u16 gHeldKeyCodeToSend;
|
extern u16 gHeldKeyCodeToSend;
|
||||||
|
|
||||||
@@ -116,20 +119,29 @@ void InitLocalLinkPlayer(void);
|
|||||||
void sub_800978C(void);
|
void sub_800978C(void);
|
||||||
void CB2_LinkTest(void);
|
void CB2_LinkTest(void);
|
||||||
void ProcessRecvCmds(u8 id);
|
void ProcessRecvCmds(u8 id);
|
||||||
void InitBlockSend(const void * src, size_t size);
|
void sub_800A040(void);
|
||||||
|
void ResetBlockSend(void);
|
||||||
|
bool32 InitBlockSend(const void * src, size_t size);
|
||||||
|
void LinkCB_BlockSendBegin(void);
|
||||||
|
void LinkCB_BlockSend(void);
|
||||||
|
void LinkCB_BlockSendEnd(void);
|
||||||
|
void sub_800A3CC(void);
|
||||||
|
void SetBlockReceivedFlag(u8 id);
|
||||||
u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
|
u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
|
||||||
void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
|
void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
|
||||||
void LinkCB_RequestPlayerDataExchange(void);
|
void LinkCB_RequestPlayerDataExchange(void);
|
||||||
void ResetBlockSend(void);
|
void Task_PrintTestData(u8 taskId);
|
||||||
void task00_link_test(u8 taskId);
|
void sub_800AB0C(void);
|
||||||
|
void sub_800AB38(void);
|
||||||
|
void sub_800ABD4(void);
|
||||||
|
void sub_800AC00(void);
|
||||||
|
void CheckErrorStatus(void);
|
||||||
void EnableSerial(void);
|
void EnableSerial(void);
|
||||||
void sub_800B210(void);
|
void sub_800B210(void);
|
||||||
void sub_80F8DC0(void);
|
void sub_80F8DC0(void);
|
||||||
void DisableSerial(void);
|
void DisableSerial(void);
|
||||||
void CheckErrorStatus(void);
|
|
||||||
void sub_800B284(struct LinkPlayer * linkPlayer);
|
void sub_800B284(struct LinkPlayer * linkPlayer);
|
||||||
void SetBlockReceivedFlag(u8 id);
|
bool8 IsSioMultiMaster(void);
|
||||||
void sub_800A3CC(void);
|
|
||||||
|
|
||||||
ALIGNED(4) const u16 gWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
|
ALIGNED(4) const u16 gWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
|
||||||
const u16 gWirelessLinkDisplay4bpp[] = INCBIN_U16("graphics/interface/wireless_link_display.4bpp.lz");
|
const u16 gWirelessLinkDisplay4bpp[] = INCBIN_U16("graphics/interface/wireless_link_display.4bpp.lz");
|
||||||
@@ -234,7 +246,7 @@ void LinkTestScreen(void)
|
|||||||
UpdatePaletteFade();
|
UpdatePaletteFade();
|
||||||
gUnknown_3000E58 = 0;
|
gUnknown_3000E58 = 0;
|
||||||
InitLocalLinkPlayer();
|
InitLocalLinkPlayer();
|
||||||
CreateTask(task00_link_test, 0);
|
CreateTask(Task_PrintTestData, 0);
|
||||||
SetMainCallback2(CB2_LinkTest);
|
SetMainCallback2(CB2_LinkTest);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -640,3 +652,734 @@ void BuildSendCmd(u16 command)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sub_8009FE8(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType)
|
||||||
|
{
|
||||||
|
sub_80F9828();
|
||||||
|
}
|
||||||
|
gLinkCallback = sub_800A040;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool32 IsSendingKeysToLink(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType)
|
||||||
|
{
|
||||||
|
return IsSendingKeysToRfu();
|
||||||
|
}
|
||||||
|
if (gLinkCallback == sub_800A040)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800A040(void)
|
||||||
|
{
|
||||||
|
if (gReceivedRemoteLinkPlayers == TRUE)
|
||||||
|
{
|
||||||
|
BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearLinkCallback(void)
|
||||||
|
{
|
||||||
|
gLinkCallback = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearLinkCallback_2(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType)
|
||||||
|
{
|
||||||
|
Rfu_set_zero();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gLinkCallback = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 GetLinkPlayerCount(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType)
|
||||||
|
{
|
||||||
|
return GetRfuPlayerCount();
|
||||||
|
}
|
||||||
|
return EXTRACT_PLAYER_COUNT(gLinkStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenLinkTimed(void)
|
||||||
|
{
|
||||||
|
sPlayerDataExchangeStatus = 0;
|
||||||
|
gLinkTimeOutCounter = 0;
|
||||||
|
OpenLink();
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int count;
|
||||||
|
u32 index;
|
||||||
|
u8 cmpVal;
|
||||||
|
u32 linkType1;
|
||||||
|
u32 linkType2;
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
if (gReceivedRemoteLinkPlayers == TRUE)
|
||||||
|
{
|
||||||
|
cmpVal = GetLinkPlayerCount_2();
|
||||||
|
if (lower > cmpVal || cmpVal > upper)
|
||||||
|
{
|
||||||
|
sPlayerDataExchangeStatus = EXCHANGE_STAT_6;
|
||||||
|
return 6;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (GetLinkPlayerCount() == 0)
|
||||||
|
{
|
||||||
|
gLinkErrorOccurred = TRUE;
|
||||||
|
CloseLink();
|
||||||
|
}
|
||||||
|
for (i = 0, index = 0; i < GetLinkPlayerCount(); index++, i++)
|
||||||
|
{
|
||||||
|
if (gLinkPlayers[index].linkType == gLinkPlayers[0].linkType)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count == GetLinkPlayerCount())
|
||||||
|
{
|
||||||
|
if (gLinkPlayers[0].linkType == 0x1133)
|
||||||
|
{
|
||||||
|
switch (sub_804FB34())
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
sPlayerDataExchangeStatus = EXCHANGE_STAT_4;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
sPlayerDataExchangeStatus = EXCHANGE_STAT_5;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (++gLinkTimeOutCounter > 600)
|
||||||
|
{
|
||||||
|
sPlayerDataExchangeStatus = EXCHANGE_TIMED_OUT;
|
||||||
|
}
|
||||||
|
return sPlayerDataExchangeStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool8 IsLinkPlayerDataExchangeComplete(void)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 count;
|
||||||
|
bool8 retval;
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||||
|
{
|
||||||
|
if (gLinkPlayers[i].linkType == gLinkPlayers[0].linkType)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count == GetLinkPlayerCount())
|
||||||
|
{
|
||||||
|
retval = TRUE;
|
||||||
|
sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
retval = FALSE;
|
||||||
|
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 GetLinkPlayerTrainerId(u8 who)
|
||||||
|
{
|
||||||
|
return gLinkPlayers[who].trainerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetLinkPlayers(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i <= MAX_LINK_PLAYERS; i++)
|
||||||
|
{
|
||||||
|
gLinkPlayers[i] = (struct LinkPlayer){};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetBlockSend(void)
|
||||||
|
{
|
||||||
|
sBlockSend.active = FALSE;
|
||||||
|
sBlockSend.pos = 0;
|
||||||
|
sBlockSend.size = 0;
|
||||||
|
sBlockSend.src = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool32 InitBlockSend(const void *src, size_t size)
|
||||||
|
{
|
||||||
|
if (sBlockSend.active)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
sBlockSend.multiplayerId = GetMultiplayerId();
|
||||||
|
sBlockSend.active = TRUE;
|
||||||
|
sBlockSend.size = size;
|
||||||
|
sBlockSend.pos = 0;
|
||||||
|
if (size > 0x100)
|
||||||
|
{
|
||||||
|
sBlockSend.src = src;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (src != gBlockSendBuffer)
|
||||||
|
{
|
||||||
|
memcpy(gBlockSendBuffer, src, size);
|
||||||
|
}
|
||||||
|
sBlockSend.src = gBlockSendBuffer;
|
||||||
|
}
|
||||||
|
BuildSendCmd(LINKCMD_INIT_BLOCK);
|
||||||
|
gLinkCallback = LinkCB_BlockSendBegin;
|
||||||
|
sBlockSendDelayCounter = 0;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkCB_BlockSendBegin(void)
|
||||||
|
{
|
||||||
|
if (++sBlockSendDelayCounter > 2)
|
||||||
|
{
|
||||||
|
gLinkCallback = LinkCB_BlockSend;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkCB_BlockSend(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
const u8 *src;
|
||||||
|
|
||||||
|
src = sBlockSend.src;
|
||||||
|
gSendCmd[0] = LINKCMD_CONT_BLOCK;
|
||||||
|
for (i = 0; i < 7; i++)
|
||||||
|
{
|
||||||
|
gSendCmd[i + 1] = (src[sBlockSend.pos + i * 2 + 1] << 8) | src[sBlockSend.pos + i * 2];
|
||||||
|
}
|
||||||
|
sBlockSend.pos += 14;
|
||||||
|
if (sBlockSend.size <= sBlockSend.pos)
|
||||||
|
{
|
||||||
|
sBlockSend.active = FALSE;
|
||||||
|
gLinkCallback = LinkCB_BlockSendEnd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkCB_BlockSendEnd(void)
|
||||||
|
{
|
||||||
|
gLinkCallback = NULL;
|
||||||
|
}
|
||||||
|
void sub_800A3AC(void)
|
||||||
|
{
|
||||||
|
GetMultiplayerId();
|
||||||
|
BuildSendCmd(LINKCMD_SEND_HELD_KEYS);
|
||||||
|
gUnknown_2022114++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800A3CC(void)
|
||||||
|
{
|
||||||
|
gUnknown_2022114 = 0;
|
||||||
|
gLinkCallback = sub_800A3AC;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
u32 sub_800A3E8(void)
|
||||||
|
{
|
||||||
|
return gUnknown_2022114;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800A3F4(void)
|
||||||
|
{
|
||||||
|
BuildSendCmd(LINKCMD_0xAAAA);
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 GetMultiplayerId(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
return rfu_get_multiplayer_id();
|
||||||
|
}
|
||||||
|
return SIO_MULTI_CNT->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 bitmask_all_link_players_but_self(void)
|
||||||
|
{
|
||||||
|
u8 mpId;
|
||||||
|
|
||||||
|
mpId = GetMultiplayerId();
|
||||||
|
return ((1 << MAX_LINK_PLAYERS) - 1) ^ (1 << mpId);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool8 SendBlock(u8 unused, const void *src, u16 size)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
return Rfu_InitBlockSend(src, size);
|
||||||
|
}
|
||||||
|
return InitBlockSend(src, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool8 sub_800A474(u8 a0)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
return sub_80FA0F8(a0);
|
||||||
|
}
|
||||||
|
if (gLinkCallback == NULL)
|
||||||
|
{
|
||||||
|
gBlockRequestType = a0;
|
||||||
|
BuildSendCmd(LINKCMD_0xCCCC);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool8 IsLinkTaskFinished(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
return IsRfuTaskFinished();
|
||||||
|
}
|
||||||
|
return gLinkCallback == NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 GetBlockReceivedStatus(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
return Rfu_GetBlockReceivedStatus();
|
||||||
|
}
|
||||||
|
return (gBlockReceivedStatus[3] << 3) | (gBlockReceivedStatus[2] << 2) | (gBlockReceivedStatus[1] << 1) | (gBlockReceivedStatus[0] << 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetBlockReceivedFlag(u8 who)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
Rfu_SetBlockReceivedFlag(who);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gBlockReceivedStatus[who] = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetBlockReceivedFlags(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||||
|
{
|
||||||
|
Rfu_ResetBlockReceivedFlag(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||||
|
{
|
||||||
|
gBlockReceivedStatus[i] = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ResetBlockReceivedFlag(u8 who)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
Rfu_ResetBlockReceivedFlag(who);
|
||||||
|
}
|
||||||
|
else if (gBlockReceivedStatus[who])
|
||||||
|
{
|
||||||
|
gBlockReceivedStatus[who] = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckShouldAdvanceLinkState(void)
|
||||||
|
{
|
||||||
|
if ((gLinkStatus & LINK_STAT_MASTER) && EXTRACT_PLAYER_COUNT(gLinkStatus) > 1)
|
||||||
|
{
|
||||||
|
gShouldAdvanceLinkState = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size)
|
||||||
|
{
|
||||||
|
u16 chksum;
|
||||||
|
u16 i;
|
||||||
|
|
||||||
|
chksum = 0;
|
||||||
|
for (i = 0; i < size / 2; i++)
|
||||||
|
{
|
||||||
|
chksum += src[i];
|
||||||
|
}
|
||||||
|
return chksum;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkTest_prnthexchar(char a0, u8 a1, u8 a2)
|
||||||
|
{
|
||||||
|
u16 *vAddr;
|
||||||
|
|
||||||
|
vAddr = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock);
|
||||||
|
vAddr[a2 * 32 + a1] = (gLinkTestBGInfo.paletteNum << 12) | (a0 + 1 + gLinkTestBGInfo.dummy_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkTest_prntchar(char a0, u8 a1, u8 a2)
|
||||||
|
{
|
||||||
|
u16 *vAddr;
|
||||||
|
|
||||||
|
vAddr = (u16 *)BG_SCREEN_ADDR(gLinkTestBGInfo.screenBaseBlock);
|
||||||
|
vAddr[a2 * 32 + a1] = (gLinkTestBGInfo.paletteNum << 12) | (a0 + gLinkTestBGInfo.dummy_8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2)
|
||||||
|
{
|
||||||
|
char sp[32 / 2];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < a2; i++)
|
||||||
|
{
|
||||||
|
sp[i] = pos & 0xf;
|
||||||
|
pos >>= 4;
|
||||||
|
}
|
||||||
|
for (i = a2 - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
LinkTest_prnthexchar(sp[i], a0, a1);
|
||||||
|
a0++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkTest_prntstr(const char *a0, u8 a1, u8 a2)
|
||||||
|
{
|
||||||
|
int r6;
|
||||||
|
int i;
|
||||||
|
int r5;
|
||||||
|
|
||||||
|
r5 = 0;
|
||||||
|
r6 = 0;
|
||||||
|
for (i = 0; a0[i] != 0; a0++)
|
||||||
|
{
|
||||||
|
if (a0[i] == *"\n")
|
||||||
|
{
|
||||||
|
r5++;
|
||||||
|
r6 = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LinkTest_prntchar(a0[i], a1 + r6, a2 + r5);
|
||||||
|
r6++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinkCB_RequestPlayerDataExchange(void)
|
||||||
|
{
|
||||||
|
if (gLinkStatus & LINK_STAT_MASTER)
|
||||||
|
{
|
||||||
|
BuildSendCmd(LINKCMD_SEND_LINK_TYPE);
|
||||||
|
}
|
||||||
|
gLinkCallback = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Task_PrintTestData(u8 taskId)
|
||||||
|
{
|
||||||
|
char sp[32];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
strcpy(sp, gASCIITestPrint);
|
||||||
|
LinkTest_prntstr(sp, 5, 2);
|
||||||
|
LinkTest_prnthex(gShouldAdvanceLinkState, 2, 1, 2);
|
||||||
|
LinkTest_prnthex(gLinkStatus, 15, 1, 8);
|
||||||
|
LinkTest_prnthex(gLink.state, 2, 10, 2);
|
||||||
|
LinkTest_prnthex(EXTRACT_PLAYER_COUNT(gLinkStatus), 15, 10, 2);
|
||||||
|
LinkTest_prnthex(GetMultiplayerId(), 15, 12, 2);
|
||||||
|
LinkTest_prnthex(gLastSendQueueCount, 25, 1, 2);
|
||||||
|
LinkTest_prnthex(gLastRecvQueueCount, 25, 2, 2);
|
||||||
|
LinkTest_prnthex(GetBlockReceivedStatus(), 15, 5, 2);
|
||||||
|
LinkTest_prnthex(gLinkDebugSeed, 2, 12, 8);
|
||||||
|
LinkTest_prnthex(gLinkDebugFlags, 2, 13, 8);
|
||||||
|
LinkTest_prnthex(GetSioMultiSI(), 25, 5, 1);
|
||||||
|
LinkTest_prnthex(IsSioMultiMaster(), 25, 6, 1);
|
||||||
|
LinkTest_prnthex(IsLinkConnectionEstablished(), 25, 7, 1);
|
||||||
|
LinkTest_prnthex(HasLinkErrorOccurred(), 25, 8, 1);
|
||||||
|
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||||
|
{
|
||||||
|
LinkTest_prnthex(gLinkTestBlockChecksums[i], 10, 4 + i, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetLinkDebugValues(u32 seed, u32 flags)
|
||||||
|
{
|
||||||
|
gLinkDebugSeed = seed;
|
||||||
|
gLinkDebugFlags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 sub_800A8A4(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
u8 flags;
|
||||||
|
|
||||||
|
flags = 0;
|
||||||
|
for (i = 0; i < gSavedLinkPlayerCount; i++)
|
||||||
|
{
|
||||||
|
flags |= (1 << i);
|
||||||
|
}
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 sub_800A8D4(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
u8 flags;
|
||||||
|
|
||||||
|
flags = 0;
|
||||||
|
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||||
|
{
|
||||||
|
flags |= (1 << i);
|
||||||
|
}
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800A900(u8 a0)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
gSavedLinkPlayerCount = a0;
|
||||||
|
gSavedMultiplayerId = GetMultiplayerId();
|
||||||
|
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||||
|
{
|
||||||
|
gSavedLinkPlayers[i] = gLinkPlayers[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// The number of players when trading began. This is frequently compared against the
|
||||||
|
// current number of connected players to check if anyone dropped out.
|
||||||
|
u8 GetSavedPlayerCount(void)
|
||||||
|
{
|
||||||
|
return gSavedLinkPlayerCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 GetSavedMultiplayerId(void)
|
||||||
|
{
|
||||||
|
return gSavedMultiplayerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool8 sub_800A95C(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
unsigned count;
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
for (i = 0; i < gSavedLinkPlayerCount; i++)
|
||||||
|
{
|
||||||
|
if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count == gSavedLinkPlayerCount)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800A9A4(void)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
|
||||||
|
for (i = 0; i < gSavedLinkPlayerCount; i++)
|
||||||
|
{
|
||||||
|
if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0)
|
||||||
|
{
|
||||||
|
gLinkErrorOccurred = TRUE;
|
||||||
|
CloseLink();
|
||||||
|
SetMainCallback2(CB2_LinkError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800AA24(void)
|
||||||
|
{
|
||||||
|
gSavedLinkPlayerCount = 0;
|
||||||
|
gSavedMultiplayerId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 GetLinkPlayerCount_2(void)
|
||||||
|
{
|
||||||
|
return EXTRACT_PLAYER_COUNT(gLinkStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool8 IsLinkMaster(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType)
|
||||||
|
{
|
||||||
|
return Rfu_IsMaster();
|
||||||
|
}
|
||||||
|
return EXTRACT_MASTER(gLinkStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 sub_800AA74(void)
|
||||||
|
{
|
||||||
|
return gUnknown_3000E50;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800AA80(u16 a0)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (gLinkCallback == NULL)
|
||||||
|
{
|
||||||
|
gLinkCallback = sub_800AB0C;
|
||||||
|
gUnknown_3003F24 = FALSE;
|
||||||
|
gUnknown_3003F34 = a0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800AAC0(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (gLinkCallback != NULL)
|
||||||
|
{
|
||||||
|
gUnknown_202285C++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gLinkCallback = sub_800AB0C;
|
||||||
|
gUnknown_3003F24 = FALSE;
|
||||||
|
gUnknown_3003F34 = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800AB0C(void)
|
||||||
|
{
|
||||||
|
if (gLastRecvQueueCount == 0)
|
||||||
|
{
|
||||||
|
BuildSendCmd(LINKCMD_0x5FFF);
|
||||||
|
gLinkCallback = sub_800AB38;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800AB38(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
unsigned count;
|
||||||
|
u8 linkPlayerCount;
|
||||||
|
|
||||||
|
linkPlayerCount = GetLinkPlayerCount();
|
||||||
|
count = 0;
|
||||||
|
for (i = 0; i < linkPlayerCount; i++)
|
||||||
|
{
|
||||||
|
if (gUnknown_3003F30[i])
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count == linkPlayerCount)
|
||||||
|
{
|
||||||
|
gBattleTypeFlags &= ~(BATTLE_TYPE_20 | 0xFFFF0000);
|
||||||
|
gLinkVSyncDisabled = TRUE;
|
||||||
|
CloseLink();
|
||||||
|
gLinkCallback = NULL;
|
||||||
|
gUnknown_3003F24 = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800AB9C(void)
|
||||||
|
{
|
||||||
|
if (gWirelessCommType == TRUE)
|
||||||
|
{
|
||||||
|
sub_80FA42C();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (gLinkCallback == NULL)
|
||||||
|
{
|
||||||
|
gLinkCallback = sub_800ABD4;
|
||||||
|
}
|
||||||
|
gUnknown_3003F24 = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800ABD4(void)
|
||||||
|
{
|
||||||
|
if (gLastRecvQueueCount == 0)
|
||||||
|
{
|
||||||
|
BuildSendCmd(LINKCMD_0x2FFE);
|
||||||
|
gLinkCallback = sub_800AC00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_800AC00(void)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 linkPlayerCount;
|
||||||
|
|
||||||
|
linkPlayerCount = GetLinkPlayerCount();
|
||||||
|
for (i = 0; i < linkPlayerCount; i++)
|
||||||
|
{
|
||||||
|
if (!gUnknown_3003F2C[i])
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i == linkPlayerCount)
|
||||||
|
{
|
||||||
|
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||||
|
{
|
||||||
|
gUnknown_3003F2C[i] = FALSE;
|
||||||
|
}
|
||||||
|
gLinkCallback = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CheckErrorStatus(void)
|
||||||
|
{
|
||||||
|
if (gLinkOpen && EXTRACT_LINK_ERRORS(gLinkStatus))
|
||||||
|
{
|
||||||
|
if (!gSuppressLinkErrorMessage)
|
||||||
|
{
|
||||||
|
sLinkErrorBuffer.status = gLinkStatus;
|
||||||
|
sLinkErrorBuffer.lastRecvQueueCount = gLastRecvQueueCount;
|
||||||
|
sLinkErrorBuffer.lastSendQueueCount = gLastSendQueueCount;
|
||||||
|
SetMainCallback2(CB2_LinkError);
|
||||||
|
}
|
||||||
|
gLinkErrorOccurred = TRUE;
|
||||||
|
CloseLink();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1436,7 +1436,7 @@ void task00_mystery_gift(u8 taskId)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
if (IsNoOneConnected())
|
if (IsRfuTaskFinished())
|
||||||
{
|
{
|
||||||
DestroyWirelessStatusIndicatorSprite();
|
DestroyWirelessStatusIndicatorSprite();
|
||||||
data->state = 14;
|
data->state = 14;
|
||||||
@@ -1712,7 +1712,7 @@ void task00_mystery_gift(u8 taskId)
|
|||||||
data->state = 34;
|
data->state = 34;
|
||||||
break;
|
break;
|
||||||
case 34:
|
case 34:
|
||||||
if (IsNoOneConnected())
|
if (IsRfuTaskFinished())
|
||||||
{
|
{
|
||||||
DestroyWirelessStatusIndicatorSprite();
|
DestroyWirelessStatusIndicatorSprite();
|
||||||
data->state = 35;
|
data->state = 35;
|
||||||
|
|||||||
Reference in New Issue
Block a user