diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-09-08 21:32:59 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-08 21:32:59 -0700 |
commit | 4eff1882443b0004d9c9fa4895cdfefdc356565f (patch) | |
tree | a2c2a1f4ef482b64c0f3a19aacd074d6390d6e88 | |
parent | 0313c6bbc5e210ad1781dbb8d42641f5f604efd7 (diff) |
Thank You Mail and minor DungeonEnitity Work (#52)
* Thank You Mail: split out code into own file w/ data
* use constant for facingDir
-rw-r--r-- | asm/code_80869E4.s | 1277 | ||||
-rw-r--r-- | asm/code_8086A3C.s | 1050 | ||||
-rw-r--r-- | asm/wonder_mail_main_menu.s | 450 | ||||
-rw-r--r-- | data/data_80DED44.s | 171 | ||||
-rw-r--r-- | data/data_810AE24.s | 8 | ||||
-rw-r--r-- | data/text/wonder_mail_2.inc | 248 | ||||
-rw-r--r-- | include/dungeon_entity.h | 37 | ||||
-rw-r--r-- | include/gUnknown_203B418.h | 6 | ||||
-rw-r--r-- | include/wonder_mail.h | 15 | ||||
-rwxr-xr-x | ld_script.txt | 6 | ||||
-rw-r--r-- | src/code_8041AD0.c | 4 | ||||
-rw-r--r-- | src/code_80521D0_1.c | 10 | ||||
-rw-r--r-- | src/code_8057824_1.c | 72 | ||||
-rw-r--r-- | src/code_80869E4.c | 2 | ||||
-rw-r--r-- | src/code_8086A3C.c | 124 | ||||
-rw-r--r-- | src/ds_menus.c | 11 | ||||
-rw-r--r-- | src/felicity_bank.c | 2 | ||||
-rw-r--r-- | src/thank_you_wonder_mail.c | 1723 | ||||
-rw-r--r-- | src/wonder_mail.c | 1113 | ||||
-rw-r--r-- | src/wonder_mail_2.c | 336 | ||||
-rw-r--r-- | src/wonder_mail_main_menu.c | 300 |
21 files changed, 3275 insertions, 3690 deletions
diff --git a/asm/code_80869E4.s b/asm/code_80869E4.s index 6f109eb..6528560 100644 --- a/asm/code_80869E4.s +++ b/asm/code_80869E4.s @@ -53,1281 +53,4 @@ _08086A30: bx r0 thumb_func_end sub_80869E4 - thumb_func_start sub_8086A3C -sub_8086A3C: - ldr r1, [r0, 0x70] - movs r2, 0xAE - lsls r2, 1 - adds r1, r2 - movs r2, 0x1 - strb r2, [r1] - ldr r0, [r0, 0x70] - movs r1, 0xAF - lsls r1, 1 - adds r0, r1 - strb r2, [r0] - bx lr - thumb_func_end sub_8086A3C - - thumb_func_start sub_8086A54 -sub_8086A54: - ldr r1, [r0, 0x70] - movs r2, 0xAE - lsls r2, 1 - adds r1, r2 - movs r3, 0 - movs r2, 0x1 - strb r2, [r1] - ldr r0, [r0, 0x70] - movs r1, 0xAF - lsls r1, 1 - adds r0, r1 - strb r3, [r0] - bx lr - thumb_func_end sub_8086A54 - - thumb_func_start sub_8086A70 -sub_8086A70: - push {r4-r6,lr} - adds r5, r0, 0 - lsls r2, 16 - lsrs r4, r2, 16 - ldr r3, [r5, 0x70] - adds r2, r3, 0 - movs r0, 0xF7 - adds r0, r3 - mov r12, r0 - movs r0, 0x1 - mov r6, r12 - strb r0, [r6] - ldrh r0, [r3, 0x10] - strh r0, [r3, 0x12] - cmp r1, 0 - beq _08086A94 - strh r1, [r3, 0x10] - strh r1, [r3, 0xE] -_08086A94: - ldr r0, _08086AB8 - ldr r0, [r0] - ldr r1, _08086ABC - adds r0, r1 - strh r4, [r0] - adds r0, r2, 0 - adds r0, 0x8C - mov r2, r12 - ldrb r1, [r2] - bl sub_808EC94 - adds r0, r5, 0 - bl sub_807191C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086AB8: .4byte gUnknown_203B418 -_08086ABC: .4byte 0x0000066a - thumb_func_end sub_8086A70 - - thumb_func_start sub_8086AC0 -sub_8086AC0: - push {lr} - bl sub_8044B28 - lsls r0, 24 - cmp r0, 0 - bne _08086ADA - ldr r0, _08086AE0 - ldr r0, [r0] - ldrb r0, [r0, 0x2] - cmp r0, 0 - bne _08086ADA - bl sub_8097FF8 -_08086ADA: - pop {r0} - bx r0 - .align 2, 0 -_08086AE0: .4byte gUnknown_203B418 - thumb_func_end sub_8086AC0 - - thumb_func_start sub_8086AE4 -sub_8086AE4: - push {lr} - lsls r0, 16 - asrs r1, r0, 16 - ldr r0, _08086B04 - ldr r0, [r0] - ldr r2, _08086B08 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _08086B0C - adds r0, r1, 0 - bl HasRecruitedMon - lsls r0, 24 - lsrs r0, 24 - b _08086B0E - .align 2, 0 -_08086B04: .4byte gUnknown_203B418 -_08086B08: .4byte 0x0000065c -_08086B0C: - movs r0, 0x1 -_08086B0E: - pop {r1} - bx r1 - thumb_func_end sub_8086AE4 - - thumb_func_start sub_8086B14 -sub_8086B14: - push {r4-r6,lr} - mov r6, r8 - push {r6} - bl sub_8085480 - mov r8, r0 - movs r0, 0x4 - bl sub_8085680 - adds r6, r0, 0 - movs r0, 0x3 - bl sub_8085680 - adds r5, r0, 0 - movs r0, 0x72 - bl sub_8083E88 - bl sub_8085374 - bl sub_80854D4 - movs r0, 0x4 - bl sub_8085930 - ldr r4, _08086B8C - adds r0, r4, 0 - bl sub_80855E4 - adds r0, r5, 0 - bl _call_via_r4 - ldr r0, [r6, 0x70] - movs r1, 0xAE - lsls r1, 1 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - mov r2, r8 - movs r3, 0x4 - ldrsh r0, [r2, r3] - movs r3, 0x6 - ldrsh r1, [r2, r3] - subs r1, 0x2 - bl sub_8085860 - ldr r4, _08086B90 - adds r0, r4, 0 - movs r1, 0x32 - bl CopySpeciesNametoBuffer - adds r4, 0x50 - adds r0, r4, 0 - movs r1, 0xFC - bl CopySpeciesNametoBuffer - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086B8C: .4byte sub_8086A3C -_08086B90: .4byte gUnknown_202E038 - thumb_func_end sub_8086B14 - - thumb_func_start sub_8086B94 -sub_8086B94: - push {r4-r6,lr} - bl sub_8085480 - adds r6, r0, 0 - movs r0, 0x4 - bl sub_8085680 - adds r5, r0, 0 - movs r0, 0x3 - bl sub_8085680 - movs r4, 0x87 - lsls r4, 2 - adds r1, r4, 0 - movs r2, 0 - bl sub_8068FE0 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - bl sub_8068FE0 - bl sub_80854D4 - movs r0, 0x4 - bl sub_8085930 - movs r1, 0x4 - ldrsh r0, [r6, r1] - movs r2, 0x6 - ldrsh r1, [r6, r2] - bl sub_8085860 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8086B94 - - thumb_func_start sub_8086BDC -sub_8086BDC: - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - movs r2, 0xFF - lsls r2, 24 - adds r1, r2 - lsrs r1, 24 - cmp r1, 0x1 - bhi _08086C02 - cmp r0, 0x3 - bne _08086C02 - movs r0, 0x1 - bl sub_8097FA8 - ldr r0, _08086C08 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x2] -_08086C02: - pop {r0} - bx r0 - .align 2, 0 -_08086C08: .4byte gUnknown_203B418 - thumb_func_end sub_8086BDC - - thumb_func_start SkarmonyPreFightDialogue -SkarmonyPreFightDialogue: - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x10 - bl sub_8085480 - mov r8, r0 - bl sub_808548C - mov r9, r0 - movs r0, 0x4 - bl sub_8085680 - adds r4, r0, 0 - movs r0, 0x3 - bl sub_8085680 - adds r6, r0, 0 - ldr r0, [r4, 0xC] - str r0, [sp] - ldr r0, [r4, 0x10] - movs r1, 0xC0 - lsls r1, 6 - adds r0, r1 - str r0, [sp, 0x4] - ldr r0, [r6, 0xC] - str r0, [sp, 0x8] - ldr r0, [r6, 0x10] - movs r2, 0x80 - lsls r2, 6 - adds r0, r2 - add r5, sp, 0x8 - str r0, [r5, 0x4] - bl sub_8086448 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - mov r0, r9 - bl sub_80862BC - movs r0, 0x20 - movs r1, 0x46 - bl sub_803E708 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08086D84 - bl sub_8052910 - mov r0, sp - movs r1, 0x40 - bl sub_80858AC - movs r0, 0x40 - movs r1, 0x46 - bl sub_803E708 - adds r0, r5, 0 - movs r1, 0x30 - bl sub_80858AC - ldr r0, _08086D88 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, [r4, 0x70] - ldr r2, _08086D8C - adds r1, r0, r2 - movs r0, 0x1 - strb r0, [r1] - mov r0, sp - movs r1, 0x30 - bl sub_80858AC - ldr r0, _08086D90 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r5, 0 - movs r1, 0x20 - bl sub_80858AC - movs r0, 0x20 - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - bl sub_8086E74 - ldr r0, _08086D94 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08086D98 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08086D9C - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08086DA0 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - movs r1, 0xD - movs r2, 0 - bl sub_806CDD4 - ldr r0, _08086DA4 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - mov r0, r9 - movs r1, 0x4 - movs r2, 0x1 - movs r3, 0x2 - bl sub_80869E4 - mov r0, r8 - movs r1, 0x4 - movs r2, 0x2 - movs r3, 0x6 - bl sub_80869E4 - ldr r0, _08086DA8 - bl sub_8052910 - mov r0, r9 - movs r1, 0x4 - movs r2, 0x2 - movs r3, 0x4 - bl sub_80869E4 - mov r0, r8 - movs r1, 0x4 - movs r2, 0x1 - movs r3, 0x4 - bl sub_80869E4 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - movs r0, 0xB - bl sub_8083E88 - movs r0, 0xC - add r8, r0 - mov r0, r8 - movs r1, 0x10 - bl sub_80858AC - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086D84: .4byte gUnknown_8100768 -_08086D88: .4byte gUnknown_8100798 -_08086D8C: .4byte 0x0000015d -_08086D90: .4byte gUnknown_8100820 -_08086D94: .4byte gUnknown_8100844 -_08086D98: .4byte gUnknown_8100880 -_08086D9C: .4byte gUnknown_8100928 -_08086DA0: .4byte gUnknown_8100A04 -_08086DA4: .4byte gUnknown_8100B80 -_08086DA8: .4byte gUnknown_8100BC0 - thumb_func_end SkarmonyPreFightDialogue - - thumb_func_start SkarmonyReFightDialogue -SkarmonyReFightDialogue: - push {r4,r5,lr} - sub sp, 0x8 - bl sub_8085480 - adds r5, r0, 0 - movs r0, 0x3 - bl sub_8085680 - adds r4, r0, 0 - ldr r0, [r4, 0xC] - str r0, [sp] - ldr r0, [r4, 0x10] - movs r1, 0x80 - lsls r1, 6 - adds r0, r1 - str r0, [sp, 0x4] - bl sub_8086448 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r4, 0 - bl sub_8086E74 - mov r0, sp - movs r1, 0x10 - bl sub_80858AC - ldr r0, _08086E34 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08086E38 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r4, 0 - movs r1, 0xD - movs r2, 0 - bl sub_806CDD4 - ldr r0, _08086E3C - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r5, 0xC - adds r0, r5, 0 - movs r1, 0x10 - bl sub_80858AC - movs r0, 0xB - bl sub_8083E88 - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086E34: .4byte gUnknown_8100C90 -_08086E38: .4byte gUnknown_8100CBC -_08086E3C: .4byte gUnknown_8100CDC - thumb_func_end SkarmonyReFightDialogue - - thumb_func_start sub_8086E40 -sub_8086E40: - push {lr} - bl sub_8085480 - bl SpriteLookAroundEffect - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08086E6C - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08086E70 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x2] - pop {r0} - bx r0 - .align 2, 0 -_08086E6C: .4byte gUnknown_8100D3C -_08086E70: .4byte gUnknown_203B418 - thumb_func_end sub_8086E40 - - thumb_func_start sub_8086E74 -sub_8086E74: - push {r4,lr} - adds r4, r0, 0 - movs r1, 0xF - movs r2, 0 - bl sub_806CDD4 - adds r0, r4, 0 - bl sub_8086A54 - movs r0, 0xFC - lsls r0, 1 - bl PlaySoundEffect - movs r0, 0x44 - movs r1, 0x46 - bl sub_803E708 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8086E74 - - thumb_func_start sub_8086E9C -sub_8086E9C: - push {r4,r5,lr} - bl sub_8085480 - adds r5, r0, 0 - movs r0, 0x72 - bl sub_8083E88 - bl sub_8085374 - bl sub_80854D4 - movs r0, 0x4 - bl sub_8085930 - ldr r4, _08086EF8 - adds r0, r4, 0 - bl sub_80855E4 - adds r0, r4, 0 - bl sub_808563C - movs r1, 0x4 - ldrsh r0, [r5, r1] - movs r2, 0x6 - ldrsh r1, [r5, r2] - subs r1, 0x3 - bl sub_8085860 - ldr r4, _08086EFC - adds r0, r4, 0 - movs r1, 0xB - bl CopySpeciesNametoBuffer - adds r0, r4, 0 - adds r0, 0x50 - movs r1, 0x5E - bl CopySpeciesNametoBuffer - adds r4, 0xA0 - adds r0, r4, 0 - movs r1, 0xA - bl CopySpeciesNametoBuffer - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086EF8: .4byte sub_8086A3C -_08086EFC: .4byte gUnknown_202E038 - thumb_func_end sub_8086E9C - - thumb_func_start sub_8086F00 -sub_8086F00: - push {r4,lr} - bl sub_8085480 - adds r4, r0, 0 - bl sub_80854D4 - movs r0, 0x4 - bl sub_8085930 - ldr r0, _08086F4C - bl sub_80855E4 - movs r1, 0x4 - ldrsh r0, [r4, r1] - movs r2, 0x6 - ldrsh r1, [r4, r2] - subs r1, 0x3 - bl sub_8085860 - ldr r4, _08086F50 - adds r0, r4, 0 - movs r1, 0xB - bl CopySpeciesNametoBuffer - adds r0, r4, 0 - adds r0, 0x50 - movs r1, 0x5E - bl CopySpeciesNametoBuffer - adds r4, 0xA0 - adds r0, r4, 0 - movs r1, 0xA - bl CopySpeciesNametoBuffer - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086F4C: .4byte sub_8086A3C -_08086F50: .4byte gUnknown_202E038 - thumb_func_end sub_8086F00 - - thumb_func_start sub_8086F54 -sub_8086F54: - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - movs r0, 0xFC - lsls r0, 24 - adds r1, r0 - lsrs r1, 24 - cmp r1, 0x1 - bhi _08086FA8 - movs r5, 0 -_08086F6A: - ldr r0, _08086FB0 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08086FB4 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl sub_80450E0 - lsls r0, 24 - cmp r0, 0 - beq _08086F8E - ldr r0, [r4, 0x70] - adds r0, 0xA4 - ldrb r0, [r0] - cmp r0, r6 - bne _08086FA8 -_08086F8E: - adds r5, 0x1 - cmp r5, 0xF - ble _08086F6A - movs r0, 0 - cmp r0, 0 - bne _08086FA8 - movs r0, 0x3 - bl sub_8097FA8 - ldr r0, _08086FB0 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x2] -_08086FA8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086FB0: .4byte gUnknown_203B418 -_08086FB4: .4byte 0x0001358c - thumb_func_end sub_8086F54 - - thumb_func_start TeamMeaniePreFightDialogue -TeamMeaniePreFightDialogue: - push {r4,lr} - bl sub_8085480 - adds r4, r0, 0 - bl sub_8086448 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087048 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808704C - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - bl sub_8087144 - movs r0, 0xA - bl sub_8083E88 - ldr r0, _08087050 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087054 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087058 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808705C - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087060 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r4, 0xC - adds r0, r4, 0 - movs r1, 0x10 - bl sub_80858AC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08087048: .4byte gUnknown_8100DB0 -_0808704C: .4byte gUnknown_8100E64 -_08087050: .4byte gUnknown_8100E88 -_08087054: .4byte gUnknown_8100F14 -_08087058: .4byte gUnknown_8101004 -_0808705C: .4byte gUnknown_8101050 -_08087060: .4byte gUnknown_81010D0 - thumb_func_end TeamMeaniePreFightDialogue - - thumb_func_start TeamMeanieReFightDialogue -TeamMeanieReFightDialogue: - push {r4,r5,lr} - bl sub_8085480 - adds r4, r0, 0 - bl sub_808548C - adds r5, r0, 0 - bl sub_8086448 - ldr r0, _08087118 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808711C - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - bl sub_8087144 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087120 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087124 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r4, 0 - movs r1, 0x6 - movs r2, 0x4 - bl sub_806CDD4 - adds r0, r5, 0 - movs r1, 0x6 - movs r2, 0x4 - bl sub_806CDD4 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r4, 0 - movs r1, 0x7 - movs r2, 0x4 - bl sub_806CDD4 - adds r0, r5, 0 - movs r1, 0x7 - movs r2, 0x4 - bl sub_806CDD4 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, _08087128 - bl sub_8052910 - ldr r0, _0808712C - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r4, 0xC - adds r0, r4, 0 - movs r1, 0x10 - bl sub_80858AC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087118: .4byte gUnknown_8101164 -_0808711C: .4byte gUnknown_8100E64 -_08087120: .4byte gUnknown_8101240 -_08087124: .4byte gUnknown_8101310 -_08087128: .4byte gUnknown_810137C -_0808712C: .4byte gUnknown_8101408 - thumb_func_end TeamMeanieReFightDialogue - - thumb_func_start sub_8087130 -sub_8087130: - push {lr} - bl sub_8086448 - ldr r0, _08087140 - bl sub_80866C4 - pop {r0} - bx r0 - .align 2, 0 -_08087140: .4byte gUnknown_8101440 - thumb_func_end sub_8087130 - - thumb_func_start sub_8087144 -sub_8087144: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xF0 - movs r0, 0x5 - bl sub_8085680 - adds r7, r0, 0 - movs r0, 0x6 - bl sub_8085680 - mov r8, r0 - movs r0, 0x7 - bl sub_8085680 - mov r9, r0 - ldr r1, _080871E0 - mov r0, sp - movs r2, 0x38 - bl memcpy - add r6, sp, 0x38 - ldr r1, _080871E4 - adds r0, r6, 0 - movs r2, 0x38 - bl memcpy - add r4, sp, 0x70 - ldr r1, _080871E8 - adds r0, r4, 0 - movs r2, 0x38 - bl memcpy - add r5, sp, 0xA8 - mov r0, sp - str r0, [r5] - str r6, [r5, 0x4] - str r4, [r5, 0x8] - add r4, sp, 0xB4 - str r7, [r4] - mov r3, r8 - str r3, [r4, 0x4] - mov r0, r9 - str r0, [r4, 0x8] - movs r0, 0xA - bl sub_8083E88 - adds r0, r7, 0 - bl sub_8086A54 - mov r0, r8 - bl sub_8086A54 - mov r0, r9 - bl sub_8086A54 - add r6, sp, 0xC0 - adds r0, r6, 0 - adds r1, r5, 0 - adds r2, r4, 0 - movs r3, 0x3 - bl sub_8085B4C - ldr r0, [r7, 0x70] - ldr r2, _080871EC - adds r0, r2 - movs r1, 0x1 - strb r1, [r0] - mov r3, r8 - ldr r0, [r3, 0x70] - adds r0, r2 - strb r1, [r0] - mov r3, r9 - ldr r0, [r3, 0x70] - adds r0, r2 - strb r1, [r0] - b _080871F6 - .align 2, 0 -_080871E0: .4byte gUnknown_810739C -_080871E4: .4byte gUnknown_81073D4 -_080871E8: .4byte gUnknown_810740C -_080871EC: .4byte 0x0000015f -_080871F0: - movs r0, 0x46 - bl sub_803E46C -_080871F6: - adds r0, r6, 0 - bl sub_8085B80 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _080871F0 - ldr r0, [r7, 0x70] - ldr r1, _0808722C - adds r0, r1 - strb r2, [r0] - mov r3, r8 - ldr r0, [r3, 0x70] - adds r0, r1 - strb r2, [r0] - mov r3, r9 - ldr r0, [r3, 0x70] - adds r0, r1 - strb r2, [r0] - add sp, 0xF0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0808722C: .4byte 0x0000015f - thumb_func_end sub_8087144 - - thumb_func_start sub_8087230 -sub_8087230: - push {r4-r6,lr} - bl sub_8085480 - adds r6, r0, 0 - movs r0, 0x8 - bl sub_8085680 - adds r5, r0, 0 - movs r0, 0x72 - bl sub_8083E88 - bl sub_8085374 - bl sub_80854D4 - movs r0, 0x4 - bl sub_8085930 - ldr r4, _08087294 - adds r0, r4, 0 - bl sub_80855E4 - adds r0, r5, 0 - movs r1, 0 - bl sub_8085918 - adds r0, r5, 0 - bl _call_via_r4 - movs r1, 0x4 - ldrsh r0, [r6, r1] - movs r2, 0x6 - ldrsh r1, [r6, r2] - subs r1, 0x3 - bl sub_8085860 - ldr r4, _08087298 - movs r1, 0x96 - lsls r1, 1 - adds r0, r4, 0 - bl CopySpeciesNametoBuffer - adds r4, 0x50 - adds r0, r4, 0 - movs r1, 0x91 - bl CopySpeciesNametoBuffer - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08087294: .4byte sub_8086A3C -_08087298: .4byte gUnknown_202E038 - thumb_func_end sub_8087230 - - thumb_func_start sub_808729C -sub_808729C: - push {r4-r6,lr} - sub sp, 0x4 - bl sub_8085480 - adds r5, r0, 0 - movs r0, 0x8 - bl sub_8085680 - adds r4, r0, 0 - bl sub_80854D4 - movs r0, 0x4 - bl sub_8085930 - ldr r6, _080872DC - adds r0, r6, 0 - bl sub_80855E4 - movs r0, 0x91 - bl sub_8086AE4 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _080872E0 - movs r1, 0x87 - lsls r1, 2 - adds r0, r4, 0 - movs r2, 0 - bl sub_8068FE0 - b _08087300 - .align 2, 0 -_080872DC: .4byte sub_8086A3C -_080872E0: - ldr r0, _0808732C - movs r3, 0 - ldrsh r2, [r0, r3] - str r1, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - movs r3, 0 - bl sub_8072008 - adds r0, r4, 0 - movs r1, 0 - bl sub_8085918 - adds r0, r4, 0 - bl _call_via_r6 -_08087300: - movs r1, 0x4 - ldrsh r0, [r5, r1] - movs r2, 0x6 - ldrsh r1, [r5, r2] - subs r1, 0x3 - bl sub_8085860 - ldr r4, _08087330 - movs r1, 0x96 - lsls r1, 1 - adds r0, r4, 0 - bl CopySpeciesNametoBuffer - adds r4, 0x50 - adds r0, r4, 0 - movs r1, 0x91 - bl CopySpeciesNametoBuffer - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0808732C: .4byte gUnknown_80F57CC -_08087330: .4byte gUnknown_202E038 - thumb_func_end sub_808729C - - thumb_func_start sub_8087334 -sub_8087334: - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - movs r2, 0xF9 - lsls r2, 24 - adds r1, r2 - lsrs r1, 24 - cmp r1, 0x2 - bhi _0808735A - cmp r0, 0x8 - bne _0808735A - movs r0, 0x5 - bl sub_8097FA8 - ldr r0, _08087360 - ldr r1, [r0] - movs r0, 0x1 - strb r0, [r1, 0x2] -_0808735A: - pop {r0} - bx r0 - .align 2, 0 -_08087360: .4byte gUnknown_203B418 - thumb_func_end sub_8087334 - - thumb_func_start ZapdosPreFightDialogue -ZapdosPreFightDialogue: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x70 - bl sub_8085480 - mov r9, r0 - bl sub_808548C - adds r6, r0, 0 - movs r0, 0x8 - bl sub_8085680 - str r0, [sp, 0x68] - bl sub_8086448 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - bl SpriteLookAroundEffect - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - movs r1, 0x4 - movs r2, 0x1 - movs r3, 0x2 - bl sub_80869E4 - mov r0, r9 - movs r1, 0x4 - movs r2, 0x2 - movs r3, 0x6 - bl sub_80869E4 - ldr r0, _08087470 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - movs r1, 0x4 - movs r2, 0x2 - movs r3, 0x4 - bl sub_80869E4 - mov r0, r9 - movs r1, 0x4 - movs r2, 0x1 - movs r3, 0x4 - bl sub_80869E4 - ldr r0, _08087474 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - movs r0, 0x3 - bl sub_808775C - bl sub_8083F14 - movs r0, 0xED - lsls r0, 1 - bl PlaySoundEffect - ldr r0, _08087478 - bl sub_8052910 - ldr r0, [sp, 0x68] - bl sub_8087704 - movs r0, 0x9 - bl sub_8083E88 - adds r0, r6, 0 - movs r1, 0x6 - movs r2, 0x4 - bl sub_806CDD4 - ldr r0, _0808747C - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - adds r0, r6, 0 - movs r1, 0x2 - movs r2, 0x1 - movs r3, 0x1 - bl sub_80869E4 - mov r1, sp - ldr r0, _08087480 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - mov r0, sp - str r0, [sp, 0x58] - str r6, [sp, 0x5C] - add r4, sp, 0x18 - add r1, sp, 0x58 - add r2, sp, 0x5C - adds r0, r4, 0 - movs r3, 0x1 - bl sub_8085B4C - ldr r0, [r6, 0x70] - ldr r2, _08087484 - adds r1, r0, r2 - movs r0, 0x1 - strb r0, [r1] - add r7, sp, 0x28 - add r3, sp, 0x48 - mov r8, r3 - add r0, sp, 0x60 - mov r10, r0 - mov r1, sp - adds r1, 0x64 - str r1, [sp, 0x6C] - b _0808748E - .align 2, 0 -_08087470: .4byte gUnknown_81014B0 -_08087474: .4byte gUnknown_8101504 -_08087478: .4byte gUnknown_81015A0 -_0808747C: .4byte gUnknown_81015D4 -_08087480: .4byte gUnknown_810744C -_08087484: .4byte 0x0000015f -_08087488: - movs r0, 0x46 - bl sub_803E46C -_0808748E: - adds r0, r4, 0 - bl sub_8085B80 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08087488 - ldr r0, [r6, 0x70] - ldr r2, _08087510 - adds r0, r2 - strb r5, [r0] - ldr r0, [r6, 0x70] - ldr r4, _08087514 - adds r0, r4 - movs r1, 0x1 - strb r1, [r0] - adds r0, r6, 0 - movs r1, 0x2 - movs r2, 0x2 - movs r3, 0x4 - bl sub_80869E4 - ldr r0, _08087518 - bl sub_8052910 - movs r0, 0x3C - movs r1, 0x46 - bl sub_803E708 - ldr r0, _0808751C - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - ldr r0, [r6, 0x70] - adds r0, r4 - strb r5, [r0] - adds r0, r6, 0 - movs r1, 0x2 - movs r2, 0x2 - movs r3, 0x5 - bl sub_80869E4 - adds r1, r7, 0 - ldr r0, _08087520 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r3,r4} - stm r1!, {r3,r4} - str r7, [sp, 0x60] - str r6, [sp, 0x64] - mov r0, r8 - mov r1, r10 - ldr r2, [sp, 0x6C] - movs r3, 0x1 - bl sub_8085B4C - mov r4, r9 - adds r4, 0xC - b _0808752A - .align 2, 0 -_08087510: .4byte 0x0000015f -_08087514: .4byte 0x0000015d -_08087518: .4byte gUnknown_81015E8 -_0808751C: .4byte gUnknown_8101624 -_08087520: .4byte gUnknown_8107464 -_08087524: - movs r0, 0x46 - bl sub_803E46C -_0808752A: - mov r0, r8 - bl sub_8085B80 - lsls r0, 24 - cmp r0, 0 - bne _08087524 - adds r0, r6, 0 - movs r1, 0x2 - movs r2, 0x1 - movs r3, 0x3 - bl sub_80869E4 - ldr r0, _080875B0 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - movs r0, 0x3 - bl sub_808775C - ldr r0, _080875B4 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - movs r0, 0x1 - bl sub_808775C - ldr r0, _080875B8 - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - movs r0, 0x2 - bl sub_808775C - ldr r0, _080875BC - bl sub_8052910 - movs r0, 0xA - movs r1, 0x46 - bl sub_803E708 - movs r1, 0x96 - lsls r1, 1 - ldr r0, [sp, 0x68] - movs r2, 0xB - bl sub_8086A70 - adds r0, r4, 0 - movs r1, 0x10 - bl sub_80858AC - add sp, 0x70 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080875B0: .4byte gUnknown_810165C -_080875B4: .4byte gUnknown_8101750 -_080875B8: .4byte gUnknown_810178C -_080875BC: .4byte gUnknown_81017B4 - thumb_func_end ZapdosPreFightDialogue - .align 2,0 diff --git a/asm/code_8086A3C.s b/asm/code_8086A3C.s new file mode 100644 index 0000000..b0fe243 --- /dev/null +++ b/asm/code_8086A3C.s @@ -0,0 +1,1050 @@ + .include "constants/gba_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start SkarmonyPreFightDialogue +SkarmonyPreFightDialogue: + push {r4-r6,lr} + mov r6, r9 + mov r5, r8 + push {r5,r6} + sub sp, 0x10 + bl sub_8085480 + mov r8, r0 + bl sub_808548C + mov r9, r0 + movs r0, 0x4 + bl sub_8085680 + adds r4, r0, 0 + movs r0, 0x3 + bl sub_8085680 + adds r6, r0, 0 + ldr r0, [r4, 0xC] + str r0, [sp] + ldr r0, [r4, 0x10] + movs r1, 0xC0 + lsls r1, 6 + adds r0, r1 + str r0, [sp, 0x4] + ldr r0, [r6, 0xC] + str r0, [sp, 0x8] + ldr r0, [r6, 0x10] + movs r2, 0x80 + lsls r2, 6 + adds r0, r2 + add r5, sp, 0x8 + str r0, [r5, 0x4] + bl sub_8086448 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + mov r0, r9 + bl sub_80862BC + movs r0, 0x20 + movs r1, 0x46 + bl sub_803E708 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08086D84 + bl sub_8052910 + mov r0, sp + movs r1, 0x40 + bl sub_80858AC + movs r0, 0x40 + movs r1, 0x46 + bl sub_803E708 + adds r0, r5, 0 + movs r1, 0x30 + bl sub_80858AC + ldr r0, _08086D88 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, [r4, 0x70] + ldr r2, _08086D8C + adds r1, r0, r2 + movs r0, 0x1 + strb r0, [r1] + mov r0, sp + movs r1, 0x30 + bl sub_80858AC + ldr r0, _08086D90 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r5, 0 + movs r1, 0x20 + bl sub_80858AC + movs r0, 0x20 + movs r1, 0x46 + bl sub_803E708 + adds r0, r6, 0 + bl sub_8086E74 + ldr r0, _08086D94 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08086D98 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08086D9C + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08086DA0 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r6, 0 + movs r1, 0xD + movs r2, 0 + bl sub_806CDD4 + ldr r0, _08086DA4 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + mov r0, r9 + movs r1, 0x4 + movs r2, 0x1 + movs r3, 0x2 + bl sub_80869E4 + mov r0, r8 + movs r1, 0x4 + movs r2, 0x2 + movs r3, 0x6 + bl sub_80869E4 + ldr r0, _08086DA8 + bl sub_8052910 + mov r0, r9 + movs r1, 0x4 + movs r2, 0x2 + movs r3, 0x4 + bl sub_80869E4 + mov r0, r8 + movs r1, 0x4 + movs r2, 0x1 + movs r3, 0x4 + bl sub_80869E4 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + movs r0, 0xB + bl sub_8083E88 + movs r0, 0xC + add r8, r0 + mov r0, r8 + movs r1, 0x10 + bl sub_80858AC + add sp, 0x10 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_08086D84: .4byte gUnknown_8100768 +_08086D88: .4byte gUnknown_8100798 +_08086D8C: .4byte 0x0000015d +_08086D90: .4byte gUnknown_8100820 +_08086D94: .4byte gUnknown_8100844 +_08086D98: .4byte gUnknown_8100880 +_08086D9C: .4byte gUnknown_8100928 +_08086DA0: .4byte gUnknown_8100A04 +_08086DA4: .4byte gUnknown_8100B80 +_08086DA8: .4byte gUnknown_8100BC0 + thumb_func_end SkarmonyPreFightDialogue + + thumb_func_start SkarmonyReFightDialogue +SkarmonyReFightDialogue: + push {r4,r5,lr} + sub sp, 0x8 + bl sub_8085480 + adds r5, r0, 0 + movs r0, 0x3 + bl sub_8085680 + adds r4, r0, 0 + ldr r0, [r4, 0xC] + str r0, [sp] + ldr r0, [r4, 0x10] + movs r1, 0x80 + lsls r1, 6 + adds r0, r1 + str r0, [sp, 0x4] + bl sub_8086448 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r4, 0 + bl sub_8086E74 + mov r0, sp + movs r1, 0x10 + bl sub_80858AC + ldr r0, _08086E34 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08086E38 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r4, 0 + movs r1, 0xD + movs r2, 0 + bl sub_806CDD4 + ldr r0, _08086E3C + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r5, 0xC + adds r0, r5, 0 + movs r1, 0x10 + bl sub_80858AC + movs r0, 0xB + bl sub_8083E88 + add sp, 0x8 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_08086E34: .4byte gUnknown_8100C90 +_08086E38: .4byte gUnknown_8100CBC +_08086E3C: .4byte gUnknown_8100CDC + thumb_func_end SkarmonyReFightDialogue + + thumb_func_start sub_8086E40 +sub_8086E40: + push {lr} + bl sub_8085480 + bl SpriteLookAroundEffect + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08086E6C + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08086E70 + ldr r1, [r0] + movs r0, 0x1 + strb r0, [r1, 0x2] + pop {r0} + bx r0 + .align 2, 0 +_08086E6C: .4byte gUnknown_8100D3C +_08086E70: .4byte gUnknown_203B418 + thumb_func_end sub_8086E40 + + thumb_func_start sub_8086E74 +sub_8086E74: + push {r4,lr} + adds r4, r0, 0 + movs r1, 0xF + movs r2, 0 + bl sub_806CDD4 + adds r0, r4, 0 + bl sub_8086A54 + movs r0, 0xFC + lsls r0, 1 + bl PlaySoundEffect + movs r0, 0x44 + movs r1, 0x46 + bl sub_803E708 + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_8086E74 + + thumb_func_start sub_8086E9C +sub_8086E9C: + push {r4,r5,lr} + bl sub_8085480 + adds r5, r0, 0 + movs r0, 0x72 + bl sub_8083E88 + bl sub_8085374 + bl sub_80854D4 + movs r0, 0x4 + bl sub_8085930 + ldr r4, _08086EF8 + adds r0, r4, 0 + bl sub_80855E4 + adds r0, r4, 0 + bl sub_808563C + movs r1, 0x4 + ldrsh r0, [r5, r1] + movs r2, 0x6 + ldrsh r1, [r5, r2] + subs r1, 0x3 + bl sub_8085860 + ldr r4, _08086EFC + adds r0, r4, 0 + movs r1, 0xB + bl CopySpeciesNametoBuffer + adds r0, r4, 0 + adds r0, 0x50 + movs r1, 0x5E + bl CopySpeciesNametoBuffer + adds r4, 0xA0 + adds r0, r4, 0 + movs r1, 0xA + bl CopySpeciesNametoBuffer + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_08086EF8: .4byte sub_8086A3C +_08086EFC: .4byte gUnknown_202E038 + thumb_func_end sub_8086E9C + + thumb_func_start sub_8086F00 +sub_8086F00: + push {r4,lr} + bl sub_8085480 + adds r4, r0, 0 + bl sub_80854D4 + movs r0, 0x4 + bl sub_8085930 + ldr r0, _08086F4C + bl sub_80855E4 + movs r1, 0x4 + ldrsh r0, [r4, r1] + movs r2, 0x6 + ldrsh r1, [r4, r2] + subs r1, 0x3 + bl sub_8085860 + ldr r4, _08086F50 + adds r0, r4, 0 + movs r1, 0xB + bl CopySpeciesNametoBuffer + adds r0, r4, 0 + adds r0, 0x50 + movs r1, 0x5E + bl CopySpeciesNametoBuffer + adds r4, 0xA0 + adds r0, r4, 0 + movs r1, 0xA + bl CopySpeciesNametoBuffer + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_08086F4C: .4byte sub_8086A3C +_08086F50: .4byte gUnknown_202E038 + thumb_func_end sub_8086F00 + + thumb_func_start sub_8086F54 +sub_8086F54: + push {r4-r6,lr} + lsls r0, 24 + lsrs r6, r0, 24 + lsls r1, 24 + movs r0, 0xFC + lsls r0, 24 + adds r1, r0 + lsrs r1, 24 + cmp r1, 0x1 + bhi _08086FA8 + movs r5, 0 +_08086F6A: + ldr r0, _08086FB0 + ldr r0, [r0] + lsls r1, r5, 2 + ldr r2, _08086FB4 + adds r0, r2 + adds r0, r1 + ldr r4, [r0] + adds r0, r4, 0 + bl sub_80450E0 + lsls r0, 24 + cmp r0, 0 + beq _08086F8E + ldr r0, [r4, 0x70] + adds r0, 0xA4 + ldrb r0, [r0] + cmp r0, r6 + bne _08086FA8 +_08086F8E: + adds r5, 0x1 + cmp r5, 0xF + ble _08086F6A + movs r0, 0 + cmp r0, 0 + bne _08086FA8 + movs r0, 0x3 + bl sub_8097FA8 + ldr r0, _08086FB0 + ldr r1, [r0] + movs r0, 0x1 + strb r0, [r1, 0x2] +_08086FA8: + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_08086FB0: .4byte gUnknown_203B418 +_08086FB4: .4byte 0x0001358c + thumb_func_end sub_8086F54 + + thumb_func_start TeamMeaniePreFightDialogue +TeamMeaniePreFightDialogue: + push {r4,lr} + bl sub_8085480 + adds r4, r0, 0 + bl sub_8086448 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08087048 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _0808704C + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + bl sub_8087144 + movs r0, 0xA + bl sub_8083E88 + ldr r0, _08087050 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08087054 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08087058 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _0808705C + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08087060 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r4, 0xC + adds r0, r4, 0 + movs r1, 0x10 + bl sub_80858AC + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_08087048: .4byte gUnknown_8100DB0 +_0808704C: .4byte gUnknown_8100E64 +_08087050: .4byte gUnknown_8100E88 +_08087054: .4byte gUnknown_8100F14 +_08087058: .4byte gUnknown_8101004 +_0808705C: .4byte gUnknown_8101050 +_08087060: .4byte gUnknown_81010D0 + thumb_func_end TeamMeaniePreFightDialogue + + thumb_func_start TeamMeanieReFightDialogue +TeamMeanieReFightDialogue: + push {r4,r5,lr} + bl sub_8085480 + adds r4, r0, 0 + bl sub_808548C + adds r5, r0, 0 + bl sub_8086448 + ldr r0, _08087118 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _0808711C + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + bl sub_8087144 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08087120 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08087124 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r4, 0 + movs r1, 0x6 + movs r2, 0x4 + bl sub_806CDD4 + adds r0, r5, 0 + movs r1, 0x6 + movs r2, 0x4 + bl sub_806CDD4 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r4, 0 + movs r1, 0x7 + movs r2, 0x4 + bl sub_806CDD4 + adds r0, r5, 0 + movs r1, 0x7 + movs r2, 0x4 + bl sub_806CDD4 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, _08087128 + bl sub_8052910 + ldr r0, _0808712C + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r4, 0xC + adds r0, r4, 0 + movs r1, 0x10 + bl sub_80858AC + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_08087118: .4byte gUnknown_8101164 +_0808711C: .4byte gUnknown_8100E64 +_08087120: .4byte gUnknown_8101240 +_08087124: .4byte gUnknown_8101310 +_08087128: .4byte gUnknown_810137C +_0808712C: .4byte gUnknown_8101408 + thumb_func_end TeamMeanieReFightDialogue + + thumb_func_start sub_8087130 +sub_8087130: + push {lr} + bl sub_8086448 + ldr r0, _08087140 + bl sub_80866C4 + pop {r0} + bx r0 + .align 2, 0 +_08087140: .4byte gUnknown_8101440 + thumb_func_end sub_8087130 + + thumb_func_start sub_8087144 +sub_8087144: + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + sub sp, 0xF0 + movs r0, 0x5 + bl sub_8085680 + adds r7, r0, 0 + movs r0, 0x6 + bl sub_8085680 + mov r8, r0 + movs r0, 0x7 + bl sub_8085680 + mov r9, r0 + ldr r1, _080871E0 + mov r0, sp + movs r2, 0x38 + bl memcpy + add r6, sp, 0x38 + ldr r1, _080871E4 + adds r0, r6, 0 + movs r2, 0x38 + bl memcpy + add r4, sp, 0x70 + ldr r1, _080871E8 + adds r0, r4, 0 + movs r2, 0x38 + bl memcpy + add r5, sp, 0xA8 + mov r0, sp + str r0, [r5] + str r6, [r5, 0x4] + str r4, [r5, 0x8] + add r4, sp, 0xB4 + str r7, [r4] + mov r3, r8 + str r3, [r4, 0x4] + mov r0, r9 + str r0, [r4, 0x8] + movs r0, 0xA + bl sub_8083E88 + adds r0, r7, 0 + bl sub_8086A54 + mov r0, r8 + bl sub_8086A54 + mov r0, r9 + bl sub_8086A54 + add r6, sp, 0xC0 + adds r0, r6, 0 + adds r1, r5, 0 + adds r2, r4, 0 + movs r3, 0x3 + bl sub_8085B4C + ldr r0, [r7, 0x70] + ldr r2, _080871EC + adds r0, r2 + movs r1, 0x1 + strb r1, [r0] + mov r3, r8 + ldr r0, [r3, 0x70] + adds r0, r2 + strb r1, [r0] + mov r3, r9 + ldr r0, [r3, 0x70] + adds r0, r2 + strb r1, [r0] + b _080871F6 + .align 2, 0 +_080871E0: .4byte gUnknown_810739C +_080871E4: .4byte gUnknown_81073D4 +_080871E8: .4byte gUnknown_810740C +_080871EC: .4byte 0x0000015f +_080871F0: + movs r0, 0x46 + bl sub_803E46C +_080871F6: + adds r0, r6, 0 + bl sub_8085B80 + lsls r0, 24 + lsrs r2, r0, 24 + cmp r2, 0 + bne _080871F0 + ldr r0, [r7, 0x70] + ldr r1, _0808722C + adds r0, r1 + strb r2, [r0] + mov r3, r8 + ldr r0, [r3, 0x70] + adds r0, r1 + strb r2, [r0] + mov r3, r9 + ldr r0, [r3, 0x70] + adds r0, r1 + strb r2, [r0] + add sp, 0xF0 + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0808722C: .4byte 0x0000015f + thumb_func_end sub_8087144 + + thumb_func_start sub_8087230 +sub_8087230: + push {r4-r6,lr} + bl sub_8085480 + adds r6, r0, 0 + movs r0, 0x8 + bl sub_8085680 + adds r5, r0, 0 + movs r0, 0x72 + bl sub_8083E88 + bl sub_8085374 + bl sub_80854D4 + movs r0, 0x4 + bl sub_8085930 + ldr r4, _08087294 + adds r0, r4, 0 + bl sub_80855E4 + adds r0, r5, 0 + movs r1, 0 + bl sub_8085918 + adds r0, r5, 0 + bl _call_via_r4 + movs r1, 0x4 + ldrsh r0, [r6, r1] + movs r2, 0x6 + ldrsh r1, [r6, r2] + subs r1, 0x3 + bl sub_8085860 + ldr r4, _08087298 + movs r1, 0x96 + lsls r1, 1 + adds r0, r4, 0 + bl CopySpeciesNametoBuffer + adds r4, 0x50 + adds r0, r4, 0 + movs r1, 0x91 + bl CopySpeciesNametoBuffer + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_08087294: .4byte sub_8086A3C +_08087298: .4byte gUnknown_202E038 + thumb_func_end sub_8087230 + + thumb_func_start sub_808729C +sub_808729C: + push {r4-r6,lr} + sub sp, 0x4 + bl sub_8085480 + adds r5, r0, 0 + movs r0, 0x8 + bl sub_8085680 + adds r4, r0, 0 + bl sub_80854D4 + movs r0, 0x4 + bl sub_8085930 + ldr r6, _080872DC + adds r0, r6, 0 + bl sub_80855E4 + movs r0, 0x91 + bl sub_8086AE4 + lsls r0, 24 + lsrs r1, r0, 24 + cmp r1, 0 + beq _080872E0 + movs r1, 0x87 + lsls r1, 2 + adds r0, r4, 0 + movs r2, 0 + bl sub_8068FE0 + b _08087300 + .align 2, 0 +_080872DC: .4byte sub_8086A3C +_080872E0: + ldr r0, _0808732C + movs r3, 0 + ldrsh r2, [r0, r3] + str r1, [sp] + adds r0, r4, 0 + adds r1, r4, 0 + movs r3, 0 + bl sub_8072008 + adds r0, r4, 0 + movs r1, 0 + bl sub_8085918 + adds r0, r4, 0 + bl _call_via_r6 +_08087300: + movs r1, 0x4 + ldrsh r0, [r5, r1] + movs r2, 0x6 + ldrsh r1, [r5, r2] + subs r1, 0x3 + bl sub_8085860 + ldr r4, _08087330 + movs r1, 0x96 + lsls r1, 1 + adds r0, r4, 0 + bl CopySpeciesNametoBuffer + adds r4, 0x50 + adds r0, r4, 0 + movs r1, 0x91 + bl CopySpeciesNametoBuffer + add sp, 0x4 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0808732C: .4byte gUnknown_80F57CC +_08087330: .4byte gUnknown_202E038 + thumb_func_end sub_808729C + + thumb_func_start sub_8087334 +sub_8087334: + push {lr} + lsls r0, 24 + lsrs r0, 24 + lsls r1, 24 + movs r2, 0xF9 + lsls r2, 24 + adds r1, r2 + lsrs r1, 24 + cmp r1, 0x2 + bhi _0808735A + cmp r0, 0x8 + bne _0808735A + movs r0, 0x5 + bl sub_8097FA8 + ldr r0, _08087360 + ldr r1, [r0] + movs r0, 0x1 + strb r0, [r1, 0x2] +_0808735A: + pop {r0} + bx r0 + .align 2, 0 +_08087360: .4byte gUnknown_203B418 + thumb_func_end sub_8087334 + + thumb_func_start ZapdosPreFightDialogue +ZapdosPreFightDialogue: + push {r4-r7,lr} + mov r7, r10 + mov r6, r9 + mov r5, r8 + push {r5-r7} + sub sp, 0x70 + bl sub_8085480 + mov r9, r0 + bl sub_808548C + adds r6, r0, 0 + movs r0, 0x8 + bl sub_8085680 + str r0, [sp, 0x68] + bl sub_8086448 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r6, 0 + bl SpriteLookAroundEffect + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r6, 0 + movs r1, 0x4 + movs r2, 0x1 + movs r3, 0x2 + bl sub_80869E4 + mov r0, r9 + movs r1, 0x4 + movs r2, 0x2 + movs r3, 0x6 + bl sub_80869E4 + ldr r0, _08087470 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r6, 0 + movs r1, 0x4 + movs r2, 0x2 + movs r3, 0x4 + bl sub_80869E4 + mov r0, r9 + movs r1, 0x4 + movs r2, 0x1 + movs r3, 0x4 + bl sub_80869E4 + ldr r0, _08087474 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + movs r0, 0x3 + bl sub_808775C + bl sub_8083F14 + movs r0, 0xED + lsls r0, 1 + bl PlaySoundEffect + ldr r0, _08087478 + bl sub_8052910 + ldr r0, [sp, 0x68] + bl sub_8087704 + movs r0, 0x9 + bl sub_8083E88 + adds r0, r6, 0 + movs r1, 0x6 + movs r2, 0x4 + bl sub_806CDD4 + ldr r0, _0808747C + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + adds r0, r6, 0 + movs r1, 0x2 + movs r2, 0x1 + movs r3, 0x1 + bl sub_80869E4 + mov r1, sp + ldr r0, _08087480 + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + mov r0, sp + str r0, [sp, 0x58] + str r6, [sp, 0x5C] + add r4, sp, 0x18 + add r1, sp, 0x58 + add r2, sp, 0x5C + adds r0, r4, 0 + movs r3, 0x1 + bl sub_8085B4C + ldr r0, [r6, 0x70] + ldr r2, _08087484 + adds r1, r0, r2 + movs r0, 0x1 + strb r0, [r1] + add r7, sp, 0x28 + add r3, sp, 0x48 + mov r8, r3 + add r0, sp, 0x60 + mov r10, r0 + mov r1, sp + adds r1, 0x64 + str r1, [sp, 0x6C] + b _0808748E + .align 2, 0 +_08087470: .4byte gUnknown_81014B0 +_08087474: .4byte gUnknown_8101504 +_08087478: .4byte gUnknown_81015A0 +_0808747C: .4byte gUnknown_81015D4 +_08087480: .4byte gUnknown_810744C +_08087484: .4byte 0x0000015f +_08087488: + movs r0, 0x46 + bl sub_803E46C +_0808748E: + adds r0, r4, 0 + bl sub_8085B80 + lsls r0, 24 + lsrs r5, r0, 24 + cmp r5, 0 + bne _08087488 + ldr r0, [r6, 0x70] + ldr r2, _08087510 + adds r0, r2 + strb r5, [r0] + ldr r0, [r6, 0x70] + ldr r4, _08087514 + adds r0, r4 + movs r1, 0x1 + strb r1, [r0] + adds r0, r6, 0 + movs r1, 0x2 + movs r2, 0x2 + movs r3, 0x4 + bl sub_80869E4 + ldr r0, _08087518 + bl sub_8052910 + movs r0, 0x3C + movs r1, 0x46 + bl sub_803E708 + ldr r0, _0808751C + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + ldr r0, [r6, 0x70] + adds r0, r4 + strb r5, [r0] + adds r0, r6, 0 + movs r1, 0x2 + movs r2, 0x2 + movs r3, 0x5 + bl sub_80869E4 + adds r1, r7, 0 + ldr r0, _08087520 + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldm r0!, {r2-r4} + stm r1!, {r2-r4} + ldm r0!, {r3,r4} + stm r1!, {r3,r4} + str r7, [sp, 0x60] + str r6, [sp, 0x64] + mov r0, r8 + mov r1, r10 + ldr r2, [sp, 0x6C] + movs r3, 0x1 + bl sub_8085B4C + mov r4, r9 + adds r4, 0xC + b _0808752A + .align 2, 0 +_08087510: .4byte 0x0000015f +_08087514: .4byte 0x0000015d +_08087518: .4byte gUnknown_81015E8 +_0808751C: .4byte gUnknown_8101624 +_08087520: .4byte gUnknown_8107464 +_08087524: + movs r0, 0x46 + bl sub_803E46C +_0808752A: + mov r0, r8 + bl sub_8085B80 + lsls r0, 24 + cmp r0, 0 + bne _08087524 + adds r0, r6, 0 + movs r1, 0x2 + movs r2, 0x1 + movs r3, 0x3 + bl sub_80869E4 + ldr r0, _080875B0 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + movs r0, 0x3 + bl sub_808775C + ldr r0, _080875B4 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + movs r0, 0x1 + bl sub_808775C + ldr r0, _080875B8 + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + movs r0, 0x2 + bl sub_808775C + ldr r0, _080875BC + bl sub_8052910 + movs r0, 0xA + movs r1, 0x46 + bl sub_803E708 + movs r1, 0x96 + lsls r1, 1 + ldr r0, [sp, 0x68] + movs r2, 0xB + bl SetupBossFightHP + adds r0, r4, 0 + movs r1, 0x10 + bl sub_80858AC + add sp, 0x70 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080875B0: .4byte gUnknown_810165C +_080875B4: .4byte gUnknown_8101750 +_080875B8: .4byte gUnknown_810178C +_080875BC: .4byte gUnknown_81017B4 + thumb_func_end ZapdosPreFightDialogue + + .align 2,0 diff --git a/asm/wonder_mail_main_menu.s b/asm/wonder_mail_main_menu.s deleted file mode 100644 index f8029fb..0000000 --- a/asm/wonder_mail_main_menu.s +++ /dev/null @@ -1,450 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_8039E18 -sub_8039E18: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - ldr r1, _08039E38 - ldr r0, [r1] - ldrb r0, [r0] - adds r6, r1, 0 - cmp r0, 0x13 - bls _08039E2E - b _0803A1AA -_08039E2E: - lsls r0, 2 - ldr r1, _08039E3C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08039E38: .4byte gUnknown_203B3E8 -_08039E3C: .4byte _08039E40 - .align 2, 0 -_08039E40: - .4byte _08039E90 - .4byte _08039EB8 - .4byte _0803A1AA - .4byte _08039EC8 - .4byte _08039EDC - .4byte _0803A1AA - .4byte _08039FF4 - .4byte _08039FA4 - .4byte _08039FCC - .4byte _0803A00C - .4byte _0803A1AA - .4byte _0803A1AA - .4byte _0803A1AA - .4byte _08039F04 - .4byte _08039F68 - .4byte _0803A1AA - .4byte _08039FAC - .4byte _0803A152 - .4byte _0803A168 - .4byte _0803A18E -_08039E90: - ldr r0, _08039EB0 - ldr r3, _08039EB4 - movs r2, 0 - str r2, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r2, [sp, 0x8] - str r2, [sp, 0xC] - adds r1, 0xFD - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x1 - bl sub_8014248 - b _0803A1AA - .align 2, 0 -_08039EB0: .4byte gUnknown_80E7AC4 -_08039EB4: .4byte gUnknown_80E786C -_08039EB8: - ldr r0, _08039EC0 - ldr r3, _08039EC4 - b _08039EE0 - .align 2, 0 -_08039EC0: .4byte gUnknown_80E7AE0 -_08039EC4: .4byte gUnknown_80E7894 -_08039EC8: - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - bl sub_802EF48 - b _0803A1AA -_08039EDC: - ldr r0, _08039EFC - ldr r3, _08039F00 -_08039EE0: - movs r2, 0 - str r2, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r2, [sp, 0x8] - str r2, [sp, 0xC] - adds r1, 0xFD - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x3 - bl sub_8014248 - b _0803A1AA - .align 2, 0 -_08039EFC: .4byte gUnknown_80E7B14 -_08039F00: .4byte gUnknown_80E78D8 -_08039F04: - ldr r0, [r6] - ldr r2, _08039F3C - adds r1, r0, r2 - movs r3, 0xF0 - lsls r3, 2 - adds r0, r3 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2,r4} - stm r1!, {r2,r4} - ldr r2, [r6] - ldr r3, _08039F40 - adds r0, r2, r3 - ldrb r0, [r0] - cmp r0, 0x4 - bne _08039F44 - movs r4, 0x91 - lsls r4, 3 - adds r1, r2, r4 - subs r3, 0xA2 - adds r0, r2, r3 - str r0, [r1] - adds r4, 0x4 - adds r1, r2, r4 - adds r3, 0x28 - adds r0, r2, r3 - str r0, [r1] - b _08039F54 - .align 2, 0 -_08039F3C: .4byte 0x00000474 -_08039F40: .4byte 0x00000476 -_08039F44: - movs r4, 0x91 - lsls r4, 3 - adds r0, r2, r4 - movs r1, 0 - str r1, [r0] - ldr r3, _08039F60 - adds r0, r2, r3 - str r1, [r0] -_08039F54: - ldr r0, [r6] - ldr r4, _08039F64 - adds r0, r4 - bl sub_802D098 - b _0803A1AA - .align 2, 0 -_08039F60: .4byte 0x0000048c -_08039F64: .4byte 0x00000474 -_08039F68: - ldr r1, [r6] - movs r2, 0x93 - lsls r2, 3 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _08039F9C - movs r3, 0x92 - lsls r3, 3 - adds r0, r1, r3 - ldr r0, [r0] - cmp r0, 0x4 - bne _08039F84 - b _0803A1AA -_08039F84: - cmp r0, 0x4 - bgt _08039F8E - cmp r0, 0x3 - beq _08039F94 - b _0803A1AA -_08039F8E: - cmp r0, 0x5 - beq _08039F94 - b _0803A1AA -_08039F94: - ldr r0, _08039F98 - b _0803A154 - .align 2, 0 -_08039F98: .4byte gUnknown_80E7B48 -_08039F9C: - ldr r0, _08039FA0 - b _0803A154 - .align 2, 0 -_08039FA0: .4byte gUnknown_80E7B48 -_08039FA4: - ldr r0, _08039FA8 - b _0803A154 - .align 2, 0 -_08039FA8: .4byte gUnknown_80E7B68 -_08039FAC: - ldr r0, [r6] - movs r4, 0x93 - lsls r4, 3 - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - beq _08039FC4 - ldr r0, _08039FC0 - b _0803A154 - .align 2, 0 -_08039FC0: .4byte gUnknown_80E7B88 -_08039FC4: - ldr r0, _08039FC8 - b _0803A154 - .align 2, 0 -_08039FC8: .4byte gUnknown_80E7BC8 -_08039FCC: - ldr r0, _08039FEC - ldr r3, _08039FF0 - movs r2, 0 - str r2, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r2, [sp, 0x8] - str r2, [sp, 0xC] - adds r1, 0xFD - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x6 - bl sub_8014248 - b _0803A1AA - .align 2, 0 -_08039FEC: .4byte gUnknown_80E7BEC -_08039FF0: .4byte gUnknown_80E78F8 -_08039FF4: - movs r0, 0 - bl nullsub_23 - ldr r0, _0803A008 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl sub_80141B4 - b _0803A1AA - .align 2, 0 -_0803A008: .4byte gUnknown_80E7C48 -_0803A00C: - ldr r0, [r6] - movs r1, 0x94 - lsls r1, 2 - mov r8, r1 - add r0, r8 - movs r1, 0 - str r1, [r0] - bl sub_8011830 - ldr r0, [r6] - movs r7, 0x93 - lsls r7, 2 - adds r0, r7 - ldr r0, [r0] - bl sub_8037B28 - ldr r2, [r6] - mov r3, r8 - adds r1, r2, r3 - str r0, [r1] - cmp r0, 0 - beq _0803A03A - b _0803A14C -_0803A03A: - adds r4, r7, 0 - adds r0, r2, r4 - ldr r0, [r0] - cmp r0, 0x9 - beq _0803A04A - cmp r0, 0xA - beq _0803A0AA - b _0803A0DE -_0803A04A: - movs r5, 0x95 - lsls r5, 2 - adds r0, r2, r5 - movs r1, 0 - movs r2, 0xB4 - bl MemoryFill8 - ldr r0, [r6] - movs r1, 0xEF - lsls r1, 2 - adds r0, r1 - ldrb r0, [r0] - bl sub_803B344 - adds r4, r0, 0 - ldr r1, [r4, 0x14] - cmp r1, 0 - beq _0803A08C - ldr r0, [r6] - movs r2, 0x9A - lsls r2, 2 - adds r0, r2 - movs r2, 0x28 - bl MemoryCopy8 - ldr r0, [r6] - movs r3, 0xA4 - lsls r3, 2 - adds r0, r3 - ldr r1, [r4, 0x18] - movs r2, 0x78 - bl MemoryCopy8 -_0803A08C: - ldr r1, [r6] - adds r1, r5 - adds r0, r4, 0 - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2,r4} - stm r1!, {r2,r4} - ldr r2, [r6] - adds r0, r2, r7 - ldr r0, [r0] - adds r1, r2, r5 - movs r3, 0xC2 - lsls r3, 2 - adds r2, r3 - b _0803A0D4 -_0803A0AA: - movs r4, 0x95 - lsls r4, 2 - adds r0, r2, r4 - movs r1, 0 - movs r2, 0xB4 - bl MemoryFill8 - ldr r0, [r6] - movs r5, 0xC2 - lsls r5, 2 - adds r0, r5 - movs r1, 0 - movs r2, 0xB4 - bl MemoryFill8 - ldr r2, [r6] - adds r0, r2, r7 - ldr r0, [r0] - adds r4, r2, r4 - adds r2, r5 - adds r1, r4, 0 -_0803A0D4: - bl sub_8037D64 - ldr r1, [r6] - add r1, r8 - str r0, [r1] -_0803A0DE: - ldr r4, _0803A134 - ldr r2, [r4] - movs r5, 0x94 - lsls r5, 2 - adds r0, r2, r5 - ldr r0, [r0] - cmp r0, 0 - bne _0803A14C - movs r1, 0x93 - lsls r1, 2 - adds r0, r2, r1 - ldr r0, [r0] - cmp r0, 0xA - bhi _0803A14C - cmp r0, 0x9 - bcc _0803A14C - movs r3, 0x95 - lsls r3, 2 - adds r1, r2, r3 - adds r3, 0xB4 - adds r2, r3 - bl sub_80381F4 - ldr r1, [r4] - adds r1, r5 - str r0, [r1] - bl sub_800D588 - lsls r0, 24 - cmp r0, 0 - beq _0803A138 - ldr r1, [r4] - movs r4, 0xF0 - lsls r4, 2 - adds r0, r1, r4 - movs r2, 0xC2 - lsls r2, 2 - adds r1, r2 - movs r2, 0xB4 - bl memcpy - b _0803A14C - .align 2, 0 -_0803A134: .4byte gUnknown_203B3E8 -_0803A138: - ldr r1, [r4] - movs r3, 0xF0 - lsls r3, 2 - adds r0, r1, r3 - movs r4, 0x95 - lsls r4, 2 - adds r1, r4 - movs r2, 0xB4 - bl memcpy -_0803A14C: - bl xxx_call_start_bg_music - b _0803A1AA -_0803A152: - ldr r0, _0803A160 -_0803A154: - ldr r3, _0803A164 - movs r1, 0 - movs r2, 0 - bl sub_80141B4 - b _0803A1AA - .align 2, 0 -_0803A160: .4byte gUnknown_80E7C98 -_0803A164: .4byte 0x00000101 -_0803A168: - ldr r0, [r6] - movs r1, 0xF6 - lsls r1, 1 - adds r0, r1 - bl sub_8006518 - bl ResetUnusedInputStruct - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_800641C - ldr r1, [r6] - adds r1, 0x1 - movs r0, 0x5 - bl sub_80151C0 - b _0803A1AA -_0803A18E: - ldr r0, _0803A1B8 - ldr r3, _0803A1BC - movs r2, 0 - str r2, [sp] - movs r1, 0x4 - str r1, [sp, 0x4] - str r2, [sp, 0x8] - str r2, [sp, 0xC] - adds r1, 0xFD - str r1, [sp, 0x10] - movs r1, 0 - movs r2, 0x6 - bl sub_8014248 -_0803A1AA: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0803A1B8: .4byte gUnknown_80E7CC4 -_0803A1BC: .4byte gUnknown_80E78F8 - thumb_func_end sub_8039E18 - - .align 2,0 diff --git a/data/data_80DED44.s b/data/data_80DED44.s index 0f0884a..5f992f8 100644 --- a/data/data_80DED44.s +++ b/data/data_80DED44.s @@ -1,174 +1,5 @@ .section .rodata - .global gUnknown_80DED48 -gUnknown_80DED48: @ 80DED48 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x15, 0x00, 0x04, 0x00 - .byte 0x06, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DED60 -gUnknown_80DED60: @ 80DED60 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x16, 0x00, 0x07, 0x00 - .byte 0x06, 0x00, 0x05, 0x00 - .byte 0x05, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DED78 -gUnknown_80DED78: @ 80DED78 - .4byte Confirm_80DED98 - .byte 0x0b, 0x00, 0x00, 0x00 - .4byte Info_80DED90 - .byte 0x0c, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global Info_80DED90 - Info_80DED90: - .string "Info\0" - .align 2,0 - - .global Confirm_80DED98 - Confirm_80DED98: - .string "Confirm\0" - - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global gUnknown_80DEDB8 -gUnknown_80DEDB8: @ 80DEDB8 - .4byte SendThankYou_Text - .byte 0x01, 0x00, 0x00, 0x00 - .4byte GetThankYou_Text - .byte 0x02, 0x00, 0x00, 0x00 - .4byte Cancel_80DEDD8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global Cancel_80DEDD8 - Cancel_80DEDD8: - .string "Cancel\0" - .align 2,0 - - .global GetThankYou_Text - GetThankYou_Text: - .string "Get Thank-You Mail\0" - .align 2,0 - - .global SendThankYou_Text - SendThankYou_Text: - .string "Send Thank-You Mail\0" - .align 2,0 - - .global gUnknown_80DEE08 -gUnknown_80DEE08: @ 80DEE08 - @ Thank You Mail Pelipper Menu - .4byte GameLinkCable_Text - .byte 0x03, 0x00, 0x00, 0x00 - .4byte Password_Text - .byte 0x05, 0x00, 0x00, 0x00 - .4byte Cancel_80DEDD8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global Password_Text - Password_Text: - .string "Password\0" - .align 2,0 - - .global GameLinkCable_Text - GameLinkCable_Text: - .string "Game Link cable\0" - .align 2,0 - - .global gUnknown_80DEE44 -gUnknown_80DEE44: @ 80DEE44 - @ Game Link Cable Thank-You Mail Menu - .4byte Yes_80DEE5C - .byte 0x07, 0x00, 0x00, 0x00 - .4byte Cancel_80DEDD8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global Yes_80DEE5C - Yes_80DEE5C: - .string "Yes\0" - .align 2,0 - - .global gUnknown_80DEE60 -gUnknown_80DEE60: @ 80DEE60 - .4byte Yes_80DEE5C - .byte 0x07, 0x00, 0x00, 0x00 - .4byte No_80DEE78 - .byte 0x08, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global No_80DEE78 - No_80DEE78: - .string "No\0" - .align 2,0 - - .global gUnknown_80DEE7C -gUnknown_80DEE7C: @ 80DEE7C - .4byte SendItem_Text - .byte 0x09, 0x00, 0x00, 0x00 - .4byte DontSendItemText - .byte 0x0a, 0x00, 0x00, 0x00 - .4byte Cancel_80DEDD8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global DontSendItem_Text - DontSendItemText: - .string "Don~27t Send Item\0" - .align 2,0 - - .global SendItem_Text - SendItem_Text: - .string "Send Item\0" - .align 2,0 - - .global gUnknown_80DEEBC -gUnknown_80DEEBC: @ 80DEEBC - .4byte SendWOItem_Text - .byte 0x0a, 0x00, 0x00, 0x00 - .4byte Cancel_80DEDD8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - .global SendWOItem_Text - SendWOItem_Text: - .string "Send w/o Item\0" - .align 2,0 - - .global gUnknown_80DEEE4 -gUnknown_80DEEE4: @ 80DEEE4 - .4byte Yes_80DEE5C - .byte 0x07, 0x00, 0x00, 0x00 - .4byte No_80DEE78 - .byte 0x08, 0x00, 0x00, 0x00 - .4byte Cancel_80DEDD8 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00 - - - .include "data/text/wonder_mail_2.inc" - .global gUnknown_80DFBD0 gUnknown_80DFBD0: @ 80DFBD0 .byte 0x00, 0x00, 0x00, 0x00 @@ -192,7 +23,7 @@ gUnknown_80DFBEC: @ 80DFBEC .byte 0x02, 0x00, 0x02, 0x00 .byte 0x18, 0x00, 0x0e, 0x00 .byte 0x0e, 0x00, 0x00, 0x00 - .byte 0xe8, 0xfb, 0x0d, 0x08 + .4byte gUnknown_80DFBE8 .global gUnknown_80DFC04 diff --git a/data/data_810AE24.s b/data/data_810AE24.s index b31809b..a8743e5 100644 --- a/data/data_810AE24.s +++ b/data/data_810AE24.s @@ -1537,7 +1537,7 @@ gUnknown_81161E8: @ 81161E8 .byte 0x01, 0x00, 0x00, 0x00 .byte 0x00, 0x00, 0x00, 0x00 .4byte CleanFelicityBank - .4byte sub_80163A0 + .4byte FelicityBankCallback .global gUnknown_81161F8 gUnknown_81161F8: @ 81161F8 @@ -1577,9 +1577,9 @@ gUnknown_8116238: @ 8116238 .global gUnknown_8116248 gUnknown_8116248: @ 8116248 .byte 0x01, 0x00, 0x00, 0x00 - .4byte sub_8029B50 - .4byte sub_8029E60 - .4byte sub_8029C98 + .4byte CreateThankYouMailPelipper + .4byte CleanThankYouMailPelipper + .4byte ThankYouMailPelipperCallback .global gUnknown_8116258 gUnknown_8116258: @ 8116258 diff --git a/data/text/wonder_mail_2.inc b/data/text/wonder_mail_2.inc deleted file mode 100644 index b1ee6ce..0000000 --- a/data/text/wonder_mail_2.inc +++ /dev/null @@ -1,248 +0,0 @@ -gUnknown_80DEF04:: @ 80DEF04 - .string " ...Oh?\n" - .string "Something~27s gone wrong.\0" - .align 2, 0 - -gUnknown_80DEF28:: @ 80DEF28 - .string " ...Oh? The number of linked\n" - .string "GBA systems is incorrect.\n" - .string "Please try again from the start.\0" - .align 2, 0 - -gUnknown_80DEF80:: @ 80DEF80 - .string " ...Oh? It looks like your\n" - .string "friend chose a different mode.\n" - .string "Please try again from the start.\0" - .align 2, 0 - -gUnknown_80DEFDC:: @ 80DEFDC - .string " ...Oh? It looks like your\n" - .string "storage space is full. Please clear some\n" - .string "space and try again from the start.\0" - .align 2, 0 - -gUnknown_80DF044:: @ 80DF044 - .string " ...Oh?\n" - .string "I think you~27ve received this mail before.\n" - .string "You can~27t get the same mail twice.\0" - .align 2, 0 - -gUnknown_80DF0A0:: @ 80DF0A0 - .string " ...Oh?\n" - .string "I don~27t think you~27re eligible to receive\n" - .string "this mail.\0" - .align 2, 0 - -gUnknown_80DF0E0:: @ 80DF0E0 - .string " ...Oh?\n" - .string "There is no room to receive new mail.\n" - .string "Please delete some mail and try again.\0" - .align 2, 0 - -gUnknown_80DF138:: @ 80DF138 - .string " ...Oh? Your friend didn~27t\n" - .string "follow through on their side.\n" - .string "Please try again from the start.\0" - .align 2, 0 - -gUnknown_80DF194:: @ 80DF194 - .string " Your #CGThank-You Mail#R\n" - .string "has been sent.\0" - .align 2, 0 - -gUnknown_80DF1C0:: @ 80DF1C0 - .string " ...Oh?\n" - .string "This password appears to be wrong.\n" - .string "Would you like to try again?\0" - .align 2, 0 - -gUnknown_80DF208:: @ 80DF208 - .string " ...Oh? This password doesn~27t\n" - .string "appear to be for a #CGThank-You Mail#R.\0" - .align 2, 0 - -gUnknown_80DF250:: @ 80DF250 - .string ": This is the counter for\n" - .string "#CGThank-You Mail#R.#P" - .string ": Oh~2c hi~2c #CN%s#R.\n" - .string "I~27ve been waiting for you. You wanted me\n" - .string "to process a #CGThank-You Mail#R?#P" - .string ": Let me get on it right away.\0" - .align 2, 0 - -gUnknown_80DF304:: @ 80DF304 - .string " Is it OK to send this\n" - .string "#CGThank-You Mail#R?\0" - .align 2, 0 - -gUnknown_80DF330:: @ 80DF330 - .string " Please choose the\n" - .string "#CGThank-You Mail#R that you want to\n" - .string "send to your friend.\0" - .align 2, 0 - -gUnknown_80DF380:: @ 80DF380 - .string " OK. Please enter the\n" - .string "#CGThank-You Mail password#R.\0" - .align 2, 0 - -gUnknown_80DF3B4:: @ 80DF3B4 - .string " Please give this password\n" - .string "to the friend that rescued your team.#P" - .string " I also must save your\n" - .string "adventure.\0" - .align 2, 0 - -gUnknown_80DF418:: @ 80DF418 - .string " OK~2c here is your\n" - .string "#CGThank-You Mail password#R.\0" - .align 2, 0 - -gUnknown_80DF44C:: @ 80DF44C - .string " I need to save your\n" - .string "adventure.\0" - .align 2, 0 - -gUnknown_80DF46C:: @ 80DF46C - .string " There we go.\n" - .string "I~27m all done.#P" - .string " Doesn~27t it feel great to\n" - .string "be appreciated for doing something good?\n" - .string "Please keep up your rescue work!\0" - .align 2, 0 - -gUnknown_80DF4F4:: @ 80DF4F4 - .string " A #CGThank-You Mail#R has\n" - .string "arrived from your friend for your rescue\n" - .string "mission.\0" - .align 2, 0 - -gUnknown_80DF544:: @ 80DF544 - .string "#+Communicating...\n" - .string "#+Please wait with the power on.\n" - .string "#+To cancel~2c press {B_BUTTON}.\0" - .align 2, 0 - -gUnknown_80DF594:: @ 80DF594 - .string " There. I~27ve sent your\n" - .string "#CGThank-You Mail#R.\n" - .string "I need to save your adventure.\0" - .align 2, 0 - -gUnknown_80DF5E4:: @ 80DF5E4 - .string " Please connect the GBA\n" - .string "systems with a #CGGame Link cable#R.\n" - .string "Is your friend also ready?\0" - .align 2, 0 - -gUnknown_80DF63C:: @ 80DF63C - .string " There~2c all done.\n" - .string "#CN%s#R~2c I hope your friend\n" - .string "appreciates your sense of gratitude.\0" - .align 2, 0 - -gUnknown_80DF694:: @ 80DF694 - .string " The item you~27ve chosen\n" - .string "here can~27t be exchanged later.\n" - .string "Are you certain this item is OK?\0" - .align 2, 0 - -gUnknown_80DF6F0:: @ 80DF6F0 - .string " I~27ve saved your adventure. \0" - .align 2, 0 - -gUnknown_80DF710:: @ 80DF710 - .string " OK~2c please choose\n" - .string "the item to be sent.\0" - .align 2, 0 - -gUnknown_80DF73C:: @ 80DF73C - .string " ...Oh?\n" - .string "Your storage space is empty.\n" - .string "What would you like to do?\0" - .align 2, 0 - -gUnknown_80DF77C:: @ 80DF77C - .string " Would you like to choose\n" - .string "a #CGreward item#R from storage and\n" - .string "send it with your mail?\0" - .align 2, 0 - -gUnknown_80DF7D4:: @ 80DF7D4 - .string " ...Oh?\n" - .string "You~27ve already attached a #CGreward item#R\n" - .string "to this mail.#P" - .string " I~27m sorry~2c but once an item\n" - .string "has been attached to mail~2c it can~27t be\n" - .string "exchanged.\0" - .align 2, 0 - -gUnknown_80DF870:: @ 80DF870 - .string " Would you like to send it\n" - .string "again with the item you chose before?\0" - .align 2, 0 - -gUnknown_80DF8B4:: @ 80DF8B4 - .string " ...Oh?\n" - .string "You don~27t seem to have a #CGThank-You Mail#R.\0" - .align 2, 0 - -gUnknown_80DF8EC:: @ 80DF8EC - .string " Hello.\n" - .string "I handle #CGThank-You Mail#R.\n" - .string "How may I serve you?\0" - .align 2, 0 - -gUnknown_80DF928:: @ 80DF928 - .string " May I help you with\n" - .string "anything else?\0" - .align 2, 0 - -gUnknown_80DF94C:: @ 80DF94C - .string " Please come see me\n" - .string "anytime.\0" - .align 2, 0 - -gUnknown_80DF96C:: @ 80DF96C - .string " How would you like to send\n" - .string "your #CGThank-You Mail#R?\0" - .align 2, 0 - -gUnknown_80DF9A4:: @ 80DF9A4 - .string " How would you like to\n" - .string "receive your friend~27s #CGThank-You Mail#R?\0" - - .string "pksdir0\0" - .align 2, 0 - -gUnknown_80DF9F0:: @ 80DF9F0 - .string "????\0" - .align 2, 0 - -gUnknown_80DF9F8:: @ 80DF9F8 - .string " Oh~2c hello!\n" - .string "Your rescue mission went well~2c didn~27t it?\n" - .string "I wouldn~27t expect any less~2c #CG%s#R!#P" - .string " Well~2c well!\n" - .string "Here is your reward from the Pokémon\n" - .string "Rescue Organization!\0" - .align 2, 0 - -gUnknown_80DFAA8:: @ 80DFAA8 - .string " I hope you will keep on\n" - .string "rescuing your friends in\n" - .string "dire straits.#P" - .string " And now~2c I must save\n" - .string "your adventure.\0" - .align 2, 0 - -gUnknown_80DFB14:: @ 80DFB14 - .string " Oh~2c yes~2c that~27s right.\n" - .string "Please don~27t forget to send an #CGA-OK Mail#R\n" - .string "to the friend you just rescued.#P" - .string " Please give me a shout if\n" - .string "you would like to send #CGA-OK Mail#R.\0" - .align 2, 0 - - .string "pksdir0\0" - .align 2, 0 diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index 82e2791..9f3033c 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -3,24 +3,35 @@ struct subStruct_8048524 { - u8 fill0[0x6]; - u8 unk6; - u8 unk7; - u8 fill8[0xE - 0x8]; - /* 0xE */ s16 HP; // HP?? - s16 unk10; - u8 fill12[0x46 - 0x12]; - s8 unk46; - u8 fill47[0xA4 - 0x47]; - u8 unkA4; + /* 0x0 */ u8 unk0; + /* 0x1 */ u8 unk1; + /* 0x2 */ s16 species; + /* 0x4 */ s16 transformSpecies; + /* 0x6 */ bool8 isEnemy; + /* 0x7 */ bool8 isLeader; + /* 0x8 */ u8 shopKeeper; + /* 0x9 */ u8 level; + /* 0xA */ u16 partyIndex; + /* 0xC */ u16 IQ; + /* 0xE */ s16 HP; + /* 0x10 */ s16 maxHP; + /* 0x12 */ s16 bossHPBackup; + u8 fill14[0x46 - 0x14]; + /* 0x46 */ s8 facingDir; + u8 fill47[0x8C - 0x47]; + u8 unk8C[4]; + u8 fill90[0xA4 - 0x90]; + /* 0xA4 */ u8 clientFlags; u8 fillA5[0xAC - 0xA5]; /* 0xAC */ u8 statusCondition; - u8 fillAD[0xFB - 0xAD]; + u8 fillAD[0xF7 - 0xAD]; + /* 0xF7 */ bool8 isBoss; + u8 fillF8[0xFB - 0xF8]; u8 unkFB; u8 fillFC[0x112 - 0xFC]; - u8 unk112; + /* 0x112 */ u8 stockpileCount; u8 fill113[0x13C - 0x113]; - u32 unk13C; + /* 0x13C */ u32 belly; u8 fill140[0x15C - 0x140]; u8 unk15C; u8 unk15D; diff --git a/include/gUnknown_203B418.h b/include/gUnknown_203B418.h index 902b591..e022b4b 100644 --- a/include/gUnknown_203B418.h +++ b/include/gUnknown_203B418.h @@ -16,7 +16,11 @@ struct unkStruct_203B418 u8 unk11; u8 fill12[0x16D - 0x12]; u8 unk16D; - u8 fill16E[0xE23C - 0x16E]; + u8 fill16E[0x65C - 0x16E]; + u8 unk65C; + u8 fill65D[0x66A - 0x65D]; + u16 unk66A; + u8 fill66B[0xE23C - 0x66C]; s16 unkE23C; s16 unkE23E; u8 fillE240[0xE265 - 0xE240]; diff --git a/include/wonder_mail.h b/include/wonder_mail.h index 9593e3b..ae4c701 100644 --- a/include/wonder_mail.h +++ b/include/wonder_mail.h @@ -90,8 +90,8 @@ struct WonderMailStruct_203B2C4 u8 unk42E; u32 unk430; u8 formattedString[0x100]; - s32 unk534; - u32 unk538; + s32 wonderMailMethod; + u32 wonderMailMode; u8 unk53C[0xA]; u32 unk548; u32 unk54C; @@ -110,5 +110,16 @@ struct WonderMailStruct_203B2C4 void sub_8028B04(u32 r0); +enum WonderMailMode { + WONDER_MAIL_MODE_SEND = 1, + WONDER_MAIL_MODE_RECEIVE = 2, +}; + +enum WonderMailMethod { + WONDER_MAIL_GAME_LINK = 3, + WONDER_MAIL_PASSWORD = 5, +}; + + #endif diff --git a/ld_script.txt b/ld_script.txt index 6bd55fa..7fb46f6 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -122,6 +122,7 @@ SECTIONS { src/wonder_mail_pre.o(.text); asm/wonder_mail.o(.text); src/wonder_mail.o(.text); + src/thank_you_wonder_mail.o(.text); src/wonder_mail_2.o(.text); asm/wonder_mail_2.o(.text); src/wonder_mail_3.o(.text); @@ -155,7 +156,6 @@ SECTIONS { src/rescue_password_menu_1.o(.text); src/load_screen.o(.text); src/wonder_mail_main_menu.o(.text); - asm/wonder_mail_main_menu.o(.text); src/ds_menus.o(.text); src/debug_menu.o(.text); asm/debug_menu.o(.text); @@ -186,6 +186,8 @@ SECTIONS { asm/code_807001C.o(.text); src/code_80869E4.o(.text); asm/code_80869E4.o(.text); + src/code_8086A3C.o(.text); + asm/code_8086A3C.o(.text); src/code_8057824_1.o(.text); asm/jirachi_wish.o(.text); src/code_80521D0_1.o(.text); @@ -307,6 +309,8 @@ SECTIONS { src/save.o(.rodata); data/data_80D47B8.o(.rodata); src/wonder_mail.o(.rodata); + src/thank_you_wonder_mail.o(.rodata); + src/wonder_mail_2.o(.rodata); data/data_80DED44.o(.rodata); src/post_office_guide.o(.rodata); data/data_80E1F30.o(.rodata); diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index 28ac016..9874f48 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -289,7 +289,7 @@ void sub_8041D5C(struct DungeonEntity *r0) { return; } - sub_803ED30(r0->unk70->unk112 , r0, 1, 0xB); + sub_803ED30(r0->unk70->stockpileCount , r0, 1, 0xB); } void sub_8041D84(struct DungeonEntity * r0) @@ -675,7 +675,7 @@ void sub_8042208(struct DungeonEntity *r0, u8 r1) void sub_8042238(u32 r0, struct DungeonEntity *r1) { - if(r1->unk70->unk6 != 0) + if(r1->unk70->isEnemy) PlaySoundEffect(0x157); else PlaySoundEffect(0x156); diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c index f275279..d71de9a 100644 --- a/src/code_80521D0_1.c +++ b/src/code_80521D0_1.c @@ -106,7 +106,7 @@ extern void sub_8083ED8(u32); extern u32 sub_803F994(); extern s32 sub_803F9B0(); extern void sub_803F878(u32, s32); -extern void sub_8086A70(struct DungeonEntity *, u32, u32); +extern void SetupBossFightHP(struct DungeonEntity *, u32, u32); extern void sub_8085C54(u32, u32, u32, u32, u32); extern void sub_803E9D0(void); extern void DeoxysScreenFlash(void); @@ -341,7 +341,7 @@ void LugiaPreFightDialogue(void) sub_80861D4(uVar3,7,0); sub_8052910(&gUnknown_8106024); sub_808BFA0(); - sub_8086A70(uVar3,800,0x20); + SetupBossFightHP(uVar3,800,0x20); sub_8083E88(0x23); sub_80858AC(&iVar2->posPixelX,0x10); } @@ -491,7 +491,7 @@ void KyogrePreFightDialogue(void) // power! sub_8052910(&gUnknown_810627C); sub_803E708(10,0x46); - sub_8086A70(uVar3,600,0xb); + SetupBossFightHP(uVar3,600,0xb); sub_8083E88(0x23); sub_80858AC(&iVar2->posPixelX,0x10); } @@ -633,7 +633,7 @@ void sub_808C5A0(struct DungeonEntity *r0) void sub_808C5AC(struct DungeonEntity *r0) { - sub_8086A70(r0, 0x3b6, 0x20); + SetupBossFightHP(r0, 0x3b6, 0x20); } void sub_808C5C0(void) @@ -1122,7 +1122,7 @@ void sub_808C998(void) void sub_808C9B0(struct DungeonEntity *param_1) { - param_1->unk70->unk46 = 4; + param_1->unk70->facingDir = NORTH; sub_806CE68(param_1, 4); } diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 5f38346..29ab09e 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -234,7 +234,7 @@ extern void sub_80862BC(struct DungeonEntity *); extern void sub_8086448(); extern void SpriteLookAroundEffect(); extern u32 sub_80861F8(u32, struct DungeonEntity *, u32); -extern void sub_8086A70(struct DungeonEntity *, u32, u32); +extern void SetupBossFightHP(struct DungeonEntity *, u32, u32); extern void sub_80858AC(u32 *, u32); extern void sub_8097FA8(u32); @@ -386,7 +386,7 @@ void ZapdosReFightDialogue(void) sub_8052910(&gUnknown_81018EC); sub_808775C(2); sub_8052910(&gUnknown_8101918); - sub_8086A70(uVar2,300,0xb); + SetupBossFightHP(uVar2,300,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -414,7 +414,7 @@ void ZapdosPostStoryPreFightDialogue(void) sub_808775C(2); sub_8052910(&gUnknown_8101A04); sub_803E708(10,0x46); - sub_8086A70(uVar3,300,0xb); + SetupBossFightHP(uVar3,300,0xb); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -592,7 +592,7 @@ void MoltresPreFightDialogue(void) sub_8087DE8(0xb,6); sub_8052910(&gUnknown_8102108); sub_803E708(10,0x46); - sub_8086A70(uVar3,400,0xb); + SetupBossFightHP(uVar3,400,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -635,7 +635,7 @@ void MoltresReFightDialogue(void) sub_803E708(10,0x46); sub_8052910(&gUnknown_81022F8); sub_803E708(10,0x46); - sub_8086A70(uVar3,400,0xb); + SetupBossFightHP(uVar3,400,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -673,7 +673,7 @@ void MoltresPostStoryPreFightDialogue(void) sub_8087DE8(0xb,6); sub_8052910(&gUnknown_8102454); sub_803E708(10,0x46); - sub_8086A70(uVar3,400,0xb); + SetupBossFightHP(uVar3,400,0xb); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -1021,7 +1021,7 @@ void ArticunoPreFightDialogue(void) sub_8052910(&gUnknown_81028B8); sub_806CDD4(uVar3,0xf,0); sub_803E708(0x10,0x46); - sub_8086A70(uVar3,0x1c2,0xb); + SetupBossFightHP(uVar3,0x1c2,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -1043,7 +1043,7 @@ void ArticunoReFightDialogue(void) sub_8052910(&gUnknown_8102948); sub_806CDD4(uVar2,0xf,0); sub_803E708(0x28,0x46); - sub_8086A70(uVar2,0x1c2,0xb); + SetupBossFightHP(uVar2,0x1c2,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -1079,7 +1079,7 @@ void ArticunoPostStoryPreFightDialogue(void) sub_8052910(&gUnknown_8102A74); sub_806CDD4(uVar3,0xf,0); sub_803E708(0x28,0x46); - sub_8086A70(uVar3,0x1c2,0xb); + SetupBossFightHP(uVar3,0x1c2,0xb); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -1342,7 +1342,7 @@ void GroudonPreFightDialogue(void) sub_8086A54(uVar4); sub_8085930(4); sub_8086764(); - sub_8086A70(uVar4,500,0xb); + SetupBossFightHP(uVar4,500,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -1374,7 +1374,7 @@ void GroudonReFightDialogue(void) sub_8086A54(uVar2); sub_8085930(4); sub_8086764(); - sub_8086A70(uVar2,500,0xb); + SetupBossFightHP(uVar2,500,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -1402,7 +1402,7 @@ void GroudonPostStoryPreFightDialogue(void) sub_8088CA0(); sub_8052910(&gUnknown_810347C); sub_803E708(10,0x46); - sub_8086A70(uVar3,500,0xb); + SetupBossFightHP(uVar3,500,0xb); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -1843,7 +1843,7 @@ void RayquazaPreFightDialogue(void) sub_8052910(&gUnknown_81037D4); RayquazaScreenFlash(); sub_8052910(&gUnknown_8103820); - sub_8086A70(uVar3,600,0x20); + SetupBossFightHP(uVar3,600,0x20); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -1867,7 +1867,7 @@ void RayquazaReFightDialogue(void) sub_8052910(&gUnknown_81038A8); RayquazaScreenFlash(); sub_8052910(&gUnknown_81038F8); - sub_8086A70(uVar2,600,0x20); + SetupBossFightHP(uVar2,600,0x20); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -1893,7 +1893,7 @@ void RayquazaPostStoryPreFightDialogue(void) sub_8052910(&gUnknown_8103AE4); RayquazaScreenFlash(); sub_8052910(&gUnknown_8103B30); - sub_8086A70(uVar3,600,0xb); + SetupBossFightHP(uVar3,600,0xb); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -1984,7 +1984,7 @@ void sub_8089788(struct DungeonEntity *param_1, u8 param_2, s32 param_3) for(iVar3 = 0; iVar3 < 0x10; iVar3++) { iVar2 = gUnknown_203B418->unk1358C[iVar3]; - if ((sub_80450E0(iVar2) != '\0') && (iVar2 != param_1) && (iVar2->unk70->unkA4 == param_2)) { + if ((sub_80450E0(iVar2) != '\0') && (iVar2 != param_1) && (iVar2->unk70->clientFlags == param_2)) { return; } } @@ -2140,7 +2140,7 @@ void MewtwoPreFightDialogue(void) MewtwoScreenFlash(); sub_8052910(&gUnknown_8104008); sub_803E708(10,0x46); - sub_8086A70(uVar2,900,0x20); + SetupBossFightHP(uVar2,900,0x20); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -2166,7 +2166,7 @@ void MewtwoPreFightDialogue1(void) sub_8052910(&gUnknown_81040CC); MewtwoScreenFlash(); sub_8052910(&gUnknown_8104114); - sub_8086A70(uVar3,900,0x20); + SetupBossFightHP(uVar3,900,0x20); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -2279,7 +2279,7 @@ void EnteiPreFightDialogue(void) EnteiScreenFlash(); sub_8052910(&gUnknown_81041F8); sub_803E708(10,70); - sub_8086A70(uVar2,600,0xb); + SetupBossFightHP(uVar2,600,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -2297,7 +2297,7 @@ void EnteiPreFightDialogue1(void) EnteiScreenFlash(); sub_8052910(&gUnknown_81042B8); sub_803E708(10,70); - sub_8086A70(uVar2,600,0xb); + SetupBossFightHP(uVar2,600,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -2319,7 +2319,7 @@ void EnteiPreFightDialogue2(void) EnteiScreenFlash(); sub_8052910(&gUnknown_81043C0); sub_803E708(10,70); - sub_8086A70(uVar3,600,0xb); + SetupBossFightHP(uVar3,600,0xb); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -2432,7 +2432,7 @@ void RaikouPreFightDialogue(void) RaikouScreenFlash(); sub_8052910(&gUnknown_81045B0); sub_803E708(10,70); - sub_8086A70(uVar2,0x28a,0xb); + SetupBossFightHP(uVar2,0x28a,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -2452,7 +2452,7 @@ void RaikouPreFightDialogue1(void) RaikouScreenFlash(); sub_8052910(&gUnknown_81046A0); sub_803E708(10,70); - sub_8086A70(uVar3,0x28a,0xb); + SetupBossFightHP(uVar3,0x28a,0xb); sub_80858AC(&iVar2->posPixelX,0x10); } @@ -2475,7 +2475,7 @@ void RaikouPreFightDialogue2(void) RaikouScreenFlash(); sub_8052910(&gUnknown_810476C); sub_803E708(10,70); - sub_8086A70(uVar3,0x28a,0xb); + SetupBossFightHP(uVar3,0x28a,0xb); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -2590,7 +2590,7 @@ void SuicunePreFightDialogue(void) SuicuneScreenFlash(); sub_8052910(&gUnknown_8104914); sub_803E708(10,70); - sub_8086A70(uVar2,0x28a,0xb); + SetupBossFightHP(uVar2,0x28a,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -2607,7 +2607,7 @@ void SuicunePreFightDialogue1(void) SuicuneScreenFlash(); sub_8052910(&gUnknown_8104998); sub_803E708(10,70); - sub_8086A70(uVar2,0x28a,0xb); + SetupBossFightHP(uVar2,0x28a,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -2628,7 +2628,7 @@ void SuicunePreFightDialogue2(void) SuicuneScreenFlash(); sub_8052910(&gUnknown_8104A9C); sub_803E708(10,70); - sub_8086A70(uVar3,0x28a,0xb); + SetupBossFightHP(uVar3,0x28a,0xb); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -2771,7 +2771,7 @@ void HoOhPreFightDialogue(void) HoOhScreenFlash(); sub_8052910(&gUnknown_8104CE0); sub_803E708(10,70); - sub_8086A70(uVar2,800,0x20); + SetupBossFightHP(uVar2,800,0x20); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -2807,7 +2807,7 @@ void HoOhPreFightDialogue1(void) HoOhScreenFlash(); sub_8052910(&gUnknown_8104E0C); sub_803E708(10,70); - sub_8086A70(uVar3,800,0x20); + SetupBossFightHP(uVar3,800,0x20); sub_80858AC(&iVar2->posPixelX,0x10); } } @@ -2943,7 +2943,7 @@ void LatiosPreFightDialogue(void) LatiosScreenFlash(); sub_8052910(&gUnknown_8104F30); sub_803E708(10,70); - sub_8086A70(iVar2,600,0xb); + SetupBossFightHP(iVar2,600,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -2962,7 +2962,7 @@ void LatiosReFightDialogue(void) LatiosScreenFlash(); sub_8052910(&gUnknown_8104F30); sub_803E708(10,70); - sub_8086A70(uVar2,600,0xb); + SetupBossFightHP(uVar2,600,0xb); sub_80858AC(&iVar1->posPixelX,0x10); } @@ -3362,26 +3362,26 @@ void sub_808B1CC(u8 r0) void sub_808B2B0(struct DungeonEntity *r0) { - r0->unk70->unk46 = 4; + r0->unk70->facingDir = NORTH; sub_806CE68(r0, 4); } void sub_808B2C4(struct DungeonEntity *r0) { - sub_8086A70(r0, 0xE1 << 1, 0xB); + SetupBossFightHP(r0, 0xE1 << 1, 0xB); } void sub_808B2D4(struct DungeonEntity *r0) { - sub_8086A70(r0, 0xE1 << 1, 0xB); + SetupBossFightHP(r0, 0xE1 << 1, 0xB); } void sub_808B2E4(struct DungeonEntity *r0) { - sub_8086A70(r0, 0xE1 << 1, 0xB); + SetupBossFightHP(r0, 0xE1 << 1, 0xB); } void sub_808B2F4(void) @@ -3540,7 +3540,7 @@ void JirachiPreFightDialogue(void) sub_803E708(10,70); sub_8052910(&gUnknown_810550C); sub_803E708(10,70); - sub_8086A70(uVar2,0x15e,0x20); + SetupBossFightHP(uVar2,0x15e,0x20); sub_80858AC(&iVar1->posPixelX,0x10); } diff --git a/src/code_80869E4.c b/src/code_80869E4.c index 18261a0..9718195 100644 --- a/src/code_80869E4.c +++ b/src/code_80869E4.c @@ -478,7 +478,7 @@ void SpriteLookAroundEffect(struct DungeonEntity *r0) s8 r4; s8 r3; - r4 = sub_8002984(r0->unk70->unk46, 4); + r4 = sub_8002984(r0->unk70->facingDir, 4); sub_80869E4(r0, 4, 2, r4); diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c new file mode 100644 index 0000000..d740ccd --- /dev/null +++ b/src/code_8086A3C.c @@ -0,0 +1,124 @@ +#include "global.h" +#include "dungeon_entity.h" +#include "gUnknown_203B418.h" +#include "pokemon.h" + +extern struct unkStruct_203B418 *gUnknown_203B418; +extern void sub_807191C(struct DungeonEntity *); +extern struct DungeonEntity *sub_8085480(void); +extern struct DungeonEntity *sub_8085680(u32); +extern void sub_808EC94(u8 *param_1, u8 param_2); +extern void sub_8097FF8(void); +extern u8 sub_8044B28(void); +extern u8 HasRecruitedMon(u32); +extern u8 gUnknown_202E038[]; +extern void sub_8083E88(u32); +extern void sub_8085374(); +extern void sub_80854D4(); +extern void sub_8085930(u32); +extern void sub_80855E4(void *); +extern void sub_8085860(s32 r0, u32 r1); +extern void sub_8068FE0(struct DungeonEntity *, u32, u32); +extern void sub_8097FA8(u32); + +void sub_8086A3C(struct DungeonEntity *param_1) +{ + param_1->unk70->unk15C = 1; + param_1->unk70->unk15E = 1; +} + +void sub_8086A54(struct DungeonEntity *param_1) +{ + param_1->unk70->unk15C = 1; + param_1->unk70->unk15E = 0; +} + +void SetupBossFightHP(struct DungeonEntity *param_1, s32 newHP, u16 param_3) +{ + + // NOTE: needed two of these to match.. very dumb + struct subStruct_8048524 *iVar1; + struct subStruct_8048524 *iVar2; + + iVar1 = param_1->unk70; + iVar2 = param_1->unk70; + + iVar1->isBoss = TRUE; + + // BUG: Source of the Reviver Seed Boss Glitch + // + // Video to demonstration: + // https://www.youtube.com/watch?v=rHu7EehrZ68 + iVar1->bossHPBackup = iVar1->maxHP; + if (newHP != 0) { + iVar1->maxHP = newHP; + iVar1->HP = newHP; + } + + gUnknown_203B418->unk66A = param_3; + sub_808EC94(iVar2->unk8C,iVar2->isBoss); + sub_807191C(param_1); +} + +void sub_8086AC0(void) +{ + if(!sub_8044B28()) + if(gUnknown_203B418->unk2 == 0) + sub_8097FF8(); +} + +u8 sub_8086AE4(s16 _index) +{ + s32 pokeIndex = _index; + + if(gUnknown_203B418->unk65C == 0) + return 1; + else + return HasRecruitedMon(pokeIndex); +} + +void sub_8086B14(void) +{ + struct DungeonEntity * iVar1; + struct DungeonEntity * iVar2; + struct DungeonEntity * uVar3; + + iVar1 = sub_8085480(); + iVar2 = sub_8085680(4); + uVar3 = sub_8085680(3); + sub_8083E88(0x72); + sub_8085374(); + sub_80854D4(); + sub_8085930(4); + sub_80855E4(sub_8086A3C); + sub_8086A3C(uVar3); + iVar2->unk70->unk15C = 1; + sub_8085860(iVar1->posWorldX,iVar1->posWorldY + -2); + CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_DIGLETT); + CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_SKARMORY); +} + +void sub_8086B94(void) +{ + struct DungeonEntity * iVar1; + struct DungeonEntity * iVar2; + struct DungeonEntity * uVar3; + + iVar1 = sub_8085480(); + iVar2 = sub_8085680(4); + uVar3 = sub_8085680(3); + + sub_8068FE0(uVar3,0x21c,0); + sub_8068FE0(iVar2,0x21c,0); + sub_80854D4(); + sub_8085930(4); + sub_8085860(iVar1->posWorldX,iVar1->posWorldY); +} + +void sub_8086BDC(char param_1, s32 param_2) +{ + if ((((param_2 * 0x1000000) - 0x1000000U) >> 0x18 < 2) && (param_1 == 3)) { + sub_8097FA8(1); + gUnknown_203B418->unk2 = 1; + } +} diff --git a/src/ds_menus.c b/src/ds_menus.c index 7d7bc27..4e53311 100644 --- a/src/ds_menus.c +++ b/src/ds_menus.c @@ -2,17 +2,6 @@ #include "input.h" #include "text.h" -extern u8 *gUnknown_203B3E8; -extern void nullsub_54(); -extern void sub_8039E18(); - -void SetWonderMailMainMenuState(u8 r0) -{ - *gUnknown_203B3E8 = r0; - nullsub_54(); - sub_8039E18(); -} - u32 CreateDualSlotMenu(void) { return 1; diff --git a/src/felicity_bank.c b/src/felicity_bank.c index 727c957..6d1bd84 100644 --- a/src/felicity_bank.c +++ b/src/felicity_bank.c @@ -55,7 +55,7 @@ u32 CreateFelicityBank(s32 param_1) return 1; } -u32 sub_80163A0(void) +u32 FelicityBankCallback(void) { switch(gUnknown_203B204->currState) { case 1: diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c new file mode 100644 index 0000000..4e26b46 --- /dev/null +++ b/src/thank_you_wonder_mail.c @@ -0,0 +1,1723 @@ +#include "global.h" +#include "save.h" +#include "pokemon.h" +#include "file_system.h" +#include "item.h" +#include "sub_8095228.h" +#include "wonder_mail.h" +#include "memory.h" +#include "menu.h" +#include "input.h" +#include "text.h" +#include "team_inventory.h" + +extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4; +extern struct TeamInventory *gTeamInventory_203B460; + +#define THANK_YOU_MAIL_MAIN_MENU 0 +#define ANYTHING_ELSE_THANK_YOU_MAIN_MENU 1 +#define EXIT_THANK_YOU_MAIL 3 +#define NO_THANK_YOU_MAIL 4 +#define SELECT_THANK_YOU_MAIL_COMMS 6 +#define ITEM_EXISTS_ON_THANK_YOU_MAIL 7 +#define PROMPT_RESEND_WITH_ATTACHED_ITEM 8 +#define PROMPT_REWARD_ITEM_TO_SEND 9 +#define THANK_YOU_MAIL_STORAGE_EMPTY 0xA +#define PROMPT_ITEM_TO_SEND 0xB +#define CONFIRM_ITEM_TO_SEND 0xC +#define THANK_YOU_MAIL_COMMS_CLEANUP 0xD +#define PROMPT_THANK_YOU_TO_SEND 0xF +#define SHOW_ITEM_TO_SEND_INFO 0x15 +#define COMMUNICATING_THANK_YOU_MAIL 0x16 + +// TODO: verify it is 0x19 and not 0x1A +#define DISPLAY_THANK_YOU_PASSWORD 0x19 + +#define PROMPT_CONNECT_GAME_LINK 0x1D +#define THANK_YOU_MAIL_COMMS_FINISHED 0x1E +#define PRINT_THANK_YOU_ERROR 0x1F +#define THANK_YOU_PASSWORD_SUCCESS 0x21 +#define PROMPT_THANK_YOU_PASSWORD 0x26 +#define PROCESS_THANK_YOU_PASSWORD 0x27 +#define THANK_YOU_PASSWORD_WRONG 0x28 + +const struct ItemSlot gUnknown_80DED44 = +{ + 1, 0, 0 +}; + +extern char gUnknown_202E5D8[0x50]; +extern char gAvailablePokemonNames[0x50]; + + +const struct UnkTextStruct2 gUnknown_80DED48 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x15, 0x00, 0x04, 0x00, + 0x06, 0x05, + 0x05, 0x00, + NULL +}; + +const struct UnkTextStruct2 gUnknown_80DED60 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x07, 0x00, + 0x06, 0x05, + 0x05, 0x00, + NULL +}; + +extern const u8 Confirm_80DED98[]; +extern const u8 Info_80DED90[]; +extern const u8 SendThankYou_Text[]; +extern const u8 GetThankYou_Text[]; +extern const u8 Cancel_80DEDD8[]; +extern const u8 GameLinkCable_Text[]; +extern const u8 Password_Text[]; +extern const u8 Yes_80DEE5C[]; +extern const u8 No_80DEE78[]; +extern const u8 SendItem_Text[]; +extern const u8 DontSendItem_Text[]; +extern const u8 SendWOItem_Text[]; + +const struct MenuItem gUnknown_80DED78[3] = +{ + {Confirm_80DED98, 0xB}, + {Info_80DED90, 0xC}, + {NULL, 0x0}, +}; + +ALIGNED(4) const u8 Info_80DED90[] = "Info"; +ALIGNED(4) const u8 Confirm_80DED98[] = "Confirm"; + +// Unused +const struct UnkTextStruct2 gUnknown_80DEDA0 = +{ + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, + 0x00, 0x00, + NULL +}; + + +const struct MenuItem gThankYouMailMainMenuItems[4] = +{ + {SendThankYou_Text, 0x1}, + {GetThankYou_Text, 0x2}, + {Cancel_80DEDD8, 0x0}, + {NULL, 0x0}, +}; + +ALIGNED(4) const u8 Cancel_80DEDD8[] = "Cancel"; +ALIGNED(4) const u8 GetThankYou_Text[] = "Get Thank-You Mail"; +ALIGNED(4) const u8 SendThankYou_Text[] = "Send Thank-You Mail"; + +const struct MenuItem gUnknown_80DEE08[4] = +{ + {GameLinkCable_Text, WONDER_MAIL_GAME_LINK}, + {Password_Text, WONDER_MAIL_PASSWORD}, + {Cancel_80DEDD8, 0x0}, + {NULL, 0x0}, +}; + +ALIGNED(4) const u8 Password_Text[] = "Password"; +ALIGNED(4) const u8 GameLinkCable_Text[] = "Game Link cable"; + +const struct MenuItem gUnknown_80DEE44[3] = +{ + {Yes_80DEE5C, 0x7}, + {Cancel_80DEDD8, 0x0}, + {NULL, 0x0}, +}; + +ALIGNED(4) const u8 Yes_80DEE5C[] = "Yes"; + + +const struct MenuItem gUnknown_80DEE60[3] = +{ + {Yes_80DEE5C, 0x7}, + {No_80DEE78, 0x8}, + {NULL, 0x0}, +}; + +ALIGNED(4) const u8 No_80DEE78[] = "No"; + +const struct MenuItem gUnknown_80DEE7C[4] = +{ + {SendItem_Text, 0x9}, + {DontSendItem_Text, 0xA}, + {Cancel_80DEDD8, 0x0}, + {NULL, 0x0}, +}; + +ALIGNED(4) const u8 DontSendItem_Text[] = "Don~27t Send Item"; +ALIGNED(4) const u8 SendItem_Text[] = "Send Item"; + +const struct MenuItem gUnknown_80DEEBC[3] = +{ + {SendWOItem_Text, 0xA}, + {Cancel_80DEDD8, 0x0}, + {NULL, 0x0}, +}; + +ALIGNED(4) const u8 SendWOItem_Text[] = "Send w/o Item"; + +const struct MenuItem gUnknown_80DEEE4[4] = +{ + {Yes_80DEE5C, 0x7}, + {No_80DEE78, 0x8}, + {Cancel_80DEDD8, 0x0}, + {NULL, 0x0}, +}; + +ALIGNED(4) const char gUnknown_80DEF04[] = " ...Oh?\n" + "Something~27s gone wrong."; + +ALIGNED(4) const char gUnknown_80DEF28[] = " ...Oh? The number of linked\n" + "GBA systems is incorrect.\n" + "Please try again from the start."; + +ALIGNED(4) const u8 gUnknown_80DEF80[]= + " ...Oh? It looks like your\n" + "friend chose a different mode.\n" + "Please try again from the start."; + +ALIGNED(4) const u8 gUnknown_80DEFDC[]= + " ...Oh? It looks like your\n" + "storage space is full. Please clear some\n" + "space and try again from the start."; + +ALIGNED(4) const u8 gUnknown_80DF044[]= + " ...Oh?\n" + "I think you~27ve received this mail before.\n" + "You can~27t get the same mail twice."; + +ALIGNED(4) const u8 gUnknown_80DF0A0[]= + " ...Oh?\n" + "I don~27t think you~27re eligible to receive\n" + "this mail."; + +ALIGNED(4) const u8 gUnknown_80DF0E0[]= + " ...Oh?\n" + "There is no room to receive new mail.\n" + "Please delete some mail and try again."; + +ALIGNED(4) const u8 gUnknown_80DF138[]= + " ...Oh? Your friend didn~27t\n" + "follow through on their side.\n" + "Please try again from the start."; + +ALIGNED(4) const u8 gUnknown_80DF194[]= + " Your #CGThank-You Mail#R\n" + "has been sent."; + +ALIGNED(4) const u8 gUnknown_80DF1C0[]= + " ...Oh?\n" + "This password appears to be wrong.\n" + "Would you like to try again?"; + +ALIGNED(4) const u8 gUnknown_80DF208[]= + " ...Oh? This password doesn~27t\n" + "appear to be for a #CGThank-You Mail#R."; + +ALIGNED(4) const u8 gUnknown_80DF250[]= + ": This is the counter for\n" + "#CGThank-You Mail#R.#P" + ": Oh~2c hi~2c #CN%s#R.\n" + "I~27ve been waiting for you. You wanted me\n" + "to process a #CGThank-You Mail#R?#P" + ": Let me get on it right away."; + +ALIGNED(4) const u8 gUnknown_80DF304[]= + " Is it OK to send this\n" + "#CGThank-You Mail#R?"; + +ALIGNED(4) const u8 gUnknown_80DF330[]= + " Please choose the\n" + "#CGThank-You Mail#R that you want to\n" + "send to your friend."; + +ALIGNED(4) const u8 gUnknown_80DF380[]= + " OK. Please enter the\n" + "#CGThank-You Mail password#R."; + +ALIGNED(4) const u8 gUnknown_80DF3B4[]= + " Please give this password\n" + "to the friend that rescued your team.#P" + " I also must save your\n" + "adventure."; + +ALIGNED(4) const u8 gUnknown_80DF418[]= + " OK~2c here is your\n" + "#CGThank-You Mail password#R."; + +ALIGNED(4) const u8 gUnknown_80DF44C[]= + " I need to save your\n" + "adventure."; + +ALIGNED(4) const u8 gUnknown_80DF46C[]= + " There we go.\n" + "I~27m all done.#P" + " Doesn~27t it feel great to\n" + "be appreciated for doing something good?\n" + "Please keep up your rescue work!"; + +ALIGNED(4) const u8 gUnknown_80DF4F4[]= + " A #CGThank-You Mail#R has\n" + "arrived from your friend for your rescue\n" + "mission."; + +ALIGNED(4) const u8 gUnknown_80DF544[]= _( + "#+Communicating...\n" + "#+Please wait with the power on.\n" + "#+To cancel~2c press {B_BUTTON}."); + +ALIGNED(4) const u8 gUnknown_80DF594[]= + " There. I~27ve sent your\n" + "#CGThank-You Mail#R.\n" + "I need to save your adventure."; + +ALIGNED(4) const u8 gUnknown_80DF5E4[]= + " Please connect the GBA\n" + "systems with a #CGGame Link cable#R.\n" + "Is your friend also ready?"; + +ALIGNED(4) const u8 gUnknown_80DF63C[]= + " There~2c all done.\n" + "#CN%s#R~2c I hope your friend\n" + "appreciates your sense of gratitude."; + +ALIGNED(4) const u8 gUnknown_80DF694[]= + " The item you~27ve chosen\n" + "here can~27t be exchanged later.\n" + "Are you certain this item is OK?"; + +ALIGNED(4) const u8 gUnknown_80DF6F0[]= + " I~27ve saved your adventure. "; + +ALIGNED(4) const u8 gUnknown_80DF710[]= + " OK~2c please choose\n" + "the item to be sent."; + +ALIGNED(4) const u8 gUnknown_80DF73C[]= + " ...Oh?\n" + "Your storage space is empty.\n" + "What would you like to do?"; + +ALIGNED(4) const u8 gUnknown_80DF77C[]= + " Would you like to choose\n" + "a #CGreward item#R from storage and\n" + "send it with your mail?"; + +ALIGNED(4) const u8 gUnknown_80DF7D4[]= + " ...Oh?\n" + "You~27ve already attached a #CGreward item#R\n" + "to this mail.#P" + " I~27m sorry~2c but once an item\n" + "has been attached to mail~2c it can~27t be\n" + "exchanged."; + +ALIGNED(4) const u8 gUnknown_80DF870[]= + " Would you like to send it\n" + "again with the item you chose before?"; + +ALIGNED(4) const u8 gUnknown_80DF8B4[]= + " ...Oh?\n" + "You don~27t seem to have a #CGThank-You Mail#R."; + +ALIGNED(4) const u8 gUnknown_80DF8EC[]= + " Hello.\n" + "I handle #CGThank-You Mail#R.\n" + "How may I serve you?"; + +ALIGNED(4) const u8 gUnknown_80DF928[]= + " May I help you with\n" + "anything else?"; + +ALIGNED(4) const u8 gUnknown_80DF94C[] = + " Please come see me\n" + "anytime."; + +ALIGNED(4) const u8 gUnknown_80DF96C[] = + " How would you like to send\n" + "your #CGThank-You Mail#R?"; + +ALIGNED(4) const u8 gUnknown_80DF9A4[]= + " How would you like to\n" + "receive your friend~27s #CGThank-You Mail#R?"; + +ALIGNED(4) const u8 thank_you_fill[] = "pksdir0"; + + +extern s32 sub_80953D4(u32); +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); +extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); +extern u8 sub_8012FD8(u32 *r0); +extern void sub_8035CC0(struct UnkTextStruct2 *r0, u32); +extern void sub_8030810(u32); +extern u32 sub_8095324(u32); +extern u32 sub_8031DCC(void); +extern void sub_8031E00(void); +extern void sub_8095240(u8); +extern u32 sub_802F298(); +extern u8 sub_801CF14(u32); +extern u32 sub_8030768(u32); +extern s8 sub_80307EC(void); +extern void sub_8030D40(u8, u32); +extern u32 sub_8030DA0(); +extern void sub_8013114(u32 *r0, s32 *r1); +extern void HandleThankYouMailPelipperMainMenu(); +extern void sub_802AAC8(); +extern void ReturnToThankYouMailMainMenu(); +extern void sub_802AB7C(); +extern void HandleMailCommunicationMenu(); +extern void sub_802A98C(); +extern void sub_802A9A8(); +extern void sub_802A910(); +extern void sub_802A8BC(); +extern void sub_802A8A0(); +extern void HandleConfirmItemtoSendMenu(); +extern void ExitThankYouMailMenu1(); +extern void sub_802A090(); +extern void sub_802A158(); +extern void sub_802A0C8(); +extern void sub_802A174(); +extern void sub_802A230(); +extern void sub_802A28C(); +extern void sub_802A39C(); +extern void sub_802A33C(); +extern void sub_802A740(); +extern void sub_802A6F0(); +extern void sub_802A68C(); +extern void sub_802A4D4(); +extern void sub_802A050(); +extern void sub_802A4AC(); +extern void sub_802A458(); +extern void sub_802A75C(); +extern void DisplayThankYouMailCommsOutcome(); +extern void ReturnToThankYouMainFromError(); +extern void ExitThankYouMailMenu2(); +extern void sub_802AB60(); +extern void sub_802AB98(); +extern void sub_802A718(); +extern void sub_802A6B4(); +extern void AdvanceToThankYouPasswordProcessing(); +extern void HandleThankYouMailPasswordMenu(); +extern void sub_802A9FC(); +extern void sub_802A828(); +extern void sub_802A850(); +extern void sub_8030DE4(); +extern void sub_801B450(); +extern void sub_803084C(); +extern void sub_801CBB8(); +extern void sub_80155F0(); +extern void sub_8031E10(); +extern void sub_802F2C0(); +extern u32 sub_80144A4(s32 *r0); +extern void SetThankYouMailMenuState(u32); +extern struct PokemonStruct *sub_808D33C(void); +extern void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...); +extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); +extern void sub_80922B4(u8 *, u8 *, u32); +extern void sub_802F204(u8 *, u32); +extern void sub_80151C0(u32, u8 *); +extern void xxx_call_start_bg_music(void); +extern void sub_803092C(void); +extern void sub_801CCD8(void); +extern void sub_8011830(void); +extern void nullsub_23(u32); +extern s32 sub_8037B28(u32); +extern u32 sub_8030894(void); +extern u32 sub_801D008(void); +extern void sub_80306A8(u32, u32, u32, u32); +extern s32 sub_8037D64(u32, void *, void *); +extern s32 sub_80381F4(u32, void *, void *); +extern void sub_801C8C4(u32, u32, s32 * , u32); +extern u8 sub_809539C(u32, u32); +extern u8 sub_800D588(void); +extern u32 sub_803C200(u8 *, u32); +extern void sub_8031D70(u8, u32); + +extern void sub_803092C(void); +extern void sub_8035CF4(u32 *, u32, u32); +extern u32 sub_801CA08(u32); +extern void sub_801CBB8(void); +extern void sub_801B3C0(struct ItemSlot *); +extern u8 sub_801CB24(void); +extern void sub_801B450(void); +extern u32 sub_801B410(void); +extern void sub_801CB5C(u32); +extern void sub_801CCD8(void); +extern void sub_8011C28(u32); +extern u32 sub_80154F0(void); +extern u32 sub_8039068(u32, u8 *r1, u8 *r0); +extern u8 sub_809539C(u32, u32); + + +u32 CreateThankYouMailPelipper(void) +{ + char *monName; + struct OpenedFile *faceFile; + s32 uVar2; + int counter; + struct unkStruct_8095228 *temp; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B2C4 = MemoryAlloc(sizeof(struct WonderMailStruct_203B2C4), 8); + MemoryFill8((u8 *)gUnknown_203B2C4, 0, sizeof(struct WonderMailStruct_203B2C4)); + + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); + monName = GetMonSpecies(SPECIES_PELIPPER); + strcpy(gAvailablePokemonNames, monName); + faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER); + + gUnknown_203B2C4->faceFile = faceFile; + gUnknown_203B2C4->faceData = faceFile->data; + gUnknown_203B2C4->unk42C = 0; + gUnknown_203B2C4->unk42D = 0; + gUnknown_203B2C4->unk42E = 0; + gUnknown_203B2C4->unk428 = 2; + gUnknown_203B2C4->unk42A = 8; + + for(counter = 0; counter < PASSWORD_BUFFER_SIZE; counter++){ + gUnknown_203B2C4->passwordBuffer[counter] = 0; + } + + gUnknown_203B2C4->wonderMailMethod = WONDER_MAIL_GAME_LINK; + gUnknown_203B2C4->wonderMailMode = WONDER_MAIL_MODE_SEND; + + uVar2 = sub_80953D4(6); + if (uVar2 != -1) { + temp = sub_8095228(uVar2); + gUnknown_203B2C4->unk41C = temp->unk20; + gUnknown_203B2C4->unk218 = uVar2; + gUnknown_203B2C4->unk430 = temp->unk10; + SetThankYouMailMenuState(5); + } + else { + gUnknown_203B2C4->unk41C = gUnknown_80DED44; + gUnknown_203B2C4->unk218 = -1; + SetThankYouMailMenuState(THANK_YOU_MAIL_MAIN_MENU); + } + gUnknown_203B2C4->unk4 = 0x2b; + return 1; +} + +u32 ThankYouMailPelipperCallback(void) +{ + + switch(gUnknown_203B2C4->state) { + case 5: + sub_802AB7C(); + break; + case THANK_YOU_MAIL_COMMS_FINISHED: + DisplayThankYouMailCommsOutcome(); + break; + case PRINT_THANK_YOU_ERROR: + ReturnToThankYouMainFromError(); + break; + case 0xe: + sub_802A090(); + break; + case PROMPT_THANK_YOU_TO_SEND: + sub_802A158(); + break; + case 0x11: + sub_802A174(); + break; + case 0x12: + sub_802A230(); + break; + case 0x10: + sub_802A0C8(); + break; + case 0x13: + sub_802A28C(); + break; + case 0x14: + sub_802A39C(); + break; + case SHOW_ITEM_TO_SEND_INFO: + sub_802A33C(); + break; + case 0x1c: + sub_802A458(); + break; + case 0x1b: + sub_802A4AC(); + break; + case DISPLAY_THANK_YOU_PASSWORD: + sub_802A4D4(); + break; + case 0x1a: + sub_802A050(); + break; + case THANK_YOU_PASSWORD_WRONG: + sub_802A9FC(); + break; + case PROMPT_THANK_YOU_PASSWORD: + AdvanceToThankYouPasswordProcessing(); + break; + case PROCESS_THANK_YOU_PASSWORD: + HandleThankYouMailPasswordMenu(); + break; + case 0x25: + sub_802A6B4(); + break; + case 0x24: + sub_802A718(); + break; + case THANK_YOU_PASSWORD_SUCCESS: + sub_802AB60(); + break; + case 0x22: + sub_802AB98(); + break; + case COMMUNICATING_THANK_YOU_MAIL: + sub_802A740(); + break; + case 0x18: + sub_802A68C(); + break; + case 0x17: + sub_802A6F0(); + break; + case PROMPT_CONNECT_GAME_LINK: + sub_802A75C(); + break; + case 0x20: + ExitThankYouMailMenu2(); + break; + case THANK_YOU_MAIL_COMMS_CLEANUP: + ExitThankYouMailMenu1(); + break; + case CONFIRM_ITEM_TO_SEND: + HandleConfirmItemtoSendMenu(); + break; + case 0x29: + sub_802A828(); + break; + case 0x2a: + sub_802A850(); + break; + case PROMPT_ITEM_TO_SEND: + sub_802A8A0(); + break; + case THANK_YOU_MAIL_STORAGE_EMPTY: + sub_802A8BC(); + break; + case PROMPT_REWARD_ITEM_TO_SEND: + sub_802A910(); + break; + case ITEM_EXISTS_ON_THANK_YOU_MAIL: + sub_802A98C(); + break; + case PROMPT_RESEND_WITH_ATTACHED_ITEM: + sub_802A9A8(); + break; + case SELECT_THANK_YOU_MAIL_COMMS: + HandleMailCommunicationMenu(); + break; + case NO_THANK_YOU_MAIL: + ReturnToThankYouMailMainMenu(); + break; + case THANK_YOU_MAIL_MAIN_MENU: + case ANYTHING_ELSE_THANK_YOU_MAIN_MENU: + HandleThankYouMailPelipperMainMenu(); + break; + case 2: + sub_802AAC8(); + break; + case EXIT_THANK_YOU_MAIL: + return 3; + } + return 0; +} + +void CleanThankYouMailPelipper(void) +{ + if(gUnknown_203B2C4 != NULL) + { + CloseFile(gUnknown_203B2C4->faceFile); + MemoryFree(gUnknown_203B2C4); + gUnknown_203B2C4 = NULL; + sub_8030DE4(); + sub_801B450(); + sub_803084C(); + sub_801CBB8(); + sub_80155F0(); + sub_8031E10(); + sub_802F2C0(); + } +} + +void ReturnToThankYouMainFromError(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + } +} + +void PrintThankYouMailLinkError(u32 param_1) +{ + switch(param_1) { + case 3: + sub_80141B4(gUnknown_80DEF28, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 4: + sub_80141B4(gUnknown_80DEF80, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 6: + sub_80141B4(gUnknown_80DEFDC, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 7: + sub_80141B4(gUnknown_80DF044, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 9: + sub_80141B4(gUnknown_80DF0A0, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 11: + sub_80141B4(gUnknown_80DF0A0, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 13: + sub_80141B4(gUnknown_80DF0E0, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 1: + case 2: + case 5: + case 14: + sub_80141B4(gUnknown_80DEF04, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 15: + sub_80141B4(gUnknown_80DF138, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 0: + default: + break; + } +} + +void DisplayThankYouMailCommsOutcome(void) +{ + s32 auStack20; + + if (sub_80144A4(&auStack20) != 0) { + return; + } + MemoryFill8((u8 *)&gUnknown_203B2C4->unk41C, 0, sizeof(struct ItemSlot)); + gUnknown_203B2C4->unk41C.itemIndex = 0; + gUnknown_203B2C4->unk41C.numItems = 1; + gUnknown_203B2C4->unk41C.unk0 = 0; + if (gUnknown_203B2C4->linkError == 0) { + switch(gUnknown_203B2C4->unk40) + { + case 6: + switch(gUnknown_203B2C4->wonderMailMethod) + { + case WONDER_MAIL_GAME_LINK: + case WONDER_MAIL_PASSWORD: + case 6: + // "Thank-You Mail has been sent" + sub_80141B4(gUnknown_80DF194, 0, &gUnknown_203B2C4->faceFile, 0x10d); + break; + case 4: + default: + break; + } + SetThankYouMailMenuState(THANK_YOU_MAIL_COMMS_CLEANUP); + break; + case 7: + SetThankYouMailMenuState(THANK_YOU_PASSWORD_SUCCESS); + break; + default: + break; + } + } + else + { + PrintThankYouMailLinkError(gUnknown_203B2C4->linkError); + SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR); + } +} + +void sub_802A050(void) +{ + switch(sub_8031DCC()) + { + + case 3: + case 2: + sub_8031E10(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); + SetThankYouMailMenuState(0x1B); + break; + case 1: + sub_8031E00(); + break; + default: + return; + } +} + +void sub_802A090(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 7: + SetThankYouMailMenuState(SELECT_THANK_YOU_MAIL_COMMS); + break; + case 8: + case 0: + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + default: + break; + } + } +} + +void sub_802A0C8(void) +{ + switch(sub_8030768(1)) + { + case 2: + sub_803084C(); + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + case 3: + gUnknown_203B2C4->unk218 = sub_80307EC(); + SetThankYouMailMenuState(0x11); + break; + case 4: + gUnknown_203B2C4->unk4 = 0x10; + gUnknown_203B2C4->unk218 = sub_80307EC(); + sub_8006518(gUnknown_203B2C4->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_8030D40(gUnknown_203B2C4->unk218,0); + SetThankYouMailMenuState(0x12); + break; + } +} + +void sub_802A158(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(0x10); + } +} + +void sub_802A174(void) +{ + s32 menuAction; + + menuAction = -1; + sub_8030768(0); + if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) { + sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction); + } + + switch(menuAction) + { + case 0xB: + sub_803084C(); + SetThankYouMailMenuState(0xe); + break; + case 0xC: + gUnknown_203B2C4->unk4 = 0x2b; + sub_8006518(gUnknown_203B2C4->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_8030D40(gUnknown_203B2C4->unk218,0); + SetThankYouMailMenuState(0x12); + break; + case 0: + case 0xD: + sub_8035CC0(gUnknown_203B2C4->unk35C,2); + sub_8030810(1); + SetThankYouMailMenuState(0x10); + default: + break; + } +} + +void sub_802A230(void) +{ + switch(sub_8030DA0()) + { + case 2: + case 3: + sub_8030DE4(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); + sub_803092C(); + if (gUnknown_203B2C4->unk4 == 0x2b) { + sub_8035CF4(&gUnknown_203B2C4->unk21C, 3, 1); + SetThankYouMailMenuState(0x11); + } + else { + SetThankYouMailMenuState(gUnknown_203B2C4->unk4); + } + break; + default: + break; + } +} + +void sub_802A28C(void) +{ + + gUnknown_203B2C4->unk41C.itemIndex = 0; + gUnknown_203B2C4->unk41C.numItems = 1; + gUnknown_203B2C4->unk41C.unk0 = 0; + + switch(sub_801CA08(1)) + { + case 2: + sub_801CBB8(); + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + case 3: + gUnknown_203B2C4->unk41C.itemIndex = sub_801CB24(); + SetThankYouMailMenuState(0x14); + break; + case 4: + gUnknown_203B2C4->unk4 = 0x13; + gUnknown_203B2C4->unk41C.itemIndex = sub_801CB24(); + sub_8006518(gUnknown_203B2C4->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_801B3C0(&gUnknown_203B2C4->unk41C); + SetThankYouMailMenuState(SHOW_ITEM_TO_SEND_INFO); + break; + } +} + +void sub_802A33C(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2C4->unk3BC,1,1); + sub_801CB5C(1); + if (gUnknown_203B2C4->unk4 == 0x2b) { + sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); + SetThankYouMailMenuState(0x14); + } + else { + SetThankYouMailMenuState(gUnknown_203B2C4->unk4); + } + break; + case 1: + default: + break; + } +} + +void sub_802A39C(void) +{ + s32 menuAction; + + menuAction = -1; + sub_801CA08(0); + if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) { + sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction); + } + + switch(menuAction) + { + case 0xB: + sub_801CBB8(); + SetThankYouMailMenuState(CONFIRM_ITEM_TO_SEND); + break; + case 0xC: + gUnknown_203B2C4->unk4 = 0x2b; + sub_8006518(gUnknown_203B2C4->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_801B3C0(&gUnknown_203B2C4->unk41C); + SetThankYouMailMenuState(SHOW_ITEM_TO_SEND_INFO); + break; + case 0: + case 0xD: + sub_8035CC0(gUnknown_203B2C4->unk35C, 3); + sub_801CCD8(); + SetThankYouMailMenuState(0x13); + default: + break; + } +} + +void sub_802A458(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(THANK_YOU_MAIL_COMMS_CLEANUP); + } +} + +void ExitThankYouMailMenu1(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(EXIT_THANK_YOU_MAIL); + } +} + +void ExitThankYouMailMenu2(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(EXIT_THANK_YOU_MAIL); + } +} + +void sub_802A4AC(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(0x18); + sub_8011C28(1); + PrepareSavePakWrite(SPECIES_NONE); + } +} + +void sub_802A4D4(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(0x1A); + } +} + +void AdvanceToThankYouPasswordProcessing(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(PROCESS_THANK_YOU_PASSWORD); + } +} + +void HandleThankYouMailPasswordMenu(void) +{ + u8 uVar1; + struct unkStruct_8095228 *puVar5; + u32 return_var; + struct unkStruct_8095228 temp; + + return_var = sub_80154F0(); + MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_8095228)); + switch(return_var) + { + case 3: + switch(sub_8039068(0x20,gUnknown_203B2C4->passwordBuffer,&temp.unk0)) + { + case 0x11: + // Wrong password + sub_8014248(gUnknown_80DF1C0, 0, 7, gUnknown_80DEE44, 0, 4, 0, &gUnknown_203B2C4->faceFile, 0xc); + SetThankYouMailMenuState(THANK_YOU_PASSWORD_WRONG); + break; + case 0x14: + // Incorrect password + sub_80141B4(gUnknown_80DF208, 0, &gUnknown_203B2C4->faceFile, 0x10d); + SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR); + break; + case 0xB: + // Not eligible to receive + sub_80141B4(gUnknown_80DF0A0, 0, &gUnknown_203B2C4->faceFile, 0x10d); + SetThankYouMailMenuState(PRINT_THANK_YOU_ERROR); + break; + case 0x18: + // I think this is when password works successfully + uVar1 = sub_809539C(4,temp.unk10); + puVar5 = sub_8095228(uVar1); + *puVar5 = temp; + puVar5->unk0 = 6; + gUnknown_203B2C4->unk430 = temp.unk10; + SetThankYouMailMenuState(THANK_YOU_PASSWORD_SUCCESS); + break; + default: + case 7: + break; + } + sub_80155F0(); + break; + case 2: + sub_80155F0(); + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + } +} + +void sub_802A68C(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + if (!WriteSavePak()) { + FinishWriteSavePak(); + SetThankYouMailMenuState(THANK_YOU_MAIL_COMMS_CLEANUP); + } + } +} + +void sub_802A6B4(void) +{ + int saveStatus; + u32 temp; + + if (sub_80144A4(&temp) == 0) { + if (!WriteSavePak()) { + saveStatus = GetSavePakStatus(); + FinishWriteSavePak(); + if (saveStatus == SAVE_COMPLETED) { + SetThankYouMailMenuState(0x20); + } + else { + SetThankYouMailMenuState(EXIT_THANK_YOU_MAIL); + } + } + } +} + +void sub_802A6F0(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + SetThankYouMailMenuState(0x18); + sub_8011C28(1); + PrepareSavePakWrite(SPECIES_NONE); + } +} + +void sub_802A718(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + SetThankYouMailMenuState(0x25); + sub_8011C28(1); + PrepareSavePakWrite(SPECIES_NONE); + } +} + +void sub_802A740(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + SetThankYouMailMenuState(THANK_YOU_MAIL_COMMS_FINISHED); + } +} + +void sub_802A75C(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 7: + // NOTE: if statement is needed to match + if(gUnknown_203B2C4->wonderMailMode) + SetThankYouMailMenuState(COMMUNICATING_THANK_YOU_MAIL); + else + SetThankYouMailMenuState(COMMUNICATING_THANK_YOU_MAIL); + break; + case 0: + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + } + } +} + +void HandleConfirmItemtoSendMenu(void) +{ + s32 temp; + struct unkStruct_8095228 *return_var; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 7: + return_var = sub_8095228(gUnknown_203B2C4->unk218); + if(gUnknown_203B2C4->unk41C.itemIndex != 0) + { + return_var->unk20 = gUnknown_203B2C4->unk41C; + } + gTeamInventory_203B460->teamStorage[gUnknown_203B2C4->unk41C.itemIndex]--; + SetThankYouMailMenuState(0x29); + break; + case 8: + SetThankYouMailMenuState(PROMPT_ITEM_TO_SEND); + break; + case 0: + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + } + } +} + +void sub_802A828(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(0x2A); + sub_8011C28(1); + PrepareSavePakWrite(SPECIES_NONE); + } +} + +void sub_802A850(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + if(!WriteSavePak()) + { + FinishWriteSavePak(); + switch(gUnknown_203B2C4->wonderMailMethod) + { + case WONDER_MAIL_GAME_LINK: + case 4: + SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK); + break; + case WONDER_MAIL_PASSWORD: + SetThankYouMailMenuState(DISPLAY_THANK_YOU_PASSWORD); + break; + } + } + } +} + +void sub_802A8A0(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + SetThankYouMailMenuState(0x13); + } +} + +void sub_802A8BC(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 0xA: + switch(gUnknown_203B2C4->wonderMailMethod) + { + case WONDER_MAIL_GAME_LINK: + case 4: + SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK); + break; + case WONDER_MAIL_PASSWORD: + SetThankYouMailMenuState(DISPLAY_THANK_YOU_PASSWORD); + break; + } + break; + case 0: + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + } + } +} + +void sub_802A910(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 9: + if(sub_801CF14(0) != 0) + { + SetThankYouMailMenuState(THANK_YOU_MAIL_STORAGE_EMPTY); + } + else + { + SetThankYouMailMenuState(PROMPT_ITEM_TO_SEND); + } + break; + case 0xA: + switch(gUnknown_203B2C4->wonderMailMethod) + { + case WONDER_MAIL_GAME_LINK: + case 4: + SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK); + break; + case WONDER_MAIL_PASSWORD: + SetThankYouMailMenuState(DISPLAY_THANK_YOU_PASSWORD); + break; + } + break; + case 0: + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + } + } +} + +void sub_802A98C(void) +{ + s32 temp; + + if (sub_80144A4(&temp) == 0) { + SetThankYouMailMenuState(PROMPT_RESEND_WITH_ATTACHED_ITEM); + } +} + +void sub_802A9A8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 0x7: + switch(gUnknown_203B2C4->wonderMailMethod) + { + case WONDER_MAIL_GAME_LINK: + case 4: + SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK); + break; + case WONDER_MAIL_PASSWORD: + SetThankYouMailMenuState(DISPLAY_THANK_YOU_PASSWORD); + break; + } + break; + case 0: + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + } + } +} + +void sub_802A9FC(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 0x7: + SetThankYouMailMenuState(PROMPT_THANK_YOU_PASSWORD); + break; + case 0: + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + } + } +} + +void HandleMailCommunicationMenu(void) +{ + s32 temp; + struct unkStruct_8095228 *return_var; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case WONDER_MAIL_GAME_LINK: + case 4: + case WONDER_MAIL_PASSWORD: + gUnknown_203B2C4->wonderMailMethod = temp; + switch(gUnknown_203B2C4->wonderMailMode) + { + case WONDER_MAIL_MODE_SEND: + return_var = sub_8095228(sub_80953D4(5)); + if(return_var->unk20.itemIndex != 0) + { + SetThankYouMailMenuState(ITEM_EXISTS_ON_THANK_YOU_MAIL); + } + else + { + SetThankYouMailMenuState(PROMPT_REWARD_ITEM_TO_SEND); + } + break; + default: + if(gUnknown_203B2C4->wonderMailMethod == WONDER_MAIL_PASSWORD) + { + SetThankYouMailMenuState(PROMPT_THANK_YOU_PASSWORD); + } + else + { + SetThankYouMailMenuState(PROMPT_CONNECT_GAME_LINK); + } + break; + } + break; + case 0: + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + break; + } + } +} + +void ReturnToThankYouMailMainMenu(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU); + } +} + +void sub_802AAC8(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(EXIT_THANK_YOU_MAIL); + } +} + +void HandleThankYouMailPelipperMainMenu(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + switch(temp) + { + case 1: + gUnknown_203B2C4->unk40 = 6; + gUnknown_203B2C4->wonderMailMode = WONDER_MAIL_MODE_SEND; + if(sub_8095324(5) == 0) + { + SetThankYouMailMenuState(NO_THANK_YOU_MAIL); + } + else + { + SetThankYouMailMenuState(PROMPT_THANK_YOU_TO_SEND); + } + break; + case 2: + gUnknown_203B2C4->unk40 = 7; + gUnknown_203B2C4->wonderMailMode = WONDER_MAIL_MODE_RECEIVE; + SetThankYouMailMenuState(SELECT_THANK_YOU_MAIL_COMMS); + break; + case 0: + SetThankYouMailMenuState(2); + break; + } + } +} + +void sub_802AB60(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(0x22); + } +} + +void sub_802AB7C(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + SetThankYouMailMenuState(0x22); + } +} + + +void sub_802AB98(void) +{ + const char *monName; + switch(sub_802F298()) + { + case 3: + sub_802F2C0(); + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); + monName = GetMonSpecies(SPECIES_PELIPPER); + strcpy(gAvailablePokemonNames, monName); + sub_8095240(sub_809539C(6, gUnknown_203B2C4->unk430)); + SetThankYouMailMenuState(0x24); + break; + default: + break; + } +} + +void nullsub_131(void) +{ +} + +void UpdateThankYouMailText(void) +{ + char cVar1; + char *monName; + u8 auStack180 [80]; + u8 auStack100 [80]; + u8 uVar2; + struct PokemonStruct *pokeStruct; + struct PokemonStruct *pokeStruct2; + s32 linkStatus; + struct unkStruct_8095228 *puVar4; + + switch(gUnknown_203B2C4->state) { + case 5: + pokeStruct = sub_808D33C(); + sub_80922B4(auStack180,pokeStruct->name, POKEMON_NAME_LENGTH); + ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF250,auStack180); + sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case 0xe: + // Is it OK to send this Thank-You Mail? + sub_8014248(gUnknown_80DF304,0,7,gUnknown_80DEE60,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + case PROMPT_THANK_YOU_TO_SEND: + // Please choose the Thank-You Mail that you want to send to your friend + sub_80141B4(gUnknown_80DF330,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case 0x10: + if (sub_8030894() != 0) + break; + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_80306A8(5,0,0,6); + break; + case 0x11: + sub_8006518(gUnknown_203B2C4->unk35C); + SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED60,gUnknown_80DED78,1,0,0); + sub_803092C(); + sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); + break; + case 0x13: + if (sub_801D008() != 0) + break; + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + // TODO: Probably a macro - Pika + { + struct {u16 a; u16 b;} local_x = {3, 2}; + sub_801C8C4(0, 1, (s32 *)&local_x, 9); + } + break; + case 0x14: + sub_8006518(gUnknown_203B2C4->unk35C); + SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED48,gUnknown_80DED78,1,0,0); + sub_801CCD8(); + sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); + break; + case THANK_YOU_MAIL_COMMS_FINISHED: + gUnknown_203B2C4->linkError = 0; + sub_8011830(); + linkStatus = sub_8037B28(gUnknown_203B2C4->unk40); + gUnknown_203B2C4->linkError = linkStatus; + if (linkStatus == 0) + { + switch(gUnknown_203B2C4->unk40) + { + case 6: + MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228)); + gUnknown_203B2C4->unk1B8 = *sub_8095228(gUnknown_203B2C4->unk218); + gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8); + break; + case 7: + MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228)); + MemoryFill8((u8 *)&gUnknown_203B2C4->unk1E8,0, sizeof(struct unkStruct_8095228)); + gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8); + break; + } + if (gUnknown_203B2C4->linkError == 0){ + switch(gUnknown_203B2C4->unk40){ + case 6: + case 7: + gUnknown_203B2C4->linkError = sub_80381F4(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8); + if ( sub_800D588() != '\0') { + gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1E8.unk10; + } + else { + gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1B8.unk10; + } + break; + } + } + } + xxx_call_start_bg_music(); + break; + case PROMPT_THANK_YOU_PASSWORD: + // OK. Please enter the Thank-You Mail Password + sub_80141B4(gUnknown_80DF380,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case PROCESS_THANK_YOU_PASSWORD: + sub_8006518(gUnknown_203B2C4->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_80151C0(4,gUnknown_203B2C4->passwordBuffer); + break; + case 0x1a: + sub_8006518(gUnknown_203B2C4->unk3BC); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_8031D70(gUnknown_203B2C4->unk218,0); + break; + case 0x1b: + // Please give this password to the friend that rescued your team. I also must save your adventure + sub_80141B4(gUnknown_80DF3B4,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case DISPLAY_THANK_YOU_PASSWORD: + // Ok. Here is your Thank You Mail Password + sub_80141B4(gUnknown_80DF418,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case 0x24: + // I need to save your adventure + sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case 0x20: + // There we go. I'm all done. + sub_80141B4(gUnknown_80DF46C,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case THANK_YOU_PASSWORD_SUCCESS: + switch(gUnknown_203B2C4->wonderMailMethod) + { + case WONDER_MAIL_GAME_LINK: + case WONDER_MAIL_PASSWORD: + case 6: + // A Thank You Mail has arrived from your friend + sub_80141B4(gUnknown_80DF4F4,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case 4: + break; + } + break; + case 0x22: + monName = GetMonSpecies(SPECIES_PELIPPER); + strcpy(gUnknown_203B2C4->unk53C,monName); + gUnknown_203B2C4->unk550 = 0x130; + gUnknown_203B2C4->unk552 = 2; + gUnknown_203B2C4->unk554 = 0; + uVar2 = sub_809539C(6,gUnknown_203B2C4->unk430); + puVar4 = sub_8095228(uVar2); + cVar1 = puVar4->unk20.itemIndex; + if (cVar1 != '\0') + gUnknown_203B2C4->unk558 = cVar1; + else + gUnknown_203B2C4->unk558 = 0; + gUnknown_203B2C4->unk55B = 1; + gUnknown_203B2C4->unk560 = sub_803C200(&puVar4->unk4, 0); + gUnknown_203B2C4->unk559 = 0; + gUnknown_203B2C4->unk55A = 0; + gUnknown_203B2C4->unk55C = 0; + sub_802F204(gUnknown_203B2C4->unk53C,0); + break; + case COMMUNICATING_THANK_YOU_MAIL: + // Communicating.. + nullsub_23(0); + sub_80141B4(gUnknown_80DF544,0,0,0); + break; + case 0x17: + // There. I've sent your thank-you mail. I need to save your adventure. + sub_80141B4(gUnknown_80DF594,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case PROMPT_CONNECT_GAME_LINK: + // Please connect the GBA systems with a Game Link Cable + sub_8014248(gUnknown_80DF5E4,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + case THANK_YOU_MAIL_COMMS_CLEANUP: + pokeStruct2 = sub_808D33C(); + sub_80922B4(auStack100, pokeStruct2->name, POKEMON_NAME_LENGTH); + ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF63C,auStack100); + sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case CONFIRM_ITEM_TO_SEND: + // The item you've chosen can't be exchanged later. Is that OK? + sub_8014248(gUnknown_80DF694,0,7,gUnknown_80DEEE4,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + case 0x29: + // I need to save your adventure + sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case 0x2a: + // I've saved your adventure + sub_80141B4(gUnknown_80DF6F0,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case PROMPT_ITEM_TO_SEND: + // Ok, please choose the item to be sent + sub_80141B4(gUnknown_80DF710,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case THANK_YOU_MAIL_STORAGE_EMPTY: + // Oh? Your storage space is empty + sub_8014248(gUnknown_80DF73C,0,0,gUnknown_80DEEBC,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + case PROMPT_REWARD_ITEM_TO_SEND: + // Would you like to choose a reward item from storage and send it with your mail? + sub_8014248(gUnknown_80DF77C,0,0,gUnknown_80DEE7C,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + case ITEM_EXISTS_ON_THANK_YOU_MAIL: + // Oh? You've already attached a reward item on this mail. + sub_80141B4(gUnknown_80DF7D4,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case PROMPT_RESEND_WITH_ATTACHED_ITEM: + // Would you like to send it again with the item you chose before? + sub_8014248(gUnknown_80DF870,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + case NO_THANK_YOU_MAIL: + // You don't seem to have a Thank-You Mail + sub_80141B4(gUnknown_80DF8B4,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case THANK_YOU_MAIL_MAIN_MENU: + // Hello. I handle Thank You Mail. How may I help You? + sub_8014248(gUnknown_80DF8EC,0,1,gThankYouMailMainMenuItems,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + case ANYTHING_ELSE_THANK_YOU_MAIN_MENU: + // May I help you with anything else? + sub_8014248(gUnknown_80DF928,0,1,gThankYouMailMainMenuItems,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + case 2: + // Please come see me anytime + sub_80141B4(gUnknown_80DF94C,0,&gUnknown_203B2C4->faceFile,0x10d); + break; + case SELECT_THANK_YOU_MAIL_COMMS: + switch(gUnknown_203B2C4->wonderMailMode){ + case WONDER_MAIL_MODE_SEND: + // How would you like to send your thank you mail? + sub_8014248(gUnknown_80DF96C,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + case WONDER_MAIL_MODE_RECEIVE: + // How would you like to recieve your friend's thank you mail? + sub_8014248(gUnknown_80DF9A4,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc); + break; + } + break; + } +} + +void SetThankYouMailMenuState(u32 newState) +{ + gUnknown_203B2C4->state = newState; + nullsub_131(); + UpdateThankYouMailText(); +} diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 04e9f73..ed52bb2 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -6,11 +6,11 @@ #include "sub_8095228.h" #include "wonder_mail.h" #include "memory.h" +#include "menu.h" #include "text.h" #include "team_inventory.h" extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; -extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4; extern struct TeamInventory *gTeamInventory_203B460; extern u32 sub_80144A4(s32 *r0); @@ -22,37 +22,15 @@ extern u8 sub_8030C20(u32); extern u32 sub_8031050(); extern void sub_80310B4(); extern u32 sub_8095350(); -extern u8 sub_801CF14(u32); -extern u32 sub_802F298(); - extern u8 sub_80A2824(u8); #include "data/wonder_mail_1.h" -const struct ItemSlot gUnknown_80DED44 = -{ - 1, 0, 0 -}; - - -extern struct MenuItem gUnknown_80DDA48[]; -extern const char gUnknown_80DEF04[]; -extern const char gUnknown_80DEF28[]; -extern const char gUnknown_80DEF80[]; -extern const char gUnknown_80DEFDC[]; -extern const char gUnknown_80DF044[]; -extern const char gUnknown_80DF0A0[]; -extern const char gUnknown_80DF0E0[]; -extern const char gUnknown_80DF138[]; -extern const char gUnknown_80DF194[]; -extern struct MenuItem gUnknown_80DEE44[]; -extern const char gUnknown_80DF1C0[]; -extern const char gUnknown_80DF208[]; -extern const char gUnknown_80DF0A0[]; extern u8 sub_809539C(u32, u32); extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; +extern struct MenuItem gUnknown_80DDA48[]; extern s32 sub_8095190(void); extern u32 sub_8095324(u32); @@ -91,56 +69,6 @@ extern u8 sub_8024108(u32); extern u32 sub_8031DCC(); extern void sub_8031E10(); extern void sub_8031E00(); -extern s32 sub_80953D4(u32); -extern void sub_802B2BC(u32); - -extern void sub_802AAE4(); -extern void sub_802AAC8(); -extern void sub_802AAAC(); -extern void sub_802AB7C(); -extern void sub_802AA28(); -extern void sub_802A98C(); -extern void sub_802A9A8(); -extern void sub_802A910(); -extern void sub_802A8BC(); -extern void sub_802A8A0(); -extern void sub_802A798(); -extern void sub_802A474(); -extern void sub_802A090(); -extern void sub_802A158(); -extern void sub_802A0C8(); -extern void sub_802A174(); -extern void sub_802A230(); -extern void sub_802A28C(); -extern void sub_802A39C(); -extern void sub_802A33C(); -extern void sub_802A740(); -extern void sub_802A6F0(); -extern void sub_802A68C(); -extern void sub_802A4D4(); -extern void sub_802A050(); -extern void sub_802A4AC(); -extern void sub_802A458(); -extern void sub_802A75C(); -extern void sub_8029F98(); -extern void sub_8029EA8(); -extern void sub_802A490(); -extern void sub_802AB60(); -extern void sub_802AB98(); -extern void sub_802A718(); -extern void sub_802A6B4(); -extern void sub_802A4F0(); -extern void sub_802A50C(); -extern void sub_802A9FC(); -extern void sub_802A828(); -extern void sub_802A850(); -extern void sub_8030DE4(); -extern void sub_801B450(); -extern void sub_803084C(); -extern void sub_801CBB8(); -extern void sub_80155F0(); -extern void sub_8031E10(); -extern void sub_802F2C0(); extern u16 gUnknown_80E5990[]; extern s32 sub_8001658(u32, u32); extern u32 gUnknown_80E4A40[]; @@ -150,33 +78,11 @@ extern void sub_8099A5C(u32, u32, u32*); extern void sub_8099AFC(u32, u32, u32*); extern void ResetUnusedInputStruct(); extern void sub_8099690(u32); -extern void sub_80141B4(const char *r0, u32, u32 *r1, u32); -extern u32 sub_80144A4(s32 *r0); -extern u32 sub_8031DCC(void); -extern void sub_8031E00(void); extern void sub_8031E10(void); -extern void sub_8030D40(u8, u32); -extern u32 sub_8030768(u32); extern void sub_803084C(void); -extern s8 sub_80307EC(void); -extern u8 sub_8012FD8(u32 *r0); -extern void sub_8013114(u32 *, s32 *); -extern void sub_8030810(u32); -extern u32 sub_8030DA0(); extern void sub_8030DE4(); -extern void sub_803092C(); -extern void sub_8035CF4(u32 *, u32, u32); -extern u32 sub_801CA08(u32); -extern void sub_801CBB8(); -extern void sub_801B3C0(struct ItemSlot *); -extern u8 sub_801CB24(); -extern void sub_801B450(); -extern u32 sub_801B410(); -extern void sub_801CB5C(u32); -extern void sub_801CCD8(); -extern void sub_8011C28(u32); void sub_8028B04(u32 r0) @@ -1294,1018 +1200,3 @@ void sub_8029B34(void) sub_8028B04(3); } -u32 sub_8029B50(void) -{ - char *monName; - struct OpenedFile *faceFile; - s32 uVar2; - int counter; - struct unkStruct_8095228 *temp; - - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - gUnknown_203B2C4 = MemoryAlloc(sizeof(struct WonderMailStruct_203B2C4), 8); - MemoryFill8((u8 *)gUnknown_203B2C4, 0, sizeof(struct WonderMailStruct_203B2C4)); - - CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); - monName = GetMonSpecies(SPECIES_PELIPPER); - strcpy(gAvailablePokemonNames, monName); - faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER); - - gUnknown_203B2C4->faceFile = faceFile; - gUnknown_203B2C4->faceData = faceFile->data; - gUnknown_203B2C4->unk42C = 0; - gUnknown_203B2C4->unk42D = 0; - gUnknown_203B2C4->unk42E = 0; - gUnknown_203B2C4->unk428 = 2; - gUnknown_203B2C4->unk42A = 8; - - for(counter = 0; counter < PASSWORD_BUFFER_SIZE; counter++){ - gUnknown_203B2C4->passwordBuffer[counter] = 0; - } - - gUnknown_203B2C4->unk534 = 3; - gUnknown_203B2C4->unk538 = 1; - - uVar2 = sub_80953D4(6); - if (uVar2 != -1) { - temp = sub_8095228(uVar2); - gUnknown_203B2C4->unk41C = temp->unk20; - gUnknown_203B2C4->unk218 = uVar2; - gUnknown_203B2C4->unk430 = temp->unk10; - sub_802B2BC(5); - } - else { - gUnknown_203B2C4->unk41C = gUnknown_80DED44; - gUnknown_203B2C4->unk218 = -1; - sub_802B2BC(0); - } - gUnknown_203B2C4->unk4 = 0x2b; - return 1; -} - -u32 sub_8029C98(void) -{ - - switch(gUnknown_203B2C4->state) { - case 5: - sub_802AB7C(); - break; - case 0x1e: - sub_8029F98(); - break; - case 0x1f: - sub_8029EA8(); - break; - case 0xe: - sub_802A090(); - break; - case 0xf: - sub_802A158(); - break; - case 0x11: - sub_802A174(); - break; - case 0x12: - sub_802A230(); - break; - case 0x10: - sub_802A0C8(); - break; - case 0x13: - sub_802A28C(); - break; - case 0x14: - sub_802A39C(); - break; - case 0x15: - sub_802A33C(); - break; - case 0x1c: - sub_802A458(); - break; - case 0x1b: - sub_802A4AC(); - break; - case 0x19: - sub_802A4D4(); - break; - case 0x1a: - sub_802A050(); - break; - case 0x28: - sub_802A9FC(); - break; - case 0x26: - sub_802A4F0(); - break; - case 0x27: - sub_802A50C(); - break; - case 0x25: - sub_802A6B4(); - break; - case 0x24: - sub_802A718(); - break; - case 0x21: - sub_802AB60(); - break; - case 0x22: - sub_802AB98(); - break; - case 0x16: - sub_802A740(); - break; - case 0x18: - sub_802A68C(); - break; - case 0x17: - sub_802A6F0(); - break; - case 0x1d: - sub_802A75C(); - break; - case 0x20: - sub_802A490(); - break; - case 0xd: - sub_802A474(); - break; - case 0xc: - sub_802A798(); - break; - case 0x29: - sub_802A828(); - break; - case 0x2a: - sub_802A850(); - break; - case 0xb: - sub_802A8A0(); - break; - case 10: - sub_802A8BC(); - break; - case 9: - sub_802A910(); - break; - case 7: - sub_802A98C(); - break; - case 8: - sub_802A9A8(); - break; - case 6: - sub_802AA28(); - break; - case 4: - sub_802AAAC(); - break; - case 0: - case 1: - sub_802AAE4(); - break; - case 2: - sub_802AAC8(); - break; - case 3: - return 3; - } - return 0; -} - -void sub_8029E60(void) -{ - if(gUnknown_203B2C4 != NULL) - { - CloseFile(gUnknown_203B2C4->faceFile); - MemoryFree(gUnknown_203B2C4); - gUnknown_203B2C4 = NULL; - sub_8030DE4(); - sub_801B450(); - sub_803084C(); - sub_801CBB8(); - sub_80155F0(); - sub_8031E10(); - sub_802F2C0(); - } -} - -void sub_8029EA8(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(1); - } -} - -// Is this used for only Thank-You Mail?? -void PrintWonderMailLinkError(u32 param_1) -{ - switch(param_1) { - case 3: - sub_80141B4(gUnknown_80DEF28, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 4: - sub_80141B4(gUnknown_80DEF80, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 6: - sub_80141B4(gUnknown_80DEFDC, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 7: - sub_80141B4(gUnknown_80DF044, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 9: - sub_80141B4(gUnknown_80DF0A0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 11: - sub_80141B4(gUnknown_80DF0A0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 13: - sub_80141B4(gUnknown_80DF0E0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 1: - case 2: - case 5: - case 14: - sub_80141B4(gUnknown_80DEF04, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 15: - sub_80141B4(gUnknown_80DF138, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 0: - default: - break; - } -} - -void sub_8029F98(void) -{ - s32 auStack20; - - if (sub_80144A4(&auStack20) != 0) { - return; - } - MemoryFill8((u8 *)&gUnknown_203B2C4->unk41C, 0, sizeof(struct ItemSlot)); - gUnknown_203B2C4->unk41C.itemIndex = 0; - gUnknown_203B2C4->unk41C.numItems = 1; - gUnknown_203B2C4->unk41C.unk0 = 0; - if (gUnknown_203B2C4->linkError == 0) { - switch(gUnknown_203B2C4->unk40) - { - case 6: - switch(gUnknown_203B2C4->unk534) - { - case 3: - case 5: - case 6: - // "Thank-You Mail has been sent" - sub_80141B4(gUnknown_80DF194, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - break; - case 4: - default: - break; - } - sub_802B2BC(0xD); - break; - case 7: - sub_802B2BC(0x21); - break; - default: - break; - } - } - else - { - PrintWonderMailLinkError(gUnknown_203B2C4->linkError); - sub_802B2BC(0x1F); - } -} - -void sub_802A050(void) -{ - switch(sub_8031DCC()) - { - - case 3: - case 2: - sub_8031E10(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); - sub_802B2BC(0x1B); - break; - case 1: - sub_8031E00(); - break; - default: - return; - } -} - -void sub_802A090(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 7: - sub_802B2BC(6); - break; - case 8: - case 0: - sub_802B2BC(1); - break; - default: - break; - } - } -} - -void sub_802A0C8(void) -{ - switch(sub_8030768(1)) - { - case 2: - sub_803084C(); - sub_802B2BC(1); - break; - case 3: - gUnknown_203B2C4->unk218 = sub_80307EC(); - sub_802B2BC(0x11); - break; - case 4: - gUnknown_203B2C4->unk4 = 0x10; - gUnknown_203B2C4->unk218 = sub_80307EC(); - sub_8006518(gUnknown_203B2C4->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - sub_8030D40(gUnknown_203B2C4->unk218,0); - sub_802B2BC(0x12); - break; - } -} - -void sub_802A158(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0x10); - } -} - -void sub_802A174(void) -{ - s32 menuAction; - - menuAction = -1; - sub_8030768(0); - if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) { - sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction); - } - - switch(menuAction) - { - case 0xB: - sub_803084C(); - sub_802B2BC(0xe); - break; - case 0xC: - gUnknown_203B2C4->unk4 = 0x2b; - sub_8006518(gUnknown_203B2C4->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - sub_8030D40(gUnknown_203B2C4->unk218,0); - sub_802B2BC(0x12); - break; - case 0: - case 0xD: - sub_8035CC0(gUnknown_203B2C4->unk35C,2); - sub_8030810(1); - sub_802B2BC(0x10); - default: - break; - } -} - -void sub_802A230(void) -{ - switch(sub_8030DA0()) - { - case 2: - case 3: - sub_8030DE4(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); - sub_803092C(); - if (gUnknown_203B2C4->unk4 == 0x2b) { - sub_8035CF4(&gUnknown_203B2C4->unk21C, 3, 1); - sub_802B2BC(0x11); - } - else { - sub_802B2BC(gUnknown_203B2C4->unk4); - } - break; - default: - break; - } -} - -void sub_802A28C(void) -{ - - gUnknown_203B2C4->unk41C.itemIndex = 0; - gUnknown_203B2C4->unk41C.numItems = 1; - gUnknown_203B2C4->unk41C.unk0 = 0; - - switch(sub_801CA08(1)) - { - case 2: - sub_801CBB8(); - sub_802B2BC(1); - break; - case 3: - gUnknown_203B2C4->unk41C.itemIndex = sub_801CB24(); - sub_802B2BC(0x14); - break; - case 4: - gUnknown_203B2C4->unk4 = 0x13; - gUnknown_203B2C4->unk41C.itemIndex = sub_801CB24(); - sub_8006518(gUnknown_203B2C4->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - sub_801B3C0(&gUnknown_203B2C4->unk41C); - sub_802B2BC(0x15); - break; - } -} - -void sub_802A33C(void) -{ - switch(sub_801B410()) - { - case 2: - case 3: - sub_801B450(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2C4->unk3BC,1,1); - sub_801CB5C(1); - if (gUnknown_203B2C4->unk4 == 0x2b) { - sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); - sub_802B2BC(0x14); - } - else { - sub_802B2BC(gUnknown_203B2C4->unk4); - } - break; - case 1: - default: - break; - } -} - -void sub_802A39C(void) -{ - s32 menuAction; - - menuAction = -1; - sub_801CA08(0); - if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) { - sub_8013114(&gUnknown_203B2C4->unk30C, &menuAction); - } - - switch(menuAction) - { - case 0xB: - sub_801CBB8(); - sub_802B2BC(0xC); - break; - case 0xC: - gUnknown_203B2C4->unk4 = 0x2b; - sub_8006518(gUnknown_203B2C4->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - sub_801B3C0(&gUnknown_203B2C4->unk41C); - sub_802B2BC(0x15); - break; - case 0: - case 0xD: - sub_8035CC0(gUnknown_203B2C4->unk35C, 3); - sub_801CCD8(); - sub_802B2BC(0x13); - default: - break; - } -} - -void sub_802A458(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0xD); - } -} - -void sub_802A474(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0x3); - } -} - -void sub_802A490(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0x3); - } -} - -void sub_802A4AC(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0x18); - sub_8011C28(1); - PrepareSavePakWrite(SPECIES_NONE); - } -} - -void sub_802A4D4(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0x1A); - } -} - -void sub_802A4F0(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0x27); - } -} - -void sub_802A50C(void) -{ - u8 uVar1; - struct unkStruct_8095228 *puVar5; - u32 return_var; - struct unkStruct_8095228 temp; - - return_var = sub_80154F0(); - MemoryFill8((u8 *)&temp, 0, sizeof(struct unkStruct_8095228)); - switch(return_var) - { - case 3: - switch(sub_8039068(0x20,gUnknown_203B2C4->passwordBuffer,&temp.unk0)) - { - case 0x11: - // Wrong password - sub_8014248(gUnknown_80DF1C0, 0, 7, gUnknown_80DEE44, 0, 4, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0xc); - sub_802B2BC(0x28); - break; - case 0x14: - // Incorrect password - sub_80141B4(gUnknown_80DF208, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - sub_802B2BC(0x1f); - break; - case 0xB: - // Not eligible to receive - sub_80141B4(gUnknown_80DF0A0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d); - sub_802B2BC(0x1f); - break; - case 0x18: - // I think this is when password works successfully - uVar1 = sub_809539C(4,temp.unk10); - puVar5 = sub_8095228(uVar1); - *puVar5 = temp; - puVar5->unk0 = 6; - gUnknown_203B2C4->unk430 = temp.unk10; - sub_802B2BC(0x21); - break; - default: - case 7: - break; - } - sub_80155F0(); - break; - case 2: - sub_80155F0(); - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B2C4->unk3BC, 1, 1); - sub_802B2BC(1); - break; - } -} - -void sub_802A68C(void) -{ - s32 temp; - - if (sub_80144A4(&temp) == 0) { - if (!WriteSavePak()) { - FinishWriteSavePak(); - sub_802B2BC(0xd); - } - } -} - -void sub_802A6B4(void) -{ - int saveStatus; - u32 temp; - - if (sub_80144A4(&temp) == 0) { - if (!WriteSavePak()) { - saveStatus = GetSavePakStatus(); - FinishWriteSavePak(); - if (saveStatus == SAVE_COMPLETED) { - sub_802B2BC(0x20); - } - else { - sub_802B2BC(3); - } - } - } -} - -void sub_802A6F0(void) -{ - s32 temp; - - if (sub_80144A4(&temp) == 0) { - sub_802B2BC(0x18); - sub_8011C28(1); - PrepareSavePakWrite(SPECIES_NONE); - } -} - -void sub_802A718(void) -{ - s32 temp; - - if (sub_80144A4(&temp) == 0) { - sub_802B2BC(0x25); - sub_8011C28(1); - PrepareSavePakWrite(SPECIES_NONE); - } -} - -void sub_802A740(void) -{ - s32 temp; - - if (sub_80144A4(&temp) == 0) { - sub_802B2BC(0x1e); - } -} - -void sub_802A75C(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 7: - // NOTE: if statement is needed to match - if(gUnknown_203B2C4->unk538) - sub_802B2BC(0x16); - else - sub_802B2BC(0x16); - break; - case 0: - sub_802B2BC(1); - break; - } - } -} - -void sub_802A798(void) -{ - s32 temp; - struct unkStruct_8095228 *return_var; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 7: - return_var = sub_8095228(gUnknown_203B2C4->unk218); - if(gUnknown_203B2C4->unk41C.itemIndex != 0) - { - return_var->unk20 = gUnknown_203B2C4->unk41C; - } - gTeamInventory_203B460->teamStorage[gUnknown_203B2C4->unk41C.itemIndex]--; - sub_802B2BC(0x29); - break; - case 8: - sub_802B2BC(0xB); - break; - case 0: - sub_802B2BC(1); - break; - } - } -} - -void sub_802A828(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0x2A); - sub_8011C28(1); - PrepareSavePakWrite(SPECIES_NONE); - } -} - -void sub_802A850(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - if(!WriteSavePak()) - { - FinishWriteSavePak(); - switch(gUnknown_203B2C4->unk534) - { - case 3: - case 4: - sub_802B2BC(0x1D); - break; - case 5: - sub_802B2BC(0x19); - break; - } - } - } -} - -void sub_802A8A0(void) -{ - s32 temp; - - if (sub_80144A4(&temp) == 0) { - sub_802B2BC(0x13); - } -} - -void sub_802A8BC(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 0xA: - switch(gUnknown_203B2C4->unk534) - { - case 3: - case 4: - sub_802B2BC(0x1D); - break; - case 5: - sub_802B2BC(0x19); - break; - } - break; - case 0: - sub_802B2BC(1); - break; - } - } -} - -void sub_802A910(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 9: - if(sub_801CF14(0) != 0) - { - sub_802B2BC(0xA); - } - else - { - sub_802B2BC(0xB); - } - break; - case 0xA: - switch(gUnknown_203B2C4->unk534) - { - case 3: - case 4: - sub_802B2BC(0x1D); - break; - case 5: - sub_802B2BC(0x19); - break; - } - break; - case 0: - sub_802B2BC(1); - break; - } - } -} - -void sub_802A98C(void) -{ - s32 temp; - - if (sub_80144A4(&temp) == 0) { - sub_802B2BC(0x8); - } -} - -void sub_802A9A8(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 0x7: - switch(gUnknown_203B2C4->unk534) - { - case 3: - case 4: - sub_802B2BC(0x1D); - break; - case 5: - sub_802B2BC(0x19); - break; - } - break; - case 0: - sub_802B2BC(1); - break; - } - } -} - -void sub_802A9FC(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 0x7: - sub_802B2BC(0x26); - break; - case 0: - sub_802B2BC(1); - break; - } - } -} - -void sub_802AA28(void) -{ - s32 temp; - struct unkStruct_8095228 *return_var; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 3: - case 4: - case 5: - gUnknown_203B2C4->unk534 = temp; - switch(gUnknown_203B2C4->unk538) - { - case 1: - return_var = sub_8095228(sub_80953D4(5)); - if(return_var->unk20.itemIndex != 0) - { - sub_802B2BC(7); - } - else - { - sub_802B2BC(9); - } - break; - default: - if(gUnknown_203B2C4->unk534 == 5) - { - sub_802B2BC(0x26); - } - else - { - sub_802B2BC(0x1D); - } - break; - } - break; - case 0: - sub_802B2BC(1); - break; - } - } -} - -void sub_802AAAC(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(1); - } -} - -void sub_802AAC8(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(3); - } -} - -void sub_802AAE4(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - switch(temp) - { - case 1: - gUnknown_203B2C4->unk40 = 6; - gUnknown_203B2C4->unk538 = 1; - if(sub_8095324(5) == 0) - { - sub_802B2BC(4); - } - else - { - sub_802B2BC(0xF); - } - break; - case 2: - gUnknown_203B2C4->unk40 = 7; - gUnknown_203B2C4->unk538 = 2; - sub_802B2BC(6); - break; - case 0: - sub_802B2BC(2); - break; - } - } -} - -void sub_802AB60(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0x22); - } -} - -void sub_802AB7C(void) -{ - s32 temp; - if(sub_80144A4(&temp) == 0) - { - sub_802B2BC(0x22); - } -} - - -void sub_802AB98(void) -{ - const char *monName; - switch(sub_802F298()) - { - case 3: - sub_802F2C0(); - CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); - monName = GetMonSpecies(SPECIES_PELIPPER); - strcpy(gAvailablePokemonNames, monName); - sub_8095240(sub_809539C(6, gUnknown_203B2C4->unk430)); - sub_802B2BC(0x24); - break; - default: - break; - } -} - -void nullsub_131(void) -{ -} diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index f5bcd12..cca9794 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -9,8 +9,6 @@ #include "sub_8095228.h" #include "wonder_mail.h" -extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4; - struct unkStruct_203B2C8 { // size: 0x140 @@ -90,325 +88,61 @@ extern struct UnkTextStruct2 gUnknown_80DFBD0; extern struct unkStruct_203B2C8 *gUnknown_203B2C8; -extern struct MenuItem gUnknown_80DED78[]; -extern struct MenuItem gUnknown_80DEDB8[]; -extern u8 gUnknown_80DF6F0[]; -extern u8 gUnknown_80DF44C[]; -extern u8 gUnknown_80DF380[]; -extern u8 gUnknown_80DF544[]; -extern u8 gUnknown_80DF96C[]; -extern u8 gUnknown_80DF9A4[]; -extern u8 gUnknown_80DF4F4[]; -extern u8 gUnknown_80DF46C[]; -extern u8 gUnknown_80DF94C[]; -extern u8 gUnknown_80DF928[]; -extern u8 gUnknown_80DF8EC[]; -extern u8 gUnknown_80DF7D4[]; -extern u8 gUnknown_80DF8B4[]; -extern u8 gUnknown_80DF3B4[]; -extern u8 gUnknown_80DF63C[]; -extern u8 gUnknown_80DF250[]; -extern u8 gUnknown_80DF594[]; -extern u8 gUnknown_80DF870[]; -extern u8 gUnknown_80DF77C[]; -extern u8 gUnknown_80DF5E4[]; -extern u8 gUnknown_80DF710[]; -extern u8 gUnknown_80DF694[]; -extern u8 gUnknown_80DF73C[]; -extern u8 gUnknown_80DF330[]; -extern u8 gUnknown_80DF418[]; -extern u8 gUnknown_80DF304[]; -extern struct UnkTextStruct2 gUnknown_80DED60; -extern struct UnkTextStruct2 gUnknown_80DED48; -extern struct MenuItem gUnknown_80DEE44[]; -extern struct MenuItem gUnknown_80DEE08[]; -extern struct MenuItem gUnknown_80DEE7C[]; -extern struct MenuItem gUnknown_80DEEBC[]; -extern struct MenuItem gUnknown_80DEEE4[]; -extern struct MenuItem gUnknown_80DEE60[]; - -extern void sub_8031D70(u8, u32); -extern u8 sub_809539C(u32, u32); -extern u8 sub_800D588(void); -extern u32 sub_803C200(u8 *, u32); - -extern struct PokemonStruct *sub_808D33C(void); - -extern void sub_802F204(u8 *, u32); -extern void sub_80151C0(u32, u8 *); -extern void xxx_call_start_bg_music(void); -extern void sub_803092C(void); -extern void sub_801CCD8(void); -extern void sub_8011830(void); -extern void nullsub_23(u32); -extern void sub_80922B4(u8 *, u8 *, u32); -extern s32 sub_8037B28(u32); -extern u32 sub_8030894(void); -extern u32 sub_801D008(void); -extern void sub_80306A8(u32, u32, u32, u32); -extern void sub_8035CF4(u32 *, u32, u32); -extern s32 sub_8037D64(u32, void *, void *); -extern s32 sub_80381F4(u32, void *, void *); -extern void sub_801C8C4(u32, u32, s32 * , u32); - - -void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...); -extern void SetMenuItems(void *menu, struct UnkTextStruct2 *, u32, const struct UnkTextStruct2 *, const struct MenuItem *entries, u32, u32, u32); extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); extern void sub_80920D8(u8 *buffer); -extern void sub_8097790(); +extern void sub_8097790(void); extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; -extern u32 sub_802F298(); -extern void sub_802F2C0(); +extern u32 sub_802F298(void); +extern void sub_802F2C0(void); extern u8 sub_8099394(u8 *); extern void sub_802B548(u32); extern u32 sub_80144A4(s32 *); -extern void sub_802B560(); -extern void sub_802B57C(); -extern void sub_802B5B8(); -extern void sub_802B5FC(); -extern void sub_802B624(); +extern void sub_802B560(void); +extern void sub_802B57C(void); +extern void sub_802B5B8(void); +extern void sub_802B5FC(void); +extern void sub_802B624(void); void ExpandPlaceholdersBuffer(u8 *buffer, const char *text, ...); extern void sub_802F204(u8 *, u32); extern void sub_803C37C(u8 *, u32, u8 *); extern u32 sub_803C200(u8 *, u32); extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); -extern const char gUnknown_80DFAA8[]; -extern const char gUnknown_80DFB14[]; -extern const char gUnknown_80DF9F0[]; -extern const char gUnknown_80DF9F8[]; extern u8 sub_80023E4(u32); - extern void nullsub_131(void); extern void sub_802ABF8(void); -void sub_802ABF8(void) -{ - char cVar1; - char *monName; - u8 auStack180 [80]; - u8 auStack100 [80]; - u8 uVar2; - struct PokemonStruct *pokeStruct; - struct PokemonStruct *pokeStruct2; - s32 iVar6; - struct unkStruct_8095228 *puVar4; +ALIGNED(4) const char gUnknown_80DF9F0[] = "????"; +// NOTE: had to be pre-proc'd to match +ALIGNED(4) const char gUnknown_80DF9F8[] = _( + " Oh~2c hello!\n" + "Your rescue mission went well~2c didn~27t it?\n" + "I wouldn~27t expect any less~2c #CG%s#R!#P" + " Well~2c well!\n" + "Here is your reward from the Pokémon\n" + "Rescue Organization!"); + +ALIGNED(4) const char gUnknown_80DFAA8[] = + " I hope you will keep on\n" + "rescuing your friends in\n" + "dire straits.#P" + " And now~2c I must save\n" + "your adventure."; + +ALIGNED(4) const char gUnknown_80DFB14[] = + " Oh~2c yes~2c that~27s right.\n" + "Please don~27t forget to send an #CGA-OK Mail#R\n" + "to the friend you just rescued.#P" + " Please give me a shout if\n" + "you would like to send #CGA-OK Mail#R."; + +ALIGNED(4) const char wonder_mail_2_fill[] = "pksdir0"; - - switch(gUnknown_203B2C4->state) { - case 5: - pokeStruct = sub_808D33C(); - sub_80922B4(auStack180,pokeStruct->name, POKEMON_NAME_LENGTH); - ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF250,auStack180); - sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0xe: - sub_8014248(gUnknown_80DF304,0,7,gUnknown_80DEE60,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - case 0xf: - sub_80141B4(gUnknown_80DF330,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0x10: - if (sub_8030894() != 0) - break; - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - sub_80306A8(5,0,0,6); - break; - case 0x11: - sub_8006518(gUnknown_203B2C4->unk35C); - SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED60,gUnknown_80DED78,1,0,0); - sub_803092C(); - sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); - break; - case 0x13: - if (sub_801D008() != 0) - break; - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - // TODO: Probably a macro - Pika - { - struct {u16 a; u16 b;} local_x = {3, 2}; - sub_801C8C4(0, 1, (s32 *)&local_x, 9); - } - break; - case 0x14: - sub_8006518(gUnknown_203B2C4->unk35C); - SetMenuItems(&gUnknown_203B2C4->unk21C,gUnknown_203B2C4->unk35C,3,&gUnknown_80DED48,gUnknown_80DED78,1,0,0); - sub_801CCD8(); - sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1); - break; - case 0x1e: - gUnknown_203B2C4->linkError = 0; - sub_8011830(); - iVar6 = sub_8037B28(gUnknown_203B2C4->unk40); - gUnknown_203B2C4->linkError = iVar6; - if (iVar6 != 0) goto _0802AEE6; - switch(gUnknown_203B2C4->unk40) - { - case 6: - MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228)); - gUnknown_203B2C4->unk1B8 = *sub_8095228(gUnknown_203B2C4->unk218); - gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8); - break; - case 7: - MemoryFill8((u8 *)&gUnknown_203B2C4->unk1B8,0, sizeof(struct unkStruct_8095228)); - MemoryFill8((u8 *)&gUnknown_203B2C4->unk1E8,0, sizeof(struct unkStruct_8095228)); - gUnknown_203B2C4->linkError = sub_8037D64(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8); - break; - } - if (gUnknown_203B2C4->linkError == 0){ - switch(gUnknown_203B2C4->unk40){ - case 6: - case 7: - gUnknown_203B2C4->linkError = sub_80381F4(gUnknown_203B2C4->unk40,&gUnknown_203B2C4->unk1B8,&gUnknown_203B2C4->unk1E8); - if ( sub_800D588() != '\0') { - gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1E8.unk10; - } - else { - gUnknown_203B2C4->unk430 = gUnknown_203B2C4->unk1B8.unk10; - } - break; - } - } - _0802AEE6: - xxx_call_start_bg_music(); - break; - case 0x26: - sub_80141B4(gUnknown_80DF380,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0x27: - sub_8006518(gUnknown_203B2C4->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - sub_80151C0(4,gUnknown_203B2C4->passwordBuffer); - break; - case 0x1a: - sub_8006518(gUnknown_203B2C4->unk3BC); - ResetUnusedInputStruct(); - sub_800641C(0,1,1); - sub_8031D70(gUnknown_203B2C4->unk218,0); - break; - case 0x1b: - sub_80141B4(gUnknown_80DF3B4,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0x19: - sub_80141B4(gUnknown_80DF418,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0x24: - sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0x20: - sub_80141B4(gUnknown_80DF46C,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0x21: - switch(gUnknown_203B2C4->unk534) - { - case 3: - case 5: - case 6: - sub_80141B4(gUnknown_80DF4F4,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 4: - break; - } - break; - case 0x22: - monName = GetMonSpecies(SPECIES_PELIPPER); - strcpy(gUnknown_203B2C4->unk53C,monName); - gUnknown_203B2C4->unk550 = 0x130; - gUnknown_203B2C4->unk552 = 2; - gUnknown_203B2C4->unk554 = 0; - uVar2 = sub_809539C(6,gUnknown_203B2C4->unk430); - puVar4 = sub_8095228(uVar2); - cVar1 = puVar4->unk20.itemIndex; - if (cVar1 != '\0') - gUnknown_203B2C4->unk558 = cVar1; - else - gUnknown_203B2C4->unk558 = 0; - gUnknown_203B2C4->unk55B = 1; - gUnknown_203B2C4->unk560 = sub_803C200(&puVar4->unk4, 0); - gUnknown_203B2C4->unk559 = 0; - gUnknown_203B2C4->unk55A = 0; - gUnknown_203B2C4->unk55C = 0; - sub_802F204(gUnknown_203B2C4->unk53C,0); - break; - case 0x16: - nullsub_23(0); - sub_80141B4(gUnknown_80DF544,0,0,0); - break; - case 0x17: - sub_80141B4(gUnknown_80DF594,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0x1d: - sub_8014248(gUnknown_80DF5E4,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - case 0xd: - pokeStruct2 = sub_808D33C(); - sub_80922B4(auStack100, pokeStruct2->name, POKEMON_NAME_LENGTH); - ExpandPlaceholdersBuffer(gUnknown_203B2C4->formattedString,gUnknown_80DF63C,auStack100); - sub_80141B4(gUnknown_203B2C4->formattedString,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0xc: - sub_8014248(gUnknown_80DF694,0,7,gUnknown_80DEEE4,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - case 0x29: - sub_80141B4(gUnknown_80DF44C,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0x2a: - sub_80141B4(gUnknown_80DF6F0,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0xb: - sub_80141B4(gUnknown_80DF710,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 10: - sub_8014248(gUnknown_80DF73C,0,0,gUnknown_80DEEBC,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - case 9: - sub_8014248(gUnknown_80DF77C,0,0,gUnknown_80DEE7C,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - case 7: - sub_80141B4(gUnknown_80DF7D4,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 8: - sub_8014248(gUnknown_80DF870,0,7,gUnknown_80DEE44,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - case 4: - sub_80141B4(gUnknown_80DF8B4,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 0: - sub_8014248(gUnknown_80DF8EC,0,1,gUnknown_80DEDB8,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - case 1: - sub_8014248(gUnknown_80DF928,0,1,gUnknown_80DEDB8,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - case 2: - sub_80141B4(gUnknown_80DF94C,0,&gUnknown_203B2C4->faceFile,0x10d); - break; - case 6: - switch(gUnknown_203B2C4->unk538){ - case 1: - sub_8014248(gUnknown_80DF96C,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - case 2: - sub_8014248(gUnknown_80DF9A4,0,3,gUnknown_80DEE08,0,4,0,&gUnknown_203B2C4->faceFile,0xc); - break; - } - break; - } -} -void sub_802B2BC(u32 newState) -{ - gUnknown_203B2C4->state = newState; - nullsub_131(); - sub_802ABF8(); -} u32 sub_802B2D4(void) { @@ -494,7 +228,7 @@ void sub_802B3E0(void) } // Print and expand placeholders? ExpandPlaceholdersBuffer(gUnknown_203B2C8->teamName,gUnknown_80DF9F8,teamNameBuffer); - // Display to screen with Pelliper face + // Display to screen with Peliper face sub_80141B4(gUnknown_203B2C8->teamName, 0, &gUnknown_203B2C8->faceFile, 0x10d); break; case 1: @@ -607,7 +341,7 @@ u32 sub_802B640(u32 r0, struct UnkTextStruct2_sub *r1, u32 r2) { if(gUnknown_203B2CC == NULL) { - gUnknown_203B2CC = MemoryAlloc(0xD4, 8); + gUnknown_203B2CC = MemoryAlloc(sizeof(struct unkStruct_203B2CC), 8); } gUnknown_203B2CC->unk6C = r0; gUnknown_203B2CC->unk70 = &gUnknown_203B2CC->unk74[r0]; diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c index 2c8e6bb..87166b9 100644 --- a/src/wonder_mail_main_menu.c +++ b/src/wonder_mail_main_menu.c @@ -6,9 +6,14 @@ #include "sub_8095228.h" #include "wonder_mail.h" -#define WONDER_MAIL_MAIN_SCREEN 4 +#define SEND_WONDER_MAIL_MAIN_SCREEN 1 +#define SEND_GAME_LINK_CABLE 2 +#define RECEIVE_WONDER_MAIL_MAIN_SCREEN 4 #define EXIT_TO_MAIN_MENU 5 +#define WONDER_MAIL_SENT 7 +#define GAME_LINK_CABLE_MENU 8 #define COMMUNICATION_ERROR 10 +#define RECEIVE_GAME_LINK_CABLE 12 #define PASSWORD_SUCCESS 13 #define PREPARE_SAVE 14 #define SAVE_ADVENTURE 15 @@ -17,6 +22,17 @@ #define PASSWORD_INVALID 19 #define PASSWORD_ENTRY_SCREEN 18 + +struct unkStruct_803B344 +{ + // size: 0xB4 + struct WonderMail unk0; + u8* unk14; + u8* unk18; + u8 fill1C[0x3C - 0x1C]; + u8 unk3C[0x78]; +}; + struct unkStruct_203B3E8 { // size: 0x49C @@ -31,15 +47,21 @@ struct unkStruct_203B3E8 struct UnkTextStruct2 unk1EC[4]; u32 unk24C; u32 wonderMailStatus; - u8 fill254[0x3C0 - 0x254]; - struct WonderMail unk3C0; - u8 fill3D0[0x490 - 0x3D4]; - u32 unk490; - u32 unk494; + + struct unkStruct_803B344 unk254; + + struct unkStruct_803B344 unk308; + u8 unk3BC; + u8 fill3BD[0x3C0 - 0x3BD]; + + struct unkStruct_803B344 unk3C0; + + struct WonderMail unk474; + u8 **unk488; + u8 *unk48C; + s32 wonderMailMethod; + u32 wonderMailMode; u8 unk498; - u8 unk499; - u8 unk49A; - u8 unk49B; }; extern u32 sub_8095324(u32); @@ -54,6 +76,39 @@ extern void sub_801CBB8(void); extern void sub_80155F0(void); extern void sub_8031E10(void); +extern u8 sub_800D588(void); +extern s32 sub_8037D64(u32, void *, void *); +extern s32 sub_80381F4(u32, void *, void *); +extern void sub_8011830(void); +extern void sub_80151C0(u32, u8 *); +extern void xxx_call_start_bg_music(void); +extern void sub_8014248(u8 *, u32, u32, u8 *, u32, u32, u32, u32, u32); +extern void nullsub_23(u32); +extern void sub_802EF48(void); +extern void sub_802D098(struct WonderMail *); + + +extern struct unkStruct_803B344 *sub_803B344(u8); + + + +extern u8 gUnknown_80E7CC4[]; +extern u8 gUnknown_80E78F8; +extern u8 gUnknown_80E7AC4[]; +extern u8 gUnknown_80E786C; +extern u8 gUnknown_80E7AE0[]; +extern u8 gUnknown_80E7894; +extern u8 gUnknown_80E7C48[]; +extern u8 gUnknown_80E7B14[]; +extern u8 gUnknown_80E78D8; +extern u8 gUnknown_80E7B68[]; +extern u8 gUnknown_80E7BEC[]; +extern u8 gUnknown_80E7BC8[]; +extern u8 gUnknown_80E7B88[]; +extern u8 gUnknown_80E7C98[]; +extern u8 gUnknown_80E7B48[]; +extern s32 sub_8037B28(u32); + extern u32 sub_802D0E0(); extern u8 sub_802D178(); extern void sub_802D184(); @@ -61,30 +116,30 @@ extern void sub_802D184(); extern s32 sub_80154F0(); extern bool8 DecodeWonderMailPassword(u8 *, struct WonderMail *); extern bool8 IsValidWonderMail(struct WonderMail *WonderMailData); -extern void sub_80141B4(u32 *r0, u32, u32 *r1, u32); +extern void sub_80141B4(u8 *r0, u32, u32 *r1, u32); void PrintWonderMailMainMenuError(u32); void HandleWonderMailMainScreen(void); -void sub_8039AA8(void); +void HandleGameLinkCableMenu(void); void sub_8039B14(void); void sub_8039B20(void); void sub_8039B58(void); -void sub_8039D88(void); +void ReturnToGameLinkCableMenu(void); void HandlePasswordSuccess(void); void HandlePrepareSaveScreen(void); void HandleSaveAdventureScreen(void); void HandleWonderMailAddedScreen(void); -void ReturnToWonderMailMainScreen(void); +void ReturnToReceiveWonderMailMainScreen(void); void AdvanceToPasswordEntryScreen(void); void HandlePasswordEntryScreen(void); void HandleInvalidPasswordMenu(void); -extern u32 gUnknown_80E7914; -extern u32 gUnknown_80E7938; -extern u32 gUnknown_80E7994; -extern u32 gUnknown_80E79E4; -extern u32 gUnknown_80E7A48; +extern u8 gUnknown_80E7914[]; +extern u8 gUnknown_80E7938[]; +extern u8 gUnknown_80E7994[]; +extern u8 gUnknown_80E79E4[]; +extern u8 gUnknown_80E7A48[]; bool8 sub_8039880(void) { @@ -105,10 +160,10 @@ bool8 CreateWonderMailMenu(void) gUnknown_203B3E8->PasswordEntryBuffer[iVar2] = 0; } - gUnknown_203B3E8->unk490 = 3; - gUnknown_203B3E8->unk494 = 2; + gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_GAME_LINK; + gUnknown_203B3E8->wonderMailMode = WONDER_MAIL_MODE_RECEIVE; gUnknown_203B3E8->unk498 = 1; - gUnknown_203B3E8->unk490 = 5; // ??? Why? + gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_PASSWORD; // ??? Why? SetWonderMailMainMenuState(PROMPT_PASSWORD_ENTRY); // -> Display "Enter Wonder Mail Password" return 1; } @@ -116,17 +171,15 @@ bool8 CreateWonderMailMenu(void) u8 UpdateWonderMailMenu(void) { switch(gUnknown_203B3E8->state) { - case WONDER_MAIL_MAIN_SCREEN: + case RECEIVE_WONDER_MAIL_MAIN_SCREEN: HandleWonderMailMainScreen(); break; case EXIT_TO_MAIN_MENU: // When you exit out of the menu return 3; - case 8: - sub_8039AA8(); + case GAME_LINK_CABLE_MENU: + HandleGameLinkCableMenu(); break; - case 11: - break; - case 12: + case RECEIVE_GAME_LINK_CABLE: sub_8039B14(); break; case 6: @@ -135,8 +188,8 @@ u8 UpdateWonderMailMenu(void) case 9: sub_8039B58(); break; - case 7: - sub_8039D88(); + case WONDER_MAIL_SENT: + ReturnToGameLinkCableMenu(); break; case PASSWORD_SUCCESS: HandlePasswordSuccess(); @@ -151,7 +204,7 @@ u8 UpdateWonderMailMenu(void) HandleWonderMailAddedScreen(); break; case COMMUNICATION_ERROR: - ReturnToWonderMailMainScreen(); + ReturnToReceiveWonderMailMainScreen(); break; case PROMPT_PASSWORD_ENTRY: // "Please enter the Wonder Mail Password" Screen AdvanceToPasswordEntryScreen(); @@ -188,11 +241,11 @@ void HandleWonderMailMainScreen(void) switch(menuAction) { case 3: case 4: - gUnknown_203B3E8->unk490 = 3; - SetWonderMailMainMenuState(8); + gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_GAME_LINK; + SetWonderMailMainMenuState(GAME_LINK_CABLE_MENU); break; case 5: - gUnknown_203B3E8->unk490 = 5; + gUnknown_203B3E8->wonderMailMethod = WONDER_MAIL_PASSWORD; SetWonderMailMainMenuState(PROMPT_PASSWORD_ENTRY); break; case 0: @@ -203,26 +256,26 @@ void HandleWonderMailMainScreen(void) } } -void sub_8039AA8(void) +void HandleGameLinkCableMenu(void) { s32 menuAction; if (sub_80144A4(&menuAction) == 0) { switch(menuAction){ case 6: - if (gUnknown_203B3E8->unk494 == 1) { - SetWonderMailMainMenuState(2); + if (gUnknown_203B3E8->wonderMailMode == WONDER_MAIL_MODE_SEND) { + SetWonderMailMainMenuState(SEND_GAME_LINK_CABLE); } else { - SetWonderMailMainMenuState(12); + SetWonderMailMainMenuState(RECEIVE_GAME_LINK_CABLE); } break; case 0: - if (gUnknown_203B3E8->unk494 == 1) { - SetWonderMailMainMenuState(1); + if (gUnknown_203B3E8->wonderMailMode == WONDER_MAIL_MODE_SEND) { + SetWonderMailMainMenuState(SEND_WONDER_MAIL_MAIN_SCREEN); } else { - SetWonderMailMainMenuState(WONDER_MAIL_MAIN_SCREEN); + SetWonderMailMainMenuState(RECEIVE_WONDER_MAIL_MAIN_SCREEN); } break; } @@ -243,12 +296,12 @@ void sub_8039B20(void) } } -void ReturnToWonderMailMainScreen(void) +void ReturnToReceiveWonderMailMainScreen(void) { s32 local_8; if (sub_80144A4(&local_8) == 0) { - SetWonderMailMainMenuState(WONDER_MAIL_MAIN_SCREEN); + SetWonderMailMainMenuState(RECEIVE_WONDER_MAIL_MAIN_SCREEN); } } @@ -260,7 +313,7 @@ void sub_8039B58(void) if (gUnknown_203B3E8->wonderMailStatus == 0) { switch(gUnknown_203B3E8->unk24C){ case 9: - SetWonderMailMainMenuState(7); + SetWonderMailMainMenuState(WONDER_MAIL_SENT); break; case 10: SetWonderMailMainMenuState(PASSWORD_SUCCESS); @@ -274,6 +327,7 @@ void sub_8039B58(void) } } +/* NOTE: I think the error codes for wonder mail are the same across SOS/WONDER */ void PrintWonderMailMainMenuError(u32 status) { switch(status) @@ -282,42 +336,42 @@ void PrintWonderMailMainMenuError(u32 status) break; case 1: // "Communication Error" - sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101); + sub_80141B4(gUnknown_80E7914, 0, 0, 0x101); break; case 3: // Incorrect number of GBA Systems - sub_80141B4(&gUnknown_80E7938, 0, 0, 0x101); + sub_80141B4(gUnknown_80E7938, 0, 0, 0x101); break; case 2: // No response from friend. Redo from start - sub_80141B4(&gUnknown_80E7994, 0, 0, 0x101); + sub_80141B4(gUnknown_80E7994, 0, 0, 0x101); break; case 4: // Sender and receiver in different modes - sub_80141B4(&gUnknown_80E79E4, 0, 0, 0x101); + sub_80141B4(gUnknown_80E79E4, 0, 0, 0x101); break; case 5: // "Communication Error" - sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101); + sub_80141B4(gUnknown_80E7914, 0, 0, 0x101); break; case 14: // "Communication Error" - sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101); + sub_80141B4(gUnknown_80E7914, 0, 0, 0x101); break; case 15: // "No response from your friend. Make sure sender and receiver are ready" - sub_80141B4(&gUnknown_80E7A48, 0, 0, 0x101); + sub_80141B4(gUnknown_80E7A48, 0, 0, 0x101); break; case 6: case 7: case 8: case 9: - case COMMUNICATION_ERROR: + case 10: case 11: case 12: - case PASSWORD_SUCCESS: + case 13: default: // "Communication Error" - sub_80141B4(&gUnknown_80E7914, 0, 0, 0x101); + sub_80141B4(gUnknown_80E7914, 0, 0, 0x101); break; } @@ -342,7 +396,7 @@ void HandlePasswordEntryScreen(void) else { // Successful password // Copy the decoded data to another buffer? - gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->UNK38.decodedMail; + gUnknown_203B3E8->unk3C0.unk0 = gUnknown_203B3E8->UNK38.decodedMail; gUnknown_203B3E8->unk498 = 1; SetWonderMailMainMenuState(PASSWORD_SUCCESS); @@ -390,12 +444,12 @@ void HandlePrepareSaveScreen(void) } } -void sub_8039D88(void) +void ReturnToGameLinkCableMenu(void) { int iVar2; if(sub_80144A4(&iVar2) == 0) { - SetWonderMailMainMenuState(8); + SetWonderMailMainMenuState(GAME_LINK_CABLE_MENU); } } @@ -443,3 +497,137 @@ void HandleInvalidPasswordMenu(void) void nullsub_54(void) { } + +void WonderMailMainMenuCallback(void) +{ + int iVar2; + struct unkStruct_803B344 *temp; + + switch(gUnknown_203B3E8->state) { + case 0: + sub_8014248(gUnknown_80E7AC4,0,1,&gUnknown_80E786C,0,4,0,0,0x101); + break; + case SEND_WONDER_MAIL_MAIN_SCREEN: + sub_8014248(gUnknown_80E7AE0,0,3,&gUnknown_80E7894,0,4,0,0,0x101); + break; + case 3: + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_802EF48(); + break; + case RECEIVE_WONDER_MAIL_MAIN_SCREEN: + sub_8014248(gUnknown_80E7B14,0,3,&gUnknown_80E78D8,0,4,0,0,0x101); + break; + case PASSWORD_SUCCESS: + gUnknown_203B3E8->unk474 = gUnknown_203B3E8->unk3C0.unk0; + if(gUnknown_203B3E8->unk474.unk2 == 4) + { + gUnknown_203B3E8->unk488 = &gUnknown_203B3E8->unk3C0.unk14; + gUnknown_203B3E8->unk48C = gUnknown_203B3E8->unk3C0.unk3C; + } + else + { + gUnknown_203B3E8->unk488 = NULL; + gUnknown_203B3E8->unk48C = NULL; + } + sub_802D098(&gUnknown_203B3E8->unk474); + break; + case PREPARE_SAVE: + if(gUnknown_203B3E8->unk498 != 0) + { + switch(gUnknown_203B3E8->wonderMailMethod) + { + case WONDER_MAIL_GAME_LINK: + case WONDER_MAIL_PASSWORD: + sub_80141B4(gUnknown_80E7B48,0,0,0x101); + break; + case 4: + break; + } + } + else + sub_80141B4(gUnknown_80E7B48,0,0,0x101); + break; + case WONDER_MAIL_SENT: + sub_80141B4(gUnknown_80E7B68,0,0,0x101); + break; + case WONDER_MAIL_ADDED: + if (gUnknown_203B3E8->unk498 != '\0') { + sub_80141B4(gUnknown_80E7B88,0,0,0x101); + } + else { + // Wonder Mail was refused + sub_80141B4(gUnknown_80E7BC8,0,0,0x101); + } + break; + case GAME_LINK_CABLE_MENU: + sub_8014248(gUnknown_80E7BEC,0,6,&gUnknown_80E78F8,0,4,0,0,0x101); + break; + case 6: + nullsub_23(0); + sub_80141B4(gUnknown_80E7C48,0,0,0); + break; + case 9: + gUnknown_203B3E8->wonderMailStatus = 0; + sub_8011830(); + iVar2 = sub_8037B28(gUnknown_203B3E8->unk24C); + gUnknown_203B3E8->wonderMailStatus = iVar2; + if (iVar2 == 0) { + switch(gUnknown_203B3E8->unk24C) + { + case 9: + MemoryFill8((u8 *)&gUnknown_203B3E8->unk254,0,0xb4); + temp = sub_803B344(gUnknown_203B3E8->unk3BC); + if(temp->unk14 != NULL){ + MemoryCopy8((u8 *)&gUnknown_203B3E8->unk254.unk14,temp->unk14,0x28); + MemoryCopy8((u8 *)&gUnknown_203B3E8->unk254.unk3C,temp->unk18,0x78); + } + gUnknown_203B3E8->unk254.unk0 = temp->unk0; + gUnknown_203B3E8->wonderMailStatus = sub_8037D64(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308); + break; + case 10: + MemoryFill8((u8 *)&gUnknown_203B3E8->unk254,0,0xb4); + MemoryFill8((u8 *)&gUnknown_203B3E8->unk308,0,0xb4); + gUnknown_203B3E8->wonderMailStatus = sub_8037D64(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308); + break; + } + if (gUnknown_203B3E8->wonderMailStatus == 0) + { + switch(gUnknown_203B3E8->unk24C) + { + case 9: + case 10: + gUnknown_203B3E8->wonderMailStatus = sub_80381F4(gUnknown_203B3E8->unk24C,&gUnknown_203B3E8->unk254,&gUnknown_203B3E8->unk308); + if (sub_800D588() != '\0') { + gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk308; + } + else { + gUnknown_203B3E8->unk3C0 = gUnknown_203B3E8->unk254; + } + break; + } + } + } + xxx_call_start_bg_music(); + break; + case PROMPT_PASSWORD_ENTRY: + sub_80141B4(gUnknown_80E7C98,0,0,0x101); + break; + case PASSWORD_ENTRY_SCREEN: + sub_8006518(gUnknown_203B3E8->unk1EC); + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + sub_80151C0(5,gUnknown_203B3E8->PasswordEntryBuffer); + break; + case PASSWORD_INVALID: + sub_8014248(gUnknown_80E7CC4,0,6,&gUnknown_80E78F8,0,4,0,0,0x101); + break; + } +} + +void SetWonderMailMainMenuState(u8 newState) +{ + gUnknown_203B3E8->state = newState; + nullsub_54(); + WonderMailMainMenuCallback(); +} |