diff --git a/engine/link/link.asm b/engine/link/link.asm index 1d8294747..de6ed239a 100644 --- a/engine/link/link.asm +++ b/engine/link/link.asm @@ -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 diff --git a/home/serial.asm b/home/serial.asm index c5394355e..20a9aff72 100644 --- a/home/serial.asm +++ b/home/serial.asm @@ -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 diff --git a/wram.asm b/wram.asm index 7ae90e9f9..3f04a81a2 100644 --- a/wram.asm +++ b/wram.asm @@ -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