mirror of
https://github.com/pret/pokegold.git
synced 2026-04-26 01:47:27 -05:00
1083 lines
17 KiB
NASM
1083 lines
17 KiB
NASM
DoMysteryGift:
|
|
call ClearTilemap
|
|
call ClearSprites
|
|
call WaitBGMap
|
|
farcall InitMysteryGiftLayout
|
|
hlcoord 3, 8
|
|
ld de, .String_PressAToLink_BToCancel
|
|
call PlaceString
|
|
call WaitBGMap
|
|
farcall PrepMysteryGiftDataToSend
|
|
call MysteryGift_ClearTrainerData
|
|
ld a, $2
|
|
ld [wc901], a
|
|
ld a, $14
|
|
ld [wc902], a
|
|
ldh a, [rIE]
|
|
push af
|
|
|
|
call Function29fc9
|
|
|
|
ld d, a
|
|
xor a
|
|
ldh [rIF], a
|
|
pop af
|
|
ldh [rIE], a
|
|
push de
|
|
call ClearTilemap
|
|
call EnableLCD
|
|
call WaitBGMap
|
|
ld b, SCGB_DIPLOMA
|
|
call GetSGBLayout
|
|
call SetPalettes
|
|
pop de
|
|
hlcoord 2, 8
|
|
ld a, d
|
|
ld de, .MysteryGiftCanceledText ; Link has been canceled
|
|
cp $10
|
|
jp z, .LinkCanceled
|
|
cp $6c
|
|
jp nz, .CommunicationError
|
|
ld a, [wc800]
|
|
cp 3
|
|
jr z, .skip_checks
|
|
call .CheckAlreadyGotFiveGiftsToday
|
|
ld hl, .MysteryGiftFiveADayText ; Only 5 gifts a day
|
|
jp nc, .PrintTextAndExit
|
|
call .CheckAlreadyGotAGiftFromThatPerson
|
|
ld hl, .MysteryGiftOneADayText ; Only one gift a day per person
|
|
jp c, .PrintTextAndExit
|
|
.skip_checks
|
|
ld a, [wMysteryGiftPlayerBackupItem]
|
|
and a
|
|
jr nz, .GiftWaiting
|
|
ld a, [wMysteryGiftPartnerBackupItem]
|
|
and a
|
|
jr nz, .FriendNotReady
|
|
ld a, [wc800]
|
|
cp 3
|
|
jr z, .skip_append_save
|
|
call .AddMysteryGiftPartnerID
|
|
ld a, [wc800]
|
|
cp 4
|
|
jr z, .skip_append_save
|
|
call .SaveMysteryGiftTrainerName
|
|
.skip_append_save
|
|
ld a, [wMysteryGiftPartnerSentDeco]
|
|
and a
|
|
jr z, .item
|
|
ld a, [wMysteryGiftPartnerWhichDeco]
|
|
ld c, a
|
|
farcall MysteryGiftGetDecoration
|
|
push bc
|
|
call MysteryGift_CheckAndSetDecorationAlreadyReceived
|
|
pop bc
|
|
jr nz, .item
|
|
callfar GetDecorationName_c
|
|
ld h, d
|
|
ld l, e
|
|
ld de, wStringBuffer1
|
|
ld bc, ITEM_NAME_LENGTH
|
|
call CopyBytes
|
|
ld hl, .MysteryGiftSentHomeText ; sent decoration to home
|
|
jr .PrintTextAndExit
|
|
|
|
.item
|
|
call GetMysteryGiftBank
|
|
ld a, [wMysteryGiftPartnerWhichItem]
|
|
ld c, a
|
|
farcall MysteryGiftGetItemHeldEffect
|
|
ld a, c
|
|
ld [sBackupMysteryGiftItem], a
|
|
ld [wNamedObjectIndexBuffer], a
|
|
call CloseSRAM
|
|
call GetItemName
|
|
ld hl, .MysteryGiftSentText ; sent item
|
|
jr .PrintTextAndExit
|
|
|
|
.LinkCanceled:
|
|
ld hl, .MysteryGiftCanceledText ; Link has been canceled
|
|
jr .PrintTextAndExit
|
|
|
|
.CommunicationError:
|
|
ld hl, .MysteryGiftCommErrorText ; Communication error
|
|
call PrintText
|
|
jp DoMysteryGift
|
|
|
|
.GiftWaiting:
|
|
ld hl, .RetrieveMysteryGiftText ; receive gift at counter
|
|
jr .PrintTextAndExit
|
|
|
|
.FriendNotReady:
|
|
ld hl, .YourFriendIsNotReadyText ; friend not ready
|
|
|
|
.PrintTextAndExit:
|
|
call PrintText
|
|
ld a, LCDC_DEFAULT
|
|
ldh [rLCDC], a
|
|
ret
|
|
|
|
.String_PressAToLink_BToCancel:
|
|
db "Press A to"
|
|
next "link IR-Device"
|
|
next "Press B to"
|
|
next "cancel it."
|
|
db "@"
|
|
|
|
.MysteryGiftCanceledText:
|
|
text_far _MysteryGiftCanceledText
|
|
text_end
|
|
|
|
.MysteryGiftCommErrorText:
|
|
text_far _MysteryGiftCommErrorText
|
|
text_end
|
|
|
|
.RetrieveMysteryGiftText:
|
|
text_far _RetrieveMysteryGiftText
|
|
text_end
|
|
|
|
.YourFriendIsNotReadyText:
|
|
text_far _YourFriendIsNotReadyText
|
|
text_end
|
|
|
|
.MysteryGiftFiveADayText:
|
|
text_far _MysteryGiftFiveADayText
|
|
text_end
|
|
|
|
.MysteryGiftOneADayText:
|
|
text_far _MysteryGiftOneADayText
|
|
text_end
|
|
|
|
.MysteryGiftSentText:
|
|
text_far _MysteryGiftSentText
|
|
text_end
|
|
|
|
.MysteryGiftSentHomeText:
|
|
text_far _MysteryGiftSentHomeText
|
|
text_end
|
|
|
|
.CheckAlreadyGotFiveGiftsToday:
|
|
call GetMysteryGiftBank
|
|
ld a, [sNumDailyMysteryGiftPartnerIDs]
|
|
cp $5
|
|
jp CloseSRAM
|
|
|
|
.CheckAlreadyGotAGiftFromThatPerson:
|
|
call GetMysteryGiftBank
|
|
ld a, [wMysteryGiftPartnerID]
|
|
ld b, a
|
|
ld a, [wMysteryGiftPartnerID + 1]
|
|
ld c, a
|
|
ld a, [sNumDailyMysteryGiftPartnerIDs]
|
|
ld d, a
|
|
ld hl, sDailyMysteryGiftPartnerIDs
|
|
.loop
|
|
ld a, d
|
|
and a
|
|
jr z, .No
|
|
ld a, [hli]
|
|
cp b
|
|
jr nz, .skip
|
|
ld a, [hl]
|
|
cp c
|
|
jr z, .Yes
|
|
.skip
|
|
inc hl
|
|
dec d
|
|
jr .loop
|
|
.Yes:
|
|
scf
|
|
.No:
|
|
jp CloseSRAM
|
|
|
|
.AddMysteryGiftPartnerID:
|
|
call GetMysteryGiftBank
|
|
ld hl, sNumDailyMysteryGiftPartnerIDs
|
|
ld a, [hl]
|
|
inc [hl]
|
|
ld hl, sDailyMysteryGiftPartnerIDs ; inc hl
|
|
ld e, a
|
|
ld d, $0
|
|
add hl, de
|
|
add hl, de
|
|
ld a, [wMysteryGiftPartnerID]
|
|
ld [hli], a
|
|
ld a, [wMysteryGiftPartnerID + 1]
|
|
ld [hl], a
|
|
jp CloseSRAM
|
|
|
|
.SaveMysteryGiftTrainerName:
|
|
call GetMysteryGiftBank
|
|
ld a, $1
|
|
ld [sMysteryGiftTrainerHouseFlag], a
|
|
ld hl, wMysteryGiftPartnerName
|
|
ld de, sMysteryGiftPartnerName
|
|
ld bc, NAME_LENGTH
|
|
call CopyBytes
|
|
ld a, $1
|
|
ld [de], a
|
|
inc de
|
|
ld hl, wMysteryGiftTrainerData
|
|
ld bc, (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
|
|
call CopyBytes
|
|
jp CloseSRAM
|
|
|
|
Function29fc9:
|
|
farcall ClearChannels
|
|
call Function2a18c
|
|
|
|
.loop2
|
|
call Function2a1c4
|
|
call Function2a20b
|
|
ldh a, [hMGStatusFlags]
|
|
cp $10
|
|
jp z, Function2a103
|
|
cp $6c
|
|
jr nz, .loop2
|
|
|
|
ldh a, [hPrintNumBuffer + 8]
|
|
cp $2
|
|
jr z, Function2a055
|
|
ld hl, hPrintNumBuffer
|
|
ld b, $1
|
|
call Function2a184
|
|
jr nz, .ly_loop
|
|
call Function2a07c
|
|
jp nz, Function2a103
|
|
jr Function2a03d
|
|
; Delay frame
|
|
.ly_loop
|
|
ldh a, [rLY]
|
|
cp LY_VBLANK
|
|
jr c, .ly_loop
|
|
ld c, LOW(rRP)
|
|
ld a, $c0
|
|
ldh [c], a
|
|
ld b, 240 ; This might have been intended as a 4-second timeout buffer.
|
|
; However, it is reset with each frame.
|
|
.loop3
|
|
push bc
|
|
call MysteryGift_ReadJoypad
|
|
|
|
ld b, $2
|
|
ld c, LOW(rRP)
|
|
; Delay frame
|
|
.ly_loop2
|
|
ldh a, [c]
|
|
and b
|
|
ld b, a
|
|
ldh a, [rLY]
|
|
cp LY_VBLANK
|
|
jr nc, .ly_loop2
|
|
.ly_loop3
|
|
ldh a, [c]
|
|
and b
|
|
ld b, a
|
|
ldh a, [rLY]
|
|
cp LY_VBLANK
|
|
jr c, .ly_loop3
|
|
|
|
ld a, b
|
|
pop bc
|
|
dec b
|
|
jr z, .loop2 ; we never jump here
|
|
or a
|
|
jr nz, .loop2
|
|
; Check if we've pressed the B button
|
|
ldh a, [hMGJoypadReleased]
|
|
bit B_BUTTON_F, a
|
|
jr z, .loop3
|
|
ld a, $10
|
|
ldh [hMGStatusFlags], a
|
|
jp Function2a103
|
|
|
|
Function2a037:
|
|
call Function2a073
|
|
jp nz, Function2a103
|
|
; fallthrough
|
|
Function2a03d:
|
|
call Function2a166
|
|
jp nz, Function2a103
|
|
call Function2a0bb
|
|
jp nz, Function2a103
|
|
call Function2a171
|
|
jp nz, Function2a103
|
|
call Function2a461
|
|
jp Function2a103
|
|
|
|
Function2a055:
|
|
call Function2a0bb
|
|
jp nz, Function2a103
|
|
call Function2a171
|
|
jp nz, Function2a103
|
|
call Function2a073
|
|
jp nz, Function2a103
|
|
call Function2a166
|
|
jp nz, Function2a103
|
|
call Function2a45c
|
|
jp Function2a103
|
|
|
|
Function2a073:
|
|
ld hl, hPrintNumBuffer
|
|
ld b, $1
|
|
call Function2a184
|
|
ret nz
|
|
; fallthrough
|
|
Function2a07c:
|
|
call Function2a461
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret nz
|
|
ldh a, [hPrintNumBuffer]
|
|
cp $96
|
|
jp nz, Function2a160
|
|
ld a, $90
|
|
ldh [hPrintNumBuffer], a
|
|
call Function2a166
|
|
ret nz
|
|
ld hl, hPrintNumBuffer
|
|
ld b, $1
|
|
call Function2a17c
|
|
ret nz
|
|
call Function2a45c
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret nz
|
|
call Function2a171
|
|
ret nz
|
|
ld hl, wMysteryGiftTrainerData
|
|
ld a, [wc902]
|
|
ld b, a
|
|
call Function2a184
|
|
ret nz
|
|
call Function2a461
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret
|
|
|
|
Function2a0bb:
|
|
ld a, $96
|
|
ldh [hPrintNumBuffer], a
|
|
ld hl, hPrintNumBuffer
|
|
ld b, $1
|
|
call Function2a17c
|
|
ret nz
|
|
call Function2a45c
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret nz
|
|
call Function2a171
|
|
ret nz
|
|
ld hl, hPrintNumBuffer
|
|
ld b, $1
|
|
call Function2a184
|
|
ret nz
|
|
call Function2a461
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret nz
|
|
ldh a, [hPrintNumBuffer]
|
|
cp $90
|
|
jp nz, Function2a160
|
|
call Function2a166
|
|
ret nz
|
|
ld hl, wLinkData
|
|
ld a, [wc902]
|
|
ld b, a
|
|
call Function2a17c
|
|
ret nz
|
|
call Function2a45c
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret
|
|
|
|
Function2a103:
|
|
nop
|
|
ldh a, [hMGStatusFlags]
|
|
cp $10
|
|
jr z, .quit
|
|
cp $6c
|
|
jr nz, .quit
|
|
ld hl, wc901
|
|
dec [hl]
|
|
jr z, .quit
|
|
ld hl, wMysteryGiftTrainerData
|
|
ld de, wMysteryGiftPartnerData
|
|
ld bc, wMysteryGiftPartnerDataEnd - wMysteryGiftPartnerData
|
|
call CopyBytes
|
|
ld a, [wMysteryGiftTrainerData]
|
|
cp $3
|
|
jr nc, .quit
|
|
farcall StagePartyDataForMysteryGift
|
|
call MysteryGift_ClearTrainerData
|
|
ld a, $26
|
|
ld [wc902], a
|
|
ldh a, [hPrintNumBuffer + 8]
|
|
cp $2
|
|
jr z, .asm_2a143
|
|
call Function2a171
|
|
jr nz, Function2a103
|
|
jp Function2a037
|
|
|
|
.asm_2a143
|
|
call Function2a166
|
|
jr nz, Function2a103
|
|
jp Function2a055
|
|
|
|
.quit:
|
|
xor a
|
|
ldh [rIF], a
|
|
ldh a, [rIE]
|
|
or 1 << VBLANK
|
|
ldh [rIE], a
|
|
ei
|
|
call DelayFrame
|
|
ldh a, [hMGStatusFlags]
|
|
push af
|
|
call Function2a1ce
|
|
pop af
|
|
ret
|
|
|
|
Function2a160:
|
|
ld a, $80
|
|
ldh [hMGStatusFlags], a
|
|
and a
|
|
ret
|
|
|
|
Function2a166:
|
|
call Function2a1c4
|
|
call Function2a274
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret
|
|
|
|
Function2a171:
|
|
call Function2a1c4
|
|
call Function2a22c
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret
|
|
|
|
Function2a17c:
|
|
call Function2a2c1
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret
|
|
|
|
Function2a184:
|
|
call Function2a385
|
|
ldh a, [hMGStatusFlags]
|
|
cp $6c
|
|
ret
|
|
|
|
Function2a18c:
|
|
call Function2a1a2
|
|
ld a, 1 << TIMER
|
|
ldh [rIE], a
|
|
xor a
|
|
ldh [rIF], a
|
|
call Function2a1c4
|
|
; runs for ~$40400 cycles
|
|
xor a
|
|
ld b, a
|
|
.busy_wait
|
|
inc a
|
|
jr nz, .busy_wait
|
|
inc b
|
|
jr nz, .busy_wait
|
|
ret
|
|
|
|
Function2a1a2:
|
|
xor a
|
|
ldh [rTAC], a
|
|
ld a, $fe
|
|
ldh [rTMA], a
|
|
ldh [rTIMA], a
|
|
ld a, $2
|
|
ldh [rTAC], a
|
|
or $4
|
|
ldh [rTAC], a
|
|
ret
|
|
|
|
Function2a1b4:
|
|
xor a
|
|
ldh [rTAC], a
|
|
ldh [rTMA], a
|
|
ldh [rTIMA], a
|
|
ld a, $2
|
|
ldh [rTAC], a
|
|
or $4
|
|
ldh [rTAC], a
|
|
ret
|
|
|
|
Function2a1c4:
|
|
ld a, $c0
|
|
call Function2a2ba
|
|
ld a, $1
|
|
ldh [hPrintNumBuffer + 8], a
|
|
ret
|
|
|
|
Function2a1ce:
|
|
xor a
|
|
call Function2a2ba
|
|
ld a, $2
|
|
ldh [rTAC], a
|
|
ret
|
|
|
|
Function2a1d7:
|
|
inc d
|
|
ret z
|
|
xor a
|
|
ldh [rIF], a
|
|
halt
|
|
ldh a, [c]
|
|
bit 1, a
|
|
jr z, Function2a1d7
|
|
or a
|
|
ret
|
|
|
|
Function2a1e5:
|
|
inc d
|
|
ret z
|
|
xor a
|
|
ldh [rIF], a
|
|
halt
|
|
ldh a, [c]
|
|
bit 1, a
|
|
jr nz, Function2a1e5
|
|
or a
|
|
ret
|
|
|
|
Function2a1f3:
|
|
ld a, $c1
|
|
ldh [c], a
|
|
.wait
|
|
dec d
|
|
ret z
|
|
xor a
|
|
ldh [rIF], a
|
|
halt
|
|
jr .wait
|
|
|
|
Function2a1ff:
|
|
ld a, $c0
|
|
ldh [c], a
|
|
.wait
|
|
dec d
|
|
ret z
|
|
xor a
|
|
ldh [rIF], a
|
|
halt
|
|
jr .wait
|
|
|
|
Function2a20b:
|
|
ld d, $0
|
|
ld e, d
|
|
ld a, $1
|
|
ldh [hPrintNumBuffer + 8], a
|
|
.loop
|
|
call MysteryGift_ReadJoypad
|
|
ld b, $2
|
|
ld c, LOW(rRP)
|
|
ldh a, [hMGJoypadReleased]
|
|
bit B_BUTTON_F, a
|
|
jr z, .next
|
|
ld a, $10
|
|
ldh [hMGStatusFlags], a
|
|
ret
|
|
|
|
.next
|
|
bit 0, a
|
|
jr nz, Function2a268
|
|
ldh a, [c]
|
|
and b
|
|
jr nz, .loop
|
|
|
|
Function2a22c:
|
|
ld c, LOW(rRP)
|
|
ld d, $0
|
|
ld e, d
|
|
call Function2a1e5
|
|
jp z, Function2a370
|
|
ld d, e
|
|
call Function2a1d7
|
|
jp z, Function2a370
|
|
call Function2a1e5
|
|
jp z, Function2a370
|
|
call Function2a1d7
|
|
jp z, Function2a370
|
|
ld a, $6c
|
|
ldh [hMGStatusFlags], a
|
|
ld d, $3d
|
|
call Function2a1ff
|
|
ld d, $5
|
|
call Function2a1f3
|
|
ld d, $15
|
|
call Function2a1ff
|
|
ld d, $5
|
|
call Function2a1f3
|
|
ld d, $5
|
|
call Function2a1ff
|
|
ret
|
|
|
|
Function2a268:
|
|
; Wait a random amount of time
|
|
call Random
|
|
ld e, a
|
|
and $f
|
|
ld d, a
|
|
.loop
|
|
dec de
|
|
ld a, d
|
|
or e
|
|
jr nz, .loop
|
|
Function2a274:
|
|
ld a, $2
|
|
ldh [hPrintNumBuffer + 8], a
|
|
ld c, LOW(rRP)
|
|
ld d, $0
|
|
ld e, d
|
|
ld d, $3d
|
|
call Function2a1ff
|
|
ld d, $5
|
|
call Function2a1f3
|
|
ld d, $15
|
|
call Function2a1ff
|
|
ld d, $5
|
|
call Function2a1f3
|
|
ld d, $5
|
|
call Function2a1ff
|
|
ld d, e
|
|
call Function2a1e5
|
|
jp z, Function2a370
|
|
ld d, e
|
|
call Function2a1d7
|
|
jp z, Function2a370
|
|
call Function2a1e5
|
|
jp z, Function2a370
|
|
call Function2a1d7
|
|
jp z, Function2a370
|
|
ld d, $3d
|
|
call Function2a1ff
|
|
ld a, $6c
|
|
ldh [hMGStatusFlags], a
|
|
ret
|
|
|
|
Function2a2ba:
|
|
ldh [rRP], a
|
|
ld a, $ff
|
|
ldh [hMGStatusFlags], a
|
|
ret
|
|
|
|
Function2a2c1:
|
|
xor a
|
|
ldh [hPrintNumBuffer + 4], a
|
|
ldh [hPrintNumBuffer + 5], a
|
|
push hl
|
|
push bc
|
|
ld c, LOW(rRP)
|
|
ld d, $3d
|
|
call Function2a1ff
|
|
ld hl, hPrintNumBuffer + 1
|
|
ld a, $5a
|
|
ld [hli], a
|
|
ld [hl], b
|
|
dec hl
|
|
ld b, $2
|
|
call Function2a304
|
|
pop bc
|
|
pop hl
|
|
call Function2a304
|
|
ldh a, [hPrintNumBuffer + 4]
|
|
ldh [hPrintNumBuffer + 1], a
|
|
ldh a, [hPrintNumBuffer + 5]
|
|
ldh [hPrintNumBuffer + 2], a
|
|
push hl
|
|
ld hl, hPrintNumBuffer + 1
|
|
ld b, $2
|
|
call Function2a304
|
|
ld hl, hMGStatusFlags
|
|
ld b, $1
|
|
call Function2a3dd
|
|
ldh a, [hPrintNumBuffer + 1]
|
|
ldh [hPrintNumBuffer + 4], a
|
|
ldh a, [hPrintNumBuffer + 2]
|
|
ldh [hPrintNumBuffer + 5], a
|
|
pop hl
|
|
ret
|
|
|
|
Function2a304:
|
|
ld c, LOW(rRP)
|
|
ld d, $5
|
|
call Function2a1ff
|
|
ld d, $5
|
|
call Function2a1f3
|
|
ld d, $15
|
|
call Function2a1ff
|
|
ld a, b
|
|
cpl
|
|
ld b, a
|
|
ld a, $f4
|
|
ldh [rTMA], a
|
|
.main_loop
|
|
inc b
|
|
jr z, .done
|
|
ld a, $8
|
|
ldh [hPrintNumBuffer + 3], a
|
|
ld a, [hli]
|
|
ld e, a
|
|
ldh a, [hPrintNumBuffer + 4]
|
|
add e
|
|
ldh [hPrintNumBuffer + 4], a
|
|
ldh a, [hPrintNumBuffer + 5]
|
|
adc 0
|
|
ldh [hPrintNumBuffer + 5], a
|
|
.inner_loop
|
|
xor a
|
|
ldh [rIF], a
|
|
halt
|
|
ld a, $c1
|
|
ldh [rRP], a
|
|
ld d, $1
|
|
ld a, e
|
|
rlca
|
|
ld e, a
|
|
jr nc, .wait
|
|
inc d
|
|
.wait
|
|
ldh a, [rTIMA]
|
|
cp $f8
|
|
jr c, .wait
|
|
ld a, $c0
|
|
ldh [rRP], a
|
|
dec d
|
|
jr z, .no_halt
|
|
xor a
|
|
ldh [rIF], a
|
|
halt
|
|
.no_halt
|
|
ldh a, [hPrintNumBuffer + 3]
|
|
dec a
|
|
jr z, .main_loop
|
|
ldh [hPrintNumBuffer + 3], a
|
|
jr .inner_loop
|
|
|
|
.done
|
|
ld a, $fe
|
|
ldh [rTMA], a
|
|
xor a
|
|
ldh [rIF], a
|
|
halt
|
|
ld d, $5
|
|
call Function2a1f3
|
|
ld d, $11
|
|
call Function2a1ff
|
|
ret
|
|
|
|
Function2a370:
|
|
ldh a, [hMGStatusFlags]
|
|
or $2
|
|
ldh [hMGStatusFlags], a
|
|
ret
|
|
|
|
Function2a377:
|
|
ldh a, [hMGStatusFlags]
|
|
or $1
|
|
ldh [hMGStatusFlags], a
|
|
ret
|
|
|
|
Function2a37e:
|
|
ldh a, [hMGStatusFlags]
|
|
or $80
|
|
ldh [hMGStatusFlags], a
|
|
ret
|
|
|
|
Function2a385:
|
|
xor a
|
|
ldh [hPrintNumBuffer + 4], a
|
|
ldh [hPrintNumBuffer + 5], a
|
|
push bc
|
|
push hl
|
|
ld hl, hPrintNumBuffer + 1
|
|
ld b, $2
|
|
call Function2a3dd
|
|
ldh a, [hPrintNumBuffer + 2]
|
|
ldh [hPrintNumBuffer + 7], a
|
|
ld b, a
|
|
pop hl
|
|
pop af
|
|
cp b
|
|
jp c, Function2a37e
|
|
ldh a, [hPrintNumBuffer + 1]
|
|
cp $5a
|
|
jp nz, Function2a37e
|
|
call Function2a3dd
|
|
ldh a, [hPrintNumBuffer + 4]
|
|
ld d, a
|
|
ldh a, [hPrintNumBuffer + 5]
|
|
ld e, a
|
|
push hl
|
|
push de
|
|
ld hl, hPrintNumBuffer + 1
|
|
ld b, $2
|
|
call Function2a3dd
|
|
pop de
|
|
ld hl, hPrintNumBuffer + 1
|
|
ld a, [hli]
|
|
xor d
|
|
ld b, a
|
|
ld a, [hl]
|
|
xor e
|
|
or b
|
|
call nz, Function2a377
|
|
push de
|
|
ld d, $3d
|
|
call Function2a1ff
|
|
ld hl, hMGStatusFlags
|
|
ld b, $1
|
|
call Function2a304
|
|
pop de
|
|
pop hl
|
|
ld a, d
|
|
ldh [hPrintNumBuffer + 4], a
|
|
ld a, e
|
|
ldh [hPrintNumBuffer + 5], a
|
|
ret
|
|
|
|
Function2a3dd:
|
|
ld c, LOW(rRP)
|
|
ld d, $0
|
|
call Function2a1e5
|
|
jp z, Function2a370
|
|
ld d, $0
|
|
call Function2a1d7
|
|
jp z, Function2a370
|
|
ld d, $0
|
|
call Function2a1e5
|
|
jp z, Function2a370
|
|
ld a, b
|
|
cpl
|
|
ld b, a
|
|
xor a
|
|
ldh [hMGPrevTIMA], a
|
|
call Function2a1b4
|
|
.main_loop
|
|
inc b
|
|
jr z, .done
|
|
ld a, $8
|
|
ldh [hPrintNumBuffer + 3], a
|
|
.inner_loop
|
|
ld d, $0
|
|
.wait_one
|
|
inc d
|
|
jr z, .got_one
|
|
ldh a, [c]
|
|
bit 1, a
|
|
jr z, .wait_one
|
|
ld d, $0
|
|
.got_one
|
|
.wait_zero
|
|
inc d
|
|
jr z, .got_zero
|
|
ldh a, [c]
|
|
bit 1, a
|
|
jr nz, .wait_zero
|
|
.got_zero
|
|
ldh a, [hMGPrevTIMA]
|
|
ld d, a
|
|
ldh a, [rTIMA]
|
|
ldh [hMGPrevTIMA], a
|
|
sub d
|
|
cp $12
|
|
jr c, .zero
|
|
set 0, e
|
|
jr .ok
|
|
.zero
|
|
res 0, e
|
|
.ok
|
|
ldh a, [hPrintNumBuffer + 3]
|
|
dec a
|
|
ldh [hPrintNumBuffer + 3], a
|
|
jr z, .continue
|
|
ld a, e
|
|
rlca
|
|
ld e, a
|
|
jr .inner_loop
|
|
|
|
.continue
|
|
ld a, e
|
|
ld [hli], a
|
|
ldh a, [hPrintNumBuffer + 4]
|
|
add e
|
|
ldh [hPrintNumBuffer + 4], a
|
|
ldh a, [hPrintNumBuffer + 5]
|
|
adc 0
|
|
ldh [hPrintNumBuffer + 5], a
|
|
jr .main_loop
|
|
|
|
.done
|
|
call Function2a1a2
|
|
xor a
|
|
ldh [rIF], a
|
|
ld d, $0
|
|
call Function2a1d7
|
|
jp z, Function2a370
|
|
ld d, $10
|
|
call Function2a1ff
|
|
ret
|
|
|
|
Function2a45c:
|
|
ld b, $0
|
|
jp Function2a2c1
|
|
|
|
Function2a461:
|
|
ld b, $0
|
|
jp Function2a385
|
|
|
|
MysteryGift_ReadJoypad:
|
|
; We can only get four inputs at a time.
|
|
; We take d-pad first for no particular reason.
|
|
ld a, R_DPAD
|
|
ldh [rJOYP], a
|
|
; Read twice to give the request time to take.
|
|
ldh a, [rJOYP]
|
|
ldh a, [rJOYP]
|
|
|
|
; The Joypad register output is in the lo nybble (inversed).
|
|
; We make the hi nybble of our new container d-pad input.
|
|
cpl
|
|
and $f
|
|
swap a
|
|
|
|
; We'll keep this in b for now.
|
|
ld b, a
|
|
|
|
; Buttons make 8 total inputs (A, B, Select, Start).
|
|
; We can fit this into one byte.
|
|
ld a, R_BUTTONS
|
|
ldh [rJOYP], a
|
|
; Wait for input to stabilize.
|
|
rept 6
|
|
ldh a, [rJOYP]
|
|
endr
|
|
; Buttons take the lo nybble.
|
|
cpl
|
|
and $f
|
|
or b
|
|
ld c, a
|
|
; To get the delta we xor the last frame's input with the new one.
|
|
ldh a, [hMGJoypadPressed]
|
|
xor c
|
|
; Released this frame:
|
|
and c
|
|
ldh [hMGJoypadReleased], a
|
|
; Pressed this frame:
|
|
ld a, c
|
|
ldh [hMGJoypadPressed], a
|
|
ld a, $30
|
|
; Reset the joypad register since we're done with it.
|
|
ldh [rJOYP], a
|
|
ret
|
|
|
|
MysteryGift_CheckAndSetDecorationAlreadyReceived:
|
|
call GetMysteryGiftBank
|
|
ld d, $0
|
|
ld b, CHECK_FLAG
|
|
ld hl, sMysteryGiftDecorationsReceived
|
|
lda_predef SmallFarFlagAction
|
|
push hl
|
|
push bc
|
|
call Predef
|
|
call CloseSRAM
|
|
ld a, c
|
|
and a
|
|
pop bc
|
|
pop hl
|
|
ret nz
|
|
call GetMysteryGiftBank
|
|
ld b, SET_FLAG
|
|
predef SmallFarFlagAction
|
|
call CloseSRAM
|
|
xor a
|
|
ret
|
|
|
|
MysteryGift_CopyReceivedDecosToPC:
|
|
call GetMysteryGiftBank
|
|
ld c, $0
|
|
.loop
|
|
push bc
|
|
ld d, $0
|
|
ld b, CHECK_FLAG
|
|
ld hl, sMysteryGiftDecorationsReceived
|
|
predef SmallFarFlagAction
|
|
ld a, c
|
|
and a
|
|
pop bc
|
|
jr z, .skip
|
|
push bc
|
|
callfar SetSpecificDecorationFlag
|
|
pop bc
|
|
.skip
|
|
inc c
|
|
ld a, c
|
|
cp NUM_NON_TROPHY_DECOS
|
|
jr c, .loop
|
|
jp CloseSRAM
|
|
|
|
UnlockMysteryGift:
|
|
call GetMysteryGiftBank
|
|
ld hl, sMysteryGiftUnlocked
|
|
ld a, [hl]
|
|
inc a
|
|
jr nz, .ok
|
|
ld [hld], a
|
|
ld [hl], a
|
|
.ok
|
|
jp CloseSRAM
|
|
|
|
Function2a4f6:
|
|
call GetMysteryGiftBank
|
|
ld a, [sNumDailyMysteryGiftPartnerIDs]
|
|
cp $ff
|
|
jr z, .okay
|
|
xor a
|
|
ld [sNumDailyMysteryGiftPartnerIDs], a
|
|
.okay
|
|
jp CloseSRAM
|
|
|
|
BackupMysteryGift:
|
|
call GetMysteryGiftBank
|
|
ld hl, sMysteryGiftItem
|
|
ld de, sBackupMysteryGiftItem
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
ld a, [hl]
|
|
ld [de], a
|
|
jp CloseSRAM
|
|
|
|
RestoreMysteryGift:
|
|
call GetMysteryGiftBank
|
|
ld hl, sBackupMysteryGiftItem
|
|
ld de, sMysteryGiftItem
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
ld a, [hl]
|
|
ld [de], a
|
|
jp CloseSRAM
|
|
|
|
MysteryGift_ClearTrainerData:
|
|
ld hl, wMysteryGiftTrainerData
|
|
xor a
|
|
ld b, wMysteryGiftTrainerDataEnd - wMysteryGiftTrainerData
|
|
.loop
|
|
ld [hli], a
|
|
dec b
|
|
jr nz, .loop
|
|
ret
|
|
|
|
GetMysteryGiftBank:
|
|
ld a, BANK(sBackupMysteryGiftItem)
|
|
jp OpenSRAM
|