summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/mail.s892
-rw-r--r--data/data2.s3
-rw-r--r--include/asm.inc.h7
-rw-r--r--include/mail.h15
-rw-r--r--ld_script.txt2
-rw-r--r--src/mail.c767
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();
+}