diff options
-rw-r--r-- | asm/mail.s | 892 | ||||
-rw-r--r-- | data/data2.s | 3 | ||||
-rw-r--r-- | include/asm.inc.h | 7 | ||||
-rw-r--r-- | include/mail.h | 15 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/mail.c | 767 |
6 files changed, 792 insertions, 894 deletions
diff --git a/asm/mail.s b/asm/mail.s deleted file mode 100644 index a08571018..000000000 --- a/asm/mail.s +++ /dev/null @@ -1,892 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_80F890C -sub_80F890C: @ 80F890C - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r6, r1, 0 - lsls r2, 24 - lsrs r5, r2, 24 - ldr r2, _080F8958 @ =0x02000000 - adds r1, r2, 0 - adds r1, 0xFF - movs r0, 0x2 - strb r0, [r1] - adds r0, 0xFE - adds r1, r2, r0 - movs r0, 0x1 - strb r0, [r1] - movs r0, 0x82 - lsls r0, 1 - adds r1, r2, r0 - ldr r0, _080F895C @ =sub_80EB3FC - str r0, [r1] - movs r0, 0x84 - lsls r0, 1 - adds r1, r2, r0 - ldr r0, _080F8960 @ =ConvertEasyChatWordsToString - str r0, [r1] - ldrh r1, [r4, 0x20] - adds r0, r1, 0 - subs r0, 0x79 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xB - bhi _080F8964 - subs r1, 0x79 - adds r0, r2, 0 - adds r0, 0xFA - strb r1, [r0] - b _080F896E - .align 2, 0 -_080F8958: .4byte 0x02000000 -_080F895C: .4byte sub_80EB3FC -_080F8960: .4byte ConvertEasyChatWordsToString -_080F8964: - adds r1, r2, 0 - adds r1, 0xFA - movs r0, 0 - strb r0, [r1] - movs r5, 0 -_080F896E: - ldr r1, _080F8994 @ =0x02000000 - movs r2, 0x80 - lsls r2, 1 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _080F8980 - cmp r0, 0x1 - beq _080F899C -_080F8980: - movs r0, 0x86 - lsls r0, 1 - adds r2, r1, r0 - adds r0, r1, 0 - adds r0, 0xFA - ldrb r0, [r0] - lsls r0, 3 - ldr r1, _080F8998 @ =gUnknown_083E5730 - b _080F89AC - .align 2, 0 -_080F8994: .4byte 0x02000000 -_080F8998: .4byte gUnknown_083E5730 -_080F899C: - movs r0, 0x86 - lsls r0, 1 - adds r2, r1, r0 - adds r0, r1, 0 - adds r0, 0xFA - ldrb r0, [r0] - lsls r0, 3 - ldr r1, _080F89DC @ =gUnknown_083E57A4 -_080F89AC: - adds r0, r1 - str r0, [r2] - ldrh r0, [r4, 0x1E] - mov r1, sp - bl sub_80A2D64 - lsls r0, 16 - ldr r1, _080F89E0 @ =0xffff0000 - adds r0, r1 - movs r1, 0xCD - lsls r1, 17 - cmp r0, r1 - bhi _080F89F8 - ldr r0, _080F89E4 @ =0x02000000 - adds r1, r0, 0 - adds r1, 0xFA - ldrb r2, [r1] - adds r1, r0, 0 - cmp r2, 0x6 - beq _080F89E8 - cmp r2, 0x9 - beq _080F89F0 - b _080F89FA - .align 2, 0 -_080F89DC: .4byte gUnknown_083E57A4 -_080F89E0: .4byte 0xffff0000 -_080F89E4: .4byte 0x02000000 -_080F89E8: - adds r2, r1, 0 - adds r2, 0xFB - movs r0, 0x1 - b _080F8A00 -_080F89F0: - adds r2, r1, 0 - adds r2, 0xFB - movs r0, 0x2 - b _080F8A00 -_080F89F8: - ldr r1, _080F8A20 @ =0x02000000 -_080F89FA: - adds r2, r1, 0 - adds r2, 0xFB - movs r0, 0 -_080F8A00: - strb r0, [r2] - adds r0, r1, 0 - adds r0, 0xF4 - str r4, [r0] - subs r0, 0x8 - str r6, [r0] - adds r0, 0xC - strb r5, [r0] - ldr r0, _080F8A24 @ =sub_80F8D50 - bl SetMainCallback2 - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F8A20: .4byte 0x02000000 -_080F8A24: .4byte sub_80F8D50 - thumb_func_end sub_80F890C - - thumb_func_start sub_80F8A28 -sub_80F8A28: @ 80F8A28 - push {r4,r5,lr} - sub sp, 0x8 - ldr r0, _080F8A44 @ =gMain - ldr r1, _080F8A48 @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x12 - bls _080F8A3A - b _080F8D3C -_080F8A3A: - lsls r0, 2 - ldr r1, _080F8A4C @ =_080F8A50 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F8A44: .4byte gMain -_080F8A48: .4byte 0x0000043c -_080F8A4C: .4byte _080F8A50 - .align 2, 0 -_080F8A50: - .4byte _080F8A9C - .4byte _080F8AB0 - .4byte _080F8AC8 - .4byte _080F8ACE - .4byte _080F8AD4 - .4byte _080F8ADA - .4byte _080F8B10 - .4byte _080F8B1C - .4byte _080F8B28 - .4byte _080F8B34 - .4byte _080F8B3A - .4byte _080F8B54 - .4byte _080F8B78 - .4byte _080F8BA0 - .4byte _080F8C14 - .4byte _080F8C2C - .4byte _080F8C58 - .4byte _080F8CBC - .4byte _080F8CC6 -_080F8A9C: - movs r0, 0 - bl SetVBlankCallback - bl remove_some_task - movs r1, 0x80 - lsls r1, 19 - movs r0, 0 - strh r0, [r1] - b _080F8D30 -_080F8AB0: - add r1, sp, 0x4 - movs r0, 0 - strh r0, [r1] - movs r1, 0xE0 - lsls r1, 19 - ldr r2, _080F8AC4 @ =0x01000200 - add r0, sp, 0x4 - bl CpuSet - b _080F8D30 - .align 2, 0 -_080F8AC4: .4byte 0x01000200 -_080F8AC8: - bl ResetPaletteFade - b _080F8D30 -_080F8ACE: - bl ResetTasks - b _080F8D30 -_080F8AD4: - bl ResetSpriteData - b _080F8D30 -_080F8ADA: - bl FreeAllSpritePalettes - ldr r0, _080F8B0C @ =REG_BG0HOFS - movs r1, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - subs r0, 0x2 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x32 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - b _080F8D30 - .align 2, 0 -_080F8B0C: .4byte REG_BG0HOFS -_080F8B10: - ldr r0, _080F8B18 @ =gWindowConfig_81E6DFC - bl SetUpWindowConfig - b _080F8D30 - .align 2, 0 -_080F8B18: .4byte gWindowConfig_81E6DFC -_080F8B1C: - ldr r0, _080F8B24 @ =gWindowConfig_81E6DFC - bl MultistepInitMenuWindowBegin - b _080F8D30 - .align 2, 0 -_080F8B24: .4byte gWindowConfig_81E6DFC -_080F8B28: - bl MultistepInitMenuWindowContinue - cmp r0, 0 - beq _080F8B32 - b _080F8D30 -_080F8B32: - b _080F8D3C -_080F8B34: - bl MenuZeroFillScreen - b _080F8D30 -_080F8B3A: - mov r0, sp - adds r0, 0x6 - movs r1, 0x1 - strh r1, [r0] - ldr r1, _080F8B4C @ =0x06004800 - ldr r2, _080F8B50 @ =0x01000400 - bl CpuSet - b _080F8D30 - .align 2, 0 -_080F8B4C: .4byte 0x06004800 -_080F8B50: .4byte 0x01000400 -_080F8B54: - ldr r2, _080F8B70 @ =gMailGraphicsTable - ldr r0, _080F8B74 @ =0x02000000 - adds r0, 0xFA - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - b _080F8D30 - .align 2, 0 -_080F8B70: .4byte gMailGraphicsTable -_080F8B74: .4byte 0x02000000 -_080F8B78: - ldr r2, _080F8B94 @ =gMailGraphicsTable - ldr r0, _080F8B98 @ =0x02000000 - adds r0, 0xFA - ldrb r1, [r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r2, 0x8 - adds r0, r2 - ldr r0, [r0] - ldr r1, _080F8B9C @ =0x06004000 - bl LZ77UnCompVram - b _080F8D30 - .align 2, 0 -_080F8B94: .4byte gMailGraphicsTable -_080F8B98: .4byte 0x02000000 -_080F8B9C: .4byte 0x06004000 -_080F8BA0: - ldr r5, _080F8C00 @ =gMailGraphicsTable - ldr r4, _080F8C04 @ =0x02000000 - adds r4, 0xFA - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0x4 - adds r0, r1 - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 19 - bl LZ77UnCompVram - ldr r3, _080F8C08 @ =gPlttBufferUnfaded - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r0, [r0, 0x10] - movs r2, 0xF1 - lsls r2, 1 - adds r1, r3, r2 - strh r0, [r1] - ldrb r1, [r4] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r0, 0x12] - adds r2, 0xE - adds r0, r3, r2 - strh r1, [r0] - ldr r1, _080F8C0C @ =gUnknown_083E562C - ldr r2, _080F8C10 @ =gSaveBlock2 - ldrb r0, [r2, 0x8] - lsls r0, 2 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r3, 0x14] - ldrb r0, [r2, 0x8] - lsls r0, 2 - adds r1, 0x2 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r3, 0x16] - b _080F8D30 - .align 2, 0 -_080F8C00: .4byte gMailGraphicsTable -_080F8C04: .4byte 0x02000000 -_080F8C08: .4byte gPlttBufferUnfaded -_080F8C0C: .4byte gUnknown_083E562C -_080F8C10: .4byte gSaveBlock2 -_080F8C14: - ldr r0, _080F8C28 @ =0x02000000 - adds r0, 0xF8 - ldrb r0, [r0] - cmp r0, 0 - bne _080F8C20 - b _080F8D30 -_080F8C20: - bl sub_80F8DA0 - b _080F8D30 - .align 2, 0 -_080F8C28: .4byte 0x02000000 -_080F8C2C: - ldr r0, _080F8C4C @ =0x02000000 - adds r0, 0xF8 - ldrb r0, [r0] - cmp r0, 0 - beq _080F8C3A - bl sub_80F8E80 -_080F8C3A: - ldr r0, _080F8C50 @ =sub_80F8F18 - bl SetVBlankCallback - ldr r2, _080F8C54 @ =gPaletteFade - ldrb r0, [r2, 0x8] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x8] - b _080F8D30 - .align 2, 0 -_080F8C4C: .4byte 0x02000000 -_080F8C50: .4byte sub_80F8F18 -_080F8C54: .4byte gPaletteFade -_080F8C58: - ldr r5, _080F8C7C @ =0x02000000 - adds r0, r5, 0 - adds r0, 0xF4 - ldr r0, [r0] - ldrh r0, [r0, 0x1E] - bl sub_809D4A8 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r5, 0 - adds r0, 0xFB - ldrb r0, [r0] - cmp r0, 0x1 - beq _080F8C80 - cmp r0, 0x2 - beq _080F8C98 - b _080F8D30 - .align 2, 0 -_080F8C7C: .4byte 0x02000000 -_080F8C80: - adds r0, r4, 0 - bl sub_809D580 - ldr r1, _080F8C94 @ =SpriteCallbackDummy - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x60 - b _080F8CA8 - .align 2, 0 -_080F8C94: .4byte SpriteCallbackDummy -_080F8C98: - adds r0, r4, 0 - bl sub_809D580 - ldr r1, _080F8CB8 @ =SpriteCallbackDummy - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x28 -_080F8CA8: - movs r3, 0x80 - bl sub_809D3A4 - adds r1, r5, 0 - adds r1, 0xFC - strb r0, [r1] - b _080F8D30 - .align 2, 0 -_080F8CB8: .4byte SpriteCallbackDummy -_080F8CBC: - bl sub_8055870 - cmp r0, 0x1 - bne _080F8D30 - b _080F8D3C -_080F8CC6: - ldr r1, _080F8D14 @ =REG_BG0CNT - ldr r2, _080F8D18 @ =0x00009f08 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _080F8D1C @ =0x00000801 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x2 - ldr r2, _080F8D20 @ =0x00000902 - adds r0, r2, 0 - strh r0, [r1] - adds r1, 0x44 - movs r0, 0 - strh r0, [r1] - subs r1, 0x50 - movs r2, 0xBA - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r2, _080F8D24 @ =gPaletteFade - ldrb r1, [r2, 0x8] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2, 0x8] - ldr r0, _080F8D28 @ =0x02000000 - adds r0, 0xF0 - ldr r1, _080F8D2C @ =sub_80F8F58 - str r1, [r0] - movs r0, 0x1 - b _080F8D3E - .align 2, 0 -_080F8D14: .4byte REG_BG0CNT -_080F8D18: .4byte 0x00009f08 -_080F8D1C: .4byte 0x00000801 -_080F8D20: .4byte 0x00000902 -_080F8D24: .4byte gPaletteFade -_080F8D28: .4byte 0x02000000 -_080F8D2C: .4byte sub_80F8F58 -_080F8D30: - ldr r1, _080F8D48 @ =gMain - ldr r0, _080F8D4C @ =0x0000043c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_080F8D3C: - movs r0, 0 -_080F8D3E: - add sp, 0x8 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080F8D48: .4byte gMain -_080F8D4C: .4byte 0x0000043c - thumb_func_end sub_80F8A28 - - thumb_func_start sub_80F8D50 -sub_80F8D50: @ 80F8D50 - push {lr} -_080F8D52: - bl sub_80F8A28 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080F8D6C - ldr r0, _080F8D68 @ =sub_80F8F2C - bl SetMainCallback2 - b _080F8D78 - .align 2, 0 -_080F8D68: .4byte sub_80F8F2C -_080F8D6C: - bl sub_80F9344 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080F8D52 -_080F8D78: - pop {r0} - bx r0 - thumb_func_end sub_80F8D50 - - thumb_func_start sub_80F8D7C -sub_80F8D7C: @ 80F8D7C - push {r4,lr} - adds r4, r0, 0 - bl StringCopy - adds r0, r4, 0 - bl sub_814A568 - adds r0, r4, 0 - bl StringLength - lsls r0, 16 - lsrs r0, 16 - adds r4, r0 - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80F8D7C - - thumb_func_start sub_80F8DA0 -sub_80F8DA0: @ 80F8DA0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0 - movs r5, 0 - ldr r2, _080F8E3C @ =0x02000000 - movs r0, 0x86 - lsls r0, 1 - adds r1, r2, r0 - ldr r0, [r1] - ldrb r0, [r0] - cmp r5, r0 - bcs _080F8E04 - mov r8, r2 - adds r7, r1, 0 -_080F8DBE: - lsls r0, r5, 3 - subs r0, r5 - lsls r0, 2 - subs r0, r5 - add r0, r8 - mov r1, r8 - adds r1, 0xF4 - lsls r2, r6, 1 - ldr r1, [r1] - adds r1, r2 - ldr r2, [r7] - ldr r2, [r2, 0x4] - lsls r4, r5, 2 - adds r2, r4, r2 - ldr r2, [r2] - lsls r2, 28 - lsrs r2, 30 - movs r3, 0x1 - bl ConvertEasyChatWordsToString - ldr r1, [r7] - ldr r0, [r1, 0x4] - adds r4, r0 - ldr r0, [r4] - lsls r0, 28 - lsrs r0, 30 - adds r0, r6, r0 - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - ldrb r1, [r1] - cmp r5, r1 - bcc _080F8DBE -_080F8E04: - ldr r2, _080F8E40 @ =0x020000d8 - adds r4, r2, 0 - subs r4, 0xD8 - adds r0, r2, 0 - adds r0, 0x28 - ldrb r0, [r0] - cmp r0, 0 - bne _080F8E48 - ldr r1, [r2, 0x1C] - adds r1, 0x12 - adds r0, r2, 0 - bl sub_80F8D7C - adds r2, r0, 0 - ldr r1, _080F8E44 @ =gOtherText_From - bl StringCopy - ldr r0, _080F8E40 @ =0x020000d8 - bl StringLength - movs r2, 0x86 - lsls r2, 1 - adds r1, r4, r2 - ldr r1, [r1] - ldrb r1, [r1, 0x2] - subs r1, r0 - b _080F8E6A - .align 2, 0 -_080F8E3C: .4byte 0x02000000 -_080F8E40: .4byte 0x020000d8 -_080F8E44: .4byte gOtherText_From -_080F8E48: - ldr r1, _080F8E7C @ =gOtherText_From - adds r0, r2, 0 - bl StringCopy - adds r2, r0, 0 - adds r0, r4, 0 - adds r0, 0xF4 - ldr r1, [r0] - adds r1, 0x12 - adds r0, r2, 0 - bl sub_80F8D7C - movs r1, 0x86 - lsls r1, 1 - adds r0, r4, r1 - ldr r0, [r0] - ldrb r1, [r0, 0x2] -_080F8E6A: - adds r0, r4, 0 - adds r0, 0xF9 - strb r1, [r0] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F8E7C: .4byte gOtherText_From - thumb_func_end sub_80F8DA0 - - thumb_func_start sub_80F8E80 -sub_80F8E80: @ 80F8E80 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r6, 0 - movs r4, 0 - ldr r1, _080F8F10 @ =0x02000000 - movs r0, 0x86 - lsls r0, 1 - adds r2, r1, r0 - ldr r0, [r2] - ldrb r0, [r0] - cmp r4, r0 - bcs _080F8EF6 - mov r8, r1 - adds r7, r2, 0 -_080F8E9E: - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - subs r0, r4 - mov r1, r8 - adds r5, r0, r1 - ldrb r0, [r5] - cmp r0, 0xFF - beq _080F8EE8 - cmp r0, 0 - beq _080F8EE8 - ldr r2, [r7] - ldr r1, [r2, 0x4] - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] - lsls r3, r0, 24 - lsrs r3, 28 - lsls r0, 30 - lsrs r0, 30 - adds r0, r6, r0 - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r2, [r2, 0x3] - lsrs r1, r2, 4 - adds r1, r3 - lsls r2, 28 - lsrs r2, 28 - adds r2, r6, r2 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - bl MenuPrint - adds r0, r6, 0x2 - lsls r0, 24 - lsrs r6, r0, 24 -_080F8EE8: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, [r7] - ldrb r0, [r0] - cmp r4, r0 - bcc _080F8E9E -_080F8EF6: - ldr r0, _080F8F14 @ =0x020000d8 - adds r1, r0, 0 - adds r1, 0x21 - ldrb r1, [r1] - ldr r2, [r0, 0x34] - ldrb r2, [r2, 0x1] - bl MenuPrint - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F8F10: .4byte 0x02000000 -_080F8F14: .4byte 0x020000d8 - thumb_func_end sub_80F8E80 - - thumb_func_start sub_80F8F18 -sub_80F8F18: @ 80F8F18 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80F8F18 - - thumb_func_start sub_80F8F2C -sub_80F8F2C: @ 80F8F2C - push {r4,lr} - ldr r4, _080F8F54 @ =0x02000000 - adds r0, r4, 0 - adds r0, 0xFB - ldrb r0, [r0] - cmp r0, 0 - beq _080F8F42 - bl AnimateSprites - bl BuildOamBuffer -_080F8F42: - adds r0, r4, 0 - adds r0, 0xF0 - ldr r0, [r0] - bl _call_via_r0 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F8F54: .4byte 0x02000000 - thumb_func_end sub_80F8F2C - - thumb_func_start sub_80F8F58 -sub_80F8F58: @ 80F8F58 - push {lr} - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080F8F6C - ldr r0, _080F8F70 @ =0x02000000 - adds r0, 0xF0 - ldr r1, _080F8F74 @ =sub_80F8F78 - str r1, [r0] -_080F8F6C: - pop {r0} - bx r0 - .align 2, 0 -_080F8F70: .4byte 0x02000000 -_080F8F74: .4byte sub_80F8F78 - thumb_func_end sub_80F8F58 - - thumb_func_start sub_80F8F78 -sub_80F8F78: @ 80F8F78 - push {lr} - sub sp, 0x4 - ldr r0, _080F8FA8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _080F8FA0 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080F8FAC @ =0x02000000 - adds r0, 0xF0 - ldr r1, _080F8FB0 @ =sub_80F8FB4 - str r1, [r0] -_080F8FA0: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080F8FA8: .4byte gMain -_080F8FAC: .4byte 0x02000000 -_080F8FB0: .4byte sub_80F8FB4 - thumb_func_end sub_80F8F78 - - thumb_func_start sub_80F8FB4 -sub_80F8FB4: @ 80F8FB4 - push {r4,lr} - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _080F9012 - ldr r4, _080F9018 @ =0x02000000 - adds r0, r4, 0 - adds r0, 0xEC - ldr r0, [r0] - bl SetMainCallback2 - adds r0, r4, 0 - adds r0, 0xFB - ldrb r0, [r0] - cmp r0, 0x2 - bgt _080F9002 - cmp r0, 0x1 - blt _080F9002 - adds r0, r4, 0 - adds r0, 0xF4 - ldr r0, [r0] - ldrh r0, [r0, 0x1E] - bl sub_809D4A8 - lsls r0, 16 - lsrs r0, 16 - bl sub_809D608 - adds r0, r4, 0 - adds r0, 0xFC - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080F901C @ =gSprites - adds r0, r1 - bl sub_809D510 -_080F9002: - ldr r0, _080F9018 @ =0x02000000 - movs r2, 0x88 - lsls r2, 1 - movs r1, 0 - bl memset - bl ResetPaletteFade -_080F9012: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F9018: .4byte 0x02000000 -_080F901C: .4byte gSprites - thumb_func_end sub_80F8FB4 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data2.s b/data/data2.s index 060d359de..e84e68884 100644 --- a/data/data2.s +++ b/data/data2.s @@ -21862,7 +21862,8 @@ gUnknown_083E5620:: @ 83E5620 .incbin "baserom.gba", 0x003e5620, 0xc gUnknown_083E562C:: @ 83E562C - .incbin "baserom.gba", 0x003e562c, 0x8 + .2byte 0x6ACD, 0x51A5 + .2byte 0x45FC, 0x38D4 .align 2 gMailGraphicsTable:: @ 83E5634 diff --git a/include/asm.inc.h b/include/asm.inc.h index ab90826d7..280e49910 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -241,11 +241,17 @@ void sub_808AB90(void); // asm/rom_8094928.o void sub_80961D8(void); +u8 sub_809D3A4(u16 arg0, void (*)(struct Sprite *), int, u8 arg3, u32 arg4); +u16 sub_809D4A8(u16); +void sub_809D510(struct Sprite *); +void sub_809D580(u16); +void sub_809D608(u16); u8 pokemon_ailments_get_primary(u32); u8 exec_movement(u8, u8, u8, void *); bool8 sub_80A212C(u8, u8, u8); void sub_80A2178(void); void sub_80A2B18(void); +u16 sub_80A2D64(u16, u8 *); void AddMapNamePopUpWindowTask(void); void HideMapNamePopUpWindow(); @@ -493,6 +499,7 @@ u8 intro_create_brendan_sprite(/*TODO: arg types*/); u8 intro_create_may_sprite(/*TODO: arg types*/); u8 intro_create_latios_sprite(/*TODO: arg types*/); u8 intro_create_latias_sprite(/*TODO: arg types*/); +void sub_814A568(u8*); // src/agb_flash.o u16 ReadFlashId(void); diff --git a/include/mail.h b/include/mail.h new file mode 100644 index 000000000..a579dc458 --- /dev/null +++ b/include/mail.h @@ -0,0 +1,15 @@ +#ifndef GUARD_MAIL_H +#define GUARD_MAIL_H + +#include "main.h" + +struct MailStruct { + /* 0x00 */ u16 words[9]; + /* 0x12 */ u8 var12[12]; + /* 0x1E */ u16 var1E; + /* 0x20 */ u16 var20; +}; + +void sub_80F890C(struct MailStruct *arg0, MainCallback arg1, bool8 arg2); + +#endif // GUARD_MAIL_H diff --git a/ld_script.txt b/ld_script.txt index cec7089ef..f970dd23f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -146,7 +146,7 @@ SECTIONS { asm/pokenav.o(.text); asm/mon_markings.o(.text); asm/mauville_old_man.o(.text); - asm/mail.o(.text); + src/mail.o(.text); asm/menu_helpers.o(.text); asm/script_pokemon_util_80F99CC.o(.text); src/dewford_trend.o(.text); diff --git a/src/mail.c b/src/mail.c new file mode 100644 index 000000000..3f9b675ab --- /dev/null +++ b/src/mail.c @@ -0,0 +1,767 @@ +#include "global.h" +#include "mail.h" +#include "asm.h" +#include "menu.h" +#include "palette.h" +#include "rom4.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + +struct MailLayout { + u8 var0; + u8 var1; + u8 var2; + u8 var3; + u8 (*var4)[]; +}; + +struct Unk2000000 { + /* 0x00 */ u8 words[8][27]; + /* 0xEC */ u8 varD8[20]; + /* 0xEC */ MainCallback varEC; + /* 0xF0 */ MainCallback varF0; + /* 0xFF */ struct MailStruct *varF4; + /* 0xF8 */ u8 varF8; + /* 0xF9 */ u8 varF9; + /* 0xFA */ u8 varFA; + /* 0xFB */ u8 varFB; + /* 0xFC */ u8 varFC; + u8 padFD[1]; + /* 0xFE */ u8 varFE; + /* 0xFF */ u8 varFF; + /* 0x100 */ u8 var100; + u8 pad101[3]; + /* 0x104 */ MainCallback var104; + /* 0x108 */ MainCallback var108; + /* 0x10C */ struct MailLayout *var10C; +}; + +struct MailGraphics { + u16 (*palette)[]; + u8 (*tiles)[]; + u8 (*tileMap)[]; + u16 var0C; + u16 var0E; + u16 color10; + u16 color12; +}; + +enum { + LANGUAGE_JAPANESE = 0, + LANGUAGE_ENGLISH = 1, + LANGUAGE_GERMAN = 5, +}; + +enum { + ITEM_ORANGE_MAIL = 0x79, + ITEM_HARBOR_MAIL, + ITEM_GLITTER_MAIL, + ITEM_MECH_MAIL, + ITEM_WOOD_MAIL, + ITEM_WAVE_MAIL, + ITEM_BEAD_MAIL, + ITEM_SHADOW_MAIL, + ITEM_TROPIC_MAIL, + ITEM_DREAM_MAIL, + ITEM_FAB_MAIL, + ITEM_RETRO_MAIL, +}; + +extern struct Unk2000000 unk_2000000; +extern struct MailGraphics gMailGraphicsTable[]; +extern u16 gUnknown_083E562C[][2]; + +extern struct MailLayout gUnknown_083E5730[]; +extern struct MailLayout gUnknown_083E57A4[]; + +extern u8 gOtherText_From[]; + +static u8 sub_80F8A28(void); +// static void sub_80F8D50(void); +// static u8 *sub_80F8D7C(u8 *dest, u8 *src); +static void sub_80F8DA0(void); +static void sub_80F8E80(void); +static void sub_80F8F18(void); +static void sub_80F8F2C(void); +static void sub_80F8F58(void); +static void sub_80F8F78(void); +static void sub_80F8FB4(void); + +#ifdef NONMATCHING +void sub_80F890C(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) { + u16 mailDesign; + u8 buffer[4]; + u8 local1; + + unk_2000000.varFF = 2; + + // Compiler uses [sub 1], while asm uses [ptr + FE] + unk_2000000.varFE = 1; + unk_2000000.var104 = (MainCallback) sub_80EB3FC; + unk_2000000.var108 = (MainCallback) ConvertEasyChatWordsToString; + + mailDesign = arg0->var20 - ITEM_ORANGE_MAIL; + + if (mailDesign <= 11) { + unk_2000000.varFA = arg0->var20 - ITEM_ORANGE_MAIL; + } else { + unk_2000000.varFA = 0; + arg2 = FALSE; + } + + switch (unk_2000000.var100) { + case 0: + default: + unk_2000000.var10C = &gUnknown_083E5730[unk_2000000.varFA]; + break; + + case 1: + unk_2000000.var10C = &gUnknown_083E57A4[unk_2000000.varFA]; + break; + } + + if (((sub_80A2D64(arg0->var1E, buffer) << 16) +0xFFFF0000) <= (410 << 16)) { + switch (unk_2000000.varFA) { + case 6: + unk_2000000.varFB = 1; + break; + + case 9: + unk_2000000.varFB = 2; + break; + + default: + unk_2000000.varFB = 0; + break; + } + } else { + unk_2000000.varFB = 0; + } + + + unk_2000000.varF4 = arg0; + unk_2000000.varEC = arg1; + unk_2000000.varF8 = arg2; + + SetMainCallback2(sub_80F8D50); +} +#else +__attribute__((naked)) +void sub_80F890C(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) { + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x4\n\ + adds r4, r0, 0\n\ + adds r6, r1, 0\n\ + lsls r2, 24\n\ + lsrs r5, r2, 24\n\ + ldr r2, _080F8958 @ =0x02000000\n\ + adds r1, r2, 0\n\ + adds r1, 0xFF\n\ + movs r0, 0x2\n\ + strb r0, [r1]\n\ + adds r0, 0xFE\n\ + adds r1, r2, r0\n\ + movs r0, 0x1\n\ + strb r0, [r1]\n\ + movs r0, 0x82\n\ + lsls r0, 1\n\ + adds r1, r2, r0\n\ + ldr r0, _080F895C @ =sub_80EB3FC\n\ + str r0, [r1]\n\ + movs r0, 0x84\n\ + lsls r0, 1\n\ + adds r1, r2, r0\n\ + ldr r0, _080F8960 @ =ConvertEasyChatWordsToString\n\ + str r0, [r1]\n\ + ldrh r1, [r4, 0x20]\n\ + adds r0, r1, 0\n\ + subs r0, 0x79\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0xB\n\ + bhi _080F8964\n\ + subs r1, 0x79\n\ + adds r0, r2, 0\n\ + adds r0, 0xFA\n\ + strb r1, [r0]\n\ + b _080F896E\n\ + .align 2, 0\n\ +_080F8958: .4byte 0x02000000\n\ +_080F895C: .4byte sub_80EB3FC\n\ +_080F8960: .4byte ConvertEasyChatWordsToString\n\ +_080F8964:\n\ + adds r1, r2, 0\n\ + adds r1, 0xFA\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + movs r5, 0\n\ +_080F896E:\n\ + ldr r1, _080F8994 @ =0x02000000\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _080F8980\n\ + cmp r0, 0x1\n\ + beq _080F899C\n\ +_080F8980:\n\ + movs r0, 0x86\n\ + lsls r0, 1\n\ + adds r2, r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, 0xFA\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + ldr r1, _080F8998 @ =gUnknown_083E5730\n\ + b _080F89AC\n\ + .align 2, 0\n\ +_080F8994: .4byte 0x02000000\n\ +_080F8998: .4byte gUnknown_083E5730\n\ +_080F899C:\n\ + movs r0, 0x86\n\ + lsls r0, 1\n\ + adds r2, r1, r0\n\ + adds r0, r1, 0\n\ + adds r0, 0xFA\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + ldr r1, _080F89DC @ =gUnknown_083E57A4\n\ +_080F89AC:\n\ + adds r0, r1\n\ + str r0, [r2]\n\ + ldrh r0, [r4, 0x1E]\n\ + mov r1, sp\n\ + bl sub_80A2D64\n\ + lsls r0, 16\n\ + ldr r1, _080F89E0 @ =0xffff0000\n\ + adds r0, r1\n\ + movs r1, 0xCD\n\ + lsls r1, 17\n\ + cmp r0, r1\n\ + bhi _080F89F8\n\ + ldr r0, _080F89E4 @ =0x02000000\n\ + adds r1, r0, 0\n\ + adds r1, 0xFA\n\ + ldrb r2, [r1]\n\ + adds r1, r0, 0\n\ + cmp r2, 0x6\n\ + beq _080F89E8\n\ + cmp r2, 0x9\n\ + beq _080F89F0\n\ + b _080F89FA\n\ + .align 2, 0\n\ +_080F89DC: .4byte gUnknown_083E57A4\n\ +_080F89E0: .4byte 0xffff0000\n\ +_080F89E4: .4byte 0x02000000\n\ +_080F89E8:\n\ + adds r2, r1, 0\n\ + adds r2, 0xFB\n\ + movs r0, 0x1\n\ + b _080F8A00\n\ +_080F89F0:\n\ + adds r2, r1, 0\n\ + adds r2, 0xFB\n\ + movs r0, 0x2\n\ + b _080F8A00\n\ +_080F89F8:\n\ + ldr r1, _080F8A20 @ =0x02000000\n\ +_080F89FA:\n\ + adds r2, r1, 0\n\ + adds r2, 0xFB\n\ + movs r0, 0\n\ +_080F8A00:\n\ + strb r0, [r2]\n\ + adds r0, r1, 0\n\ + adds r0, 0xF4\n\ + str r4, [r0]\n\ + subs r0, 0x8\n\ + str r6, [r0]\n\ + adds r0, 0xC\n\ + strb r5, [r0]\n\ + ldr r0, _080F8A24 @ =sub_80F8D50\n\ + bl SetMainCallback2\n\ + add sp, 0x4\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080F8A20: .4byte 0x02000000\n\ +_080F8A24: .4byte sub_80F8D50\n\ + .syntax divided\n"); +} + +#endif + +#define RETURN_UP_STATE break +#define RETURN_SKIP_STATE return FALSE + +static u8 sub_80F8A28(void) { + switch (gMain.state) { + case 0: + SetVBlankCallback(NULL); + remove_some_task(); + REG_DISPCNT = 0; + RETURN_UP_STATE; + + case 1: CpuFill16(0, (void *) OAM, OAM_SIZE); + RETURN_UP_STATE; + + case 2: + ResetPaletteFade(); + RETURN_UP_STATE; + + case 3: + ResetTasks(); + RETURN_UP_STATE; + + case 4: + ResetSpriteData(); + RETURN_UP_STATE; + + case 5: + FreeAllSpritePalettes(); + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + RETURN_UP_STATE; + + case 6: + SetUpWindowConfig(&gWindowConfig_81E6DFC); + RETURN_UP_STATE; + + case 7: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6DFC); + RETURN_UP_STATE; + + case 8: + if (MultistepInitMenuWindowContinue() == 0) { + return FALSE; + } + RETURN_UP_STATE; + + case 9: + MenuZeroFillScreen(); + RETURN_UP_STATE; + + case 10: CpuFill16(1, (void *) (VRAM + 0x4800), 0x800); + RETURN_UP_STATE; + + case 11: + LoadPalette(gMailGraphicsTable[unk_2000000.varFA].palette, 0, 16 * 2); + RETURN_UP_STATE; + + case 12: + LZ77UnCompVram(gMailGraphicsTable[unk_2000000.varFA].tileMap, (void *) (VRAM + 0x4000)); + RETURN_UP_STATE; + + case 13: + LZ77UnCompVram(gMailGraphicsTable[unk_2000000.varFA].tiles, (void *) (VRAM)); + + gPlttBufferUnfaded[241] = gMailGraphicsTable[unk_2000000.varFA].color10; + gPlttBufferUnfaded[248] = gMailGraphicsTable[unk_2000000.varFA].color12; + gPlttBufferUnfaded[10] = gUnknown_083E562C[gSaveBlock2.playerGender][0]; + gPlttBufferUnfaded[11] = gUnknown_083E562C[gSaveBlock2.playerGender][1]; + RETURN_UP_STATE; + + case 14: + if (unk_2000000.varF8 != 0) { + sub_80F8DA0(); + } + RETURN_UP_STATE; + + case 15: + if (unk_2000000.varF8 != 0) { + sub_80F8E80(); + } + + SetVBlankCallback(sub_80F8F18); + gPaletteFade.bufferTransferDisabled = 1; + RETURN_UP_STATE; + + case 16: { + u16 local1; + + local1 = sub_809D4A8(unk_2000000.varF4->var1E); + + switch (unk_2000000.varFB) { + case 1: + sub_809D580(local1); + unk_2000000.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 96, 128, 0); + break; + + case 2: + sub_809D580(local1); + unk_2000000.varFC = sub_809D3A4(local1, SpriteCallbackDummy, 40, 128, 0); + break; + } + RETURN_UP_STATE; + } + + case 17: + if (sub_8055870() != TRUE) { + RETURN_UP_STATE; + } + RETURN_SKIP_STATE; + + case 18: + REG_BG0CNT = 0x9F08; + REG_BG1CNT = 0x0801; + REG_BG2CNT = 0x0902; + REG_BLDCNT = 0; + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + gPaletteFade.bufferTransferDisabled = 0; + unk_2000000.varF0 = sub_80F8F58; + return TRUE; + + default: + return FALSE; + } + + gMain.state += 1; + return FALSE; +} + +void sub_80F8D50(void) { + do { + if (sub_80F8A28() == 1) { + SetMainCallback2(sub_80F8F2C); + return; + } + } while (sub_80F9344() != 1); +} + +u8 *sub_80F8D7C(u8 *dest, u8 *src) { + u16 length; + + StringCopy(dest, src); + sub_814A568(dest); + + length = StringLength(dest); + + return dest + length; +} + +#ifdef NONMATCHING +static void sub_80F8DA0(void) { + u8 local0; + + local0 = unk_2000000.var10C->var0; + + // No idea what's happening in this loop. + if (local0 <= 0) { + u8 i; + u8 i2 = 0; + + for (i = 0; i < unk_2000000.var10C->var0; i++) { + ConvertEasyChatWordsToString(unk_2000000.words[i], &unk_2000000.varF4->words[i2], + ((*unk_2000000.var10C->var4)[i] << 28) >> 30, 1); + i2 += ((*unk_2000000.var10C->var4)[i] << 28) >> 30; + } + } + + if (unk_2000000.var100 == LANGUAGE_JAPANESE) { + u8 *ptr; + u16 length; + + ptr = sub_80F8D7C(unk_2000000.varD8, unk_2000000.varF4->var12); + StringCopy(ptr, gOtherText_From); + + length = StringLength(unk_2000000.varD8); + + unk_2000000.varF9 = unk_2000000.var10C->var2 - length; + } else { + u8 *ptr; + + ptr = StringCopy(unk_2000000.varD8, gOtherText_From); + sub_80F8D7C(ptr, unk_2000000.varF4->var12); + + unk_2000000.varF9 = unk_2000000.var10C->var2; + } +} +#else +__attribute__((naked)) +static void sub_80F8DA0(void) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + movs r6, 0\n\ + movs r5, 0\n\ + ldr r2, _080F8E3C @ =0x02000000\n\ + movs r0, 0x86\n\ + lsls r0, 1\n\ + adds r1, r2, r0\n\ + ldr r0, [r1]\n\ + ldrb r0, [r0]\n\ + cmp r5, r0\n\ + bcs _080F8E04\n\ + mov r8, r2\n\ + adds r7, r1, 0\n\ +_080F8DBE:\n\ + lsls r0, r5, 3\n\ + subs r0, r5\n\ + lsls r0, 2\n\ + subs r0, r5\n\ + add r0, r8\n\ + mov r1, r8\n\ + adds r1, 0xF4\n\ + lsls r2, r6, 1\n\ + ldr r1, [r1]\n\ + adds r1, r2\n\ + ldr r2, [r7]\n\ + ldr r2, [r2, 0x4]\n\ + lsls r4, r5, 2\n\ + adds r2, r4, r2\n\ + ldr r2, [r2]\n\ + lsls r2, 28\n\ + lsrs r2, 30\n\ + movs r3, 0x1\n\ + bl ConvertEasyChatWordsToString\n\ + ldr r1, [r7]\n\ + ldr r0, [r1, 0x4]\n\ + adds r4, r0\n\ + ldr r0, [r4]\n\ + lsls r0, 28\n\ + lsrs r0, 30\n\ + adds r0, r6, r0\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + ldrb r1, [r1]\n\ + cmp r5, r1\n\ + bcc _080F8DBE\n\ +_080F8E04:\n\ + ldr r2, _080F8E40 @ =0x020000d8\n\ + adds r4, r2, 0\n\ + subs r4, 0xD8\n\ + adds r0, r2, 0\n\ + adds r0, 0x28\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080F8E48\n\ + ldr r1, [r2, 0x1C]\n\ + adds r1, 0x12\n\ + adds r0, r2, 0\n\ + bl sub_80F8D7C\n\ + adds r2, r0, 0\n\ + ldr r1, _080F8E44 @ =gOtherText_From\n\ + bl StringCopy\n\ + ldr r0, _080F8E40 @ =0x020000d8\n\ + bl StringLength\n\ + movs r2, 0x86\n\ + lsls r2, 1\n\ + adds r1, r4, r2\n\ + ldr r1, [r1]\n\ + ldrb r1, [r1, 0x2]\n\ + subs r1, r0\n\ + b _080F8E6A\n\ + .align 2, 0\n\ +_080F8E3C: .4byte 0x02000000\n\ +_080F8E40: .4byte 0x020000d8\n\ +_080F8E44: .4byte gOtherText_From\n\ +_080F8E48:\n\ + ldr r1, _080F8E7C @ =gOtherText_From\n\ + adds r0, r2, 0\n\ + bl StringCopy\n\ + adds r2, r0, 0\n\ + adds r0, r4, 0\n\ + adds r0, 0xF4\n\ + ldr r1, [r0]\n\ + adds r1, 0x12\n\ + adds r0, r2, 0\n\ + bl sub_80F8D7C\n\ + movs r1, 0x86\n\ + lsls r1, 1\n\ + adds r0, r4, r1\n\ + ldr r0, [r0]\n\ + ldrb r1, [r0, 0x2]\n\ +_080F8E6A:\n\ + adds r0, r4, 0\n\ + adds r0, 0xF9\n\ + strb r1, [r0]\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080F8E7C: .4byte gOtherText_From\n\ + .syntax divided\n"); +} +#endif + +#ifdef NONMATCHING +static void sub_80F8E80(void) { + u16 pos; + + if (unk_2000000.var10C->var0 > 0) { + u8 xPos; + u8 yPos; + + for (pos = 0; pos < unk_2000000.var10C->var0; pos++) { + if (unk_2000000.words[pos][0] == 0xFF) { + continue; + } + + if (unk_2000000.words[pos][0] == 0x00) { + continue; + } + + // I assume the words are some kind of bitfield. Again, no idea what's going on here. + MenuPrint(unk_2000000.words[pos], xPos, yPos); + + } + } + + MenuPrint(unk_2000000.varD8, unk_2000000.varF9, unk_2000000.var10C->var1); +} +#else +__attribute__((naked)) +static void sub_80F8E80(void) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + movs r6, 0\n\ + movs r4, 0\n\ + ldr r1, _080F8F10 @ =0x02000000\n\ + movs r0, 0x86\n\ + lsls r0, 1\n\ + adds r2, r1, r0\n\ + ldr r0, [r2]\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + bcs _080F8EF6\n\ + mov r8, r1\n\ + adds r7, r2, 0\n\ +_080F8E9E:\n\ + lsls r0, r4, 3\n\ + subs r0, r4\n\ + lsls r0, 2\n\ + subs r0, r4\n\ + mov r1, r8\n\ + adds r5, r0, r1\n\ + ldrb r0, [r5]\n\ + cmp r0, 0xFF\n\ + beq _080F8EE8\n\ + cmp r0, 0\n\ + beq _080F8EE8\n\ + ldr r2, [r7]\n\ + ldr r1, [r2, 0x4]\n\ + lsls r0, r4, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + lsls r3, r0, 24\n\ + lsrs r3, 28\n\ + lsls r0, 30\n\ + lsrs r0, 30\n\ + adds r0, r6, r0\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldrb r2, [r2, 0x3]\n\ + lsrs r1, r2, 4\n\ + adds r1, r3\n\ + lsls r2, 28\n\ + lsrs r2, 28\n\ + adds r2, r6, r2\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + adds r0, r5, 0\n\ + bl MenuPrint\n\ + adds r0, r6, 0x2\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ +_080F8EE8:\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + ldr r0, [r7]\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + bcc _080F8E9E\n\ +_080F8EF6:\n\ + ldr r0, _080F8F14 @ =0x020000d8\n\ + adds r1, r0, 0\n\ + adds r1, 0x21\n\ + ldrb r1, [r1]\n\ + ldr r2, [r0, 0x34]\n\ + ldrb r2, [r2, 0x1]\n\ + bl MenuPrint\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080F8F10: .4byte 0x02000000\n\ +_080F8F14: .4byte 0x020000d8\n\ + .syntax divided\n"); +} +#endif + +static void sub_80F8F18(void) { + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void sub_80F8F2C(void) { + if(unk_2000000.varFB != 0) { + AnimateSprites(); + BuildOamBuffer(); + } + + unk_2000000.varF0(); +} + +static void sub_80F8F58(void) { + u8 local0; + + local0 = UpdatePaletteFade(); + if(local0 == 0) { + unk_2000000.varF0 = sub_80F8F78; + } +} + +static void sub_80F8F78(void) { + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + unk_2000000.varF0 = sub_80F8FB4; + } +} + +static void sub_80F8FB4(void) { + u16 local1; + + if (UpdatePaletteFade()) { + return; + } + + SetMainCallback2(unk_2000000.varEC); + switch (unk_2000000.varFB) { + case 2: + case 1: + local1 = sub_809D4A8(unk_2000000.varF4->var1E); + sub_809D608(local1); + + sub_809D510(&gSprites[unk_2000000.varFC]); + break; + } + + memset(&unk_2000000, 0, 0x110); + ResetPaletteFade(); +} |