summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/mail.s732
-rw-r--r--data/graphics.s112
-rw-r--r--data/mail.s26
-rw-r--r--include/international_string_util.h7
-rw-r--r--include/mail_data.h12
-rw-r--r--include/menu.h3
-rw-r--r--include/menu_helpers.h11
-rw-r--r--include/pokemon_icon.h3
-rw-r--r--include/rom4.h1
-rw-r--r--include/strings.h13
-rw-r--r--ld_script.txt3
-rw-r--r--src/mail.c491
12 files changed, 647 insertions, 767 deletions
diff --git a/asm/mail.s b/asm/mail.s
index 5f76a5ef0..c35d3873a 100644
--- a/asm/mail.s
+++ b/asm/mail.s
@@ -5,738 +5,6 @@
.text
- thumb_func_start sub_8121478
-sub_8121478: @ 8121478
- push {r4-r7,lr}
- sub sp, 0x4
- adds r5, r0, 0
- adds r7, r1, 0
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r4, =gUnknown_0203A134
- ldr r0, =0x0000222c
- bl AllocZeroed
- str r0, [r4]
- ldr r1, =0x0000021d
- adds r0, r1
- movs r1, 0x2
- strb r1, [r0]
- ldr r0, [r4]
- ldr r2, =0x0000021e
- adds r0, r2
- movs r1, 0x1
- strb r1, [r0]
- ldr r4, [r4]
- movs r3, 0x88
- lsls r3, 2
- adds r1, r4, r3
- ldr r0, =CopyEasyChatWord
- str r0, [r1]
- movs r0, 0x89
- lsls r0, 2
- adds r1, r4, r0
- ldr r0, =ConvertEasyChatWordsToString
- str r0, [r1]
- ldrh r1, [r5, 0x20]
- adds r0, r1, 0
- subs r0, 0x79
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xB
- bhi _081214E8
- subs r1, 0x79
- subs r2, 0x4
- adds r0, r4, r2
- strb r1, [r0]
- b _081214F2
- .pool
-_081214E8:
- ldr r3, =0x0000021a
- adds r1, r4, r3
- movs r0, 0
- strb r0, [r1]
- movs r6, 0
-_081214F2:
- ldr r0, =gUnknown_0203A134
- ldr r1, [r0]
- ldr r2, =0x0000021e
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- beq _08121504
- cmp r0, 0x1
- beq _0812152C
-_08121504:
- movs r3, 0x8A
- lsls r3, 2
- adds r2, r1, r3
- subs r3, 0xE
- adds r0, r1, r3
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_0859F3B4
- b _08121540
- .pool
-_0812152C:
- movs r0, 0x8A
- lsls r0, 2
- adds r2, r1, r0
- ldr r3, =0x0000021a
- adds r0, r1, r3
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, =gUnknown_0859F458
-_08121540:
- adds r0, r1
- str r0, [r2]
- ldrh r0, [r5, 0x1E]
- mov r1, sp
- bl sub_80D45E8
- lsls r0, 16
- ldr r1, =0xffff0000
- adds r0, r1
- movs r1, 0xCD
- lsls r1, 17
- cmp r0, r1
- bhi _081215AC
- ldr r1, =gUnknown_0203A134
- ldr r2, [r1]
- ldr r3, =0x0000021a
- adds r0, r2, r3
- ldrb r0, [r0]
- adds r3, r1, 0
- cmp r0, 0x6
- beq _0812158C
- cmp r0, 0x9
- beq _0812159C
- ldr r0, =0x0000021b
- adds r1, r2, r0
- movs r0, 0
- strb r0, [r1]
- b _081215BA
- .pool
-_0812158C:
- ldr r0, =0x0000021b
- adds r1, r2, r0
- movs r0, 0x1
- strb r0, [r1]
- b _081215BA
- .pool
-_0812159C:
- ldr r0, =0x0000021b
- adds r1, r2, r0
- movs r0, 0x2
- strb r0, [r1]
- b _081215BA
- .pool
-_081215AC:
- ldr r0, =gUnknown_0203A134
- ldr r1, [r0]
- ldr r2, =0x0000021b
- adds r1, r2
- movs r2, 0
- strb r2, [r1]
- adds r3, r0, 0
-_081215BA:
- ldr r1, [r3]
- movs r3, 0x85
- lsls r3, 2
- adds r0, r1, r3
- str r5, [r0]
- movs r2, 0x83
- lsls r2, 2
- adds r0, r1, r2
- str r7, [r0]
- adds r3, 0x4
- adds r0, r1, r3
- strb r6, [r0]
- ldr r0, =sub_81219F0
- bl SetMainCallback2
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8121478
-
- thumb_func_start sub_81215EC
-sub_81215EC: @ 81215EC
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x12
- bls _08121600
- b _081219E2
-_08121600:
- lsls r0, 2
- ldr r1, =_08121614
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08121614:
- .4byte _08121660
- .4byte _0812166E
- .4byte _08121688
- .4byte _0812168E
- .4byte _08121694
- .4byte _0812169A
- .4byte _081216F4
- .4byte _08121730
- .4byte _08121740
- .4byte _08121774
- .4byte _08121782
- .4byte _081217D8
- .4byte _081217EC
- .4byte _081218B0
- .4byte _081218CC
- .4byte _081218EC
- .4byte _081218F6
- .4byte _08121910
- .4byte _08121980
-_08121660:
- movs r0, 0
- bl SetVBlankCallback
- bl remove_some_task
- movs r0, 0
- b _081216EC
-_0812166E:
- add r1, sp, 0x8
- movs r0, 0
- strh r0, [r1]
- movs r1, 0xE0
- lsls r1, 19
- ldr r2, =0x01000200
- add r0, sp, 0x8
- bl CpuSet
- b _081219D4
- .pool
-_08121688:
- bl ResetPaletteFade
- b _081219D4
-_0812168E:
- bl ResetTasks
- b _081219D4
-_08121694:
- bl ResetSpriteData
- b _081219D4
-_0812169A:
- bl FreeAllSpritePalettes
- bl reset_temp_tile_data_buffers
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
-_081216EC:
- movs r1, 0
- bl SetGpuReg
- b _081219D4
-_081216F4:
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_0859F290
- movs r0, 0
- movs r2, 0x3
- bl InitBgsFromTemplates
- ldr r4, =gUnknown_0203A134
- ldr r1, [r4]
- movs r2, 0x8B
- lsls r2, 2
- adds r1, r2
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- ldr r0, =0x0000122c
- adds r1, r0
- movs r0, 0x2
- bl SetBgTilemapBuffer
- b _081219D4
- .pool
-_08121730:
- ldr r0, =gUnknown_0859F29C
- bl InitWindows
- bl DeactivateAllTextPrinters
- b _081219D4
- .pool
-_08121740:
- ldr r2, =gUnknown_0859F2B8
- ldr r0, =gUnknown_0203A134
- ldr r0, [r0]
- ldr r1, =0x0000021a
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x4
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl decompress_and_copy_tile_data_to_vram
- b _081219D4
- .pool
-_08121774:
- bl free_temp_tile_data_buffers_if_possible
- lsls r0, 24
- cmp r0, 0
- bne _08121780
- b _081219D4
-_08121780:
- b _081219E2
-_08121782:
- movs r5, 0x1E
- str r5, [sp]
- movs r4, 0x14
- str r4, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- str r5, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- ldr r2, =gUnknown_0859F2B8
- ldr r0, =gUnknown_0203A134
- ldr r0, [r0]
- ldr r1, =0x0000021a
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, 0x8
- adds r0, r2
- ldr r1, [r0]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- b _081219D4
- .pool
-_081217D8:
- movs r0, 0
- bl CopyBgTilemapBufferToVram
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- b _081219D4
-_081217EC:
- bl sub_8098C64
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r6, =gPlttBufferUnfaded
- ldr r4, =gUnknown_0859F2B8
- ldr r0, =gUnknown_0203A134
- ldr r3, [r0]
- ldr r2, =0x0000021a
- adds r3, r2
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x10]
- subs r2, 0x26
- adds r0, r6, r2
- strh r1, [r0]
- ldr r5, =gPlttBufferFaded
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x10]
- adds r2, r5, r2
- strh r0, [r2]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r1, [r0, 0x12]
- movs r2, 0xFB
- lsls r2, 1
- adds r0, r6, r2
- strh r1, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x12]
- adds r2, r5, r2
- strh r0, [r2]
- ldrb r1, [r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, =gUnknown_0859F2B0
- ldr r0, =gSaveBlock2Ptr
- ldr r2, [r0]
- ldrb r0, [r2, 0x8]
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r6, 0x14]
- ldrb r0, [r2, 0x8]
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r5, 0x14]
- ldrb r0, [r2, 0x8]
- lsls r0, 2
- adds r1, 0x2
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r6, 0x16]
- ldrb r0, [r2, 0x8]
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r5, 0x16]
- b _081219D4
- .pool
-_081218B0:
- ldr r0, =gUnknown_0203A134
- ldr r0, [r0]
- movs r1, 0x86
- lsls r1, 2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _081218C2
- b _081219D4
-_081218C2:
- bl sub_8121A1C
- b _081219D4
- .pool
-_081218CC:
- ldr r0, =gUnknown_0203A134
- ldr r0, [r0]
- movs r2, 0x86
- lsls r2, 2
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _081218DE
- b _081219D4
-_081218DE:
- bl sub_8121B1C
- bl RunTextPrinters
- b _081219D4
- .pool
-_081218EC:
- bl sub_8087598
- cmp r0, 0x1
- bne _081219D4
- b _081219E2
-_081218F6:
- ldr r0, =sub_8121C50
- bl SetVBlankCallback
- ldr r2, =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- b _081219D4
- .pool
-_08121910:
- ldr r5, =gUnknown_0203A134
- ldr r0, [r5]
- movs r1, 0x85
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- ldrh r0, [r0, 0x1E]
- bl sub_80D2E84
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, [r5]
- ldr r2, =0x0000021b
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _08121940
- cmp r0, 0x2
- beq _08121958
- b _081219D4
- .pool
-_08121940:
- adds r0, r4, 0
- bl sub_80D2F68
- ldr r1, =SpriteCallbackDummy
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0x60
- b _0812196A
- .pool
-_08121958:
- adds r0, r4, 0
- bl sub_80D2F68
- ldr r1, =SpriteCallbackDummy
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0x28
-_0812196A:
- movs r3, 0x80
- bl sub_80D2D78
- ldr r1, [r5]
- movs r2, 0x87
- lsls r2, 2
- adds r1, r2
- strb r0, [r1]
- b _081219D4
- .pool
-_08121980:
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2, 0x8]
- ldr r0, =gUnknown_0203A134
- ldr r0, [r0]
- movs r1, 0x84
- lsls r1, 2
- adds r0, r1
- ldr r1, =sub_8121C98
- str r1, [r0]
- movs r0, 0x1
- b _081219E4
- .pool
-_081219D4:
- ldr r1, =gMain
- movs r2, 0x87
- lsls r2, 3
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_081219E2:
- movs r0, 0
-_081219E4:
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81215EC
-
- thumb_func_start sub_81219F0
-sub_81219F0: @ 81219F0
- push {lr}
-_081219F2:
- bl sub_81215EC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08121A0C
- ldr r0, =sub_8121C64
- bl SetMainCallback2
- b _08121A18
- .pool
-_08121A0C:
- bl sub_81221AC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081219F2
-_08121A18:
- pop {r0}
- bx r0
- thumb_func_end sub_81219F0
-
- thumb_func_start sub_8121A1C
-sub_8121A1C: @ 8121A1C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r6, 0
- movs r5, 0
- ldr r2, =gUnknown_0203A134
- ldr r0, [r2]
- movs r1, 0x8A
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- ldrb r0, [r0]
- cmp r5, r0
- bcs _08121A8A
- mov r8, r2
- adds r7, r1, 0
-_08121A3C:
- lsls r0, r5, 6
- mov r1, r8
- ldr r2, [r1]
- adds r0, r2, r0
- movs r3, 0x85
- lsls r3, 2
- adds r1, r2, r3
- lsls r3, r6, 1
- ldr r1, [r1]
- adds r1, r3
- adds r2, r7
- ldr r2, [r2]
- ldr r2, [r2, 0x8]
- lsls r4, r5, 2
- adds r2, r4, r2
- ldr r2, [r2]
- lsls r2, 30
- lsrs r2, 30
- movs r3, 0x1
- bl ConvertEasyChatWordsToString
- mov r1, r8
- ldr r0, [r1]
- adds r0, r7
- ldr r1, [r0]
- ldr r0, [r1, 0x8]
- adds r4, r0
- ldr r0, [r4]
- lsls r0, 30
- 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 _08121A3C
-_08121A8A:
- ldr r4, =gUnknown_0203A134
- ldr r1, [r4]
- movs r2, 0x80
- lsls r2, 2
- adds r0, r1, r2
- movs r3, 0x85
- lsls r3, 2
- adds r1, r3
- ldr r1, [r1]
- adds r1, 0x12
- bl StringCopy
- adds r2, r0, 0
- ldr r1, [r4]
- ldr r3, =0x0000021e
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _08121AF0
- ldr r1, =gText_FromSpace
- adds r0, r2, 0
- bl StringCopy
- ldr r0, [r4]
- movs r1, 0x80
- lsls r1, 2
- adds r0, r1
- bl StringLength
- ldr r2, [r4]
- movs r3, 0x8A
- lsls r3, 2
- adds r1, r2, r3
- ldr r1, [r1]
- lsls r0, 16
- lsrs r0, 13
- subs r0, 0x60
- ldrb r1, [r1, 0x2]
- subs r1, r0
- ldr r0, =0x00000219
- adds r2, r0
- strb r1, [r2]
- b _08121B0C
- .pool
-_08121AF0:
- movs r2, 0x80
- lsls r2, 2
- adds r0, r1, r2
- bl sub_81DB52C
- ldr r0, [r4]
- movs r3, 0x8A
- lsls r3, 2
- adds r1, r0, r3
- ldr r1, [r1]
- ldrb r1, [r1, 0x2]
- ldr r2, =0x00000219
- adds r0, r2
- strb r1, [r0]
-_08121B0C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8121A1C
-
thumb_func_start sub_8121B1C
sub_8121B1C: @ 8121B1C
push {r4-r7,lr}
diff --git a/data/graphics.s b/data/graphics.s
index e1b76565a..1a5856c50 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -910,8 +910,116 @@ gCableCarCord_Gfx:: @ 8DBC2C0
gUnknown_08DBC2E8:: @ 8DBC2E8
.incbin "baserom.gba", 0xdbc2e8, 0x72c
-gUnknown_08DBCA14:: @ 8DBCA14
- .incbin "baserom.gba", 0xdbca14, 0x3d00
+gUnknown_08DBCA14:: @ 0x08DBCA14
+ .incbin "baserom.gba", 0xdbca14, 0x1e04
+
+gUnknown_08DBE818:: @ 0x08DBE818
+ .incbin "baserom.gba", 0xdbe818, 0x20
+
+gUnknown_08DBE838:: @ 0x08DBE838
+ .incbin "baserom.gba", 0xdbe838, 0x20
+
+gUnknown_08DBE858:: @ 0x08DBE858
+ .incbin "baserom.gba", 0xdbe858, 0x20
+
+gUnknown_08DBE878:: @ 0x08DBE878
+ .incbin "baserom.gba", 0xdbe878, 0x20
+
+gUnknown_08DBE898:: @ 0x08DBE898
+ .incbin "baserom.gba", 0xdbe898, 0x20
+
+gUnknown_08DBE8B8:: @ 0x08DBE8B8
+ .incbin "baserom.gba", 0xdbe8b8, 0x20
+
+gUnknown_08DBE8D8:: @ 0x08DBE8D8
+ .incbin "baserom.gba", 0xdbe8d8, 0x20
+
+gUnknown_08DBE8F8:: @ 0x08DBE8F8
+ .incbin "baserom.gba", 0xdbe8f8, 0x20
+
+gUnknown_08DBE918:: @ 0x08DBE918
+ .incbin "baserom.gba", 0xdbe918, 0x20
+
+gUnknown_08DBE938:: @ 0x08DBE938
+ .incbin "baserom.gba", 0xdbe938, 0x20
+
+gUnknown_08DBE958:: @ 0x08DBE958
+ .incbin "baserom.gba", 0xdbe958, 0x20
+
+gUnknown_08DBE978:: @ 0x08DBE978
+ .incbin "baserom.gba", 0xdbe978, 0x20
+
+gUnknown_08DBE998:: @ 0x08DBE998
+ .incbin "baserom.gba", 0xdbe998, 0x1a0
+
+gUnknown_08DBEB38:: @ 0x08DBEB38
+ .incbin "baserom.gba", 0xdbeb38, 0x13c
+
+gUnknown_08DBEC74:: @ 0x08DBEC74
+ .incbin "baserom.gba", 0xdbec74, 0x210
+
+gUnknown_08DBEE84:: @ 0x08DBEE84
+ .incbin "baserom.gba", 0xdbee84, 0xd8
+
+gUnknown_08DBEF5C:: @ 0x08DBEF5C
+ .incbin "baserom.gba", 0xdbef5c, 0x1f8
+
+gUnknown_08DBF154:: @ 0x08DBF154
+ .incbin "baserom.gba", 0xdbf154, 0x180
+
+gUnknown_08DBF2D4:: @ 0x08DBF2D4
+ .incbin "baserom.gba", 0xdbf2d4, 0xa8
+
+gUnknown_08DBF37C:: @ 0x08DBF37C
+ .incbin "baserom.gba", 0xdbf37c, 0x190
+
+gUnknown_08DBF50C:: @ 0x08DBF50C
+ .incbin "baserom.gba", 0xdbf50c, 0x140
+
+gUnknown_08DBF64C:: @ 0x08DBF64C
+ .incbin "baserom.gba", 0xdbf64c, 0x168
+
+gUnknown_08DBF7B4:: @ 0x08DBF7B4
+ .incbin "baserom.gba", 0xdbf7b4, 0x150
+
+gUnknown_08DBF904:: @ 0x08DBF904
+ .incbin "baserom.gba", 0xdbf904, 0x2a0
+
+gUnknown_08DBFBA4:: @ 0x08DBFBA4
+ .incbin "baserom.gba", 0xdbfba4, 0xd8
+
+gUnknown_08DBFC7C:: @ 0x08DBFC7C
+ .incbin "baserom.gba", 0xdbfc7c, 0xe0
+
+gUnknown_08DBFD5C:: @ 0x08DBFD5C
+ .incbin "baserom.gba", 0xdbfd5c, 0x10c
+
+gUnknown_08DBFE68:: @ 0x08DBFE68
+ .incbin "baserom.gba", 0xdbfe68, 0xdc
+
+gUnknown_08DBFF44:: @ 0x08DBFF44
+ .incbin "baserom.gba", 0xdbff44, 0xf0
+
+gUnknown_08DC0034:: @ 0x08DC0034
+ .incbin "baserom.gba", 0xdc0034, 0xe0
+
+gUnknown_08DC0114:: @ 0x08DC0114
+ .incbin "baserom.gba", 0xdc0114, 0xe0
+
+gUnknown_08DC01F4:: @ 0x08DC01F4
+ .incbin "baserom.gba", 0xdc01f4, 0x10c
+
+gUnknown_08DC0300:: @ 0x08DC0300
+ .incbin "baserom.gba", 0xdc0300, 0xf0
+
+gUnknown_08DC03F0:: @ 0x08DC03F0
+ .incbin "baserom.gba", 0xdc03f0, 0xf8
+
+gUnknown_08DC04E8:: @ 0x08DC04E8
+ .incbin "baserom.gba", 0xdc04e8, 0x118
+
+gUnknown_08DC0600:: @ 0x08DC0600
+ .incbin "baserom.gba", 0xdc0600, 0x114
gUnknown_08DC0714:: @ 8DC0714
.incbin "baserom.gba", 0xdc0714, 0x40
diff --git a/data/mail.s b/data/mail.s
deleted file mode 100644
index 5dc8270bc..000000000
--- a/data/mail.s
+++ /dev/null
@@ -1,26 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-
-gUnknown_0859F290:: @ 859F290
- .incbin "baserom.gba", 0x59f290, 0xc
-
-gUnknown_0859F29C:: @ 859F29C
- .incbin "baserom.gba", 0x59f29c, 0x10
-
-gUnknown_0859F2AC:: @ 859F2AC
- .incbin "baserom.gba", 0x59f2ac, 0x4
-
-gUnknown_0859F2B0:: @ 859F2B0
- .incbin "baserom.gba", 0x59f2b0, 0x8
-
-gUnknown_0859F2B8:: @ 859F2B8
- .incbin "baserom.gba", 0x59f2b8, 0xfc
-
-gUnknown_0859F3B4:: @ 859F3B4
- .incbin "baserom.gba", 0x59f3b4, 0xa4
-
-gUnknown_0859F458:: @ 859F458
- .incbin "baserom.gba", 0x59f458, 0xbc
diff --git a/include/international_string_util.h b/include/international_string_util.h
index 0eb12a535..a2891aeb7 100644
--- a/include/international_string_util.h
+++ b/include/international_string_util.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_international_string_util_H
-#define GUARD_international_string_util_H
+#ifndef GUARD_INTERNATIONAL_STRING_UTIL_H
+#define GUARD_INTERNATIONAL_STRING_UTIL_H
// Exported type declarations
@@ -7,7 +7,8 @@
// Exported ROM declarations
+void sub_81DB52C(const u8 *src);
void TVShowConvertInternationalString(void *dest, const void *src, u8 language);
u32 sub_81DB604(const u8 *);
-#endif //GUARD_international_string_util_H
+#endif //GUARD_INTERNATIONAL_STRING_UTIL_H
diff --git a/include/mail_data.h b/include/mail_data.h
new file mode 100644
index 000000000..bf6540bad
--- /dev/null
+++ b/include/mail_data.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_MAIL_DATA_H
+#define GUARD_MAIL_DATA_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+u16 sub_80D45E8(u16, u16 *);
+
+#endif //GUARD_MAIL_DATA_H
diff --git a/include/menu.h b/include/menu.h
index 766aa9d39..957bed9b4 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -19,5 +19,8 @@ void box_print(u8, u8, u8, u8, const void *, s8, const u8 *);
void sub_8198070(u8 windowId, bool8 copyToVram);
void SetWindowTemplateFields(struct WindowTemplate* template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock);
void SetWindowBorderStyle(u8 windowId, bool8 copyToVram, u16 tileStart, u8 palette);
+void reset_temp_tile_data_buffers(void);
+int decompress_and_copy_tile_data_to_vram(u8 bg_id, const void *src, int size, u16 offset, u8 mode);
+bool8 free_temp_tile_data_buffers_if_possible(void);
#endif // GUARD_MENU_H
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
new file mode 100644
index 000000000..45ee95de5
--- /dev/null
+++ b/include/menu_helpers.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_MENU_HELPERS_H
+#define GUARD_MENU_HELPERS_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+bool8 sub_81221AC(void);
+
+#endif //GUARD_MENU_HELPERS_H
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index b82334355..1863f9f7a 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -3,5 +3,8 @@
const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);
const u16 *GetValidMonIconPalettePtr(u16 speciesId);
+u16 sub_80D2E84(u16 speciesId);
+void sub_80D2F68(u16 iconId);
+u8 sub_80D2D78(u16 iconId, void callback(struct Sprite *), u16 x, u16 y, u16 a4, u8 a5);
#endif // GUARD_POKEMON_ICON_H
diff --git a/include/rom4.h b/include/rom4.h
index c7e46eecb..683d2c04f 100644
--- a/include/rom4.h
+++ b/include/rom4.h
@@ -29,6 +29,7 @@ const struct MapHeader *get_mapheader_by_bank_and_number(u8, u8);
void FieldObjectMoveDestCoords(struct MapObject *, u32, s16 *, s16 *);
void sub_8086230(void);
void c2_exit_to_overworld_2_switch(void);
+bool32 sub_8087598(void);
void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
#endif //GUARD_ROM4_H
diff --git a/include/strings.h b/include/strings.h
index 5d1a9bba0..e45f3c87d 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -1,6 +1,13 @@
-#ifndef GUARD_strings_H
-#define GUARD_strings_H
+#ifndef GUARD_STRINGS_H
+#define GUARD_STRINGS_H
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+extern const u8 gText_FromSpace[];
extern const u8 gText_Lv50[];
extern const u8 gText_OpenLevel[];
extern const u8 gText_Mom[];
@@ -30,4 +37,4 @@ extern const u8 gText_First[];
extern const u8 gText_Second[];
extern const u8 gText_Third[];
-#endif //GUARD_strings_H
+#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index d1acf4f99..8349338bc 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -164,6 +164,7 @@ SECTIONS {
asm/easy_chat.o(.text);
asm/mon_markings.o(.text);
asm/mauville_old_man.o(.text);
+ src/mail.o(.text);
asm/mail.o(.text);
asm/menu_helpers.o(.text);
asm/dewford_trend.o(.text);
@@ -400,7 +401,7 @@ SECTIONS {
data/easy_chat.o(.rodata);
data/mon_markings.o(.rodata);
data/mauville_old_man.o(.rodata);
- data/mail.o(.rodata);
+ src/mail.o(.rodata);
data/menu_helpers.o(.rodata);
data/heal_location.o(.rodata);
data/region_map.o(.rodata);
diff --git a/src/mail.c b/src/mail.c
new file mode 100644
index 000000000..0c3e85cc3
--- /dev/null
+++ b/src/mail.c
@@ -0,0 +1,491 @@
+
+// Includes
+#include "global.h"
+#include "main.h"
+#include "rom4.h"
+#include "task.h"
+#include "unknown_task.h"
+#include "palette.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "text.h"
+#include "text_window.h"
+#include "string_util.h"
+#include "international_string_util.h"
+#include "strings.h"
+#include "gpu_regs.h"
+#include "bg.h"
+#include "pokemon_icon.h"
+#include "species.h"
+#include "malloc.h"
+#include "easy_chat.h"
+#include "mail_data.h"
+#include "mail.h"
+
+// Static type declarations
+
+struct UnkMailStruct
+{
+ u32 unk_0_0:2;
+ u32 unk_0_2:2;
+ u32 unk_0_4:4;
+ u32 unk_1_0:4;
+ u32 unk_1_4:1;
+};
+
+struct MailLayout
+{
+ u8 var0;
+ u8 var1;
+ u8 var2;
+ u8 var3_0:4;
+ u8 var3_4:4;
+ u32 var4;
+ const struct UnkMailStruct *var8;
+};
+
+struct Unk203A134
+{
+ /*0x0000*/ u8 strbuf[8][64];
+ /*0x0200*/ u8 playerName[12];
+ /*0x020C*/ MainCallback callback;
+ /*0x0210*/ MainCallback callback2;
+ /*0x0214*/ struct MailStruct *mail;
+ /*0x0218*/ bool8 flag;
+ /*0x0219*/ u8 unk_0219;
+ /*0x021a*/ u8 mailType;
+ /*0x021b*/ u8 unk_021b;
+ /*0x021c*/ u8 unk_021c;
+ /*0x021d*/ u8 language;
+ /*0x021e*/ bool8 playerIsSender;
+ /*0x0220*/ void (*parserSingle)(u8 *dest, u16 word);
+ /*0x0224*/ void (*parserMultiple)(u8 *dest, const u16 *src, u16 length1, u16 length2);
+ /*0x0228*/ const struct MailLayout *layout;
+ /*0x022c*/ u8 bg1TilemapBuffer[0x1000];
+ /*0x122c*/ u8 bg2TilemapBuffer[0x1000];
+};
+
+struct MailGraphics
+{
+ const u16 *palette;
+ const u8 *tiles;
+ const u8 *tileMap;
+ u16 var0C;
+ u16 var0E;
+ u16 color10;
+ u16 color12;
+};
+
+// Static RAM declarations
+
+EWRAM_DATA struct Unk203A134 *gUnknown_0203A134;
+
+// Static ROM declarations
+
+void sub_81219F0(void);
+void sub_8121A1C(void);
+void sub_8121B1C(void);
+void sub_8121C50(void);
+void sub_8121C64(void);
+void sub_8121C98(void);
+
+// .rodata
+
+const struct BgTemplate gUnknown_0859F290[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 31,
+ .priority = 0
+ }, {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .priority = 1
+ }, {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 29,
+ .priority = 2
+ }
+};
+
+const struct WindowTemplate gUnknown_0859F29C[] = {
+ {
+ .priority = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 3,
+ .width = 26,
+ .height = 15,
+ .paletteNum = 15,
+ .baseBlock = 1
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+const u8 gUnknown_0859F2AC[] = {
+ 0,
+ 10,
+ 11
+};
+
+const u16 gUnknown_0859F2B0[][2] = {
+ { 0x6ACD, 0x51A5 },
+ { 0x45FC, 0x38D4 }
+};
+
+extern const u16 gUnknown_08DBE818[];
+extern const u16 gUnknown_08DBE838[];
+extern const u16 gUnknown_08DBE858[];
+extern const u16 gUnknown_08DBE878[];
+extern const u16 gUnknown_08DBE898[];
+extern const u16 gUnknown_08DBE8B8[];
+extern const u16 gUnknown_08DBE8D8[];
+extern const u16 gUnknown_08DBE8F8[];
+extern const u16 gUnknown_08DBE918[];
+extern const u16 gUnknown_08DBE938[];
+extern const u16 gUnknown_08DBE958[];
+extern const u16 gUnknown_08DBE978[];
+extern const u8 gUnknown_08DBE998[];
+extern const u8 gUnknown_08DBFBA4[];
+extern const u8 gUnknown_08DBEB38[];
+extern const u8 gUnknown_08DBFC7C[];
+extern const u8 gUnknown_08DBEC74[];
+extern const u8 gUnknown_08DBFD5C[];
+extern const u8 gUnknown_08DBEE84[];
+extern const u8 gUnknown_08DBFE68[];
+extern const u8 gUnknown_08DBEF5C[];
+extern const u8 gUnknown_08DBFF44[];
+extern const u8 gUnknown_08DBF154[];
+extern const u8 gUnknown_08DC0034[];
+extern const u8 gUnknown_08DBF2D4[];
+extern const u8 gUnknown_08DC0114[];
+extern const u8 gUnknown_08DBF37C[];
+extern const u8 gUnknown_08DC01F4[];
+extern const u8 gUnknown_08DBF50C[];
+extern const u8 gUnknown_08DC0300[];
+extern const u8 gUnknown_08DBF64C[];
+extern const u8 gUnknown_08DC03F0[];
+extern const u8 gUnknown_08DBF7B4[];
+extern const u8 gUnknown_08DC04E8[];
+extern const u8 gUnknown_08DBF904[];
+extern const u8 gUnknown_08DC0600[];
+
+const struct MailGraphics gUnknown_0859F2B8[] = {
+ {
+ gUnknown_08DBE818, gUnknown_08DBE998, gUnknown_08DBFBA4, 0x02c0, 0x0000, 0x294a, 0x6739
+ }, {
+ gUnknown_08DBE838, gUnknown_08DBEB38, gUnknown_08DBFC7C, 0x02e0, 0x0000, 0x7fff, 0x4631
+ }, {
+ gUnknown_08DBE858, gUnknown_08DBEC74, gUnknown_08DBFD5C, 0x0400, 0x0000, 0x294a, 0x6739
+ }, {
+ gUnknown_08DBE878, gUnknown_08DBEE84, gUnknown_08DBFE68, 0x01e0, 0x0000, 0x7fff, 0x4631
+ }, {
+ gUnknown_08DBE898, gUnknown_08DBEF5C, gUnknown_08DBFF44, 0x02e0, 0x0000, 0x7fff, 0x4631
+ }, {
+ gUnknown_08DBE8B8, gUnknown_08DBF154, gUnknown_08DC0034, 0x0300, 0x0000, 0x294a, 0x6739
+ }, {
+ gUnknown_08DBE8D8, gUnknown_08DBF2D4, gUnknown_08DC0114, 0x0140, 0x0000, 0x7fff, 0x4631
+ }, {
+ gUnknown_08DBE8F8, gUnknown_08DBF37C, gUnknown_08DC01F4, 0x0300, 0x0000, 0x7fff, 0x4631
+ }, {
+ gUnknown_08DBE918, gUnknown_08DBF50C, gUnknown_08DC0300, 0x0220, 0x0000, 0x294a, 0x6739
+ }, {
+ gUnknown_08DBE938, gUnknown_08DBF64C, gUnknown_08DC03F0, 0x0340, 0x0000, 0x294a, 0x6739
+ }, {
+ gUnknown_08DBE958, gUnknown_08DBF7B4, gUnknown_08DC04E8, 0x02a0, 0x0000, 0x294a, 0x6739
+ }, {
+ gUnknown_08DBE978, gUnknown_08DBF904, gUnknown_08DC0600, 0x0520, 0x0000, 0x294a, 0x6739
+ }
+};
+
+const struct UnkMailStruct Unknown_0859F3A8[] = {
+ { .unk_0_0 = 3, .unk_1_4 = TRUE },
+ { .unk_0_0 = 3, .unk_1_4 = TRUE },
+ { .unk_0_0 = 3, .unk_1_4 = TRUE }
+};
+
+const struct MailLayout gUnknown_0859F3B4[] = {
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x08, 0x00, 0x2, 0x0, 0x04, Unknown_0859F3A8 },
+ { 0x03, 0x00, 0x00, 0x2, 0x0, 0x00, Unknown_0859F3A8 }
+};
+
+const struct UnkMailStruct Unknown_0859F444[] = {
+ { .unk_0_0 = 2, .unk_1_4 = TRUE },
+ { .unk_0_0 = 2, .unk_1_4 = TRUE },
+ { .unk_0_0 = 2, .unk_1_4 = TRUE },
+ { .unk_0_0 = 2, .unk_1_4 = TRUE },
+ { .unk_0_0 = 1, .unk_1_4 = TRUE }
+};
+
+const struct MailLayout gUnknown_0859F458[] = {
+ { 0x05, 0x07, 0x58, 0xb, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x0a, 0x60, 0x9, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x0c, 0x68, 0x5, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x05, 0x60, 0x8, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x0a, 0x60, 0x9, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x09, 0x70, 0x5, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x0c, 0x68, 0x9, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x0d, 0x68, 0xd, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x09, 0x60, 0x9, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x09, 0x60, 0x9, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x11, 0x68, 0xf, 0x0, 0x1e, Unknown_0859F444 },
+ { 0x05, 0x09, 0x60, 0x5, 0x0, 0x1e, Unknown_0859F444 }
+};
+
+// What the heck are these meant to be? Call them u16 for now.
+
+const u16 Unknown_0859F4E8[] = {
+ 0x00, 0x4000, 0x00, 0x00
+};
+
+const u16 Unknown_0859F4F0[] = {
+ 0x00, 0x00, -1, 0x00
+};
+
+const u16 Unknown_0859F4F8[] = {
+ 0x04, 0x00, -1, 0x00
+};
+
+const u16 Unknown_0859F500[] = {
+ 0x00, 0x40, -1, 0x00
+};
+
+const u16 *const gUnknown_0859F508[] = {
+ Unknown_0859F4F0,
+ Unknown_0859F4F8,
+ Unknown_0859F500
+};
+
+// .text
+
+void sub_8121478(struct MailStruct *mail, MainCallback callback, bool8 flag) {
+ u16 buffer[2];
+ u16 species;
+
+ gUnknown_0203A134 = calloc(1, sizeof(struct Unk203A134));
+ gUnknown_0203A134->language = LANGUAGE_ENGLISH;
+ gUnknown_0203A134->playerIsSender = TRUE;
+ gUnknown_0203A134->parserSingle = CopyEasyChatWord;
+ gUnknown_0203A134->parserMultiple = ConvertEasyChatWordsToString;
+ if (mail->itemId >= ITEM_ORANGE_MAIL && mail->itemId <= ITEM_RETRO_MAIL) {
+ gUnknown_0203A134->mailType = mail->itemId - ITEM_ORANGE_MAIL;
+ }
+ else
+ {
+ gUnknown_0203A134->mailType = 0;
+ flag = FALSE;
+ }
+ switch (gUnknown_0203A134->playerIsSender)
+ {
+ case FALSE:
+ default:
+ gUnknown_0203A134->layout = &gUnknown_0859F3B4[gUnknown_0203A134->mailType];
+ break;
+ case TRUE:
+ gUnknown_0203A134->layout = &gUnknown_0859F458[gUnknown_0203A134->mailType];
+ break;
+ }
+ species = sub_80D45E8(mail->species, buffer);
+ if (species >= SPECIES_BULBASAUR && species < NUM_SPECIES)
+ {
+ switch (gUnknown_0203A134->mailType)
+ {
+ default:
+ gUnknown_0203A134->unk_021b = 0;
+ break;
+ case ITEM_BEAD_MAIL - ITEM_ORANGE_MAIL:
+ gUnknown_0203A134->unk_021b = 1;
+ break;
+ case ITEM_DREAM_MAIL - ITEM_ORANGE_MAIL:
+ gUnknown_0203A134->unk_021b = 2;
+ break;
+ }
+ }
+ else
+ {
+ gUnknown_0203A134->unk_021b = 0;
+ }
+ gUnknown_0203A134->mail = mail;
+ gUnknown_0203A134->callback = callback;
+ gUnknown_0203A134->flag = flag;
+ SetMainCallback2(sub_81219F0);
+}
+
+bool8 sub_81215EC(void)
+{
+ u16 icon;
+
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ remove_some_task();
+ SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
+ break;
+ case 1:
+ CpuFill16(0, (void *)OAM, OAM_SIZE);
+ break;
+ case 2:
+ ResetPaletteFade();
+ break;
+ case 3:
+ ResetTasks();
+ break;
+ case 4:
+ ResetSpriteData();
+ break;
+ case 5:
+ FreeAllSpritePalettes();
+ reset_temp_tile_data_buffers();
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0x0000);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0x0000);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0x0000);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0x0000);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0x0000);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0x0000);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0x0000);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0x0000);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0x0000);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0x0000);
+ break;
+ case 6:
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_0859F290, 3);
+ SetBgTilemapBuffer(1, gUnknown_0203A134->bg1TilemapBuffer);
+ SetBgTilemapBuffer(2, gUnknown_0203A134->bg2TilemapBuffer);
+ break;
+ case 7:
+ InitWindows(gUnknown_0859F29C);
+ DeactivateAllTextPrinters();
+ break;
+ case 8:
+ decompress_and_copy_tile_data_to_vram(1, gUnknown_0859F2B8[gUnknown_0203A134->mailType].tiles, 0, 0, 0);
+ break;
+ case 9:
+ if (free_temp_tile_data_buffers_if_possible())
+ {
+ return FALSE;
+ }
+ break;
+ case 10:
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
+ FillBgTilemapBufferRect_Palette0(2, 1, 0, 0, 30, 20);
+ CopyToBgTilemapBuffer(1, gUnknown_0859F2B8[gUnknown_0203A134->mailType].tileMap, 0, 0);
+ break;
+ case 11:
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ break;
+ case 12:
+ LoadPalette(sub_8098C64(), 240, 32);
+ gPlttBufferUnfaded[250] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color10;
+ gPlttBufferFaded[250] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color10;
+ gPlttBufferUnfaded[251] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color12;
+ gPlttBufferFaded[251] = gUnknown_0859F2B8[gUnknown_0203A134->mailType].color12;
+ LoadPalette(gUnknown_0859F2B8[gUnknown_0203A134->mailType].palette, 0, 32);
+ gPlttBufferUnfaded[10] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][0];
+ gPlttBufferFaded[10] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][0];
+ gPlttBufferUnfaded[11] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][1];
+ gPlttBufferFaded[11] = gUnknown_0859F2B0[gSaveBlock2Ptr->playerGender][1];
+ break;
+ case 13:
+ if (gUnknown_0203A134->flag)
+ {
+ sub_8121A1C();
+ }
+ break;
+ case 14:
+ if (gUnknown_0203A134->flag)
+ {
+ sub_8121B1C();
+ RunTextPrinters();
+ }
+ break;
+ case 15:
+ if (sub_8087598() == TRUE)
+ {
+ return FALSE;
+ }
+ break;
+ case 16:
+ SetVBlankCallback(sub_8121C50);
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ break;
+ case 17:
+ icon = sub_80D2E84(gUnknown_0203A134->mail->species);
+ switch (gUnknown_0203A134->unk_021b)
+ {
+ case 1:
+ sub_80D2F68(icon);
+ gUnknown_0203A134->unk_021c = sub_80D2D78(icon, SpriteCallbackDummy, 0x60, 0x80, 0, 0);
+ break;
+ case 2:
+ sub_80D2F68(icon);
+ gUnknown_0203A134->unk_021c = sub_80D2D78(icon, SpriteCallbackDummy, 0x28, 0x80, 0, 0);
+ break;
+ }
+ break;
+ case 18:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ gUnknown_0203A134->callback2 = sub_8121C98;
+ return TRUE;
+ default:
+ return FALSE;
+ }
+ gMain.state ++;
+ return FALSE;
+}
+
+void sub_81219F0(void)
+{
+ do
+ {
+ if (sub_81215EC() == TRUE)
+ {
+ SetMainCallback2(sub_8121C64);
+ break;
+ }
+ } while (sub_81221AC() != TRUE);
+}
+
+void sub_8121A1C(void)
+{
+ u16 i;
+ u8 total;
+ u8 *ptr;
+
+ total = 0;
+ for (i = 0; i < gUnknown_0203A134->layout->var0; i ++)
+ {
+ ConvertEasyChatWordsToString(gUnknown_0203A134->strbuf[i], &gUnknown_0203A134->mail->words[total], gUnknown_0203A134->layout->var8[i].unk_0_0, 1);
+ total += gUnknown_0203A134->layout->var8[i].unk_0_0;
+ }
+ ptr = StringCopy(gUnknown_0203A134->playerName, gUnknown_0203A134->mail->playerName);
+ if (!gUnknown_0203A134->playerIsSender)
+ {
+ StringCopy(ptr, gText_FromSpace);
+ gUnknown_0203A134->unk_0219 = gUnknown_0203A134->layout->var2 - (StringLength(gUnknown_0203A134->playerName) * 8 - 0x60);
+ }
+ else
+ {
+ sub_81DB52C(gUnknown_0203A134->playerName);
+ gUnknown_0203A134->unk_0219 = gUnknown_0203A134->layout->var2;
+ }
+}