Identify link sync buffers, separate from link action bytes

Fixes #803
This commit is contained in:
Rangi 2021-02-22 12:00:53 -05:00
parent 3c3d87e765
commit 4401d24074
3 changed files with 14 additions and 10 deletions

View File

@ -2554,20 +2554,20 @@ Link_ResetSerialRegistersAfterLinkClosure:
Link_EnsureSync:
add $d0
ld [wPlayerLinkAction], a
ld [wUnusedLinkAction], a
ld [wLinkPlayerSyncBuffer], a
ld [wLinkPlayerSyncBuffer + 1], a
ld a, $2
ldh [hVBlank], a
call DelayFrame
call DelayFrame
.receive_loop
call Serial_ExchangeLinkMenuSelection
ld a, [wOtherPlayerLinkMode]
call Serial_ExchangeSyncBytes
ld a, [wLinkReceivedSyncBuffer]
ld b, a
and $f0
cp $d0
jr z, .done
ld a, [wOtherPlayerLinkAction]
ld a, [wLinkReceivedSyncBuffer + 1]
ld b, a
and $f0
cp $d0

View File

@ -252,11 +252,10 @@ SerialDisconnected::
ld [wLinkTimeoutFrames + 1], a
ret
; This is used to exchange the button press and selected menu item on the link menu.
; The data is sent thrice and read twice to increase reliability.
Serial_ExchangeLinkMenuSelection::
ld hl, wPlayerLinkAction
ld de, wOtherPlayerLinkMode
; This is used to check that both players entered the same Cable Club room.
Serial_ExchangeSyncBytes::
ld hl, wLinkPlayerSyncBuffer
ld de, wLinkReceivedSyncBuffer
ld c, 2
ld a, TRUE
ldh [hSerialIgnoringInitialData], a

View File

@ -1357,12 +1357,17 @@ wTileAnimBuffer:: ds 1 tiles
ENDU
; link data
UNION
wOtherPlayerLinkMode:: db
wOtherPlayerLinkAction:: db
ds 3
wPlayerLinkAction:: db
wUnusedLinkAction:: db
ds 3
NEXTU
wLinkReceivedSyncBuffer:: ds 5
wLinkPlayerSyncBuffer:: ds 5
ENDU
wLinkTimeoutFrames:: dw
wLinkByteTimeout:: dw