diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-06-28 11:04:15 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-06-28 11:04:15 +0800 |
commit | d06166633fe7cc97ec692131246bdc9121a71aaa (patch) | |
tree | 4b9d0536db29cc414a3e38bb14639960b70415e5 | |
parent | 8e8fe3bf443cec46c0b7cc2072748c90bedc964d (diff) |
finished mail_data
-rw-r--r-- | asm/mail_data.s | 626 | ||||
-rw-r--r-- | asm/party_menu.s | 4 | ||||
-rw-r--r-- | asm/pokemon_icon.s | 8 | ||||
-rw-r--r-- | asm/wild_encounter.s | 8 | ||||
-rw-r--r-- | include/mail.h | 6 | ||||
-rw-r--r-- | include/mail_data.h | 11 | ||||
-rw-r--r-- | include/pokemon_icon.h | 1 | ||||
-rw-r--r-- | include/wild_encounter.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/daycare.c | 2 | ||||
-rw-r--r-- | src/decompress.c | 2 | ||||
-rw-r--r-- | src/mail_data.c | 182 | ||||
-rw-r--r-- | src/menu2.c | 2 | ||||
-rw-r--r-- | src/multiboot.c | 8 | ||||
-rw-r--r-- | src/play_time.c | 2 | ||||
-rw-r--r-- | src/save_location.c | 1 |
16 files changed, 211 insertions, 656 deletions
diff --git a/asm/mail_data.s b/asm/mail_data.s deleted file mode 100644 index e19c99e59..000000000 --- a/asm/mail_data.s +++ /dev/null @@ -1,626 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ClearMailData -ClearMailData: @ 8097C84 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _08097CAC @ =gSaveBlock1Ptr -_08097C8A: - lsls r1, r4, 3 - adds r1, r4 - lsls r1, 2 - ldr r0, _08097CB0 @ =0x00002cd0 - adds r1, r0 - ldr r0, [r5] - adds r0, r1 - bl ClearMailStruct - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _08097C8A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08097CAC: .4byte gSaveBlock1Ptr -_08097CB0: .4byte 0x00002cd0 - thumb_func_end ClearMailData - - thumb_func_start ClearMailStruct -ClearMailStruct: @ 8097CB4 - push {r4-r6,lr} - adds r3, r0, 0 - ldr r0, _08097D04 @ =0x0000ffff - adds r4, r0, 0 - adds r1, r3, 0 - movs r2, 0x8 -_08097CC0: - ldrh r0, [r1] - orrs r0, r4 - strh r0, [r1] - adds r1, 0x2 - subs r2, 0x1 - cmp r2, 0 - bge _08097CC0 - movs r2, 0 - adds r6, r3, 0 - adds r6, 0x1A - adds r4, r3, 0 - adds r4, 0x12 - movs r5, 0xFF -_08097CDA: - adds r1, r4, r2 - ldrb r0, [r1] - orrs r0, r5 - strb r0, [r1] - adds r2, 0x1 - cmp r2, 0x7 - ble _08097CDA - adds r1, r6, 0 - movs r2, 0 - adds r0, r1, 0x3 -_08097CEE: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _08097CEE - movs r1, 0 - movs r0, 0x1 - strh r0, [r3, 0x1E] - strh r1, [r3, 0x20] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08097D04: .4byte 0x0000ffff - thumb_func_end ClearMailStruct - - thumb_func_start MonHasMail -MonHasMail: @ 8097D08 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - beq _08097D30 - adds r0, r4, 0 - movs r1, 0x40 - bl GetMonData - cmp r0, 0xFF - beq _08097D30 - movs r0, 0x1 - b _08097D32 -_08097D30: - movs r0, 0 -_08097D32: - pop {r4} - pop {r1} - bx r1 - thumb_func_end MonHasMail - - thumb_func_start sub_8097D38 -sub_8097D38: @ 8097D38 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - mov r8, r0 - lsls r1, 16 - lsrs r0, r1, 16 - str r0, [sp, 0x8] - mov r0, sp - movs r2, 0 - ldrb r3, [r0, 0x8] - strb r3, [r0] - lsrs r1, 24 - strb r1, [r0, 0x1] - add r4, sp, 0x4 - strb r2, [r4] - mov r12, r4 - mov r9, r4 - adds r5, r4, 0 -_08097D62: - ldr r2, _08097EC0 @ =gSaveBlock1Ptr - ldr r0, [r2] - ldrb r3, [r5] - lsls r1, r3, 3 - adds r1, r3 - lsls r1, 2 - adds r0, r1 - ldr r1, _08097EC4 @ =0x00002cf0 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - beq _08097D7C - b _08097EE0 -_08097D7C: - movs r4, 0 - ldr r3, _08097EC8 @ =gSaveBlock2Ptr - mov r10, r3 - adds r7, r2, 0 - mov r5, r12 - ldr r0, _08097ECC @ =0x0000ffff - adds r6, r0, 0 -_08097D8A: - ldr r2, [r7] - lsls r3, r4, 1 - ldrb r1, [r5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r3, r0 - ldr r1, _08097ED0 @ =0x00002cd0 - adds r2, r1 - adds r2, r3 - ldrh r0, [r2] - orrs r0, r6 - strh r0, [r2] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x8 - bls _08097D8A - movs r4, 0 - mov r2, r10 - ldr r0, [r2] - ldrb r0, [r0] - cmp r0, 0xFF - beq _08097DEE - ldr r3, _08097EC8 @ =gSaveBlock2Ptr -_08097DBC: - ldr r0, _08097EC0 @ =gSaveBlock1Ptr - ldr r2, [r0] - mov r0, r12 - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r4, r0 - ldr r1, _08097ED4 @ =0x00002ce2 - adds r2, r1 - adds r2, r0 - ldr r0, [r3] - adds r0, r4 - ldrb r0, [r0] - strb r0, [r2] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x6 - bhi _08097DEE - ldr r0, [r3] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0xFF - bne _08097DBC -_08097DEE: - cmp r4, 0x5 - bhi _08097E16 - ldr r7, _08097EC0 @ =gSaveBlock1Ptr - mov r3, r12 - ldr r6, _08097ED4 @ =0x00002ce2 - movs r5, 0 -_08097DFA: - ldr r2, [r7] - ldrb r1, [r3] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r4, r0 - adds r2, r6 - adds r2, r0 - strb r5, [r2] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x5 - bls _08097DFA -_08097E16: - ldr r3, _08097EC0 @ =gSaveBlock1Ptr - ldr r2, [r3] - mov r0, r12 - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r4, r0 - ldr r1, _08097ED4 @ =0x00002ce2 - adds r2, r1 - adds r2, r0 - movs r0, 0xFF - strb r0, [r2] - movs r4, 0 - adds r5, r3, 0 - mov r3, r12 -_08097E36: - ldr r2, [r5] - ldrb r1, [r3] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r4, r0 - ldr r1, _08097ED8 @ =0x00002cea - adds r2, r1 - adds r2, r0 - mov r1, r10 - ldr r0, [r1] - adds r0, 0xA - adds r0, r4 - ldrb r0, [r0] - strb r0, [r2] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x3 - bls _08097E36 - mov r0, r8 - movs r1, 0xB - bl GetBoxMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0 - bl GetBoxMonData - adds r1, r0, 0 - adds r0, r4, 0 - bl SpeciesToMailSpecies - ldr r1, _08097EC0 @ =gSaveBlock1Ptr - ldr r3, [r1] - mov r4, r9 - ldrb r2, [r4] - lsls r1, r2, 3 - adds r1, r2 - lsls r1, 2 - adds r1, r3, r1 - ldr r2, _08097EDC @ =0x00002cee - adds r1, r2 - strh r0, [r1] - ldrb r1, [r4] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r3, r0 - ldr r4, _08097EC4 @ =0x00002cf0 - adds r3, r4 - mov r0, sp - ldrh r0, [r0, 0x8] - strh r0, [r3] - mov r0, r8 - movs r1, 0x40 - mov r2, r9 - bl SetMonData - mov r0, r8 - movs r1, 0xC - mov r2, sp - bl SetMonData - mov r1, r9 - ldrb r0, [r1] - b _08097EEE - .align 2, 0 -_08097EC0: .4byte gSaveBlock1Ptr -_08097EC4: .4byte 0x00002cf0 -_08097EC8: .4byte gSaveBlock2Ptr -_08097ECC: .4byte 0x0000ffff -_08097ED0: .4byte 0x00002cd0 -_08097ED4: .4byte 0x00002ce2 -_08097ED8: .4byte 0x00002cea -_08097EDC: .4byte 0x00002cee -_08097EE0: - adds r0, r3, 0x1 - strb r0, [r4] - ldrb r0, [r5] - cmp r0, 0x5 - bhi _08097EEC - b _08097D62 -_08097EEC: - movs r0, 0xFF -_08097EEE: - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8097D38 - - thumb_func_start SpeciesToMailSpecies -SpeciesToMailSpecies: @ 8097F00 - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xC9 - bne _08097F18 - adds r0, r1, 0 - bl mon_icon_personality_to_unown_id - lsls r0, 16 - ldr r1, _08097F1C @ =0x75300000 - adds r0, r1 - lsrs r0, 16 -_08097F18: - pop {r1} - bx r1 - .align 2, 0 -_08097F1C: .4byte 0x75300000 - thumb_func_end SpeciesToMailSpecies - - thumb_func_start MailSpeciesToSpecies -MailSpeciesToSpecies: @ 8097F20 - push {lr} - lsls r0, 16 - lsrs r3, r0, 16 - ldr r0, _08097F38 @ =0xffff8ad0 - adds r2, r3, r0 - lsls r0, r2, 16 - lsrs r0, 16 - cmp r0, 0x1B - bhi _08097F3C - movs r0, 0xC9 - strh r2, [r1] - b _08097F3E - .align 2, 0 -_08097F38: .4byte 0xffff8ad0 -_08097F3C: - adds r0, r3, 0 -_08097F3E: - pop {r1} - bx r1 - thumb_func_end MailSpeciesToSpecies - - thumb_func_start GiveMailToMon2 -GiveMailToMon2: @ 8097F44 - push {r4-r7,lr} - sub sp, 0x8 - adds r6, r0, 0 - adds r7, r1, 0 - ldrh r5, [r7, 0x20] - adds r1, r5, 0 - bl sub_8097D38 - add r4, sp, 0x4 - strb r0, [r4] - ldrb r2, [r4] - cmp r2, 0xFF - beq _08097FA8 - ldr r0, _08097FA0 @ =gSaveBlock1Ptr - ldr r1, [r0] - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - adds r1, r0 - ldr r0, _08097FA4 @ =0x00002cd0 - adds r1, r0 - adds r0, r7, 0 - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - ldm r0!, {r2,r3,r7} - stm r1!, {r2,r3,r7} - adds r0, r6, 0 - movs r1, 0x40 - adds r2, r4, 0 - bl SetMonData - mov r0, sp - strb r5, [r0] - mov r1, sp - lsrs r0, r5, 8 - strb r0, [r1, 0x1] - adds r0, r6, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - ldrb r0, [r4] - b _08097FAA - .align 2, 0 -_08097FA0: .4byte gSaveBlock1Ptr -_08097FA4: .4byte 0x00002cd0 -_08097FA8: - movs r0, 0xFF -_08097FAA: - add sp, 0x8 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end GiveMailToMon2 - - thumb_func_start sub_8097FB4 -sub_8097FB4: @ 8097FB4 - movs r0, 0 - bx lr - thumb_func_end sub_8097FB4 - - thumb_func_start TakeMailFromMon -TakeMailFromMon: @ 8097FB8 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - bl MonHasMail - lsls r0, 24 - cmp r0, 0 - beq _08098008 - adds r0, r4, 0 - movs r1, 0x40 - bl GetMonData - add r2, sp, 0x4 - strb r0, [r2] - ldr r0, _08098010 @ =gSaveBlock1Ptr - ldr r3, [r0] - ldrb r1, [r2] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r3, r0 - ldr r0, _08098014 @ =0x00002cf0 - adds r3, r0 - movs r1, 0 - movs r0, 0 - strh r0, [r3] - movs r0, 0xFF - strb r0, [r2] - mov r0, sp - strb r1, [r0] - strb r1, [r0, 0x1] - adds r0, r4, 0 - movs r1, 0x40 - bl SetMonData - adds r0, r4, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData -_08098008: - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08098010: .4byte gSaveBlock1Ptr -_08098014: .4byte 0x00002cf0 - thumb_func_end TakeMailFromMon - - thumb_func_start sub_8098018 -sub_8098018: @ 8098018 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08098034 @ =gSaveBlock1Ptr - ldr r2, [r1] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r2, r1 - ldr r0, _08098038 @ =0x00002cf0 - adds r2, r0 - movs r0, 0 - strh r0, [r2] - bx lr - .align 2, 0 -_08098034: .4byte gSaveBlock1Ptr -_08098038: .4byte 0x00002cf0 - thumb_func_end sub_8098018 - - thumb_func_start sub_809803C -sub_809803C: @ 809803C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - adds r5, r0, 0 - mov r0, sp - movs r1, 0 - strb r1, [r0] - strb r1, [r0, 0x1] - add r1, sp, 0x4 - movs r0, 0xFF - strb r0, [r1] - movs r7, 0x6 - mov r9, r1 - ldr r0, _080980D0 @ =gSaveBlock1Ptr - mov r8, r0 - ldr r3, _080980D4 @ =0x00002cd0 -_08098060: - mov r1, r8 - ldr r0, [r1] - lsls r1, r7, 3 - adds r1, r7 - lsls r1, 2 - adds r4, r0, r1 - ldr r2, _080980D8 @ =0x00002cf0 - adds r0, r4, r2 - ldrh r6, [r0] - cmp r6, 0 - bne _080980DC - adds r4, r3 - adds r0, r5, 0 - movs r1, 0x40 - str r3, [sp, 0x8] - bl GetMonData - mov r1, r8 - ldr r2, [r1] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldr r3, [sp, 0x8] - adds r1, r3 - ldm r1!, {r0,r2,r3} - stm r4!, {r0,r2,r3} - ldm r1!, {r0,r2,r3} - stm r4!, {r0,r2,r3} - ldm r1!, {r0,r2,r3} - stm r4!, {r0,r2,r3} - adds r0, r5, 0 - movs r1, 0x40 - bl GetMonData - mov r1, r8 - ldr r2, [r1] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r2, r1 - ldr r3, _080980D8 @ =0x00002cf0 - adds r2, r3 - strh r6, [r2] - adds r0, r5, 0 - movs r1, 0x40 - mov r2, r9 - bl SetMonData - adds r0, r5, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r0, r7, 0 - b _080980E8 - .align 2, 0 -_080980D0: .4byte gSaveBlock1Ptr -_080980D4: .4byte 0x00002cd0 -_080980D8: .4byte 0x00002cf0 -_080980DC: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0xF - bls _08098060 - movs r0, 0xFF -_080980E8: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_809803C - - thumb_func_start ItemIsMail -ItemIsMail: @ 80980F8 - push {lr} - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x84 - bgt _0809810A - cmp r0, 0x79 - blt _0809810A - movs r0, 0x1 - b _0809810C -_0809810A: - movs r0, 0 -_0809810C: - pop {r1} - bx r1 - thumb_func_end ItemIsMail - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/party_menu.s b/asm/party_menu.s index e56e6958e..58f7529e2 100644 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -3543,7 +3543,7 @@ sub_81205C8: @ 81205C8 bne _081205F2 adds r0, r6, 0 adds r1, r4, 0 - bl sub_8097D38 + bl GiveMailToMon lsls r0, 24 lsrs r0, 24 cmp r0, 0xFF @@ -10776,7 +10776,7 @@ _08123EB2: muls r0, r1 ldr r1, _08123EE8 @ =gPlayerParty adds r0, r1 - bl sub_809803C + bl TakeMailFromMon2 lsls r0, 24 lsrs r0, 24 cmp r0, 0xFF diff --git a/asm/pokemon_icon.s b/asm/pokemon_icon.s index c269ce8a4..a6a83033a 100644 --- a/asm/pokemon_icon.s +++ b/asm/pokemon_icon.s @@ -166,7 +166,7 @@ mon_icon_convert_unown_species_id: @ 8096F5C cmp r2, 0xC9 bne _08096F86 adds r0, r1, 0 - bl mon_icon_personality_to_unown_id + bl GetUnownLetterByPersonality lsls r0, 16 lsrs r0, 16 cmp r0, 0 @@ -195,8 +195,8 @@ _08096F92: bx r1 thumb_func_end mon_icon_convert_unown_species_id - thumb_func_start mon_icon_personality_to_unown_id -mon_icon_personality_to_unown_id: @ 8096F98 + thumb_func_start GetUnownLetterByPersonality +GetUnownLetterByPersonality: @ 8096F98 push {lr} adds r2, r0, 0 cmp r2, 0 @@ -228,7 +228,7 @@ _08096FCE: _08096FD0: pop {r1} bx r1 - thumb_func_end mon_icon_personality_to_unown_id + thumb_func_end GetUnownLetterByPersonality thumb_func_start sub_8096FD4 sub_8096FD4: @ 8096FD4 diff --git a/asm/wild_encounter.s b/asm/wild_encounter.s index 21b97c942..f8bc6a71b 100644 --- a/asm/wild_encounter.s +++ b/asm/wild_encounter.s @@ -482,7 +482,7 @@ _08082A8E: lsrs r0, 16 orrs r4, r0 adds r0, r4, 0 - bl GetUnownLetterByPersonality + bl GetUnownLetterByPersonalityLoByte lsls r0, 24 lsrs r0, 24 cmp r0, r5 @@ -493,8 +493,8 @@ _08082A8E: bx r1 thumb_func_end sub_8082A88 - thumb_func_start GetUnownLetterByPersonality -GetUnownLetterByPersonality: @ 8082AB8 + thumb_func_start GetUnownLetterByPersonalityLoByte +GetUnownLetterByPersonalityLoByte: @ 8082AB8 push {lr} adds r2, r0, 0 movs r0, 0xC0 @@ -520,7 +520,7 @@ GetUnownLetterByPersonality: @ 8082AB8 lsrs r0, 24 pop {r1} bx r1 - thumb_func_end GetUnownLetterByPersonality + thumb_func_end GetUnownLetterByPersonalityLoByte thumb_func_start sub_8082AEC sub_8082AEC: @ 8082AEC diff --git a/include/mail.h b/include/mail.h index 9ffccbb5b..3ba731c66 100644 --- a/include/mail.h +++ b/include/mail.h @@ -3,6 +3,8 @@ #include "global.h" +#define MAIL_WORDS_COUNT 9 + #define IS_ITEM_MAIL(itemId)((itemId == ITEM_ORANGE_MAIL \ || itemId == ITEM_HARBOR_MAIL \ || itemId == ITEM_GLITTER_MAIL \ @@ -17,10 +19,6 @@ || itemId == ITEM_RETRO_MAIL)) -bool8 MonHasMail(struct Pokemon *mon); -void TakeMailFromMon(struct Pokemon *mon); -u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail); -void ClearMailStruct(struct MailStruct *mail); void sub_80BEBEC(struct MailStruct * mail, void (* callback)(void), u8 a2); #endif // GUARD_MAIL_H diff --git a/include/mail_data.h b/include/mail_data.h index 79a4a7851..a5795ed7e 100644 --- a/include/mail_data.h +++ b/include/mail_data.h @@ -9,7 +9,16 @@ // Exported ROM declarations -u16 sub_80D45E8(u16, u16 *); +void ClearMailData(void); +void ClearMailStruct(struct MailStruct *mail); +bool8 MonHasMail(struct Pokemon *mon); +u8 GiveMailToMon(struct Pokemon *mon, u16 itemId); +u16 SpeciesToMailSpecies(u16 species, u32 personality); +u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer); +u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail); +void TakeMailFromMon(struct Pokemon *mon); +void ClearMailItemId(u8 mailId); +u8 TakeMailFromMon2(struct Pokemon *mon); bool8 ItemIsMail(u16 itemId); #endif //GUARD_MAIL_DATA_H diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index 593715b7d..cd8c798f9 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -15,5 +15,6 @@ void FreeMonIconPalettes(void); u16 sub_8096FD4(u16); u8 sub_8096ECC(u16, void (*)(struct Sprite *), s16, s16, u8, bool32); void sub_8097070(struct Sprite *); +u16 GetUnownLetterByPersonality(u32 personality); #endif // GUARD_POKEMON_ICON_H diff --git a/include/wild_encounter.h b/include/wild_encounter.h index b4c42116a..2ca30ac8b 100644 --- a/include/wild_encounter.h +++ b/include/wild_encounter.h @@ -43,6 +43,6 @@ u16 GetLocalWildMon(bool8 *isWaterMon); u16 GetLocalWaterMon(void); bool8 UpdateRepelCounter(void); void sub_8082740(u8); -u8 GetUnownLetterByPersonality(u32 personality); +u8 GetUnownLetterByPersonalityLoByte(u32 personality); #endif // GUARD_WILD_ENCOUNTER_H diff --git a/ld_script.txt b/ld_script.txt index e19f6c35e..4f0a3b731 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -135,7 +135,7 @@ SECTIONS { asm/pokemon_icon.o(.text); asm/script_movement.o(.text); asm/fldeff_cut.o(.text); - asm/mail_data.o(.text); + src/mail_data.o(.text); asm/map_name_popup.o(.text); src/item_menu_icons.o(.text); src/battle_anim_mon_movement.o(.text); diff --git a/src/daycare.c b/src/daycare.c index 35670465a..7a2cb0698 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -5,7 +5,7 @@ #include "string_util.h" #include "constants/species.h" #include "constants/items.h" -#include "mail.h" +#include "mail_data.h" #include "pokemon_storage_system.h" #include "event_data.h" #include "random.h" diff --git a/src/decompress.c b/src/decompress.c index ddc86b5b7..826c2ee94 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -79,7 +79,6 @@ void HandleLoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *des isFrontPic = TRUE; // frontPic else isFrontPic = FALSE; // backPic - LoadSpecialPokePic(src, dest, species, personality, isFrontPic); } @@ -94,7 +93,6 @@ void LoadSpecialPokePic(const struct CompressedSpriteSheet *src, void *dest, s32 i = SPECIES_UNOWN; else i += SPECIES_UNOWN_B - 1; - if (!isFrontPic) LZ77UnCompWram(gMonBackPicTable[i].data, dest); else diff --git a/src/mail_data.c b/src/mail_data.c new file mode 100644 index 000000000..5d6c93419 --- /dev/null +++ b/src/mail_data.c @@ -0,0 +1,182 @@ +#include "global.h" +#include "text.h" +#include "mail.h" +#include "mail_data.h" +#include "constants/species.h" +#include "constants/items.h" +#include "pokemon_icon.h" + +void ClearMailData(void) +{ + u8 i; + + for (i = 0; i < MAIL_COUNT; i++) + ClearMailStruct(&gSaveBlock1Ptr->mail[i]); +} + +void ClearMailStruct(struct MailStruct *mail) +{ + s32 i; + + for (i = 0; i < MAIL_WORDS_COUNT; i++) + mail->words[i] = 0xFFFF; + for (i = 0; i < PLAYER_NAME_LENGTH; i++) + mail->playerName[i] = EOS; + for (i = 0; i < 4; i++) + mail->trainerId[i] = 0; + mail->species = SPECIES_BULBASAUR; + mail->itemId = ITEM_NONE; +} + +bool8 MonHasMail(struct Pokemon *mon) +{ + u16 heldItem = GetMonData(mon, MON_DATA_HELD_ITEM); + if (ItemIsMail(heldItem) && GetMonData(mon, MON_DATA_MAIL) != 0xFF) + return TRUE; + else + return FALSE; +} + +u8 GiveMailToMon(struct Pokemon *mon, u16 itemId) +{ + u8 heldItem[2]; + u8 id, i; + u16 species; + u32 personality; + + heldItem[0] = itemId; + heldItem[1] = itemId >> 8; + for (id = 0; id < PARTY_SIZE; id++) + { + if (gSaveBlock1Ptr->mail[id].itemId == 0) + { + for (i = 0; i < MAIL_WORDS_COUNT; i++) + gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF; + for (i = 0; i < PLAYER_NAME_LENGTH - 1 && gSaveBlock2Ptr->playerName[i] != EOS; i++) + gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i]; + for (; i <= 5; i++) + gSaveBlock1Ptr->mail[id].playerName[i] = CHAR_SPACE; + gSaveBlock1Ptr->mail[id].playerName[i] = EOS; + for (i = 0; i < 4; i++) + gSaveBlock1Ptr->mail[id].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; + species = GetBoxMonData(&mon->box, MON_DATA_SPECIES); + personality = GetBoxMonData(&mon->box, MON_DATA_PERSONALITY); + gSaveBlock1Ptr->mail[id].species = SpeciesToMailSpecies(species, personality); + gSaveBlock1Ptr->mail[id].itemId = itemId; + SetMonData(mon, MON_DATA_MAIL, &id); + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + return id; + } + } + return 0xFF; +} + +u16 SpeciesToMailSpecies(u16 species, u32 personality) +{ + return species == 0xC9 ? ((GetUnownLetterByPersonality(personality) << 16) + 0x75300000) >> 16 : species; +} + +u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer) +{ + u16 result; + + if (mailSpecies >= 30000 && mailSpecies < (30000 + UNOWN_FORM_COUNT)) + { + result = SPECIES_UNOWN; + *buffer = mailSpecies - 30000; + } + else + { + result = mailSpecies; + } + return result; +} + +u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail) +{ + u8 heldItem[2]; + u16 itemId = mail->itemId; + u8 mailId = GiveMailToMon(mon, itemId); + + if (mailId == 0xFF) + return 0xFF; + gSaveBlock1Ptr->mail[mailId] = *mail; + SetMonData(mon, MON_DATA_MAIL, &mailId); + heldItem[0] = itemId; + heldItem[1] = itemId >> 8; + + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + + return mailId; +} + +static bool32 DummyMailFunc(void) +{ + return FALSE; +} + +void TakeMailFromMon(struct Pokemon *mon) +{ + u8 heldItem[2]; + u8 mailId; + + if (MonHasMail(mon)) + { + mailId = GetMonData(mon, MON_DATA_MAIL); + gSaveBlock1Ptr->mail[mailId].itemId = ITEM_NONE; + mailId = 0xFF; + heldItem[0] = ITEM_NONE; + heldItem[1] = ITEM_NONE << 8; + SetMonData(mon, MON_DATA_MAIL, &mailId); + SetMonData(mon, MON_DATA_HELD_ITEM, heldItem); + } +} + +void ClearMailItemId(u8 mailId) +{ + gSaveBlock1Ptr->mail[mailId].itemId = ITEM_NONE; +} + +u8 TakeMailFromMon2(struct Pokemon *mon) +{ + u8 i, newMailId; + u8 newHeldItem[2]; + + newHeldItem[0] = ITEM_NONE; + newHeldItem[1] = ITEM_NONE << 8; + newMailId = 0xFF; + for (i = PARTY_SIZE; i < MAIL_COUNT; i++) + { + if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE) + { + memcpy(&gSaveBlock1Ptr->mail[i], &gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct)); + gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)].itemId = ITEM_NONE; + SetMonData(mon, MON_DATA_MAIL, &newMailId); + SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem); + return i; + } + } + return 0xFF; +} + +bool8 ItemIsMail(u16 itemId) +{ + switch (itemId) + { + case ITEM_ORANGE_MAIL: + case ITEM_HARBOR_MAIL: + case ITEM_GLITTER_MAIL: + case ITEM_MECH_MAIL: + case ITEM_WOOD_MAIL: + case ITEM_WAVE_MAIL: + case ITEM_BEAD_MAIL: + case ITEM_SHADOW_MAIL: + case ITEM_TROPIC_MAIL: + case ITEM_DREAM_MAIL: + case ITEM_FAB_MAIL: + case ITEM_RETRO_MAIL: + return TRUE; + default: + return FALSE; + } +} diff --git a/src/menu2.c b/src/menu2.c index 9a1846c7e..ffe5865e4 100644 --- a/src/menu2.c +++ b/src/menu2.c @@ -820,7 +820,7 @@ u8 sub_812EA78(u16 species, u32 personality, u8 a2) { if (species == SPECIES_UNOWN) { - u8 unownLetter = GetUnownLetterByPersonality(personality); + u8 unownLetter = GetUnownLetterByPersonalityLoByte(personality); switch (unownLetter) { case 0: diff --git a/src/multiboot.c b/src/multiboot.c index 25b729dfd..cfc9821d2 100644 --- a/src/multiboot.c +++ b/src/multiboot.c @@ -23,9 +23,7 @@ void MultiBootInit(struct MultiBootParam *mp) int MultiBootMain(struct MultiBootParam *mp) { - int i; - int j; - int k; + int i, j, k; if (MultiBootCheckComplete(mp)) { @@ -260,9 +258,7 @@ output_burst: static int MultiBootSend(struct MultiBootParam *mp, u16 data) { - int i; - - i = REG_SIOCNT & (SIO_MULTI_BUSY | SIO_MULTI_SD | SIO_MULTI_SI); + int i = REG_SIOCNT & (SIO_MULTI_BUSY | SIO_MULTI_SD | SIO_MULTI_SI); if (i != SIO_MULTI_SD) { MultiBootInit(mp); diff --git a/src/play_time.c b/src/play_time.c index cb70a57c4..04f4b2040 100644 --- a/src/play_time.c +++ b/src/play_time.c @@ -12,7 +12,6 @@ enum void PlayTimeCounter_Reset(void) { sPlayTimeCounterState = STOPPED; - gSaveBlock2Ptr->playTimeHours = 0; gSaveBlock2Ptr->playTimeMinutes = 0; gSaveBlock2Ptr->playTimeSeconds = 0; @@ -22,7 +21,6 @@ void PlayTimeCounter_Reset(void) void PlayTimeCounter_Start(void) { sPlayTimeCounterState = RUNNING; - if (gSaveBlock2Ptr->playTimeHours > 999) PlayTimeCounter_SetToMax(); } diff --git a/src/save_location.c b/src/save_location.c index 71561c899..9b679c7ee 100644 --- a/src/save_location.c +++ b/src/save_location.c @@ -12,7 +12,6 @@ static bool32 IsCurMapInLocationList(const u16 *list) if (list[i] == locSum) return TRUE; } - return FALSE; } |