diff options
| author | dannye <33dannye@gmail.com> | 2020-11-04 00:06:44 -0600 |
|---|---|---|
| committer | dannye <33dannye@gmail.com> | 2020-11-04 00:06:44 -0600 |
| commit | 5647ca687b92954dcf37a6ea6bfbc9a341c32de4 (patch) | |
| tree | dde1937a1bfdb3a835f4155e1c2eb8f1aaf86f63 /engine/link/cable_club_npc.asm | |
| parent | Merge pull request #55 from Deokishisu/patch-1 (diff) | |
| download | pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.gz pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.xz pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.zip | |
Sync with pokered
Diffstat (limited to 'engine/link/cable_club_npc.asm')
| -rwxr-xr-x | engine/link/cable_club_npc.asm | 208 |
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 |
