aboutsummaryrefslogtreecommitdiffstats
path: root/engine/link/cable_club_npc.asm
diff options
context:
space:
mode:
authordannye <33dannye@gmail.com>2020-11-04 00:06:44 -0600
committerdannye <33dannye@gmail.com>2020-11-04 00:06:44 -0600
commit5647ca687b92954dcf37a6ea6bfbc9a341c32de4 (patch)
treedde1937a1bfdb3a835f4155e1c2eb8f1aaf86f63 /engine/link/cable_club_npc.asm
parentMerge pull request #55 from Deokishisu/patch-1 (diff)
downloadpokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.gz
pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.xz
pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.zip
Sync with pokered
Diffstat (limited to 'engine/link/cable_club_npc.asm')
-rwxr-xr-xengine/link/cable_club_npc.asm208
1 files changed, 208 insertions, 0 deletions
diff --git a/engine/link/cable_club_npc.asm b/engine/link/cable_club_npc.asm
new file mode 100755
index 00000000..4d0a0a8a
--- /dev/null
+++ b/engine/link/cable_club_npc.asm
@@ -0,0 +1,208 @@
+CableClubNPC::
+ ld hl, CableClubNPCWelcomeText
+ call PrintText
+ call CheckPikachuFollowingPlayer
+ jr nz, .asm_7048
+ CheckEvent EVENT_GOT_POKEDEX
+ jp nz, .receivedPokedex
+; if the player hasn't received the pokedex
+.asm_7048
+ ld c, 60
+ call DelayFrames
+ ld hl, CableClubNPCMakingPreparationsText
+ call PrintText
+ jp .didNotConnect
+.receivedPokedex
+ ld a, $1
+ ld [wMenuJoypadPollCount], a
+ ld a, 90
+ ld [wLinkTimeoutCounter], a
+.establishConnectionLoop
+ ldh a, [hSerialConnectionStatus]
+ cp USING_INTERNAL_CLOCK
+ jr z, .establishedConnection
+ cp USING_EXTERNAL_CLOCK
+ jr z, .establishedConnection
+ ld a, CONNECTION_NOT_ESTABLISHED
+ ldh [hSerialConnectionStatus], a
+ ld a, ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK
+ ldh [rSB], a
+ xor a
+ ldh [hSerialReceiveData], a
+ ld a, START_TRANSFER_EXTERNAL_CLOCK
+ ldh [rSC], a
+ ld a, [wLinkTimeoutCounter]
+ dec a
+ ld [wLinkTimeoutCounter], a
+ jr z, .failedToEstablishConnection
+ ld a, ESTABLISH_CONNECTION_WITH_INTERNAL_CLOCK
+ ldh [rSB], a
+ ld a, START_TRANSFER_INTERNAL_CLOCK
+ ldh [rSC], a
+ call DelayFrame
+ jr .establishConnectionLoop
+.establishedConnection
+ call Serial_SendZeroByte
+ call DelayFrame
+ call Serial_SendZeroByte
+ ld c, 50
+ call DelayFrames
+ ld hl, CableClubNPCPleaseApplyHereHaveToSaveText
+ call PrintText
+ xor a
+ ld [wMenuJoypadPollCount], a
+ call YesNoChoice
+ ld a, $1
+ ld [wMenuJoypadPollCount], a
+ ld a, [wCurrentMenuItem]
+ and a
+ jr nz, .choseNo
+ callfar SaveSAVtoSRAM
+ call WaitForSoundToFinish
+ ld a, SFX_SAVE
+ call PlaySoundWaitForCurrent
+ ld hl, CableClubNPCPleaseWaitText
+ call PrintText
+ ld hl, wUnknownSerialCounter
+ ld a, $3
+ ld [hli], a
+ xor a
+ ld [hl], a
+ ldh [hSerialReceivedNewData], a
+ ld [wSerialExchangeNybbleSendData], a
+ call Serial_SyncAndExchangeNybble
+ ld hl, wUnknownSerialCounter
+ ld a, [hli]
+ inc a
+ jr nz, .connected
+ ld a, [hl]
+ inc a
+ jr nz, .connected
+ ld b, 10
+.syncLoop
+ call DelayFrame
+ call Serial_SendZeroByte
+ dec b
+ jr nz, .syncLoop
+ call CloseLinkConnection
+ ld hl, CableClubNPCLinkClosedBecauseOfInactivityText
+ call PrintText
+ jr .didNotConnect
+.failedToEstablishConnection
+ ld hl, CableClubNPCAreaReservedFor2FriendsLinkedByCableText
+ call PrintText
+ jr .didNotConnect
+.choseNo
+ call CloseLinkConnection
+ ld hl, CableClubNPCPleaseComeAgainText
+ call PrintText
+.didNotConnect
+ xor a
+ ld hl, wUnknownSerialCounter
+ ld [hli], a
+ ld [hl], a
+ ld hl, wd72e
+ res 6, [hl]
+ xor a
+ ld [wMenuJoypadPollCount], a
+ ret
+.connected
+ xor a
+ ld [hld], a
+ ld [hl], a
+ ld a, [wLetterPrintingDelayFlags]
+ push af
+ callfar LinkMenu
+ pop af
+ ld [wLetterPrintingDelayFlags], a
+ ret
+
+; seems to be similar of Serial_SyncAndExchangeNybble
+Serial_SyncAndExchangeNybbleDouble:
+ ld a, $ff
+ ld [wSerialExchangeNybbleReceiveData], a
+.loop
+ call Serial_ExchangeNybble
+ call DelayFrame
+ push hl
+ ld hl, wUnknownSerialCounter + 1
+ dec [hl]
+ jr nz, .next
+ dec hl
+ dec [hl]
+ jr nz, .next
+ pop hl
+ jr .setUnknownSerialCounterToFFFF
+.next
+ pop hl
+ ld a, [wSerialExchangeNybbleReceiveData]
+ inc a
+ jr z, .loop
+ call DelayFrame
+ ld a, $ff
+ ld [wSerialExchangeNybbleReceiveData], a
+ call Serial_ExchangeNybble
+ ld a, [wSerialExchangeNybbleReceiveData]
+ inc a
+ jr z, .loop
+ ld b, 10
+.syncLoop1
+ call DelayFrame
+ call Serial_ExchangeNybble
+ dec b
+ jr nz, .syncLoop1
+ ld b, 10
+.syncLoop2
+ call DelayFrame
+ call Serial_SendZeroByte
+ dec b
+ jr nz, .syncLoop2
+ ld a, [wSerialExchangeNybbleReceiveData]
+ ld [wSerialSyncAndExchangeNybbleReceiveData], a
+ ret
+.setUnknownSerialCounterToFFFF
+ ld a, $ff
+ ld [wUnknownSerialCounter], a
+ ld [wUnknownSerialCounter + 1], a
+ ret
+
+CableClubNPCAreaReservedFor2FriendsLinkedByCableText:
+ text_far _CableClubNPCAreaReservedFor2FriendsLinkedByCableText
+ text_end
+
+CableClubNPCWelcomeText:
+ text_far _CableClubNPCWelcomeText
+ text_end
+
+CableClubNPCPleaseApplyHereHaveToSaveText:
+ text_far _CableClubNPCPleaseApplyHereHaveToSaveText
+ text_end
+
+CableClubNPCPleaseWaitText:
+ text_far _CableClubNPCPleaseWaitText
+ text_pause
+ text_end
+
+CableClubNPCLinkClosedBecauseOfInactivityText:
+ text_far _CableClubNPCLinkClosedBecauseOfInactivityText
+ text_end
+
+CableClubNPCPleaseComeAgainText:
+ text_far _CableClubNPCPleaseComeAgainText
+ text_end
+
+CableClubNPCMakingPreparationsText:
+ text_far _CableClubNPCMakingPreparationsText
+ text_end
+
+CloseLinkConnection:
+ call Delay3
+ ld a, CONNECTION_NOT_ESTABLISHED
+ ldh [hSerialConnectionStatus], a
+ ld a, ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK
+ ldh [rSB], a
+ xor a
+ ldh [hSerialReceiveData], a
+ ld a, START_TRANSFER_EXTERNAL_CLOCK
+ ldh [rSC], a
+ ret