From 27ef600ace40671a78f5bb3a71f507e42c175f50 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 17 Nov 2015 17:56:49 -0500 Subject: [PATCH] Here's the mail it never fails --- constants/misc_constants.asm | 4 + constants/pokemon_constants.asm | 1 - engine/breeding/egg.asm | 2 +- engine/link.asm | 28 +-- engine/mail.asm | 190 ++++++++++++++++++ engine/mart.asm | 2 +- engine/pokecenter_pc.asm | 10 +- engine/save.asm | 12 +- engine/selectmenu.asm | 2 +- engine/specials.asm | 16 +- engine/startmenu.asm | 71 +++---- engine/trainer_card.asm | 88 +++++---- home/map.asm | 4 +- main.asm | 333 +++++++------------------------- misc/mobile_40.asm | 2 +- misc/mobile_46.asm | 6 +- misc/mobile_5c.asm | 2 +- misc/mobile_5f.asm | 6 +- sram.asm | 54 +++++- 19 files changed, 444 insertions(+), 389 deletions(-) create mode 100755 engine/mail.asm diff --git a/constants/misc_constants.asm b/constants/misc_constants.asm index cc0257cfb..964783a5e 100644 --- a/constants/misc_constants.asm +++ b/constants/misc_constants.asm @@ -32,6 +32,10 @@ HP_RED EQU 2 MONS_PER_BOX EQU 20 NUM_BOXES EQU 14 +; mail +MAIL_STRUCT_LENGTH EQU $2f +MAILBOX_CAPACITY EQU 10 + ; hall of fame HOF_MON_LENGTH = 1 + 2 + 2 + 1 + (PKMN_NAME_LENGTH +- 1) ; species, id, dvs, level, nick HOF_LENGTH = 1 + HOF_MON_LENGTH * PARTY_LENGTH + 1 ; win count, party, terminator diff --git a/constants/pokemon_constants.asm b/constants/pokemon_constants.asm index 3407281c4..654459c44 100644 --- a/constants/pokemon_constants.asm +++ b/constants/pokemon_constants.asm @@ -291,7 +291,6 @@ MON_SAT EQUS "(PartyMon1SpclAtk - PartyMon1)" MON_SDF EQUS "(PartyMon1SpclDef - PartyMon1)" BOXMON_STRUCT_LENGTH EQUS "(PartyMon1End - PartyMon1)" PARTYMON_STRUCT_LENGTH EQUS "(PartyMon1StatsEnd - PartyMon1)" -SCRATCHMON_STRUCT_LENGTH EQUS "(PartyMon1StatsEnd - PartyMon1Item)" const_value SET 1 const MONMENU_CUT ; 1 diff --git a/engine/breeding/egg.asm b/engine/breeding/egg.asm index 8798233a1..f007fde6a 100755 --- a/engine/breeding/egg.asm +++ b/engine/breeding/egg.asm @@ -192,7 +192,7 @@ OverworldHatchEgg:: ; 16f5e call ResetWindow call LoadStandardMenuDataHeader call Function16f70 - call Function2b4d + call ExitAllMenus call RestartMapMusic jp LoadMoveSprites ; 16f70 diff --git a/engine/link.asm b/engine/link.asm index 27a9ebcc4..6d6e0f403 100755 --- a/engine/link.asm +++ b/engine/link.asm @@ -834,9 +834,9 @@ Function28595: ; 28595 ld de, wc9f4 ld a, $20 call Function28682 - ld a, BANK(sPartyScratch1) + ld a, BANK(sPartyMail) call GetSRAMBank - ld hl, sPartyScratch1 + ld hl, sPartyMail ld b, PARTY_LENGTH .loop2 push bc @@ -847,7 +847,7 @@ Function28595: ; 28595 pop bc dec b jr nz, .loop2 - ld hl, sPartyScratch1 + ld hl, sPartyMail ld b, PARTY_LENGTH .loop3 push bc @@ -859,7 +859,7 @@ Function28595: ; 28595 dec b jr nz, .loop3 ld b, PARTY_LENGTH - ld de, sPartyScratch1 + ld de, sPartyMail ld hl, wc9f9 .loop4 push bc @@ -883,7 +883,7 @@ Function28595: ; 28595 .next pop de - ld hl, SCRATCHMON_STRUCT_LENGTH + ld hl, MAIL_STRUCT_LENGTH add hl, de ld d, h ld e, l @@ -1744,15 +1744,15 @@ Function28b87: ; 28b87 jp Function28ea3 .asm_28c7b - ld hl, sPartyScratch1 + ld hl, sPartyMail ld a, [wd002] - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call AddNTimes - ld a, BANK(sPartyScratch1) + ld a, BANK(sPartyMail) call GetSRAMBank ld d, h ld e, l - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH add hl, bc ld a, [wd002] ld c, a @@ -1762,24 +1762,24 @@ Function28b87: ; 28b87 cp $6 jr z, .asm_28ca6 push bc - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call CopyBytes pop bc jr .asm_28c96 .asm_28ca6 - ld hl, sPartyScratch1 + ld hl, sPartyMail ld a, [PartyCount] dec a - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call AddNTimes push hl ld hl, wc9f4 ld a, [wd003] - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call AddNTimes pop de - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call CopyBytes call CloseSRAM ld hl, PlayerName 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 diff --git a/engine/mart.asm b/engine/mart.asm index 8fa7888c2..2aa410760 100755 --- a/engine/mart.asm +++ b/engine/mart.asm @@ -377,7 +377,7 @@ BuyMenu: ; 15c62 .loop call BuyMenuLoop ; menu loop jr nc, .loop - call Function2b3c + call ReturnToCallingMenu ret ; 15c7d diff --git a/engine/pokecenter_pc.asm b/engine/pokecenter_pc.asm index 7d76d07d3..4d31109ac 100755 --- a/engine/pokecenter_pc.asm +++ b/engine/pokecenter_pc.asm @@ -140,7 +140,7 @@ HallOfFamePC: ; 1569a call PC_PlayChoosePCSound call FadeToMenu callba _HallOfFamePC - call Function2b3c + call ReturnToCallingMenu and a ret ; 156ab @@ -323,7 +323,7 @@ KrisWithdrawItemMenu: ; 0x157d1 jr .asm_157da .asm_157e4 - call Function2b3c + call ReturnToCallingMenu xor a ret ; 0x157e9 @@ -403,7 +403,7 @@ KrisTossItemMenu: ; 0x1585f jr .asm_15868 .asm_15878 - call Function2b3c + call ReturnToCallingMenu xor a ret ; 0x1587d @@ -442,7 +442,7 @@ KrisDepositItemMenu: ; 0x1588b jr .asm_1589c .asm_158b3 - call Function2b3c + call ReturnToCallingMenu .asm_158b6 xor a @@ -450,7 +450,7 @@ KrisDepositItemMenu: ; 0x1588b ; 0x158b8 Function158b8: ; 0x158b8 - callba Function129d5 + callba HasNoItems ret nc ld hl, UnknownText_0x158c7 call MenuTextBoxBackup diff --git a/engine/save.asm b/engine/save.asm index 8bccd932c..4c20c83a4 100644 --- a/engine/save.asm +++ b/engine/save.asm @@ -1,4 +1,4 @@ -Function14a1a: ; 14a1a +SaveMenu: ; 14a1a call LoadStandardMenuDataHeader callba Function5e9a call SpeechTextBox @@ -30,7 +30,7 @@ Function14a58: ; 14a58 call Function14e13 call SaveBackupPokemonData call SaveBackupChecksum - callba BackupScratchmons + callba BackupPartyMonMail callba Function1406a call ClearWRAMStateAfterSave ret @@ -106,7 +106,7 @@ Function14ad5: ; 14ad5 call SaveBackupPlayerData call SaveBackupPokemonData call SaveBackupChecksum - callba BackupScratchmons + callba BackupPartyMonMail callba BackupMobileEventIndex callba Function1406a call LoadBox @@ -284,7 +284,7 @@ SaveGameData_: ; 14c10 call SaveBackupPokemonData call SaveBackupChecksum call UpdateStackTop - callba BackupScratchmons + callba BackupPartyMonMail callba BackupMobileEventIndex callba Function1406a ld a, BANK(s1_be45) @@ -630,7 +630,7 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5) call LoadPlayerData call LoadPokemonData call LoadBox - callba RestoreScratchmons + callba RestorePartyMonMail callba RestoreMobileEventIndex callba Function1050ea call ValidateBackupSave @@ -647,7 +647,7 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5) call LoadBackupPlayerData call LoadBackupPokemonData call LoadBox - callba RestoreScratchmons + callba RestorePartyMonMail callba RestoreMobileEventIndex callba Function1050ea call ValidateSave diff --git a/engine/selectmenu.asm b/engine/selectmenu.asm index e73f397a5..916e48b3c 100755 --- a/engine/selectmenu.asm +++ b/engine/selectmenu.asm @@ -158,7 +158,7 @@ UseRegisteredItem: ; 133c3 call ResetWindow call FadeToMenu call DoItemEffect - call Function2b3c + call ReturnToCallingMenu call LoadMoveSprites and a ret diff --git a/engine/specials.asm b/engine/specials.asm index 82281d600..68ad47aa4 100644 --- a/engine/specials.asm +++ b/engine/specials.asm @@ -216,7 +216,7 @@ Special_GameCornerPrizeMonCheckDex: ; c230 ld a, [ScriptVar] ld [wd265], a callba Functionfb877 - call Function2b4d + call ExitAllMenus ret ; c252 @@ -288,21 +288,21 @@ SpecialNameRater: ; c2b9 Special_TownMap: ; c2c0 call FadeToMenu callba _TownMap - call Function2b4d + call ExitAllMenus ret ; c2cd Special_UnownPrinter: ; c2cd call FadeToMenu callba UnownPrinter - call Function2b4d + call ExitAllMenus ret ; c2da Special_DisplayLinkRecord: ; c2da call FadeToMenu callba DisplayLinkRecord - call Function2b4d + call ExitAllMenus ret ; c2e7 @@ -383,7 +383,7 @@ Special_UnownPuzzle: ; c360 callba Functione1190 ld a, [wd0ec] ld [ScriptVar], a - call Function2b4d + call ExitAllMenus ret ; c373 @@ -425,7 +425,7 @@ Special_StartGameCornerGame: ; c39a ld l, a pop af rst FarCall - call Function2b4d + call ExitAllMenus ret ; c3ae @@ -629,14 +629,14 @@ Special_FadeOutMusic: ; c48f Diploma: ; c49f call FadeToMenu callba _Diploma - call Function2b4d + call ExitAllMenus ret ; c4ac PrintDiploma: ; c4ac call FadeToMenu callba _PrintDiploma - call Function2b4d + call ExitAllMenus ret ; c4b9 diff --git a/engine/startmenu.asm b/engine/startmenu.asm index efb6c817a..ae6358014 100755 --- a/engine/startmenu.asm +++ b/engine/startmenu.asm @@ -422,7 +422,7 @@ StartMenu_Quit: ; 128f0 ; Retire from the bug catching contest. ld hl, .EndTheContestText - call Function12cf5 + call StartMenuYesNo jr c, .DontEndContest ld a, BANK(BugCatchingContestReturnToGateScript) ld hl, BugCatchingContestReturnToGateScript @@ -444,7 +444,7 @@ StartMenu_Save: ; 1290b ; Save the game. call BufferScreen - callba Function14a1a + callba SaveMenu jr nc, .asm_12919 ld a, 0 ret @@ -468,8 +468,8 @@ StartMenu_Status: ; 12928 ; Player status. call FadeToMenu - callba Function25105 - call Function2b3c + callba TrainerCard + call ReturnToCallingMenu ld a, 0 ret ; 12937 @@ -483,7 +483,7 @@ StartMenu_Pokedex: ; 12937 call FadeToMenu callba Pokedex - call Function2b3c + call ReturnToCallingMenu .asm_12949 ld a, 0 @@ -495,7 +495,7 @@ StartMenu_Pokegear: ; 1294c call FadeToMenu callba PokeGear - call Function2b3c + call ReturnToCallingMenu ld a, 0 ret ; 1295b @@ -507,12 +507,13 @@ StartMenu_Pack: ; 1295b callba Pack ld a, [wcf66] and a - jr nz, .asm_12970 - call Function2b3c + jr nz, .used_item + call ReturnToCallingMenu ld a, 0 ret -.asm_12970 - call Function2b4d + +.used_item + call ExitAllMenus ld a, 4 ret ; 12976 @@ -556,19 +557,19 @@ StartMenu_Pokemon: ; 12976 jr z, .quit .return - call Function2b3c + call ReturnToCallingMenu ld a, 0 ret .quit ld a, b push af - call Function2b4d + call ExitAllMenus pop af ret ; 129d5 -Function129d5: ; 129d5 +HasNoItems: ; 129d5 ld a, [NumItems] and a ret nz @@ -580,15 +581,15 @@ Function129d5: ; 129d5 ret nz ld hl, TMsHMs ld b, NUM_TMS + NUM_HMS -.asm_129e9 +.loop ld a, [hli] and a - jr nz, .asm_129f2 + jr nz, .done dec b - jr nz, .asm_129e9 + jr nz, .loop scf ret -.asm_129f2 +.done and a ret @@ -882,7 +883,7 @@ Function12bd9: ; 12bd9 jr .asm_12c08 .asm_12bf4 - call Function12cea + call GiveItemToPokemon ld hl, MadeHoldText call MenuTextBoxBackup call GivePartyItem @@ -897,17 +898,17 @@ Function12bd9: ; 12bd9 ld [wd265], a call GetItemName ld hl, SwitchAlreadyHoldingText - call Function12cf5 + call StartMenuYesNo jr c, .asm_12c4b - call Function12cea + call GiveItemToPokemon ld a, [wd265] push af ld a, [CurItem] ld [wd265], a pop af ld [CurItem], a - call Function12cdf + call ReceiveItemFromPokemon jr nc, .asm_12c3c ld hl, TookAndMadeHoldText @@ -920,7 +921,7 @@ Function12bd9: ; 12bd9 .asm_12c3c ld a, [wd265] ld [CurItem], a - call Function12cdf + call ReceiveItemFromPokemon ld hl, ItemStorageIsFullText call MenuTextBoxBackup @@ -953,7 +954,7 @@ TakePartyItem: ; 12c60 jr z, .asm_12c8c ld [CurItem], a - call Function12cdf + call ReceiveItemFromPokemon jr nc, .asm_12c94 callba ItemIsMail @@ -1045,7 +1046,7 @@ GetPartyItemLocation: ; 12cd7 ; 12cdf -Function12cdf: ; 12cdf +ReceiveItemFromPokemon: ; 12cdf ld a, $1 ld [wItemQuantityChangeBuffer], a ld hl, NumItems @@ -1053,13 +1054,13 @@ Function12cdf: ; 12cdf ; 12cea -Function12cea: ; 12cea (4:6cea) +GiveItemToPokemon: ; 12cea (4:6cea) ld a, $1 ld [wItemQuantityChangeBuffer], a ld hl, NumItems jp TossItem -Function12cf5: ; 12cf5 +StartMenuYesNo: ; 12cf5 call MenuTextBox call YesNoBox jp ExitMenu @@ -1071,7 +1072,7 @@ Function12cfe: ; 12cfe (4:6cfe) callba Function11e75 ld hl, PlayerName ld de, wd023 - ld bc, $a + ld bc, NAME_LENGTH - 1 call CopyBytes ld hl, PlayerID ld bc, $2 @@ -1082,14 +1083,14 @@ Function12cfe: ; 12cfe (4:6cfe) ld a, [CurItem] ld [de], a ld a, [CurPartyMon] - ld hl, sPartyScratch1 - ld bc, SCRATCHMON_STRUCT_LENGTH + ld hl, sPartyMail + ld bc, MAIL_STRUCT_LENGTH call AddNTimes ld d, h ld e, l ld hl, wd002 - ld bc, SCRATCHMON_STRUCT_LENGTH - ld a, BANK(sPartyScratch1) + ld bc, MAIL_STRUCT_LENGTH + ld a, BANK(sPartyMail) call GetSRAMBank call CopyBytes call CloseSRAM @@ -1127,11 +1128,11 @@ MonMailAction: ; 12d45 .take ld hl, .sendmailtopctext - call Function12cf5 + call StartMenuYesNo jr c, .RemoveMailToBag ld a, [CurPartyMon] ld b, a - callba Function4456e + callba SendMailToPC jr c, .MailboxFull ld hl, .sentmailtopctext call MenuTextBoxBackup @@ -1144,12 +1145,12 @@ MonMailAction: ; 12d45 .RemoveMailToBag ld hl, .mailwilllosemessagetext - call Function12cf5 + call StartMenuYesNo jr c, .done call GetPartyItemLocation ld a, [hl] ld [CurItem], a - call Function12cdf + call ReceiveItemFromPokemon jr nc, .BagIsFull call GetPartyItemLocation ld [hl], $0 diff --git a/engine/trainer_card.asm b/engine/trainer_card.asm index 53acdbf53..076e13fec 100755 --- a/engine/trainer_card.asm +++ b/engine/trainer_card.asm @@ -1,4 +1,4 @@ -Function25105: ; 25105 +TrainerCard: ; 25105 ld a, [VramState] push af xor a @@ -211,16 +211,18 @@ Function25279: ; 25279 (9:5279) ld hl, hJoyLast ld a, [hl] and D_LEFT - jr nz, .asm_2528d + jr nz, .left ld a, [hl] and D_RIGHT - jr nz, .asm_25293 + jr nz, .right ret -.asm_2528d + +.left ld a, $2 ld [wJumptableIndex], a ret -.asm_25293 + +.right ld a, $0 ld [wJumptableIndex], a ret @@ -466,24 +468,26 @@ Function25438: ; 25438 (9:5438) jr Function25448 Function25448: ; 25448 (9:5448) +; copy flag array pointer ld a, [hli] ld e, a ld a, [hli] +; get flag array ld d, a ld a, [de] ld c, a ld de, Sprites ld b, 8 -.asm_25453 +.loop srl c push bc - jr nc, .asm_25472 + jr nc, .skip_badge push hl - ld a, [hli] + ld a, [hli] ; y ld b, a - ld a, [hli] + ld a, [hli] ; x ld c, a - ld a, [hli] + ld a, [hli] ; pal ld [wcf66], a ld a, [wcf64] add l @@ -495,60 +499,64 @@ Function25448: ; 25448 (9:5448) ld [wcf65], a call Function2547b pop hl -.asm_25472 - ld bc, $b +.skip_badge + ld bc, $b ; 3 + 2 * 4 add hl, bc pop bc dec b - jr nz, .asm_25453 + jr nz, .loop ret Function2547b: ; 2547b (9:547b) ld a, [wcf65] and $80 - jr nz, .asm_25487 - ld hl, Unknown_254a7 - jr .asm_2548a -.asm_25487 - ld hl, Unknown_254b8 -.asm_2548a + jr nz, .xflip + ld hl, .facing1 + jr .loop +.xflip + ld hl, .facing2 +.loop ld a, [hli] cp $ff ret z add b ld [de], a inc de + ld a, [hli] add c ld [de], a inc de + ld a, [wcf65] and $7f add [hl] ld [de], a inc hl inc de + ld a, [wcf66] add [hl] ld [de], a inc hl inc de - jr .asm_2548a + jr .loop ; 254a7 (9:54a7) -Unknown_254a7: ; 254a7 - db $00, $00, $00, $00 - db $00, $08, $01, $00 - db $08, $00, $02, $00 - db $08, $08, $03, $00 - db $ff +.facing1: ; 254a7 + ; y, x, tile, OAM attributes + db 0, 0, 0, 0 + db 0, 8, 1, 0 + db 8, 0, 2, 0 + db 8, 8, 3, 0 + db -1 -Unknown_254b8: ; 254b8 - db $00, $00, $01, $20 - db $00, $08, $00, $20 - db $08, $00, $03, $20 - db $08, $08, $02, $20 - db $ff +.facing2: ; 254b8 + db 0, 0, 1, X_FLIP + db 0, 8, 0, X_FLIP + db 8, 0, 3, X_FLIP + db 8, 8, 2, X_FLIP + db -1 Unknown_254c9: ; 254c9 ; Template OAM data for each badge on the trainer card. @@ -560,43 +568,43 @@ Unknown_254c9: ; 254c9 dw JohtoBadges ; Zephyrbadge - db $68, $18, $00 + db $68, $18, 0 db $00, $20, $24, $20 | $80 db $00, $20, $24, $20 | $80 ; Hivebadge - db $68, $38, $00 + db $68, $38, 0 db $04, $20, $24, $20 | $80 db $04, $20, $24, $20 | $80 ; Plainbadge - db $68, $58, $00 + db $68, $58, 0 db $08, $20, $24, $20 | $80 db $08, $20, $24, $20 | $80 ; Fogbadge - db $68, $78, $00 + db $68, $78, 0 db $0c, $20, $24, $20 | $80 db $0c, $20, $24, $20 | $80 ; Mineralbadge - db $80, $38, $00 + db $80, $38, 0 db $10, $20, $24, $20 | $80 db $10, $20, $24, $20 | $80 ; Stormbadge - db $80, $18, $00 + db $80, $18, 0 db $14, $20, $24, $20 | $80 db $14, $20, $24, $20 | $80 ; Glacierbadge - db $80, $58, $00 + db $80, $58, 0 db $18, $20, $24, $20 | $80 db $18, $20, $24, $20 | $80 ; Risingbadge ; X-flips on alternate cycles. - db $80, $78, $00 + db $80, $78, 0 db $1c, $20, $24, $20 | $80 db $1c | $80, $20, $24, $20 | $80 ; 25523 diff --git a/home/map.asm b/home/map.asm index 4400e411b..b9b27168e 100644 --- a/home/map.asm +++ b/home/map.asm @@ -2014,7 +2014,7 @@ FadeToMenu:: ; 2b29 ; 2b3c -Function2b3c:: ; 2b3c +ReturnToCallingMenu:: ; 2b3c call ClearBGPalettes call Function2bae call UpdateSprites @@ -2023,7 +2023,7 @@ Function2b3c:: ; 2b3c jr Function2b5c ; 2b4d -Function2b4d:: ; 2b4d +ExitAllMenus:: ; 2b4d call ClearBGPalettes call Call_ExitMenu call Function2bae diff --git a/main.asm b/main.asm index d373463e2..82e6ea00e 100644 --- a/main.asm +++ b/main.asm @@ -285,7 +285,7 @@ ENDC callba InitDecorations - callba DeleteScratchmons + callba DeletePartyMonMail callba DeleteMobileEventIndex @@ -9297,14 +9297,14 @@ Functione039: ; e039 ld a, [wLinkMode] and a ret nz - ld a, BANK(sPartyScratch1) + ld a, BANK(sPartyMail) call GetSRAMBank ld hl, PartyCount ld a, [CurPartyMon] cp [hl] jr z, .asm_e131 - ld hl, sPartyScratch1 - ld bc, SCRATCHMON_STRUCT_LENGTH + ld hl, sPartyMail + ld bc, MAIL_STRUCT_LENGTH call AddNTimes push hl add hl, bc @@ -9314,11 +9314,11 @@ Functione039: ; e039 .asm_e11a push bc push hl - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call CopyBytes pop hl push hl - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH add hl, bc pop de pop bc @@ -9789,7 +9789,7 @@ InitNickname: ; e3de ld de, StringBuffer1 call InitName ld a, $4 ; XXX could this be in bank 4 in pokered? - ld hl, Function2b4d + ld hl, ExitAllMenus rst FarCall ret ; e3fd @@ -9841,7 +9841,7 @@ UnknownText_0xe43a: ; 0xe43a ; 0xe43f Functione43f: ; e43f (3:643f) - call Function2b3c + call ReturnToCallingMenu ret Functione443: ; e443 (3:6443) @@ -10414,7 +10414,7 @@ INCLUDE "engine/tmhm.asm" INCLUDE "engine/namingscreen.asm" -Function11e75: ; 11e75 (4:5e75) +Function11e75: ; 11e75 (mail?) ld hl, wc6d0 ld [hl], e inc hl @@ -17957,197 +17957,7 @@ endr PokedexDataPointerTable: ; 0x44378 INCLUDE "data/pokedex/entry_pointers.asm" - -Function4456e: ; 4456e - ld a, MON_ITEM - call GetPartyParamLocation - ld d, [hl] - callba ItemIsMail - jr nc, .asm_445be - call Function44648 - cp $a - jr nc, .asm_445be - ld bc, SCRATCHMON_STRUCT_LENGTH - ld hl, s0_a835 - call AddNTimes - ld d, h - ld e, l - ld a, [CurPartyMon] - ld bc, SCRATCHMON_STRUCT_LENGTH - ld hl, sPartyScratch1 - call AddNTimes - push hl - ld a, BANK(s0_a834) - call GetSRAMBank - ld bc, SCRATCHMON_STRUCT_LENGTH - call CopyBytes - pop hl - xor a - ld bc, SCRATCHMON_STRUCT_LENGTH - call ByteFill - ld a, MON_ITEM - call GetPartyParamLocation - ld [hl], $0 - ld hl, s0_a834 - inc [hl] - call CloseSRAM - xor a - ret - -.asm_445be - scf - ret -; 445c0 - -Function445c0: ; 445c0 (11:45c0) - ld a, BANK(s0_a834) - call GetSRAMBank - ld a, b - push bc - ld hl, s0_a835 - ld bc, SCRATCHMON_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, SCRATCHMON_STRUCT_LENGTH - call CopyBytes - pop bc - inc b - jr .loop -.done - ld h, d - ld l, e - xor a - ld bc, SCRATCHMON_STRUCT_LENGTH - call ByteFill - ld hl, s0_a834 - dec [hl] - jp CloseSRAM -; 445f4 (11:45f4) - -ReadMailMessage: ; 445f4 - ld a, b - ld hl, s0_a835 - ld bc, SCRATCHMON_STRUCT_LENGTH - call AddNTimes - ld d, h - ld e, l - callba ReadAnyMail - ret - -Function44607: ; 44607 - ld a, BANK(s0_a834) - call GetSRAMBank - push bc - ld a, b - ld bc, SCRATCHMON_STRUCT_LENGTH - ld hl, s0_a835 - call AddNTimes - push hl - ld a, [CurPartyMon] - ld bc, SCRATCHMON_STRUCT_LENGTH - ld hl, sPartyScratch1 - call AddNTimes - ld d, h - ld e, l - pop hl - push hl - ld bc, SCRATCHMON_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) - -Function44648: ; 44648 - ld a, BANK(s0_a834) - call GetSRAMBank - ld a, [s0_a834] - 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(sPartyScratch1) - call GetSRAMBank - ld a, [CurPartyMon] - ld hl, sPartyScratch1 - ld bc, SCRATCHMON_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 +INCLUDE "engine/mail.asm" GivePokeItem:: ; 446cc ld a, [PartyCount] @@ -18162,14 +17972,14 @@ GivePokeItem:: ; 446cc pop af push bc push af - ld hl, sPartyScratch1 + ld hl, sPartyMail ld bc, $2f call AddNTimes ld d, h ld e, l ld hl, wd002 ld bc, $21 - ld a, BANK(sPartyScratch1) + ld a, BANK(sPartyMail) call GetSRAMBank call CopyBytes pop af @@ -18199,43 +18009,43 @@ GivePokeItem:: ; 446cc ; 44725 -BackupScratchmons: ; 44725 - ld a, BANK(sPartyScratch1) +BackupPartyMonMail: ; 44725 + ld a, BANK(sPartyMail) call GetSRAMBank - ld hl, sPartyScratch1 - ld de, sPartyScratch2 - ld bc, 6 * SCRATCHMON_STRUCT_LENGTH + ld hl, sPartyMail + ld de, sPartyMailBackup + ld bc, 6 * MAIL_STRUCT_LENGTH call CopyBytes - ld hl, s0_a834 - ld de, s0_aa0b - ld bc, 1 + 10 * SCRATCHMON_STRUCT_LENGTH + ld hl, sMailboxCount + ld de, sMailboxCountBackup + ld bc, 1 + 10 * MAIL_STRUCT_LENGTH call CopyBytes jp CloseSRAM ; 44745 -RestoreScratchmons: ; 44745 (11:4745) - ld a, BANK(sPartyScratch1) +RestorePartyMonMail: ; 44745 (11:4745) + ld a, BANK(sPartyMail) call GetSRAMBank - ld hl, sPartyScratch2 - ld de, sPartyScratch1 - ld bc, 6 * SCRATCHMON_STRUCT_LENGTH + ld hl, sPartyMailBackup + ld de, sPartyMail + ld bc, 6 * MAIL_STRUCT_LENGTH call CopyBytes - ld hl, s0_aa0b - ld de, s0_a834 - ld bc, 1 + 10 * SCRATCHMON_STRUCT_LENGTH + ld hl, sMailboxCountBackup + ld de, sMailboxCount + ld bc, 1 + 10 * MAIL_STRUCT_LENGTH call CopyBytes jp CloseSRAM -DeleteScratchmons: ; 44765 (11:4765) - ld a, BANK(sPartyScratch1) +DeletePartyMonMail: ; 44765 (11:4765) + ld a, BANK(sPartyMail) call GetSRAMBank xor a - ld hl, sPartyScratch1 - ld bc, 6 * SCRATCHMON_STRUCT_LENGTH + ld hl, sPartyMail + ld bc, 6 * MAIL_STRUCT_LENGTH call ByteFill xor a - ld hl, s0_a834 - ld bc, 1 + 10 * SCRATCHMON_STRUCT_LENGTH + ld hl, sMailboxCount + ld bc, 1 + 10 * MAIL_STRUCT_LENGTH call ByteFill jp CloseSRAM ; 44781 (11:4781) @@ -18284,9 +18094,9 @@ _KrisMailBoxMenu: ; 0x447a0 InitMail: ; 0x447b9 ; initialize wd0f2 and beyond with incrementing values, one per mail ; set z if no mail - ld a, BANK(s0_a834) + ld a, BANK(sMailboxCount) call GetSRAMBank - ld a, [s0_a834] + ld a, [sMailboxCount] call CloseSRAM ld hl, wd0f2 ld [hli], a @@ -18312,10 +18122,10 @@ InitMail: ; 0x447b9 Function447da: ; 0x447da dec a - ld hl, s0_a835 + MON_HP - 1 - ld bc, SCRATCHMON_STRUCT_LENGTH + ld hl, sMailbox + MON_HP - 1 + ld bc, MAIL_STRUCT_LENGTH call AddNTimes - ld a, BANK(s0_a834) + ld a, BANK(sMailboxCount) call GetSRAMBank ld de, StringBuffer2 push de @@ -18396,7 +18206,7 @@ Function4484a: ; 0x4484a dec a ld b, a call ReadMailMessage - jp Function2b3c + jp ReturnToCallingMenu ; 0x44877 .PutInPack ; 0x44877 @@ -18439,10 +18249,10 @@ Function4484a: ; 0x4484a .Function448bb: ; 0x448bb push af - ld a, BANK(s0_a834) + ld a, BANK(sMailboxCount) call GetSRAMBank pop af - ld hl, s0_a835 + $2e + ld hl, sMailbox + $2e ld bc, $2f call AddNTimes ld a, [hl] @@ -18455,7 +18265,7 @@ Function4484a: ; 0x4484a xor a ld [PartyMenuActionText], a call ClearBGPalettes -.asm_448dc +.try_again callba Function5004f callba Function50405 callba Function503e0 @@ -18465,25 +18275,25 @@ Function4484a: ; 0x4484a call SetPalettes call DelayFrame callba PartyMenuSelect - jr c, .asm_44939 + jr c, .exit ld a, [CurPartySpecies] cp EGG - jr z, .asm_44923 + jr z, .egg ld a, MON_ITEM call GetPartyParamLocation ld a, [hl] and a - jr z, .asm_4492b + jr z, .attach_mail ld hl, .HoldingMailText call PrintText - jr .asm_448dc + jr .try_again -.asm_44923 +.egg ld hl, .EggText call PrintText - jr .asm_448dc + jr .try_again -.asm_4492b +.attach_mail ld a, [MenuSelection] dec a ld b, a @@ -18491,8 +18301,8 @@ Function4484a: ; 0x4484a ld hl, .MailMovedText call PrintText -.asm_44939 - jp Function2b3c +.exit + jp ReturnToCallingMenu ; 0x4493c .HoldingMailText ; 0x4493c @@ -18720,7 +18530,7 @@ Special_MoveTutor: ; 4925b ld [ScriptVar], a .asm_492a1 - call Function2b3c + call ReturnToCallingMenu ret ; 492a5 @@ -19924,7 +19734,7 @@ Function4a94e: ; 4a94e jr c, .asm_4a974 .asm_4a990 - call Function2b3c + call ReturnToCallingMenu ld hl, wd002 ld a, -1 ld bc, 3 @@ -19937,7 +19747,7 @@ Function4a94e: ; 4a94e jr c, .asm_4a9b0 call Function4a9d7 jr c, .asm_4a974 - call Function2b3c + call ReturnToCallingMenu and a .asm_4a9af @@ -24838,27 +24648,27 @@ _SwitchPartyMons: pop de ld hl, wd002 call .CopyName - ld hl, sPartyScratch1 + ld hl, sPartyMail ld a, [Buffer2] ; wd1eb (aliases: MovementType) - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call AddNTimes push hl ld de, wd002 - ld bc, SCRATCHMON_STRUCT_LENGTH - ld a, BANK(sPartyScratch1) + ld bc, MAIL_STRUCT_LENGTH + ld a, BANK(sPartyMail) call GetSRAMBank call CopyBytes - ld hl, sPartyScratch1 + ld hl, sPartyMail ld a, [Buffer3] - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call AddNTimes pop de push hl - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call CopyBytes pop de ld hl, wd002 - ld bc, SCRATCHMON_STRUCT_LENGTH + ld bc, MAIL_STRUCT_LENGTH call CopyBytes call CloseSRAM pop bc @@ -31402,8 +31212,8 @@ INCLUDE "engine/radio.asm" ReadPartyMonMail: ; b9229 ld a, [CurPartyMon] - ld hl, sPartyScratch1 - ld bc, SCRATCHMON_STRUCT_LENGTH + ld hl, sPartyMail + ld bc, MAIL_STRUCT_LENGTH call AddNTimes ld d, h ld e, l @@ -31416,7 +31226,7 @@ ReadAnyMail: ; b9237 call LoadFontsExtra pop de push de - ld a, BANK(sPartyScratch1) + ld a, BANK(sPartyMail) call GetSRAMBank callba Function1de5c8 call CloseSRAM @@ -41337,24 +41147,25 @@ INCBIN "gfx/misc/pokegear.2bpp.lz" ; 1de5c8 Function1de5c8: ; 1de5c8 +; reads mail message at de ld c, $0 ld hl, $29 add hl, de ld a, [hli] - cp $84 + cp "E" ret nz ld a, [hli] inc c - cp $85 + cp "F" ret z inc c - cp $86 + cp "G" ret z inc c - cp $88 + cp "I" ret z inc c - cp $92 + cp "S" ret z ld c, $0 ret diff --git a/misc/mobile_40.asm b/misc/mobile_40.asm index ce3035c35..f37cce5f2 100644 --- a/misc/mobile_40.asm +++ b/misc/mobile_40.asm @@ -2523,7 +2523,7 @@ Unknown_100fc0: ; 100fc0 db -1 Unknown_100feb: ; 100feb - dbwww $00, sPartyScratch1, SCRATCHMON_STRUCT_LENGTH * PARTY_LENGTH, NULL + dbwww $00, sPartyMail, MAIL_STRUCT_LENGTH * PARTY_LENGTH, NULL db -1 Unknown_100ff3: ; 100ff3 diff --git a/misc/mobile_46.asm b/misc/mobile_46.asm index 54e5a81ba..931cda0ac 100755 --- a/misc/mobile_46.asm +++ b/misc/mobile_46.asm @@ -5842,7 +5842,7 @@ Function11ac3e: ; 11ac3e call FadeToMenu callab InefficientlyClear121BytesAtwc300 call Function11ac51 - call Function2b3c + call ReturnToCallingMenu ret ; 11ac51 @@ -7697,7 +7697,7 @@ Function11b7e5: ; 11b7e5 ld [de], a .asm_11b872 - call Function2b3c + call ReturnToCallingMenu call RestartMapMusic ret ; 11b879 @@ -7919,7 +7919,7 @@ Function11b98f: ; 11b98f call CopyBytes ld a, "@" ld [de], a - ld hl, sPartyScratch1 + ld hl, sPartyMail ld bc, PARTYMON_STRUCT_LENGTH - 1 ld a, [wcd2a] .loop5 diff --git a/misc/mobile_5c.asm b/misc/mobile_5c.asm index 7c36b993d..7b768e10b 100755 --- a/misc/mobile_5c.asm +++ b/misc/mobile_5c.asm @@ -278,7 +278,7 @@ Function1704e1: ; 1704e1 call FadeToMenu call Function17021e call Function1704f1 - call Function2b3c + call ReturnToCallingMenu ret ; 1704f1 diff --git a/misc/mobile_5f.asm b/misc/mobile_5f.asm index 01a4db77f..11906805d 100644 --- a/misc/mobile_5f.asm +++ b/misc/mobile_5f.asm @@ -324,7 +324,7 @@ Function17d0f3: ; 17d0f3 ld [de], a .asm_17d180 - call Function2b3c + call ReturnToCallingMenu call RestartMapMusic ret ; 17d187 @@ -562,7 +562,7 @@ Function17d2ce: ; 17d2ce ld [MusicFadeIDHi], a call PlayMusic call ReturnToMapFromSubmenu - call Function2b3c + call ReturnToCallingMenu ret ; 17d314 @@ -4674,7 +4674,7 @@ Function17f53d: ; 17f53d call Function17f555 pop af ld [rSVBK], a - call Function2b4d + call ExitAllMenus ret ; 17f555 diff --git a/sram.asm b/sram.asm index 1e1d85860..6e16718e1 100644 --- a/sram.asm +++ b/sram.asm @@ -9,12 +9,54 @@ sScratch:: SECTION "SRAM Bank 0", SRAM [$a600], BANK [0] -sPartyScratch1:: ds 6 * SCRATCHMON_STRUCT_LENGTH -sPartyScratch2:: ds 6 * SCRATCHMON_STRUCT_LENGTH -s0_a834:: ds 1 -s0_a835:: ds 10 * SCRATCHMON_STRUCT_LENGTH -s0_aa0b:: ds 1 -s0_aa0c:: ds 10 * SCRATCHMON_STRUCT_LENGTH +mailmsg: MACRO +\1Message:: ds $20 +\1Author:: ds NAME_LENGTH + ds 3 +\1MailType:: ds 1 +endm + +sPartyMail:: +sPartyMon1Mail:: mailmsg sPartyMon1Mail +sPartyMon2Mail:: mailmsg sPartyMon2Mail +sPartyMon3Mail:: mailmsg sPartyMon3Mail +sPartyMon4Mail:: mailmsg sPartyMon4Mail +sPartyMon5Mail:: mailmsg sPartyMon5Mail +sPartyMon6Mail:: mailmsg sPartyMon6Mail + +sPartyMailBackup:: +sPartyMon1MailBackup:: mailmsg sPartyMon1MailBackup +sPartyMon2MailBackup:: mailmsg sPartyMon2MailBackup +sPartyMon3MailBackup:: mailmsg sPartyMon3MailBackup +sPartyMon4MailBackup:: mailmsg sPartyMon4MailBackup +sPartyMon5MailBackup:: mailmsg sPartyMon5MailBackup +sPartyMon6MailBackup:: mailmsg sPartyMon6MailBackup + +sMailboxCount:: ds 1 +sMailbox:: +sMailbox1:: mailmsg sMailbox1 +sMailbox2:: mailmsg sMailbox2 +sMailbox3:: mailmsg sMailbox3 +sMailbox4:: mailmsg sMailbox4 +sMailbox5:: mailmsg sMailbox5 +sMailbox6:: mailmsg sMailbox6 +sMailbox7:: mailmsg sMailbox7 +sMailbox8:: mailmsg sMailbox8 +sMailbox9:: mailmsg sMailbox9 +sMailbox10:: mailmsg sMailbox10 + +sMailboxCountBackup:: ds 1 +sMailboxBackup:: +sMailbox1Backup:: mailmsg sMailbox1Backup +sMailbox2Backup:: mailmsg sMailbox2Backup +sMailbox3Backup:: mailmsg sMailbox3Backup +sMailbox4Backup:: mailmsg sMailbox4Backup +sMailbox5Backup:: mailmsg sMailbox5Backup +sMailbox6Backup:: mailmsg sMailbox6Backup +sMailbox7Backup:: mailmsg sMailbox7Backup +sMailbox8Backup:: mailmsg sMailbox8Backup +sMailbox9Backup:: mailmsg sMailbox9Backup +sMailbox10Backup:: mailmsg sMailbox10Backup sMysteryGiftItem:: ds 1 s0_abe3:: ds 1