summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/mail.s122
-rw-r--r--include/international_string_util.h11
-rw-r--r--include/strings.h12
-rw-r--r--src/mail.c50
4 files changed, 63 insertions, 132 deletions
diff --git a/asm/mail.s b/asm/mail.s
index 0180b9418..c35d3873a 100644
--- a/asm/mail.s
+++ b/asm/mail.s
@@ -5,128 +5,6 @@
.text
- 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/include/international_string_util.h b/include/international_string_util.h
new file mode 100644
index 000000000..4adc21224
--- /dev/null
+++ b/include/international_string_util.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_INTERNATIONAL_STRING_UTIL_H
+#define GUARD_INTERNATIONAL_STRING_UTIL_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+void sub_81DB52C(const u8 *src);
+
+#endif //GUARD_INTERNATIONAL_STRING_UTIL_H
diff --git a/include/strings.h b/include/strings.h
new file mode 100644
index 000000000..68e5c9d35
--- /dev/null
+++ b/include/strings.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_STRINGS_H
+#define GUARD_STRINGS_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+
+// Exported ROM declarations
+
+extern const u8 gText_FromSpace[];
+
+#endif //GUARD_STRINGS_H
diff --git a/src/mail.c b/src/mail.c
index 3febf1d08..0c3e85cc3 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -10,6 +10,9 @@
#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"
@@ -23,11 +26,11 @@
struct UnkMailStruct
{
- u8 unk_0_0:2;
- u8 unk_0_2:2;
- u8 unk_0_4:4;
- u8 unk_1_0:4;
- u8 unk_1_4:1;
+ 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
@@ -43,12 +46,13 @@ struct MailLayout
struct Unk203A134
{
- /*0x0000*/ u8 filler_0000[0x20c];
+ /*0x0000*/ u8 strbuf[8][64];
+ /*0x0200*/ u8 playerName[12];
/*0x020C*/ MainCallback callback;
/*0x0210*/ MainCallback callback2;
/*0x0214*/ struct MailStruct *mail;
/*0x0218*/ bool8 flag;
- /*0x0219*/ u8 filler_0219[1];
+ /*0x0219*/ u8 unk_0219;
/*0x021a*/ u8 mailType;
/*0x021b*/ u8 unk_021b;
/*0x021c*/ u8 unk_021c;
@@ -115,9 +119,8 @@ const struct WindowTemplate gUnknown_0859F29C[] = {
.height = 15,
.paletteNum = 15,
.baseBlock = 1
- }, {
- .priority = -1
- }
+ },
+ DUMMY_WIN_TEMPLATE
};
const u8 gUnknown_0859F2AC[] = {
@@ -240,6 +243,8 @@ const struct MailLayout gUnknown_0859F458[] = {
{ 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
};
@@ -459,3 +464,28 @@ void sub_81219F0(void)
}
} 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;
+ }
+}