pokecrystal-board/engine/mystery_gift.asm
2018-02-04 13:16:40 -05:00

1736 lines
28 KiB
NASM
Executable File

DoMysteryGift: ; 1048ba (41:48ba)
call ClearTileMap
call ClearSprites
call WaitBGMap
call InitMysteryGiftLayout
hlcoord 3, 8
ld de, .String_PressAToLink_BToCancel
call PlaceString
call WaitBGMap
farcall PrepMysteryGiftDataToSend
call MysteryGift_ClearTrainerData
ld a, $2
ld [wca01], a
ld a, $14
ld [wca02], a
ld a, [rIE]
push af
call Function104a95
ld d, a
xor a
ld [rIF], a
pop af
ld [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, .Text_LinkCanceled ; Link has been canceled
cp $10
jp z, .LinkCanceled
cp $6c
jp nz, .CommunicationError
ld a, [wc900]
cp 3
jr z, .skip_checks
call .CheckAlreadyGotFiveGiftsToday
ld hl, .Text_MaxFiveGifts ; Only 5 gifts a day
jp nc, .PrintTextAndExit
call .CheckAlreadyGotAGiftFromThatPerson
ld hl, .Text_MaxOneGiftPerPerson ; Only one gift a day per person
jp c, .PrintTextAndExit
.skip_checks
ld a, [wMysteryGiftPlayerBackupItem]
and a
jp nz, .GiftWaiting
ld a, [wMysteryGiftPartnerBackupItem]
and a
jp nz, .FriendNotReady
ld a, [wc900]
cp 3
jr z, .skip_append_save
call .AddMysteryGiftPartnerID
ld a, [wc900]
cp 4
jr z, .skip_append_save
call .SaveMysteryGiftTrainerName
farcall RestoreMobileEventIndex
farcall StubbedTrainerRankings_MysteryGift
farcall BackupMobileEventIndex
.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, .Text_SentToHome ; 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, .Text_Sent ; sent item
jr .PrintTextAndExit
.LinkCanceled: ; 1049af (41:49af)
ld hl, .Text_LinkCanceled ; Link has been canceled
jr .PrintTextAndExit
.CommunicationError: ; 1049b4 (41:49b4)
ld hl, .Text_CommunicationError ; Communication error
call PrintText
jp DoMysteryGift
.GiftWaiting: ; 1049bd (41:49bd)
ld hl, .Text_ReceiveGiftAtCounter ; receive gift at counter
jr .PrintTextAndExit
.FriendNotReady: ; 1049c2 (41:49c2)
ld hl, .Text_FriendNotReady ; friend not ready
.PrintTextAndExit: ; 1049c5 (41:49c5)
call PrintText
ld a, LCDC_DEFAULT
ld [rLCDC], a
ret
; 1049cd (41:49cd)
.String_PressAToLink_BToCancel: ; 1049cd
db "Press A to"
next "link IR-Device"
next "Press B to"
next "cancel it."
db "@"
; 1049fd
.Text_LinkCanceled: ; 1049fd
text_jump UnknownText_0x1c0436
db "@"
; 104a02
.Text_CommunicationError: ; 104a02
text_jump UnknownText_0x1c0454
db "@"
; 104a07
.Text_ReceiveGiftAtCounter: ; 104a07
text_jump UnknownText_0x1c046a
db "@"
; 104a0c
.Text_FriendNotReady: ; 104a0c
text_jump UnknownText_0x1c048e
db "@"
; 104a11
.Text_MaxFiveGifts: ; 104a11
text_jump UnknownText_0x1c04a7
db "@"
; 104a16
.Text_MaxOneGiftPerPerson: ; 104a16
text_jump UnknownText_0x1c04c6
db "@"
; 104a1b
.Text_Sent: ; 104a1b
text_jump UnknownText_0x1c04e9
db "@"
; 104a20
.Text_SentToHome: ; 104a20
text_jump UnknownText_0x1c04fa
db "@"
; 104a25
.CheckAlreadyGotFiveGiftsToday: ; 104a25 (41:4a25)
call GetMysteryGiftBank
ld a, [sNumDailyMysteryGiftPartnerIDs]
cp $5
jp CloseSRAM
.CheckAlreadyGotAGiftFromThatPerson: ; 104a30 (41:4a30)
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: ; 104a56 (41:4a56)
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: ; 104a71 (41:4a71)
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
Function104a95: ; 104a95 (41:4a95)
di
farcall ClearChannels
call Function104d5e
.loop2
call Function104d96
call Function104ddd
ld a, [hMGStatusFlags]
cp $10
jp z, Function104bd0
cp $6c
jr nz, .loop2
ld a, [hPrintNum9]
cp $2
jr z, Function104b22
ld hl, hPrintNum1
ld b, $1
call Function104d56
jr nz, .ly_loop
call Function104b49
jp nz, Function104bd0
jr Function104b0a
; Delay frame
.ly_loop
ld a, [rLY]
cp LY_VBLANK
jr c, .ly_loop
ld c, LOW(rRP)
ld a, $c0
ld [$ff00+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
ld a, [$ff00+c]
and b
ld b, a
ld a, [rLY]
cp LY_VBLANK
jr nc, .ly_loop2
.ly_loop3
ld a, [$ff00+c]
and b
ld b, a
ld 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
ld a, [hMGJoypadReleased]
bit B_BUTTON_F, a
jr z, .loop3
ld a, $10
ld [hMGStatusFlags], a
jp Function104bd0
Function104b04: ; 104b04 (41:4b04)
call Function104b40
jp nz, Function104bd0
Function104b0a: ; 104b0a (41:4b0a)
call Function104d38
jp nz, Function104bd0
call Function104b88
jp nz, Function104bd0
call Function104d43
jp nz, Function104bd0
call Function105033
jp Function104bd0
Function104b22: ; 104b22 (41:4b22)
call Function104b88
jp nz, Function104bd0
call Function104d43
jp nz, Function104bd0
call Function104b40
jp nz, Function104bd0
call Function104d38
jp nz, Function104bd0
call Function10502e
jp Function104bd0
Function104b40: ; 104b40 (41:4b40)
ld hl, hPrintNum1
ld b, $1
call Function104d56
ret nz
Function104b49: ; 104b49 (41:4b49)
call Function105033
ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
cp $96
jp nz, Function104d32
ld a, $90
ld [hPrintNum1], a
call Function104d38
ret nz
ld hl, hPrintNum1
ld b, $1
call Function104d4e
ret nz
call Function10502e
ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
ret nz
ld hl, wMysteryGiftTrainerData
ld a, [wca02]
ld b, a
call Function104d56
ret nz
call Function105033
ld a, [hMGStatusFlags]
cp $6c
ret
Function104b88: ; 104b88 (41:4b88)
ld a, $96
ld [hPrintNum1], a
ld hl, hPrintNum1
ld b, $1
call Function104d4e
ret nz
call Function10502e
ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
ret nz
ld hl, hPrintNum1
ld b, $1
call Function104d56
ret nz
call Function105033
ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
cp $90
jp nz, Function104d32
call Function104d38
ret nz
ld hl, wOverworldMap
ld a, [wca02]
ld b, a
call Function104d4e
ret nz
call Function10502e
ld a, [hMGStatusFlags]
cp $6c
ret
Function104bd0: ; 104bd0 (41:4bd0)
nop
ld a, [hMGStatusFlags]
cp $10
jr z, .quit
cp $6c
jr nz, .quit
ld hl, wca01
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 [wca02], a
ld a, [hPrintNum9]
cp $2
jr z, .asm_104c10
call Function104d43
jr nz, Function104bd0
jp Function104b04
.asm_104c10
call Function104d38
jr nz, Function104bd0
jp Function104b22
.quit
ld a, [hMGStatusFlags]
push af
call Function104da0
xor a
ld [rIF], a
ld a, [rIE]
or $1
ld [rIE], a
ei
call DelayFrame
pop af
ret
Function104c2d: ; 104c2d (41:4c2d)
di
farcall ClearChannels
call Function104d5e
.asm_104c37
call Function104d96
call Function104ddd
ld a, [hMGStatusFlags]
cp $10
jp z, Function104d1c
cp $6c
jr nz, .asm_104c37
ld a, [hPrintNum9]
cp $2
jr z, .asm_104c6c
call Function104c8a
jp nz, Function104d1c
call Function104d38
jp nz, Function104d1c
call Function104cd2
jp nz, Function104d1c
call Function104d43
jp nz, Function104d1c
call Function105033
jp Function104d1c
.asm_104c6c
call Function104cd2
jp nz, Function104d1c
call Function104d43
jp nz, Function104d1c
call Function104c8a
jp nz, Function104d1c
call Function104d38
jp nz, Function104d1c
call Function10502e
jp Function104d1c
Function104c8a: ; 104c8a (41:4c8a)
ld hl, hPrintNum1
ld b, $1
call Function104d56
ret nz
call Function105033
ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
cp $3c
jp nz, Function104d32
swap a
ld [hPrintNum1], a
call Function104d38
ret nz
ld hl, hPrintNum1
ld b, $1
call Function104d4e
ret nz
call Function10502e
ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
ret nz
ld hl, wMysteryGiftTrainerData
ld a, [wca02]
ld b, a
call Function104d56
ret nz
call Function105033
ld a, [hMGStatusFlags]
cp $6c
ret
Function104cd2: ; 104cd2 (41:4cd2)
ld a, $3c
ld [hPrintNum1], a
ld hl, hPrintNum1
ld b, $1
call Function104d4e
ret nz
call Function10502e
ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
ret nz
ld hl, hPrintNum1
ld b, $1
call Function104d56
ret nz
call Function105033
ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
swap a
cp $3c
jp nz, Function104d32
call Function104d38
ret nz
ld hl, wOverworldMap
ld a, [wca02]
ld b, a
call Function104d4e
ret nz
call Function10502e
ld a, [hMGStatusFlags]
cp $6c
ret
Function104d1c: ; 104d1c (41:4d1c)
nop
ld a, [hMGStatusFlags]
push af
call Function104da0
xor a
ld [rIF], a
ld a, [rIE]
or $1
ld [rIE], a
ei
call DelayFrame
pop af
ret
Function104d32: ; 104d32 (41:4d32)
ld a, $80
ld [hMGStatusFlags], a
and a
ret
Function104d38: ; 104d38 (41:4d38)
call Function104d96
call Function104e46
ld a, [hMGStatusFlags]
cp $6c
ret
Function104d43: ; 104d43 (41:4d43)
call Function104d96
call Function104dfe
ld a, [hMGStatusFlags]
cp $6c
ret
Function104d4e: ; 104d4e (41:4d4e)
call Function104e93
ld a, [hMGStatusFlags]
cp $6c
ret
Function104d56: ; 104d56 (41:4d56)
call Function104f57
ld a, [hMGStatusFlags]
cp $6c
ret
Function104d5e: ; 104d5e (41:4d5e)
call Function104d74
ld a, $4
ld [rIE], a
xor a
ld [rIF], a
call Function104d96
xor a
ld b, a
.asm_104d6d
inc a
jr nz, .asm_104d6d
inc b
jr nz, .asm_104d6d
ret
Function104d74: ; 104d74 (41:4d74)
xor a
ld [rTAC], a
ld a, $fe
ld [rTMA], a
ld [rTIMA], a
ld a, $2
ld [rTAC], a
or $4
ld [rTAC], a
ret
Function104d86: ; 104d86 (41:4d86)
xor a
ld [rTAC], a
ld [rTMA], a
ld [rTIMA], a
ld a, $2
ld [rTAC], a
or $4
ld [rTAC], a
ret
Function104d96: ; 104d96 (41:4d96)
ld a, $c0
call Function104e8c
ld a, $1
ld [hPrintNum9], a
ret
Function104da0: ; 104da0 (41:4da0)
xor a
call Function104e8c
ld a, $2
ld [rTAC], a
ret
Function104da9: ; 104da9 (41:4da9)
inc d
ret z
xor a
ld [rIF], a
halt
ld a, [$ff00+c]
bit 1, a
jr z, Function104da9
or a
ret
Function104db7: ; 104db7 (41:4db7)
inc d
ret z
xor a
ld [rIF], a
halt
ld a, [$ff00+c]
bit 1, a
jr nz, Function104db7
or a
ret
Function104dc5: ; 104dc5 (41:4dc5)
ld a, $c1
ld [$ff00+c], a
.wait
dec d
ret z
xor a
ld [rIF], a
halt
jr .wait
Function104dd1: ; 104dd1 (41:4dd1)
ld a, $c0
ld [$ff00+c], a
.wait
dec d
ret z
xor a
ld [rIF], a
halt
jr .wait
Function104ddd: ; 104ddd (41:4ddd)
ld d, $0
ld e, d
ld a, $1
ld [hPrintNum9], a
.loop
call MysteryGift_ReadJoypad
ld b, $2
ld c, LOW(rRP)
ld a, [hMGJoypadReleased]
bit B_BUTTON_F, a
jr z, .next
ld a, $10
ld [hMGStatusFlags], a
ret
.next
bit 0, a
jr nz, Function104e3a
ld a, [$ff00+c]
and b
jr nz, .loop
Function104dfe: ; 104dfe (41:4dfe)
ld c, LOW(rRP)
ld d, $0
ld e, d
call Function104db7
jp z, Function104f42
ld d, e
call Function104da9
jp z, Function104f42
call Function104db7
jp z, Function104f42
call Function104da9
jp z, Function104f42
ld a, $6c
ld [hMGStatusFlags], a
ld d, $3d
call Function104dd1
ld d, $5
call Function104dc5
ld d, $15
call Function104dd1
ld d, $5
call Function104dc5
ld d, $5
call Function104dd1
ret
Function104e3a: ; 104e3a (41:4e3a)
; 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
Function104e46: ; 104e46 (41:4e46)
ld a, $2
ld [hPrintNum9], a
ld c, LOW(rRP)
ld d, $0
ld e, d
ld d, $3d
call Function104dd1
ld d, $5
call Function104dc5
ld d, $15
call Function104dd1
ld d, $5
call Function104dc5
ld d, $5
call Function104dd1
ld d, e
call Function104db7
jp z, Function104f42
ld d, e
call Function104da9
jp z, Function104f42
call Function104db7
jp z, Function104f42
call Function104da9
jp z, Function104f42
ld d, $3d
call Function104dd1
ld a, $6c
ld [hMGStatusFlags], a
ret
Function104e8c: ; 104e8c (41:4e8c)
ld [rRP], a
ld a, $ff
ld [hMGStatusFlags], a
ret
Function104e93: ; 104e93 (41:4e93)
xor a
ld [hPrintNum5], a
ld [hPrintNum6], a
push hl
push bc
ld c, LOW(rRP)
ld d, $3d
call Function104dd1
ld hl, hPrintNum2
ld a, $5a
ld [hli], a
ld [hl], b
dec hl
ld b, $2
call Function104ed6
pop bc
pop hl
call Function104ed6
ld a, [hPrintNum5]
ld [hPrintNum2], a
ld a, [hPrintNum6]
ld [hPrintNum3], a
push hl
ld hl, hPrintNum2
ld b, $2
call Function104ed6
ld hl, hMGStatusFlags
ld b, $1
call Function104faf
ld a, [hPrintNum2]
ld [hPrintNum5], a
ld a, [hPrintNum3]
ld [hPrintNum6], a
pop hl
ret
Function104ed6: ; 104ed6 (41:4ed6)
ld c, LOW(rRP)
ld d, $5
call Function104dd1
ld d, $5
call Function104dc5
ld d, $15
call Function104dd1
ld a, b
cpl
ld b, a
ld a, $f4
ld [rTMA], a
.asm_104eee
inc b
jr z, .asm_104f2e
ld a, $8
ld [hPrintNum4], a
ld a, [hli]
ld e, a
ld a, [hPrintNum5]
add e
ld [hPrintNum5], a
ld a, [hPrintNum6]
adc 0
ld [hPrintNum6], a
.asm_104f02
xor a
ld [rIF], a
halt
ld a, $c1
ld [rRP], a
ld d, $1
ld a, e
rlca
ld e, a
jr nc, .asm_104f13
inc d
.asm_104f13
ld a, [rTIMA]
cp $f8
jr c, .asm_104f13
ld a, $c0
ld [rRP], a
dec d
jr z, .asm_104f25
xor a
ld [rIF], a
halt
.asm_104f25
ld a, [hPrintNum4]
dec a
jr z, .asm_104eee
ld [hPrintNum4], a
jr .asm_104f02
.asm_104f2e
ld a, $fe
ld [rTMA], a
xor a
ld [rIF], a
halt
ld d, $5
call Function104dc5
ld d, $11
call Function104dd1
ret
Function104f42: ; 104f42 (41:4f42)
ld a, [hMGStatusFlags]
or $2
ld [hMGStatusFlags], a
ret
Function104f49: ; 104f49 (41:4f49)
ld a, [hMGStatusFlags]
or $1
ld [hMGStatusFlags], a
ret
Function104f50: ; 104f50 (41:4f50)
ld a, [hMGStatusFlags]
or $80
ld [hMGStatusFlags], a
ret
Function104f57: ; 104f57 (41:4f57)
xor a
ld [hPrintNum5], a
ld [hPrintNum6], a
push bc
push hl
ld hl, hPrintNum2
ld b, $2
call Function104faf
ld a, [hPrintNum3]
ld [hPrintNum8], a
ld b, a
pop hl
pop af
cp b
jp c, Function104f50
ld a, [hPrintNum2]
cp $5a
jp nz, Function104f50
call Function104faf
ld a, [hPrintNum5]
ld d, a
ld a, [hPrintNum6]
ld e, a
push hl
push de
ld hl, hPrintNum2
ld b, $2
call Function104faf
pop de
ld hl, hPrintNum2
ld a, [hli]
xor d
ld b, a
ld a, [hl]
xor e
or b
call nz, Function104f49
push de
ld d, $3d
call Function104dd1
ld hl, hMGStatusFlags
ld b, $1
call Function104ed6
pop de
pop hl
ld a, d
ld [hPrintNum5], a
ld a, e
ld [hPrintNum6], a
ret
Function104faf: ; 104faf (41:4faf)
ld c, LOW(rRP)
ld d, $0
call Function104db7
jp z, Function104f42
ld d, $0
call Function104da9
jp z, Function104f42
ld d, $0
call Function104db7
jp z, Function104f42
ld a, b
cpl
ld b, a
xor a
ld [hMGJoypadPressed + 2], a
call Function104d86
.asm_104fd2
inc b
jr z, .asm_10501a
ld a, $8
ld [hPrintNum4], a
.asm_104fd9
ld d, $0
.asm_104fdb
inc d
jr z, .asm_104fe5
ld a, [$ff00+c]
bit 1, a
jr z, .asm_104fdb
ld d, $0
.asm_104fe5
inc d
jr z, .asm_104fed
ld a, [$ff00+c]
bit 1, a
jr nz, .asm_104fe5
.asm_104fed
ld a, [hMGJoypadPressed + 2]
ld d, a
ld a, [rTIMA]
ld [hMGJoypadPressed + 2], a
sub d
cp $12
jr c, .asm_104ffd
set 0, e
jr .asm_104fff
.asm_104ffd
res 0, e
.asm_104fff
ld a, [hPrintNum4]
dec a
ld [hPrintNum4], a
jr z, .asm_10500b
ld a, e
rlca
ld e, a
jr .asm_104fd9
.asm_10500b
ld a, e
ld [hli], a
ld a, [hPrintNum5]
add e
ld [hPrintNum5], a
ld a, [hPrintNum6]
adc 0
ld [hPrintNum6], a
jr .asm_104fd2
.asm_10501a
call Function104d74
xor a
ld [rIF], a
ld d, $0
call Function104da9
jp z, Function104f42
ld d, $10
call Function104dd1
ret
Function10502e: ; 10502e (41:502e)
ld b, $0
jp Function104e93
Function105033: ; 105033 (41:5033)
ld b, $0
jp Function104f57
MysteryGift_ReadJoypad: ; 105038 (41:5038)
; We can only get four inputs at a time.
; We take d-pad first for no particular reason.
ld a, R_DPAD
ld [rJOYP], a
; Read twice to give the request time to take.
ld a, [rJOYP]
ld 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
ld [rJOYP], a
; Wait for input to stabilize.
rept 6
ld 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.
ld a, [hMGJoypadPressed]
xor c
; Released this frame:
and c
ld [hMGJoypadReleased], a
; Pressed this frame:
ld a, c
ld [hMGJoypadPressed], a
ld a, $30
; Reset the joypad register since we're done with it.
ld [rJOYP], a
ret
MysteryGift_CheckAndSetDecorationAlreadyReceived: ; 105069 (41:5069)
call GetMysteryGiftBank
ld d, $0
ld b, CHECK_FLAG
ld hl, sMysteryGiftDecorationsReceived
predef_id 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: ; 105091 (41:5091)
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 TrophyIDs - DecorationIDs
jr c, .loop
jp CloseSRAM
UnlockMysteryGift: ; 1050b9
call GetMysteryGiftBank
ld hl, sMysteryGiftUnlocked
ld a, [hl]
inc a
jr nz, .ok
ld [hld], a
ld [hl], a
.ok
jp CloseSRAM
; 1050c8
Function1050c8: ; 1050c8
call GetMysteryGiftBank
ld a, [sNumDailyMysteryGiftPartnerIDs]
cp $ff
jr z, .okay
xor a
ld [sNumDailyMysteryGiftPartnerIDs], a
.okay
jp CloseSRAM
; 1050d9
BackupMysteryGift: ; 1050d9
call GetMysteryGiftBank
ld hl, sMysteryGiftItem
ld de, sBackupMysteryGiftItem
ld a, [hli]
ld [de], a
inc de
ld a, [hl]
ld [de], a
jp CloseSRAM
; 1050ea
RestoreMysteryGift: ; 1050ea (41:50ea)
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: ; 1050fb (41:50fb)
ld hl, wMysteryGiftTrainerData
xor a
ld b, wMysteryGiftTrainerDataEnd - wMysteryGiftTrainerData
.loop
ld [hli], a
dec b
jr nz, .loop
ret
GetMysteryGiftBank: ; 105106
ld a, BANK(sBackupMysteryGiftItem)
jp GetSRAMBank
; 10510b
StagePartyDataForMysteryGift: ; 10510b (41:510b)
; You will be sending this data to your mystery gift partner.
; Structure is the same as a trainer with species and moves
; defined.
ld a, BANK(sPokemonData)
call GetSRAMBank
ld de, wMysteryGiftStaging
ld bc, sPokemonData + wPartyMons - wPokemonData
ld hl, sPokemonData + wPartySpecies - wPokemonData
.loop
ld a, [hli]
cp -1
jr z, .party_end
cp EGG
jr z, .next
push hl
; copy level
ld hl, MON_LEVEL
add hl, bc
ld a, [hl]
ld [de], a
inc de
; copy species
ld hl, MON_SPECIES
add hl, bc
ld a, [hl]
ld [de], a
inc de
; copy moves
ld hl, MON_MOVES
add hl, bc
push bc
ld bc, NUM_MOVES
call CopyBytes
pop bc
pop hl
.next
push hl
ld hl, PARTYMON_STRUCT_LENGTH
add hl, bc
ld b, h
ld c, l
pop hl
jr .loop
.party_end
ld a, -1
ld [de], a
ld a, $26
ld [wca00], a
jp CloseSRAM
InitMysteryGiftLayout: ; 105153 (41:5153)
call ClearBGPalettes
call DisableLCD
ld hl, MysteryGiftGFX
ld de, vTiles2 tile $00
ld a, BANK(MysteryGiftGFX)
ld bc, MysteryGiftGFX.End - MysteryGiftGFX
call FarCopyBytes
hlcoord 0, 0
ld a, $42
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
call ByteFill
hlcoord 3, 7
lb bc, 9, 15
call ClearBox
hlcoord 0, 0
ld a, $0
ld [hli], a
inc a
ld [hl], a
hlcoord 0, 1
inc a
ld [hli], a
inc a
ld [hl], a
hlcoord 7, 1
ld a, $12
call .Load5GFX
hlcoord 2, 2
ld a, $17
call .Load16GFX
hlcoord 2, 3
ld a, $27
call .Load16GFX
hlcoord 9, 4
ld a, $37
ld [hli], a
inc a
ld [hl], a
hlcoord 1, 2
ld [hl], $4
hlcoord 1, 3
ld a, $5
call .Load14Column
ld a, $9
hlcoord 18, 5
call .Load11Column
hlcoord 2, 5
ld a, $b
call .Load16Row
hlcoord 2, 16
ld a, $7
call .Load16Row
hlcoord 2, 5
ld a, $d
call .Load5GFX
hlcoord 7, 5
ld [hl], $c
hlcoord 18, 5
ld [hl], $a
hlcoord 18, 16
ld [hl], $8
hlcoord 1, 16
ld [hl], $6
hlcoord 2, 6
ld a, $3a
call .Load16Row
hlcoord 2, 15
ld a, $40
call .Load16Row
hlcoord 2, 6
ld a, $3c
call .Load9Column
hlcoord 17, 6
ld a, $3e
call .Load9Column
hlcoord 2, 6
ld [hl], $39
hlcoord 17, 6
ld [hl], $3b
hlcoord 2, 15
ld [hl], $3f
hlcoord 17, 15
ld [hl], $41
call EnableLCD
call WaitBGMap
ld b, SCGB_MYSTERY_GIFT
call GetSGBLayout
call SetPalettes
ret
.Load5GFX: ; 10522e (41:522e)
ld b, 5
jr .gfx_loop
; 105232 (41:5232)
.Unreferenced_Load6GFX:
ld b, 6
jr .gfx_loop
.Load16GFX: ; 105236 (41:5236)
ld b, 16
.gfx_loop ; 105238 (41:5238)
ld [hli], a
inc a
dec b
jr nz, .gfx_loop
ret
.Load9Column: ; 10523e (41:523e)
ld b, 9
jr .col_loop
.Load11Column: ; 105242 (41:5242)
ld b, 11
jr .col_loop
.Load14Column: ; 105246 (41:5246)
ld b, 14
.col_loop ; 105248 (41:5248)
ld [hl], a
ld de, SCREEN_WIDTH
add hl, de
dec b
jr nz, .col_loop
ret
.Load16Row: ; 105251 (41:5251)
ld b, 16
.row_loop
ld [hli], a
dec b
jr nz, .row_loop
ret
MysteryGiftGFX: ; 105258
INCBIN "gfx/mystery_gift/mystery_gift.2bpp"
.End
Function105688: ; 105688 (41:5688)
call ClearTileMap
call ClearSprites
call WaitBGMap
call Function1057d7
hlcoord 3, 8
ld de, String_10572e
call PlaceString
call WaitBGMap
call Function10578c
call MysteryGift_ClearTrainerData
ld a, $24
ld [wca02], a
ld a, [rIE]
push af
call Function104c2d
ld d, a
xor a
ld [rIF], a
pop af
ld [rIE], a
ld a, d
cp $10
jp z, Function105712
cp $6c
jp nz, Function10571a
call Function1056eb
ld c, 60
call DelayFrames
call Function105777
ld hl, Text_ReceivedCard
call PrintText
ld de, wMysteryGiftTrainerData
farcall Function8ac70
ld a, c
ld [wd265], a
ld hl, Text_CardNotRegistered
jr c, asm_105726
ld hl, Text_ListedCardAsNumber
jr asm_105726
Function1056eb: ; 1056eb (41:56eb)
ld c, 16
.loop
ld hl, wVirtualOAMSprite00YCoord
ld b, 8
.dec_y_loop
dec [hl]
rept SPRITEOAMSTRUCT_LENGTH
inc hl
endr
dec b
jr nz, .dec_y_loop
ld hl, wVirtualOAMSprite08YCoord
ld b, 8
.inc_y_loop
inc [hl]
rept SPRITEOAMSTRUCT_LENGTH
inc hl
endr
dec b
jr nz, .inc_y_loop
dec c
ret z
push bc
ld c, 4
call DelayFrames
pop bc
jr .loop
Function105712: ; 105712 (41:5712)
call Function105777
ld hl, Text_MGLinkCanceled
jr asm_105726
Function10571a: ; 10571a (41:571a)
call Function105777
ld hl, Text_MGCommError
call PrintText
jp Function105688
asm_105726: ; 105726 (41:5726)
call PrintText
ld a, LCDC_DEFAULT
ld [rLCDC], a
ret
; 10572e (41:572e)
String_10572e: ; 10572e
db "エーボタン¯おすと"
next "つうしん<PKMN>おこなわれるよ!"
next "ビーボタン¯おすと"
next "つうしん¯ちゅうし します"
db "@"
; 10575e
Text_ReceivedCard: ; 10575e
text_jump UnknownText_0x1c051a
db "@"
Text_ListedCardAsNumber: ; 105763
text_jump UnknownText_0x1c0531
db "@"
Text_CardNotRegistered: ; 105768
text_jump UnknownText_0x1c0555
db "@"
Text_MGLinkCanceled: ; 10576d
text_jump UnknownText_0x1c0573
db "@"
Text_MGCommError: ; 105772
text_jump UnknownText_0x1c0591
db "@"
; 105777
Function105777: ; 105777 (41:5777)
call ClearSprites
call ClearTileMap
call EnableLCD
call WaitBGMap
ld b, SCGB_DIPLOMA
call GetSGBLayout
call SetPalettes
ret
Function10578c: ; 10578c (41:578c)
ld de, wOverworldMap
ld a, BANK(sPlayerData)
call GetSRAMBank
ld hl, sPlayerData + wPlayerName - wPlayerData
ld bc, NAME_LENGTH
call CopyBytes
ld hl, sPlayerData + wPlayerID - wPlayerData
ld bc, 2
call CopyBytes
ld hl, sPlayerData + wSecretID - wPlayerData
ld bc, 2
call CopyBytes
call CloseSRAM
ld a, BANK(sCrystalData)
call GetSRAMBank
ld a, [sCrystalData + 0]
ld [de], a
inc de
ld a, 4 ; MBC30 bank used by JP Crystal; inaccessible by MBC3
call GetSRAMBank
ld hl, $a603 ; address of MBC30 bank
ld bc, $8
call CopyBytes
ld hl, $a007 ; address of MBC30 bank
ld bc, $c
call CopyBytes
call CloseSRAM
ret
Function1057d7: ; 1057d7 (41:57d7)
call ClearBGPalettes
call DisableLCD
ld hl, MysteryGiftJP_GFX
ld de, vTiles2 tile $00
ld a, BANK(MysteryGiftJP_GFX)
lb bc, 4, 0
call FarCopyBytes
ld hl, MysteryGiftJP_GFX + $40 tiles
ld de, vTiles0 tile $00
ld a, BANK(MysteryGiftJP_GFX)
ld bc, $80
call FarCopyBytes
hlcoord 0, 0
ld a, $3f
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
call ByteFill
hlcoord 3, 7
lb bc, 9, 15
call ClearBox
hlcoord 0, 0
ld a, $0
ld [hli], a
inc a
ld [hl], a
hlcoord 0, 1
inc a
ld [hli], a
inc a
ld [hl], a
hlcoord 4, 2
ld a, $13
call .Load11Row
hlcoord 4, 3
ld a, $1e
call .Load12Row
hlcoord 4, 4
ld a, $2a
call .Load12Row
hlcoord 1, 2
ld [hl], $4
hlcoord 1, 3
ld a, $5
call .Load14Column
ld a, $9
hlcoord 18, 5
call .Load11Column
hlcoord 2, 5
ld a, $b
call .Load16Row
hlcoord 2, 16
ld a, $7
call .Load16Row
hlcoord 2, 5
ld a, $d
call .Load6Row
hlcoord 8, 5
ld [hl], $c
hlcoord 18, 5
ld [hl], $a
hlcoord 18, 16
ld [hl], $8
hlcoord 1, 16
ld [hl], $6
hlcoord 2, 6
ld a, $37
call .Load16Row
hlcoord 2, 15
ld a, $3d
call .Load16Row
hlcoord 2, 6
ld a, $39
call .Load9Column
hlcoord 17, 6
ld a, $3b
call .Load9Column
hlcoord 2, 6
ld [hl], $36
hlcoord 17, 6
ld [hl], $38
hlcoord 2, 15
ld [hl], $3c
hlcoord 17, 15
ld [hl], $3e
ld de, wVirtualOAMSprite00
ld hl, .OAM_data
ld bc, 16 * SPRITEOAMSTRUCT_LENGTH
call CopyBytes
call EnableLCD
call WaitBGMap
ld b, $2
farcall GetMysteryGift_MobileAdapterLayout
jp SetPalettes
.Load6Row: ; 1058c6 (41:58c6)
ld b, 6
jr .row_loop
.Load11Row: ; 1058ca (41:58ca)
ld b, 11
jr .row_loop
.Load12Row: ; 1058ce (41:58ce)
ld b, 12
.row_loop ; 1058d0 (41:58d0)
ld [hli], a
inc a
dec b
jr nz, .row_loop
ret
.Load9Column: ; 1058d6 (41:58d6)
ld b, 9
jr .column_loop
.Load11Column: ; 1058da (41:58da)
ld b, 11
jr .column_loop
.Load14Column: ; 1058de (41:58de)
ld b, 14
.column_loop ; 1058e0 (41:58e0)
ld [hl], a
ld de, SCREEN_WIDTH
add hl, de
dec b
jr nz, .column_loop
ret
.Load16Row: ; 1058e9 (41:58e9)
ld b, 16
.row_loop_no_inc
ld [hli], a
dec b
jr nz, .row_loop_no_inc
ret
; 1058f0 (41:58f0)
.OAM_data: ; 1058f0
dsprite 2, 1, 6, 4, $00, 0
dsprite 2, 1, 7, 4, $01, 0
dsprite 2, 1, 8, 4, $02, 0
dsprite 2, 1, 9, 4, $03, 0
dsprite 3, 1, 6, 4, $04, 0
dsprite 3, 1, 7, 4, $05, 0
dsprite 3, 1, 8, 4, $06, 0
dsprite 3, 1, 9, 4, $07, 0
dsprite 0, 1, 11, 4, $00, 0
dsprite 0, 1, 12, 4, $01, 0
dsprite 0, 1, 13, 4, $02, 0
dsprite 0, 1, 14, 4, $03, 0
dsprite 1, 1, 11, 4, $04, 0
dsprite 1, 1, 12, 4, $05, 0
dsprite 1, 1, 13, 4, $06, 0
dsprite 1, 1, 14, 4, $07, 0
; japanese mystery gift gfx
MysteryGiftJP_GFX: ; 105930
INCBIN "gfx/mystery_gift/mystery_gift_jp.2bpp"