From 27ef600ace40671a78f5bb3a71f507e42c175f50 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 17 Nov 2015 17:56:49 -0500 Subject: Here's the mail it never fails --- engine/mail.asm | 190 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100755 engine/mail.asm (limited to 'engine/mail.asm') diff --git a/engine/mail.asm b/engine/mail.asm new file mode 100755 index 000000000..e3b7a5fab --- /dev/null +++ b/engine/mail.asm @@ -0,0 +1,190 @@ +SendMailToPC: ; 4456e + ld a, MON_ITEM + call GetPartyParamLocation + ld d, [hl] + callba 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 + +Function445c0: ; 445c0 (11:45c0) + 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 $9 + 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 + callba ReadAnyMail + ret + +Function44607: ; 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 Function445c0 +; 44648 (11:4648) + +GetMailboxCount: ; 44648 + ld a, BANK(sMailboxCount) + call GetSRAMBank + ld a, [sMailboxCount] + ld c, a + jp CloseSRAM +; 44654 + +Function44654:: ; 44654 + push bc + push de + callba SelectMonFromParty + ld a, $2 + jr c, .asm_446c6 + ld a, [CurPartyMon] + ld hl, PartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld d, [hl] + callba ItemIsMail + ld a, $3 + jr nc, .asm_446c6 + 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 + + ld a, $20 + ld [wd265], a +.asm_44691 + ld a, [de] + ld c, a + ld a, b + call GetFarByte + cp "@" + jr z, .asm_446ab + cp c + ld a, $0 + jr nz, .asm_446c1 + inc hl + inc de + ld a, [wd265] + dec a + ld [wd265], a + jr nz, .asm_44691 + +.asm_446ab + callba CheckCurPartyMonFainted + ld a, $4 + jr c, .asm_446c1 + xor a + ld [wPokemonWithdrawDepositParameter], a + callba Functione039 + ld a, $1 + +.asm_446c1 + call CloseSRAM + jr .asm_446c8 + +.asm_446c6 + pop de + pop bc + +.asm_446c8 + ld [ScriptVar], a + ret +; 446cc -- cgit v1.2.3 From 6d47be8d8c02317a963c6ff5266a50a8674d285d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 18 Nov 2015 10:42:42 -0500 Subject: Fruit tree constants, more mail engine --- engine/mail.asm | 433 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 415 insertions(+), 18 deletions(-) (limited to 'engine/mail.asm') 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@" -- cgit v1.2.3 From 3f4044cd4628c156e975971ce0655d3d51917b87 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 18 Nov 2015 13:01:55 -0500 Subject: engine/compose_mail.asm; ldpixel --- engine/mail.asm | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) (limited to 'engine/mail.asm') diff --git a/engine/mail.asm b/engine/mail.asm index 5748536dc..c0bc591b0 100755 --- a/engine/mail.asm +++ b/engine/mail.asm @@ -286,13 +286,13 @@ DeletePartyMonMail: ; 44765 (11:4765) ; 44781 (11:4781) -Function44781: ; 44781 +IsAnyMonHoldingMail: ; 44781 ld a, [PartyCount] and a - jr z, .asm_4479e + jr z, .no_mons ld e, a ld hl, PartyMon1Item -.asm_4478b +.loop ld d, [hl] push hl push de @@ -303,9 +303,9 @@ Function44781: ; 44781 ld bc, PARTYMON_STRUCT_LENGTH add hl, bc dec e - jr nz, .asm_4478b + jr nz, .loop -.asm_4479e +.no_mons and a ret ; 447a0 @@ -327,30 +327,30 @@ _KrisMailBoxMenu: ; 0x447a0 db "@" InitMail: ; 0x447b9 -; initialize wd0f2 and beyond with incrementing values, one per mail +; 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, wd0f2 + 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 wd0f2 + ; load values in memory with incrementing values starting at wMailboxCount ld b, a - ld a, $1 + ld a, 1 .loop ld [hli], a inc a dec b jr nz, .loop .done - ld [hl], $ff ; terminate + ld [hl], -1 ; terminate - ld a, [wd0f2] + ld a, [wMailboxCount] and a ret ; 0x447da @@ -385,7 +385,7 @@ MailboxPC: ; 0x44806 xor a ld [OBPals + 8 * 6], a ld a, $1 - ld [wd0f1], a + ld [wCurMessageIndex], a .loop call InitMail ld hl, MenuData4494c @@ -394,7 +394,8 @@ MailboxPC: ; 0x44806 ld [hBGMapMode], a call InitScrollingMenu call UpdateSprites - ld a, [wd0f1] + + ld a, [wCurMessageIndex] ld [wMenuCursorBuffer], a ld a, [OBPals + 8 * 6] ld [wd0e4], a @@ -402,7 +403,8 @@ MailboxPC: ; 0x44806 ld a, [wd0e4] ld [OBPals + 8 * 6], a ld a, [MenuSelection2] - ld [wd0f1], a + ld [wCurMessageIndex], a + ld a, [wcf73] cp $2 jr z, .exit @@ -558,7 +560,7 @@ Function4484a: ; 0x4484a MenuData4494c: ; 0x4494c db %01000000 ; flags db 1, 8 ; start coords - db $a, $12 ; end coords + db 10, 18 ; end coords dw .MenuData2 db 1 ; default option @@ -566,7 +568,7 @@ MenuData4494c: ; 0x4494c db %00010000 ; flags db 4, 0 ; rows/columns? db 1 ; horizontal spacing? - dbw 0,wd0f2 ; text pointer + dbw 0, wMailboxCount ; text pointer dba Function447fb dbw 0,0 dbw 0,0 -- cgit v1.2.3 From 8a6a1a7d77fdcd1f8468f0c411795a8f039d4bd8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 18 Nov 2015 23:16:25 -0500 Subject: CmdQueues --- engine/mail.asm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engine/mail.asm') diff --git a/engine/mail.asm b/engine/mail.asm index c0bc591b0..1cf1a13a7 100755 --- a/engine/mail.asm +++ b/engine/mail.asm @@ -503,9 +503,9 @@ Function4484a: ; 0x4484a ld [PartyMenuActionText], a call ClearBGPalettes .try_again - callba Function5004f - callba Function50405 - callba Function503e0 + callba LoadPartyMenuGFX + callba InitPartyMenuWithCancel + callba InitPartyMenuGFX callba WritePartyMenuTilemap callba PrintPartyMenuText call WaitBGMap -- cgit v1.2.3 From 58020fb5f629693e3f90c0a3c6b417f61330802c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 23 Nov 2015 00:21:21 -0500 Subject: trade animation --- engine/mail.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engine/mail.asm') diff --git a/engine/mail.asm b/engine/mail.asm index 1cf1a13a7..7aa6b30c1 100755 --- a/engine/mail.asm +++ b/engine/mail.asm @@ -489,7 +489,7 @@ Function4484a: ; 0x4484a ld a, BANK(sMailboxCount) call GetSRAMBank pop af - ld hl, sMailbox1MailType + ld hl, sMailbox1Type ld bc, MAIL_STRUCT_LENGTH call AddNTimes ld a, [hl] -- cgit v1.2.3 From d972564175bcee324877f1e016fafd349c50e7d3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 23 Nov 2015 16:04:53 -0500 Subject: link and seer labels --- engine/mail.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engine/mail.asm') diff --git a/engine/mail.asm b/engine/mail.asm index 7aa6b30c1..82d27d4be 100755 --- a/engine/mail.asm +++ b/engine/mail.asm @@ -398,9 +398,9 @@ MailboxPC: ; 0x44806 ld a, [wCurMessageIndex] ld [wMenuCursorBuffer], a ld a, [OBPals + 8 * 6] - ld [wd0e4], a + ld [wMenuScrollPosition], a call HandleScrollingMenu - ld a, [wd0e4] + ld a, [wMenuScrollPosition] ld [OBPals + 8 * 6], a ld a, [MenuSelection2] ld [wCurMessageIndex], a -- cgit v1.2.3