summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/link/link.asm10
-rw-r--r--home/serial.asm9
-rw-r--r--wram.asm5
3 files changed, 14 insertions, 10 deletions
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