mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-01-23 09:16:20 -08:00
Added a bunch of constants for the bitflags of each kind of menu. Some are slightly vague or too long, but I'm not sure how to else name them.
590 lines
9.1 KiB
NASM
Executable File
590 lines
9.1 KiB
NASM
Executable File
SendMailToPC: ; 4456e
|
|
ld a, MON_ITEM
|
|
call GetPartyParamLocation
|
|
ld d, [hl]
|
|
farcall ItemIsMail
|
|
jr nc, .full
|
|
call GetMailboxCount
|
|
cp MAILBOX_CAPACITY
|
|
jr nc, .full
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
ld hl, sMailbox
|
|
call AddNTimes
|
|
ld d, h
|
|
ld e, l
|
|
ld a, [CurPartyMon]
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
ld hl, sPartyMail
|
|
call AddNTimes
|
|
push hl
|
|
ld a, BANK(sMailboxCount)
|
|
call GetSRAMBank
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call CopyBytes
|
|
pop hl
|
|
xor a
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call ByteFill
|
|
ld a, MON_ITEM
|
|
call GetPartyParamLocation
|
|
ld [hl], 0
|
|
ld hl, sMailboxCount
|
|
inc [hl]
|
|
call CloseSRAM
|
|
xor a
|
|
ret
|
|
|
|
.full
|
|
scf
|
|
ret
|
|
; 445c0
|
|
|
|
DeleteMailFromPC: ; 445c0 (11:45c0)
|
|
; Shift all mail messages in the mailbox
|
|
ld a, BANK(sMailboxCount)
|
|
call GetSRAMBank
|
|
ld a, b
|
|
push bc
|
|
ld hl, sMailbox
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call AddNTimes
|
|
push hl
|
|
add hl, bc
|
|
pop de
|
|
pop bc
|
|
.loop
|
|
ld a, b
|
|
cp MAILBOX_CAPACITY - 1
|
|
jr z, .done
|
|
push bc
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call CopyBytes
|
|
pop bc
|
|
inc b
|
|
jr .loop
|
|
.done
|
|
ld h, d
|
|
ld l, e
|
|
xor a
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call ByteFill
|
|
ld hl, sMailboxCount
|
|
dec [hl]
|
|
jp CloseSRAM
|
|
; 445f4 (11:45f4)
|
|
|
|
ReadMailMessage: ; 445f4
|
|
ld a, b
|
|
ld hl, sMailbox
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call AddNTimes
|
|
ld d, h
|
|
ld e, l
|
|
farcall ReadAnyMail
|
|
ret
|
|
|
|
MoveMailFromPCToParty: ; 44607
|
|
ld a, BANK(sMailboxCount)
|
|
call GetSRAMBank
|
|
push bc
|
|
ld a, b
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
ld hl, sMailbox
|
|
call AddNTimes
|
|
push hl
|
|
ld a, [CurPartyMon]
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
ld hl, sPartyMail
|
|
call AddNTimes
|
|
ld d, h
|
|
ld e, l
|
|
pop hl
|
|
push hl
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call CopyBytes
|
|
pop hl
|
|
ld de, PARTYMON_STRUCT_LENGTH - MON_MOVES
|
|
add hl, de
|
|
ld d, [hl]
|
|
ld a, [CurPartyMon]
|
|
ld hl, PartyMon1Item
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
call AddNTimes
|
|
ld [hl], d
|
|
call CloseSRAM
|
|
pop bc
|
|
jp DeleteMailFromPC
|
|
; 44648 (11:4648)
|
|
|
|
GetMailboxCount: ; 44648
|
|
ld a, BANK(sMailboxCount)
|
|
call GetSRAMBank
|
|
ld a, [sMailboxCount]
|
|
ld c, a
|
|
jp CloseSRAM
|
|
; 44654
|
|
|
|
CheckPokeItem:: ; 44654
|
|
push bc
|
|
push de
|
|
farcall SelectMonFromParty
|
|
ld a, $2
|
|
jr c, .pop_return
|
|
|
|
ld a, [CurPartyMon]
|
|
ld hl, PartyMon1Item
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
call AddNTimes
|
|
ld d, [hl]
|
|
farcall ItemIsMail
|
|
ld a, $3
|
|
jr nc, .pop_return
|
|
|
|
ld a, BANK(sPartyMail)
|
|
call GetSRAMBank
|
|
ld a, [CurPartyMon]
|
|
ld hl, sPartyMail
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call AddNTimes
|
|
ld d, h
|
|
ld e, l
|
|
pop hl
|
|
pop bc
|
|
|
|
; Compare the mail message, byte for byte, with the expected message.
|
|
ld a, MAIL_MSG_LENGTH
|
|
ld [wd265], a
|
|
.loop
|
|
ld a, [de]
|
|
ld c, a
|
|
ld a, b
|
|
call GetFarByte
|
|
cp "@"
|
|
jr z, .done
|
|
cp c
|
|
ld a, $0
|
|
jr nz, .close_sram_return
|
|
inc hl
|
|
inc de
|
|
ld a, [wd265]
|
|
dec a
|
|
ld [wd265], a
|
|
jr nz, .loop
|
|
|
|
.done
|
|
farcall CheckCurPartyMonFainted
|
|
ld a, $4
|
|
jr c, .close_sram_return
|
|
xor a
|
|
ld [wPokemonWithdrawDepositParameter], a
|
|
farcall RemoveMonFromPartyOrBox
|
|
ld a, $1
|
|
|
|
.close_sram_return
|
|
call CloseSRAM
|
|
jr .return
|
|
|
|
.pop_return
|
|
pop de
|
|
pop bc
|
|
|
|
.return
|
|
ld [ScriptVar], a
|
|
ret
|
|
; 446cc
|
|
|
|
|
|
GivePokeItem:: ; 446cc
|
|
ld a, [PartyCount]
|
|
dec a
|
|
push af
|
|
push bc
|
|
ld hl, PartyMon1Item
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
call AddNTimes
|
|
pop bc
|
|
ld [hl], b
|
|
pop af
|
|
push bc
|
|
push af
|
|
ld hl, sPartyMail
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call AddNTimes
|
|
ld d, h
|
|
ld e, l
|
|
ld hl, wd002
|
|
ld bc, MAIL_MSG_LENGTH + 1
|
|
ld a, BANK(sPartyMail)
|
|
call GetSRAMBank
|
|
call CopyBytes
|
|
pop af
|
|
push af
|
|
ld hl, PartyMonOT
|
|
ld bc, NAME_LENGTH
|
|
call AddNTimes
|
|
ld bc, NAME_LENGTH - 1
|
|
call CopyBytes
|
|
pop af
|
|
ld hl, PartyMon1ID
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
call AddNTimes
|
|
ld a, [hli]
|
|
ld [de], a
|
|
inc de
|
|
ld a, [hl]
|
|
ld [de], a
|
|
inc de
|
|
ld a, [CurPartySpecies]
|
|
ld [de], a
|
|
inc de
|
|
pop bc
|
|
ld a, b
|
|
ld [de], a
|
|
jp CloseSRAM
|
|
; 44725
|
|
|
|
|
|
BackupPartyMonMail: ; 44725
|
|
ld a, BANK(sPartyMail)
|
|
call GetSRAMBank
|
|
ld hl, sPartyMail
|
|
ld de, sPartyMailBackup
|
|
ld bc, 6 * MAIL_STRUCT_LENGTH
|
|
call CopyBytes
|
|
ld hl, sMailboxCount
|
|
ld de, sMailboxCountBackup
|
|
ld bc, 1 + 10 * MAIL_STRUCT_LENGTH
|
|
call CopyBytes
|
|
jp CloseSRAM
|
|
; 44745
|
|
|
|
RestorePartyMonMail: ; 44745 (11:4745)
|
|
ld a, BANK(sPartyMail)
|
|
call GetSRAMBank
|
|
ld hl, sPartyMailBackup
|
|
ld de, sPartyMail
|
|
ld bc, 6 * MAIL_STRUCT_LENGTH
|
|
call CopyBytes
|
|
ld hl, sMailboxCountBackup
|
|
ld de, sMailboxCount
|
|
ld bc, 1 + 10 * MAIL_STRUCT_LENGTH
|
|
call CopyBytes
|
|
jp CloseSRAM
|
|
|
|
DeletePartyMonMail: ; 44765 (11:4765)
|
|
ld a, BANK(sPartyMail)
|
|
call GetSRAMBank
|
|
xor a
|
|
ld hl, sPartyMail
|
|
ld bc, 6 * MAIL_STRUCT_LENGTH
|
|
call ByteFill
|
|
xor a
|
|
ld hl, sMailboxCount
|
|
ld bc, 1 + 10 * MAIL_STRUCT_LENGTH
|
|
call ByteFill
|
|
jp CloseSRAM
|
|
; 44781 (11:4781)
|
|
|
|
|
|
IsAnyMonHoldingMail: ; 44781
|
|
ld a, [PartyCount]
|
|
and a
|
|
jr z, .no_mons
|
|
ld e, a
|
|
ld hl, PartyMon1Item
|
|
.loop
|
|
ld d, [hl]
|
|
push hl
|
|
push de
|
|
farcall ItemIsMail
|
|
pop de
|
|
pop hl
|
|
ret c
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
add hl, bc
|
|
dec e
|
|
jr nz, .loop
|
|
|
|
.no_mons
|
|
and a
|
|
ret
|
|
; 447a0
|
|
|
|
_KrisMailBoxMenu: ; 0x447a0
|
|
call InitMail
|
|
jr z, .nomail
|
|
call LoadStandardMenuDataHeader
|
|
call MailboxPC
|
|
jp CloseWindow
|
|
|
|
.nomail
|
|
ld hl, .EmptyMailboxText
|
|
jp MenuTextBoxBackup
|
|
; 0x447b4
|
|
|
|
.EmptyMailboxText: ; 0x447b4
|
|
text_jump _EmptyMailboxText
|
|
db "@"
|
|
|
|
InitMail: ; 0x447b9
|
|
; initialize wMailboxCount and beyond with incrementing values, one per mail
|
|
; set z if no mail
|
|
ld a, BANK(sMailboxCount)
|
|
call GetSRAMBank
|
|
ld a, [sMailboxCount]
|
|
call CloseSRAM
|
|
ld hl, wMailboxCount
|
|
ld [hli], a
|
|
and a
|
|
|
|
jr z, .done ; if no mail, we're done
|
|
|
|
; load values in memory with incrementing values starting at wMailboxCount
|
|
ld b, a
|
|
ld a, 1
|
|
.loop
|
|
ld [hli], a
|
|
inc a
|
|
dec b
|
|
jr nz, .loop
|
|
.done
|
|
ld [hl], -1 ; terminate
|
|
|
|
ld a, [wMailboxCount]
|
|
and a
|
|
ret
|
|
; 0x447da
|
|
|
|
MailboxPC_GetMailAuthor: ; 0x447da
|
|
dec a
|
|
ld hl, sMailbox1Author
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call AddNTimes
|
|
ld a, BANK(sMailboxCount)
|
|
call GetSRAMBank
|
|
ld de, StringBuffer2
|
|
push de
|
|
ld bc, NAME_LENGTH - 1
|
|
call CopyBytes
|
|
ld a, "@"
|
|
ld [de], a
|
|
call CloseSRAM
|
|
pop de
|
|
ret
|
|
; 0x447fb
|
|
|
|
MailboxPC_PrintMailAuthor: ; 0x447fb
|
|
push de
|
|
ld a, [MenuSelection]
|
|
call MailboxPC_GetMailAuthor
|
|
pop hl
|
|
jp PlaceString
|
|
; 0x44806
|
|
|
|
MailboxPC: ; 0x44806
|
|
xor a
|
|
ld [wCurMessageScrollPosition], a
|
|
ld a, 1
|
|
ld [wCurMessageIndex], a
|
|
.loop
|
|
call InitMail
|
|
ld hl, .TopMenuDataHeader
|
|
call CopyMenuDataHeader
|
|
xor a
|
|
ld [hBGMapMode], a
|
|
call InitScrollingMenu
|
|
call UpdateSprites
|
|
|
|
ld a, [wCurMessageIndex]
|
|
ld [wMenuCursorBuffer], a
|
|
ld a, [wCurMessageScrollPosition]
|
|
ld [wMenuScrollPosition], a
|
|
call ScrollingMenu
|
|
ld a, [wMenuScrollPosition]
|
|
ld [wCurMessageScrollPosition], a
|
|
ld a, [wMenuCursorY]
|
|
ld [wCurMessageIndex], a
|
|
|
|
ld a, [wMenuJoypad]
|
|
cp B_BUTTON
|
|
jr z, .exit
|
|
call .Submenu
|
|
jr .loop
|
|
|
|
.exit
|
|
xor a
|
|
ret
|
|
; 0x4484a
|
|
|
|
.Submenu: ; 0x4484a
|
|
ld hl, .SubMenuDataHeader
|
|
call LoadMenuDataHeader
|
|
call VerticalMenu
|
|
call ExitMenu
|
|
jr c, .subexit
|
|
ld a, [wMenuCursorY]
|
|
dec a
|
|
ld hl, .JumpTable
|
|
rst JumpTable
|
|
|
|
.subexit
|
|
ret
|
|
; 0x44861
|
|
|
|
.JumpTable:
|
|
dw .ReadMail
|
|
dw .PutInPack
|
|
dw .AttachMail
|
|
dw .Cancel
|
|
|
|
.ReadMail: ; 0x44869
|
|
call FadeToMenu
|
|
ld a, [MenuSelection]
|
|
dec a
|
|
ld b, a
|
|
call ReadMailMessage
|
|
jp CloseSubmenu
|
|
; 0x44877
|
|
|
|
.PutInPack: ; 0x44877
|
|
ld hl, .MessageLostText
|
|
call MenuTextBox
|
|
call YesNoBox
|
|
call ExitMenu
|
|
ret c
|
|
ld a, [MenuSelection]
|
|
dec a
|
|
call .GetMailType
|
|
ld a, 1
|
|
ld [wItemQuantityChangeBuffer], a
|
|
ld hl, NumItems
|
|
call ReceiveItem
|
|
jr c, .put_in_bag
|
|
ld hl, .PackFullText
|
|
jp MenuTextBoxBackup
|
|
|
|
.put_in_bag
|
|
ld a, [MenuSelection]
|
|
dec a
|
|
ld b, a
|
|
call DeleteMailFromPC
|
|
ld hl, .PutAwayText
|
|
jp MenuTextBoxBackup
|
|
; 0x448ac
|
|
|
|
.PutAwayText: ; 0x448ac
|
|
text_jump ClearedMailPutAwayText
|
|
db "@"
|
|
|
|
.PackFullText: ; 0x448b1
|
|
text_jump MailPackFullText
|
|
db "@"
|
|
|
|
.MessageLostText: ; 0x448b6
|
|
text_jump MailMessageLostText
|
|
db "@"
|
|
|
|
.GetMailType: ; 0x448bb
|
|
push af
|
|
ld a, BANK(sMailboxCount)
|
|
call GetSRAMBank
|
|
pop af
|
|
ld hl, sMailbox1Type
|
|
ld bc, MAIL_STRUCT_LENGTH
|
|
call AddNTimes
|
|
ld a, [hl]
|
|
ld [CurItem], a
|
|
jp CloseSRAM
|
|
; 0x448d2
|
|
|
|
.AttachMail: ; 0x448d2
|
|
call FadeToMenu
|
|
xor a
|
|
ld [PartyMenuActionText], a
|
|
call ClearBGPalettes
|
|
.try_again
|
|
farcall LoadPartyMenuGFX
|
|
farcall InitPartyMenuWithCancel
|
|
farcall InitPartyMenuGFX
|
|
farcall WritePartyMenuTilemap
|
|
farcall PrintPartyMenuText
|
|
call WaitBGMap
|
|
call SetPalettes
|
|
call DelayFrame
|
|
farcall PartyMenuSelect
|
|
jr c, .exit2
|
|
ld a, [CurPartySpecies]
|
|
cp EGG
|
|
jr z, .egg
|
|
ld a, MON_ITEM
|
|
call GetPartyParamLocation
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .attach_mail
|
|
ld hl, .HoldingMailText
|
|
call PrintText
|
|
jr .try_again
|
|
|
|
.egg
|
|
ld hl, .EggText
|
|
call PrintText
|
|
jr .try_again
|
|
|
|
.attach_mail
|
|
ld a, [MenuSelection]
|
|
dec a
|
|
ld b, a
|
|
call MoveMailFromPCToParty
|
|
ld hl, .MailMovedText
|
|
call PrintText
|
|
|
|
.exit2
|
|
jp CloseSubmenu
|
|
; 0x4493c
|
|
|
|
.HoldingMailText: ; 0x4493c
|
|
text_jump MailAlreadyHoldingItemText
|
|
db "@"
|
|
|
|
.EggText: ; 0x44941
|
|
text_jump MailEggText
|
|
db "@"
|
|
|
|
.MailMovedText: ; 0x44946
|
|
text_jump MailMovedFromBoxText
|
|
db "@"
|
|
|
|
.Cancel:
|
|
ret
|
|
|
|
.TopMenuDataHeader: ; 0x4494c
|
|
db MENU_BACKUP_TILES ; flags
|
|
db 1, 8 ; start coords
|
|
db 10, 18 ; end coords
|
|
dw .TopMenuData2
|
|
db 1 ; default option
|
|
|
|
.TopMenuData2:
|
|
db SCROLLINGMENU_DISPLAY_ARROWS ; flags
|
|
db 4, 0 ; rows/columns?
|
|
db 1 ; horizontal spacing?
|
|
dbw 0, wMailboxCount ; text pointer
|
|
dba MailboxPC_PrintMailAuthor
|
|
dba NULL
|
|
dba NULL
|
|
|
|
.SubMenuDataHeader: ; 0x44964
|
|
db MENU_BACKUP_TILES ; flags
|
|
db 0, 0 ; start coords
|
|
db 9, 13 ; end coords
|
|
dw .SubMenuData2
|
|
db 1 ; default option
|
|
|
|
.SubMenuData2:
|
|
db STATICMENU_CURSOR ; flags
|
|
db 4 ; items
|
|
db "READ MAIL@"
|
|
db "PUT IN PACK@"
|
|
db "ATTACH MAIL@"
|
|
db "CANCEL@"
|