summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2015-11-18 10:42:42 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2015-11-18 10:42:42 -0500
commit6d47be8d8c02317a963c6ff5266a50a8674d285d (patch)
treeef57261cd28ea077a00185d6ae1083e80295f356 /engine
parentbc1870e3f499973fd656d37d134e3f9e4757c980 (diff)
Fruit tree constants, more mail engine
Diffstat (limited to 'engine')
-rwxr-xr-xengine/mail.asm433
-rw-r--r--engine/scripting.asm2
2 files changed, 416 insertions, 19 deletions
diff --git a/engine/mail.asm b/engine/mail.asm
index e3b7a5fab..5748536dc 100755
--- a/engine/mail.asm
+++ b/engine/mail.asm
@@ -39,7 +39,8 @@ SendMailToPC: ; 4456e
ret
; 445c0
-Function445c0: ; 445c0 (11:45c0)
+DeleteMailFromPC: ; 445c0 (11:45c0)
+; Shift all mail messages in the mailbox
ld a, BANK(sMailboxCount)
call GetSRAMBank
ld a, b
@@ -53,7 +54,7 @@ Function445c0: ; 445c0 (11:45c0)
pop bc
.loop
ld a, b
- cp $9
+ cp MAILBOX_CAPACITY - 1
jr z, .done
push bc
ld bc, MAIL_STRUCT_LENGTH
@@ -82,7 +83,7 @@ ReadMailMessage: ; 445f4
callba ReadAnyMail
ret
-Function44607: ; 44607
+MoveMailFromPCToParty: ; 44607
ld a, BANK(sMailboxCount)
call GetSRAMBank
push bc
@@ -112,7 +113,7 @@ Function44607: ; 44607
ld [hl], d
call CloseSRAM
pop bc
- jp Function445c0
+ jp DeleteMailFromPC
; 44648 (11:4648)
GetMailboxCount: ; 44648
@@ -123,12 +124,13 @@ GetMailboxCount: ; 44648
jp CloseSRAM
; 44654
-Function44654:: ; 44654
+CheckPokeItem:: ; 44654
push bc
push de
callba SelectMonFromParty
ld a, $2
- jr c, .asm_446c6
+ jr c, .pop_return
+
ld a, [CurPartyMon]
ld hl, PartyMon1Item
ld bc, PARTYMON_STRUCT_LENGTH
@@ -136,7 +138,8 @@ Function44654:: ; 44654
ld d, [hl]
callba ItemIsMail
ld a, $3
- jr nc, .asm_446c6
+ jr nc, .pop_return
+
ld a, BANK(sPartyMail)
call GetSRAMBank
ld a, [CurPartyMon]
@@ -148,43 +151,437 @@ Function44654:: ; 44654
pop hl
pop bc
- ld a, $20
+; Compare the mail message, byte for byte, with the expected message.
+ ld a, MAIL_MSG_LENGTH
ld [wd265], a
-.asm_44691
+.loop
ld a, [de]
ld c, a
ld a, b
call GetFarByte
cp "@"
- jr z, .asm_446ab
+ jr z, .done
cp c
ld a, $0
- jr nz, .asm_446c1
+ jr nz, .close_sram_return
inc hl
inc de
ld a, [wd265]
dec a
ld [wd265], a
- jr nz, .asm_44691
+ jr nz, .loop
-.asm_446ab
+.done
callba CheckCurPartyMonFainted
ld a, $4
- jr c, .asm_446c1
+ jr c, .close_sram_return
xor a
ld [wPokemonWithdrawDepositParameter], a
callba Functione039
ld a, $1
-.asm_446c1
+.close_sram_return
call CloseSRAM
- jr .asm_446c8
+ jr .return
-.asm_446c6
+.pop_return
pop de
pop bc
-.asm_446c8
+.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, $2f
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld hl, wd002
+ ld bc, $21
+ ld a, BANK(sPartyMail)
+ call GetSRAMBank
+ call CopyBytes
+ pop af
+ push af
+ ld hl, PartyMonOT
+ ld bc, NAME_LENGTH
+ call AddNTimes
+ ld bc, $a
+ 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)
+
+
+Function44781: ; 44781
+ ld a, [PartyCount]
+ and a
+ jr z, .asm_4479e
+ ld e, a
+ ld hl, PartyMon1Item
+.asm_4478b
+ ld d, [hl]
+ push hl
+ push de
+ callba ItemIsMail
+ pop de
+ pop hl
+ ret c
+ ld bc, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ dec e
+ jr nz, .asm_4478b
+
+.asm_4479e
+ and a
+ ret
+; 447a0
+
+_KrisMailBoxMenu: ; 0x447a0
+ call InitMail
+ jr z, .nomail
+ call LoadStandardMenuDataHeader
+ call MailboxPC
+ jp WriteBackup
+
+.nomail
+ ld hl, .EmptyMailboxText
+ jp MenuTextBoxBackup
+; 0x447b4
+
+.EmptyMailboxText ; 0x447b4
+ text_jump _EmptyMailboxText
+ db "@"
+
+InitMail: ; 0x447b9
+; initialize wd0f2 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, wd0f2
+ ld [hli], a
+ and a
+
+ jr z, .done ; if no mail, we're done
+
+ ; load values in memory with incrementing values starting at wd0f2
+ ld b, a
+ ld a, $1
+.loop
+ ld [hli], a
+ inc a
+ dec b
+ jr nz, .loop
+.done
+ ld [hl], $ff ; terminate
+
+ ld a, [wd0f2]
+ and a
+ ret
+; 0x447da
+
+Function447da: ; 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
+
+Function447fb: ; 0x447fb
+ push de
+ ld a, [MenuSelection]
+ call Function447da
+ pop hl
+ jp PlaceString
+; 0x44806
+
+MailboxPC: ; 0x44806
+ xor a
+ ld [OBPals + 8 * 6], a
+ ld a, $1
+ ld [wd0f1], a
+.loop
+ call InitMail
+ ld hl, MenuData4494c
+ call CopyMenuDataHeader
+ xor a
+ ld [hBGMapMode], a
+ call InitScrollingMenu
+ call UpdateSprites
+ ld a, [wd0f1]
+ ld [wMenuCursorBuffer], a
+ ld a, [OBPals + 8 * 6]
+ ld [wd0e4], a
+ call HandleScrollingMenu
+ ld a, [wd0e4]
+ ld [OBPals + 8 * 6], a
+ ld a, [MenuSelection2]
+ ld [wd0f1], a
+ ld a, [wcf73]
+ cp $2
+ jr z, .exit
+ call Function4484a
+ jr .loop
+
+.exit
+ xor a
+ ret
+; 0x4484a
+
+Function4484a: ; 0x4484a
+ ld hl, MenuData44964
+ call LoadMenuDataHeader
+ call InterpretMenu2
+ call ExitMenu
+ jr c, .exit
+ ld a, [MenuSelection2]
+ dec a
+ ld hl, .JumpTable
+ rst JumpTable
+
+.exit
+ 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 ReturnToCallingMenu
+; 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, sMailbox1MailType
+ 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
+ callba Function5004f
+ callba Function50405
+ callba Function503e0
+ callba WritePartyMenuTilemap
+ callba PrintPartyMenuText
+ call WaitBGMap
+ call SetPalettes
+ call DelayFrame
+ callba 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 ReturnToCallingMenu
+; 0x4493c
+
+.HoldingMailText ; 0x4493c
+ text_jump MailAlreadyHoldingItemText
+ db "@"
+
+.EggText ; 0x44941
+ text_jump MailEggText
+ db "@"
+
+.MailMovedText ; 0x44946
+ text_jump MailMovedFromBoxText
+ db "@"
+
+.Cancel
+ ret
+
+MenuData4494c: ; 0x4494c
+ db %01000000 ; flags
+ db 1, 8 ; start coords
+ db $a, $12 ; end coords
+ dw .MenuData2
+ db 1 ; default option
+
+.MenuData2
+ db %00010000 ; flags
+ db 4, 0 ; rows/columns?
+ db 1 ; horizontal spacing?
+ dbw 0,wd0f2 ; text pointer
+ dba Function447fb
+ dbw 0,0
+ dbw 0,0
+
+MenuData44964: ; 0x44964
+ db %01000000 ; flags
+ db 0, 0 ; start coords
+ db 9, $d ; end coords
+ dw .MenuData2
+ db 1 ; default option
+
+.MenuData2
+ db %10000000 ; flags
+ db 4 ; items
+ db "READ MAIL@"
+ db "PUT IN PACK@"
+ db "ATTACH MAIL@"
+ db "CANCEL@"
diff --git a/engine/scripting.asm b/engine/scripting.asm
index 4aa1de224..f576fa3d4 100644
--- a/engine/scripting.asm
+++ b/engine/scripting.asm
@@ -2341,7 +2341,7 @@ Script_checkpokeitem: ; 977b7
ld d, a
ld a, [ScriptBank]
ld b, a
- callba Function44654
+ callba CheckPokeItem
ret
; 977ca