diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-18 10:42:42 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-18 10:42:42 -0500 |
commit | 6d47be8d8c02317a963c6ff5266a50a8674d285d (patch) | |
tree | ef57261cd28ea077a00185d6ae1083e80295f356 /engine | |
parent | bc1870e3f499973fd656d37d134e3f9e4757c980 (diff) |
Fruit tree constants, more mail engine
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/mail.asm | 433 | ||||
-rw-r--r-- | engine/scripting.asm | 2 |
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 |