summaryrefslogtreecommitdiff
path: root/src/easy_chat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/easy_chat.c')
-rw-r--r--src/easy_chat.c3591
1 files changed, 3267 insertions, 324 deletions
diff --git a/src/easy_chat.c b/src/easy_chat.c
index 7158253d1..5c55cd2ca 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -2,20 +2,28 @@
// Includes
#include "global.h"
#include "alloc.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "overworld.h"
-#include "task.h"
-#include "main.h"
-#include "link.h"
+#include "bg.h"
+#include "dewford_trend.h"
+#include "dynamic_placeholder_text_util.h"
+#include "easy_chat.h"
+#include "event_data.h"
#include "field_weather.h"
-#include "window.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "international_string_util.h"
+#include "link.h"
+#include "main.h"
+#include "menu.h"
+#include "overworld.h"
#include "palette.h"
-#include "event_data.h"
-#include "easy_chat.h"
+#include "sound.h"
#include "string_util.h"
-
-// Static type declarations
+#include "strings.h"
+#include "task.h"
+#include "text_window.h"
+#include "window.h"
+#include "constants/flags.h"
+#include "constants/songs.h"
#define EZCHAT_TASK_STATE 0
#define EZCHAT_TASK_KIND 1
@@ -24,37 +32,86 @@
#define EZCHAT_TASK_UNK06 6
#define EZCHAT_TASK_SIZE 7
-// Static RAM declarations
-
-EWRAM_DATA struct
-{
- u8 kind;
- u8 unk_01;
- u8 unk_02;
- u8 unk_03;
- u8 unk_04;
- s8 unk_05;
- s8 unk_06;
- u8 unk_07;
- u8 unk_08;
- u8 unk_09;
- u8 unk_0a;
- u8 unk_0b;
- u8 unk_0c;
- u8 unk_0d;
- u8 unk_0e[0x4];
- u8 sizeParam;
- u8 unk_13;
- u8 unk_14[0x20];
- const u8 *src;
- const u16 *words;
- u16 ecWordBuffer[9];
-} *gUnknown_0203A118 = NULL;
-
-EWRAM_DATA void *gUnknown_0203A11C = 0;
-EWRAM_DATA void *gUnknown_0203A120 = 0;
+struct EasyChatScreenTemplate
+{
+ u8 unk_00;
+ u8 numColumns;
+ u8 numRows;
+ u8 unk_03_0:7;
+ u8 unk_03_7:1;
+ const u8 *titleText;
+ const u8 *instructionsText1;
+ const u8 *instructionsText2;
+ const u8 *confirmText1;
+ const u8 *confirmText2;
+};
+
+struct EasyChatScreen
+{
+ /*0x00*/ u8 kind;
+ /*0x01*/ u8 templateId;
+ /*0x02*/ u8 numColumns;
+ /*0x03*/ u8 numRows;
+ /*0x04*/ u8 state;
+ /*0x05*/ s8 mainCursorColumn;
+ /*0x06*/ s8 mainCursorRow;
+ /*0x07*/ u8 unk_07;
+ /*0x08*/ u8 unk_08;
+ /*0x09*/ u8 unk_09;
+ /*0x0A*/ s8 unk_0a;
+ /*0x0B*/ s8 unk_0b;
+ /*0x0C*/ u8 unk_0c;
+ /*0x0D*/ u8 unk_0d;
+ /*0x0E*/ u8 unk_0e;
+ /*0x0F*/ u8 unk_0f;
+ /*0x10*/ s8 unk_10;
+ /*0x11*/ s8 unk_11;
+ /*0x12*/ u8 sizeParam;
+ /*0x13*/ u8 unk_13;
+ /*0x14*/ u8 unk_14[0x20];
+ /*0x34*/ const u8 *titleText;
+ /*0x38*/ u16 *words;
+ /*0x3C*/ u16 ecWordBuffer[9];
+};
+
+struct Unk203A11C
+{
+ u16 unk0;
+ u16 windowId;
+ u16 unk4;
+ u8 unk6;
+ u8 unk7;
+ s8 unk8;
+ u8 filler9[0x1];
+ u8 unkA;
+ u8 unkB[0xC1];
+ u8 unkCC[0x20C];
+ int unk2D8;
+ int unk2DC;
+ int unk2E0;
+ int unk2E4;
+ int unk2E8;
+ int unk2EC;
+ int unk2F0;
+ int unk2F4;
+ int unk2F8;
+ int unk2FC;
+ u16 unk300[BG_SCREEN_SIZE / 2];
+ u16 unkB00[BG_SCREEN_SIZE / 2];
+};
-// Static ROM declarations
+struct Unk08597C30
+{
+ u8 unk0_0:5;
+ u8 unk0_5:3;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+};
+
+EWRAM_DATA struct EasyChatScreen *gEasyChatScreen = NULL;
+EWRAM_DATA struct Unk203A11C *gUnknown_0203A11C = 0;
+EWRAM_DATA void *gUnknown_0203A120 = 0;
static void sub_811A2C0(u8);
static void sub_811A278(void);
@@ -68,47 +125,185 @@ static bool8 EasyChat_AllocateResources(u8, u16 *, u8);
static void EasyChat_FreeResources(void);
static u16 sub_811AAAC(void);
static u16 sub_811AB68(void);
-u16 sub_811ACDC(void);
-u16 sub_811AE44(void);
-u16 sub_811AF00(void);
-u16 sub_811AF8C(void);
-u16 sub_811AFEC(void);
-u16 sub_811B040(void);
-u16 sub_811B08C(void);
-u16 sub_811B0BC(void);
-u16 sub_811B0E8(void);
-u16 sub_811B0F8(void);
-u16 sub_811B150(void);
+static u16 sub_811ACDC(void);
+static u16 sub_811AE44(void);
+static u16 sub_811AF00(void);
+static u16 sub_811AF8C(void);
+static u16 sub_811AFEC(void);
+static u16 sub_811B040(void);
+static u16 sub_811B08C(void);
+static u16 sub_811B0BC(void);
+static u16 sub_811B0E8(void);
+static u16 sub_811B0F8(void);
+static u16 sub_811B150(void);
u16 sub_811B1B4(void);
u8 sub_811BA68(void);
-u8 sub_811BCC8(u8);
-void sub_811BDF0(u8 *);
+static u8 sub_811BCC8(u8);
+static void sub_811BDF0(u8 *);
void sub_811BF78(void);
-bool8 sub_811BF8C(void);
-bool8 sub_811BFA4(void);
-void sub_811C13C(void);
-/*static*/ void sub_811C158(u16);
-/*static*/ bool8 sub_811C170(void);
+static bool8 sub_811BF8C(void);
+static bool8 sub_811BFA4(void);
+static void sub_811C13C(void);
+static void sub_811C158(u16);
+static bool8 sub_811C170(void);
bool8 sub_811F28C(void);
void sub_811F2B8(void);
u8 sub_811F3AC(void);
-
-// .rodata
+int sub_811BA3C(void);
+int sub_811B184(void);
+int sub_811B264(void);
+static int sub_811B32C(void);
+static int sub_811B2B0(void);
+static int sub_811B33C(void);
+static int sub_811B368(void);
+static u16 sub_811B528(int);
+static u16 sub_811B794(u32);
+static int sub_811B394(void);
+static u8 sub_811B2A4(void);
+static void sub_811B3E4(void);
+static void sub_811BE9C(void);
+static int sub_811B4EC(void);
+static void sub_811B418(void);
+static void sub_811B454(void);
+static int sub_811BD64(void);
+static int sub_811BDB0(void);
+static int sub_811BD2C(void);
+int sub_811BCF4(void);
+static u16 sub_811B8E8(void);
+int sub_811F3B8(u8);
+void sub_811F548(int, u16);
+static int sub_811B908(void);
+u16 sub_811F5B0(void);
+static void sub_811B488(u16);
+u16 sub_811B940(void);
+u16 sub_811F578(u16);
+int sub_811BF88(int);
+static u16 sub_811B8C8(void);
+static int sub_811B568(u32);
+static int sub_811B634(u32);
+static int sub_811B6C4(u32);
+static void sub_811B978(void);
+static void sub_811B744(void);
+static u8 sub_811B9C8(void);
+static void sub_811B768(void);
+static u8 sub_811B960(u8);
+static void sub_811B9A0(void);
+static u8 sub_811BA1C(void);
+static int sub_811BF20(void);
+static u16 sub_811BF40(void);
+static bool8 sub_811CE94(void);
+static void sub_811CF64(void);
+static void sub_811CF04(void);
+static void sub_811D60C(void);
+static void sub_811D424(u16 *);
+static void sub_811D230(void);
+void sub_811E948(void);
+static void sub_811CFCC(void);
+static void sub_811D0BC(void);
+static void sub_811D2C8(void);
+static void sub_811D684(void);
+void sub_811DE90(void);
+void sub_811DEC4(void);
+void sub_811DE5C(u8, u8, u8, u8);
+void sub_811E5D4(void);
+void sub_811E720(void);
+void sub_811E828(void);
+static bool8 sub_811C2D4(void);
+static bool8 sub_811C30C(void);
+static bool8 sub_811C3E4(void);
+static bool8 sub_811C48C(void);
+static bool8 sub_811C404(void);
+static bool8 sub_811C448(void);
+static bool8 sub_811C4D0(void);
+static bool8 sub_811C518(void);
+static bool8 sub_811C554(void);
+static bool8 sub_811C620(void);
+static bool8 sub_811C830(void);
+static bool8 sub_811C8F0(void);
+static bool8 sub_811C99C(void);
+static bool8 sub_811CA5C(void);
+static bool8 sub_811C780(void);
+static bool8 sub_811C78C(void);
+static bool8 sub_811C7D4(void);
+static bool8 sub_811CB18(void);
+static bool8 sub_811CB98(void);
+static bool8 sub_811CB24(void);
+static bool8 sub_811CC90(void);
+static bool8 sub_811CC08(void);
+static bool8 sub_811C6C0(void);
+static bool8 sub_811CD14(void);
+static bool8 sub_811CD54(void);
+static bool8 sub_811CD94(void);
+static bool8 sub_811CDD4(void);
+static bool8 sub_811CE14(void);
+static bool8 sub_811CE54(void);
+void sub_811DF60(u8, u8);
+int sub_811E920(int);
+void sub_811DF90(void);
+static void sub_811D104(u8);
+static void sub_811D214(u8);
+void sub_811DFB0(void);
+static void sub_811D6D4(void);
+static void sub_811D9CC(int);
+void sub_811E3AC(void);
+bool8 sub_811E418(void);
+void sub_811DFC8(void);
+void sub_811E6E0(int);
+static bool8 sub_811DAA4(void);
+void sub_811E64C(void);
+void sub_811E050(void);
+void sub_811E4AC(void);
+void sub_811E6B0(void);
+void sub_811E55C(void);
+bool8 sub_811E4D0(void);
+bool8 sub_811E5B8(void);
+void sub_811E578(void);
+void sub_811E088(void);
+void sub_811DDAC(s16, u8);
+bool8 sub_811DE10(void);
+static void sub_811D9B4(void);
+static void sub_811D698(u32);
+void sub_811E288(void);
+void sub_811E794(void);
+void sub_811E380(void);
+void sub_811E7F8(void);
+void sub_811E30C(void);
+static void sub_811D7A4(void);
+static void sub_811D7C8(void);
+int sub_811DE48(void);
+static void sub_811D7EC(void);
+static void sub_811D830(void);
+void sub_811D058(u8, u8, const u8 *, u8, u8, u8, u8, u8, u8);
+void sub_811DD84(void);
+static void sub_811D6F4(void);
+static void sub_811D758(void);
+static void sub_811D794(void);
+const u8 *sub_811F424(u8);
+static void sub_811D864(u8, u8);
+static void sub_811D950(u8, u8);
+void sub_811DADC(u8);
+u8 *CopyEasyChatWordPadded(u8 *, u16, u16);
extern const struct {
u16 word;
MainCallback callback;
} gUnknown_08597530[4];
-extern const struct {
- u8 unk_00;
- u8 unk_01;
- u8 unk_02;
- u8 unk_03;
- u8 *data;
- u8 filler_08[16];
-} gUnknown_08597550[];
-// .text
+extern const struct EasyChatScreenTemplate gEasyChatScreenTemplates[21];
+extern const u8 gUnknown_08597748[][7];
+extern const u16 gUnknown_08597764[];
+extern const u16 gUnknown_0859776C[][2];
+extern const struct BgTemplate gUnknown_08597C54[4];
+extern const struct WindowTemplate gUnknown_08597C64[];
+extern const u32 gUnknown_08597B54[];
+extern const struct Unk08597C30 gUnknown_08597C30[];
+extern const u16 gUnknown_08597B14[];
+extern const u16 gUnknown_08597B34[];
+extern const u16 gUnknown_08597C1C[];
+extern const u16 gUnknown_08597C24[];
+extern const struct WindowTemplate gUnknown_08597C84;
+extern const u8 gUnknown_08597C8C[4];
+extern const u8 *const gUnknown_08597C90[4];
void sub_811A20C(u8 kind, u16 *words, MainCallback callback, u8 sizeParam)
{
@@ -444,66 +639,66 @@ void sub_811A938(void)
static bool8 EasyChat_AllocateResources(u8 kind, u16 *words, u8 sizeParam)
{
- u8 r6;
+ u8 templateId;
int i;
- gUnknown_0203A118 = malloc(sizeof(*gUnknown_0203A118));
- if (gUnknown_0203A118 == NULL)
+ gEasyChatScreen = malloc(sizeof(*gEasyChatScreen));
+ if (gEasyChatScreen == NULL)
{
return FALSE;
}
- gUnknown_0203A118->kind = kind;
- gUnknown_0203A118->words = words;
- gUnknown_0203A118->unk_05 = 0;
- gUnknown_0203A118->unk_06 = 0;
- gUnknown_0203A118->unk_09 = 0;
- gUnknown_0203A118->sizeParam = sizeParam;
- gUnknown_0203A118->unk_13 = 0;
- r6 = sub_811BCC8(kind);
+ gEasyChatScreen->kind = kind;
+ gEasyChatScreen->words = words;
+ gEasyChatScreen->mainCursorColumn = 0;
+ gEasyChatScreen->mainCursorRow = 0;
+ gEasyChatScreen->unk_09 = 0;
+ gEasyChatScreen->sizeParam = sizeParam;
+ gEasyChatScreen->unk_13 = 0;
+ templateId = sub_811BCC8(kind);
if (kind == 0x10)
{
- sub_811BDF0(gUnknown_0203A118->unk_14);
- gUnknown_0203A118->src = gUnknown_0203A118->unk_14;
- gUnknown_0203A118->unk_04 = 7;
+ sub_811BDF0(gEasyChatScreen->unk_14);
+ gEasyChatScreen->titleText = gEasyChatScreen->unk_14;
+ gEasyChatScreen->state = 7;
}
else
{
- gUnknown_0203A118->unk_04 = 0;
- gUnknown_0203A118->src = gUnknown_08597550[r6].data;
+ gEasyChatScreen->state = 0;
+ gEasyChatScreen->titleText = gEasyChatScreenTemplates[templateId].titleText;
}
- gUnknown_0203A118->unk_02 = gUnknown_08597550[r6].unk_01;
- gUnknown_0203A118->unk_03 = gUnknown_08597550[r6].unk_02;
- gUnknown_0203A118->unk_07 = gUnknown_0203A118->unk_02 * gUnknown_0203A118->unk_03;
- gUnknown_0203A118->unk_01 = r6;
- if (gUnknown_0203A118->unk_07 > 9)
+ gEasyChatScreen->numColumns = gEasyChatScreenTemplates[templateId].numColumns;
+ gEasyChatScreen->numRows = gEasyChatScreenTemplates[templateId].numRows;
+ gEasyChatScreen->unk_07 = gEasyChatScreen->numColumns * gEasyChatScreen->numRows;
+ gEasyChatScreen->templateId = templateId;
+ if (gEasyChatScreen->unk_07 > 9)
{
- gUnknown_0203A118->unk_07 = 9;
+ gEasyChatScreen->unk_07 = 9;
}
if (words != NULL)
{
- CpuCopy16(words, gUnknown_0203A118->ecWordBuffer, gUnknown_0203A118->unk_07 * sizeof(u16));
+ CpuCopy16(words, gEasyChatScreen->ecWordBuffer, gEasyChatScreen->unk_07 * sizeof(u16));
}
else
{
- for (i = 0; i < gUnknown_0203A118->unk_07; i ++)
+ for (i = 0; i < gEasyChatScreen->unk_07; i ++)
{
- gUnknown_0203A118->ecWordBuffer[i] = -1;
+ gEasyChatScreen->ecWordBuffer[i] = -1;
}
- gUnknown_0203A118->words = gUnknown_0203A118->ecWordBuffer;
+ gEasyChatScreen->words = gEasyChatScreen->ecWordBuffer;
}
- gUnknown_0203A118->unk_0d = (sub_811F3AC() - 1) / 2 + 1;
+ gEasyChatScreen->unk_0d = (sub_811F3AC() - 1) / 2 + 1;
return TRUE;
}
static void EasyChat_FreeResources(void)
{
- if (gUnknown_0203A118 != NULL)
- FREE_AND_SET_NULL(gUnknown_0203A118);
+ if (gEasyChatScreen != NULL)
+ FREE_AND_SET_NULL(gEasyChatScreen);
}
static u16 sub_811AAAC(void)
{
- switch (gUnknown_0203A118->unk_04)
+ switch (gEasyChatScreen->state)
{
case 0:
return sub_811AB68();
@@ -549,263 +744,3011 @@ static u16 sub_811AB68(void)
if (gMain.newKeys & A_BUTTON)
{
sub_811BF78();
- gUnknown_0203A118->unk_04 = 2;
- gUnknown_0203A118->unk_0a = 0;
- gUnknown_0203A118->unk_0b = 0;
- gUnknown_0203A118->unk_0c = 0;
+ gEasyChatScreen->state = 2;
+ gEasyChatScreen->unk_0a = 0;
+ gEasyChatScreen->unk_0b = 0;
+ gEasyChatScreen->unk_0c = 0;
return 9;
}
else if (gMain.newKeys & B_BUTTON)
- { // FIXME: See note below
+ {
return sub_811B150();
}
else if (gMain.newKeys & START_BUTTON)
- { // FIXME: See note below
+ {
return sub_811B1B4();
}
else if (gMain.newKeys & DPAD_UP)
{
- gUnknown_0203A118->unk_06--;
+ gEasyChatScreen->mainCursorRow--;
}
else if (gMain.newKeys & DPAD_LEFT)
- { // FIXME: See note below
- gUnknown_0203A118->unk_05--;
+ {
+ gEasyChatScreen->mainCursorColumn--;
}
else if (gMain.newKeys & DPAD_DOWN)
- { // FIXME: See note below
- gUnknown_0203A118->unk_06++;
+ {
+ gEasyChatScreen->mainCursorRow++;
}
else if (gMain.newKeys & DPAD_RIGHT)
- { // FIXME: See note below
- gUnknown_0203A118->unk_05++;
+ {
+ gEasyChatScreen->mainCursorColumn++;
}
else
{
return 0;
}
- if (gUnknown_0203A118->unk_06 < 0)
+
+ if (gEasyChatScreen->mainCursorRow < 0)
+ gEasyChatScreen->mainCursorRow = gEasyChatScreenTemplates[gEasyChatScreen->templateId].numRows;
+
+ if (gEasyChatScreen->mainCursorRow > gEasyChatScreenTemplates[gEasyChatScreen->templateId].numRows)
+ gEasyChatScreen->mainCursorRow = 0;
+
+ if (gEasyChatScreen->mainCursorRow == gEasyChatScreenTemplates[gEasyChatScreen->templateId].numRows)
{
- gUnknown_0203A118->unk_06 = gUnknown_08597550[gUnknown_0203A118->unk_01].unk_02;
+ if (gEasyChatScreen->mainCursorColumn > 2)
+ gEasyChatScreen->mainCursorColumn = 2;
+
+ gEasyChatScreen->state = 1;
+ return 3;
}
- if (gUnknown_0203A118->unk_06 > gUnknown_08597550[gUnknown_0203A118->unk_01].unk_02)
+
+ if (gEasyChatScreen->mainCursorColumn < 0)
+ gEasyChatScreen->mainCursorColumn = gEasyChatScreenTemplates[gEasyChatScreen->templateId].numColumns - 1;
+
+ if (gEasyChatScreen->mainCursorColumn >= gEasyChatScreenTemplates[gEasyChatScreen->templateId].numColumns)
+ gEasyChatScreen->mainCursorColumn = 0;
+
+ if (sub_811AB44() && gEasyChatScreen->mainCursorColumn == 1 && gEasyChatScreen->mainCursorRow == 4)
+ gEasyChatScreen->mainCursorColumn = 0;
+
+ return 2;
+}
+#else
+NAKED
+static u16 sub_811AB68(void)
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ ldr r0, =gMain\n\
+ ldrh r1, [r0, 0x2E]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0811ABB8\n\
+ bl sub_811BF78\n\
+ ldr r1, =gEasyChatScreen\n\
+ ldr r3, [r1]\n\
+ movs r2, 0\n\
+ movs r0, 0x2\n\
+ strb r0, [r3, 0x4]\n\
+ ldr r0, [r1]\n\
+ strb r2, [r0, 0xA]\n\
+ ldr r0, [r1]\n\
+ strb r2, [r0, 0xB]\n\
+ ldr r0, [r1]\n\
+ strb r2, [r0, 0xC]\n\
+ movs r0, 0x9\n\
+ b RETURN\n\
+ .pool\n\
+_0811AB9C:\n\
+ movs r0, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0811AC68_dpad_left\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0811AC58_dpad_down\n\
+ movs r0, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0811AC48_dpad_right\n\
+ movs r0, 0\n\
+ b RETURN\n\
+_0811ABB8:\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0811AC78_b_button\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0811AC7E_start_button\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0811AB9C\n\
+ ldr r2, =gEasyChatScreen\n\
+ ldr r1, [r2]\n\
+ ldrb r0, [r1, 0x6]\n\
+ subs r0, 0x1\n\
+_0811ABD8:\n\
+ strb r0, [r1, 0x6]\n\
+_0811ABDA:\n\
+ adds r7, r2, 0\n\
+ adds r4, r7, 0\n\
+ ldr r2, [r4]\n\
+ movs r0, 0x6\n\
+ ldrsb r0, [r2, r0]\n\
+ ldr r6, =gEasyChatScreenTemplates\n\
+ cmp r0, 0\n\
+ bge _0811ABF8\n\
+ ldrb r0, [r2, 0x1]\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ lsls r1, 3\n\
+ adds r1, r6\n\
+ ldrb r0, [r1, 0x2]\n\
+ strb r0, [r2, 0x6]\n\
+_0811ABF8:\n\
+ ldr r3, [r4]\n\
+ movs r2, 0x6\n\
+ ldrsb r2, [r3, r2]\n\
+ adds r5, r6, 0\n\
+ ldrb r1, [r3, 0x1]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r5\n\
+ ldrb r0, [r0, 0x2]\n\
+ cmp r2, r0\n\
+ ble _0811AC14\n\
+ movs r0, 0\n\
+ strb r0, [r3, 0x6]\n\
+_0811AC14:\n\
+ ldr r3, [r4]\n\
+ movs r2, 0x6\n\
+ ldrsb r2, [r3, r2]\n\
+ ldrb r1, [r3, 0x1]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r1, r0, r5\n\
+ ldrb r0, [r1, 0x2]\n\
+ cmp r2, r0\n\
+ bne _0811AC88\n\
+ movs r0, 0x5\n\
+ ldrsb r0, [r3, r0]\n\
+ cmp r0, 0x2\n\
+ ble _0811AC36\n\
+ movs r0, 0x2\n\
+ strb r0, [r3, 0x5]\n\
+_0811AC36:\n\
+ ldr r1, [r4]\n\
+ movs r0, 0x1\n\
+ strb r0, [r1, 0x4]\n\
+ movs r0, 0x3\n\
+ b RETURN\n\
+ .pool\n\
+_0811AC48_dpad_right:\n\
+ ldr r2, =gEasyChatScreen\n\
+ ldr r1, [r2]\n\
+ ldrb r0, [r1, 0x5]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1, 0x5]\n\
+ b _0811ABDA\n\
+ .pool\n\
+_0811AC58_dpad_down:\n\
+ ldr r2, =gEasyChatScreen\n\
+ ldr r1, [r2]\n\
+ ldrb r0, [r1, 0x6]\n\
+ adds r0, 0x1\n\
+ b _0811ABD8\n\
+ .pool\n\
+_0811AC68_dpad_left:\n\
+ ldr r2, =gEasyChatScreen\n\
+ ldr r1, [r2]\n\
+ ldrb r0, [r1, 0x5]\n\
+ subs r0, 0x1\n\
+ strb r0, [r1, 0x5]\n\
+ b _0811ABDA\n\
+ .pool\n\
+_0811AC78_b_button:\n\
+ bl sub_811B150\n\
+ b _0811AC82\n\
+_0811AC7E_start_button:\n\
+ bl sub_811B1B4\n\
+_0811AC82:\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ b RETURN\n\
+_0811AC88:\n\
+ movs r0, 0x5\n\
+ ldrsb r0, [r3, r0]\n\
+ cmp r0, 0\n\
+ bge _0811AC96\n\
+ ldrb r0, [r1, 0x1]\n\
+ subs r0, 0x1\n\
+ strb r0, [r3, 0x5]\n\
+_0811AC96:\n\
+ ldr r3, [r4]\n\
+ movs r2, 0x5\n\
+ ldrsb r2, [r3, r2]\n\
+ ldrb r1, [r3, 0x1]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r6\n\
+ ldrb r0, [r0, 0x1]\n\
+ cmp r2, r0\n\
+ blt _0811ACB0\n\
+ movs r0, 0\n\
+ strb r0, [r3, 0x5]\n\
+_0811ACB0:\n\
+ bl sub_811AB44\n\
+ cmp r0, 0\n\
+ beq _0811ACCA\n\
+ ldr r2, [r7]\n\
+ ldr r0, [r2, 0x4]\n\
+ ldr r1, =0x00ffff00\n\
+ ands r0, r1\n\
+ ldr r1, =0x00040100\n\
+ cmp r0, r1\n\
+ bne _0811ACCA\n\
+ movs r0, 0\n\
+ strb r0, [r2, 0x5]\n\
+_0811ACCA:\n\
+ movs r0, 0x2\n\
+RETURN:\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .pool");
+}
+#endif // NONMATCHING
+
+#ifdef NONMATCHING
+static u16 sub_811ACDC(void)
+{
+ int numFooterColumns;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ switch (gEasyChatScreen->mainCursorColumn)
+ {
+ case 0:
+ return sub_811B184();
+ case 1:
+ return sub_811B150();
+ case 2:
+ return sub_811B1B4();
+ case 3:
+ return sub_811B264();
+ }
+ }
+
+ if (gMain.newKeys & B_BUTTON)
+ return sub_811B150();
+ else if (gMain.newKeys & START_BUTTON)
+ return sub_811B1B4();
+ else if (gMain.newKeys & DPAD_UP)
+ gEasyChatScreen->mainCursorRow--;
+ else if (gMain.newKeys & DPAD_LEFT)
+ gEasyChatScreen->mainCursorColumn--;
+ else if (gMain.newKeys & DPAD_DOWN)
+ gEasyChatScreen->mainCursorRow = 0;
+ else if (gMain.newKeys & DPAD_RIGHT)
+ gEasyChatScreen->mainCursorColumn++;
+ else
+ return 0;
+
+ if (gEasyChatScreen->mainCursorRow == gEasyChatScreenTemplates[gEasyChatScreen->templateId].numRows)
{
- gUnknown_0203A118->unk_06 = 0;
+ numFooterColumns = sub_811BA3C() ? 4 : 3;
+ if (gEasyChatScreen->mainCursorColumn < 0)
+ gEasyChatScreen->mainCursorColumn = numFooterColumns - 1;
+
+ if (gEasyChatScreen->mainCursorColumn >= numFooterColumns)
+ gEasyChatScreen->mainCursorColumn = 0;
+
+ return 3;
}
- if (gUnknown_0203A118->unk_06 == gUnknown_08597550[gUnknown_0203A118->unk_01].unk_02)
+
+ if (gEasyChatScreen->mainCursorColumn >= gEasyChatScreenTemplates[gEasyChatScreen->templateId].numColumns)
+ gEasyChatScreen->mainCursorColumn = gEasyChatScreenTemplates[gEasyChatScreen->templateId].numColumns - 1;
+
+ if (sub_811AB44() && gEasyChatScreen->mainCursorColumn == 1 && gEasyChatScreen->mainCursorRow == 4)
+ gEasyChatScreen->mainCursorColumn = 0;
+
+ gEasyChatScreen->state = 0;
+ return 2;
+}
+#else
+NAKED
+static u16 sub_811ACDC(void)
+{
+ asm_unified("\n\
+ push {r4-r6,lr}\n\
+ ldr r2, =gMain\n\
+ ldrh r1, [r2, 0x2E]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0811AD4A\n\
+ ldr r0, =gEasyChatScreen\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x5]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x1\n\
+ beq _0811AD3E\n\
+ b _0811AD24\n\
+ .pool\n\
+_0811AD04:\n\
+ movs r0, 0x20\n\
+ ands r0, r2\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r3, 0\n\
+ bne _0811ADE0\n\
+ movs r0, 0x80\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _0811ADD0\n\
+ movs r0, 0x10\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _0811ADC0\n\
+ movs r0, 0\n\
+ b _0811AE32\n\
+_0811AD24:\n\
+ cmp r0, 0x1\n\
+ bgt _0811AD2E\n\
+ cmp r0, 0\n\
+ beq _0811AD38\n\
+ b _0811AD4A\n\
+_0811AD2E:\n\
+ cmp r0, 0x2\n\
+ beq _0811ADF6\n\
+ cmp r0, 0x3\n\
+ beq _0811AD44\n\
+ b _0811AD4A\n\
+_0811AD38:\n\
+ bl sub_811B184\n\
+ b _0811ADFA\n\
+_0811AD3E:\n\
+ bl sub_811B150\n\
+ b _0811ADFA\n\
+_0811AD44:\n\
+ bl sub_811B264\n\
+ b _0811ADFA\n\
+_0811AD4A:\n\
+ ldrh r2, [r2, 0x2E]\n\
+ movs r0, 0x2\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _0811ADF0\n\
+ movs r0, 0x8\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ bne _0811ADF6\n\
+ movs r0, 0x40\n\
+ ands r0, r2\n\
+ cmp r0, 0\n\
+ beq _0811AD04\n\
+ ldr r2, =gEasyChatScreen\n\
+ ldr r1, [r2]\n\
+ ldrb r0, [r1, 0x6]\n\
+ subs r0, 0x1\n\
+ strb r0, [r1, 0x6]\n\
+_0811AD6E:\n\
+ adds r6, r2, 0\n\
+_0811AD70:\n\
+ adds r5, r6, 0\n\
+ ldr r4, [r5]\n\
+ movs r3, 0x6\n\
+ ldrsb r3, [r4, r3]\n\
+ ldr r2, =gEasyChatScreenTemplates\n\
+ ldrb r1, [r4, 0x1]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r1, r0, r2\n\
+ ldrb r0, [r1, 0x2]\n\
+ cmp r3, r0\n\
+ bne _0811AE00\n\
+ bl sub_811BA3C\n\
+ movs r2, 0x3\n\
+ cmp r0, 0\n\
+ beq _0811AD96\n\
+ movs r2, 0x4\n\
+_0811AD96:\n\
+ ldr r1, [r5]\n\
+ movs r0, 0x5\n\
+ ldrsb r0, [r1, r0]\n\
+ cmp r0, 0\n\
+ bge _0811ADA4\n\
+ subs r0, r2, 0x1\n\
+ strb r0, [r1, 0x5]\n\
+_0811ADA4:\n\
+ ldr r1, [r5]\n\
+ movs r0, 0x5\n\
+ ldrsb r0, [r1, r0]\n\
+ cmp r0, r2\n\
+ blt _0811ADB2\n\
+ movs r0, 0\n\
+ strb r0, [r1, 0x5]\n\
+_0811ADB2:\n\
+ movs r0, 0x3\n\
+ b _0811AE32\n\
+ .pool\n\
+_0811ADC0:\n\
+ ldr r2, =gEasyChatScreen\n\
+ ldr r1, [r2]\n\
+ ldrb r0, [r1, 0x5]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1, 0x5]\n\
+ b _0811AD6E\n\
+ .pool\n\
+_0811ADD0:\n\
+ ldr r1, =gEasyChatScreen\n\
+ ldr r0, [r1]\n\
+ strb r3, [r0, 0x6]\n\
+ adds r6, r1, 0\n\
+ b _0811AD70\n\
+ .pool\n\
+_0811ADE0:\n\
+ ldr r2, =gEasyChatScreen\n\
+ ldr r1, [r2]\n\
+ ldrb r0, [r1, 0x5]\n\
+ subs r0, 0x1\n\
+ strb r0, [r1, 0x5]\n\
+ b _0811AD6E\n\
+ .pool\n\
+_0811ADF0:\n\
+ bl sub_811B150\n\
+ b _0811ADFA\n\
+_0811ADF6:\n\
+ bl sub_811B1B4\n\
+_0811ADFA:\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ b _0811AE32\n\
+_0811AE00:\n\
+ movs r0, 0x5\n\
+ ldrsb r0, [r4, r0]\n\
+ ldrb r1, [r1, 0x1]\n\
+ cmp r0, r1\n\
+ blt _0811AE0E\n\
+ subs r0, r1, 0x1\n\
+ strb r0, [r4, 0x5]\n\
+_0811AE0E:\n\
+ bl sub_811AB44\n\
+ cmp r0, 0\n\
+ beq _0811AE28\n\
+ ldr r2, [r6]\n\
+ ldr r0, [r2, 0x4]\n\
+ ldr r1, =0x00ffff00\n\
+ ands r0, r1\n\
+ ldr r1, =0x00040100\n\
+ cmp r0, r1\n\
+ bne _0811AE28\n\
+ movs r0, 0\n\
+ strb r0, [r2, 0x5]\n\
+_0811AE28:\n\
+ ldr r0, =gEasyChatScreen\n\
+ ldr r1, [r0]\n\
+ movs r0, 0\n\
+ strb r0, [r1, 0x4]\n\
+ movs r0, 0x2\n\
+_0811AE32:\n\
+ pop {r4-r6}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .pool");
+}
+#endif // NONMATCHING
+
+static u16 sub_811AE44(void)
+{
+ if (gMain.newKeys & B_BUTTON)
+ return sub_811B32C();
+
+ if (gMain.newKeys & A_BUTTON)
{
- if (gUnknown_0203A118->unk_05 > 2)
+ if (gEasyChatScreen->unk_0a != -1)
+ return sub_811B2B0();
+
+ switch (gEasyChatScreen->unk_0b)
{
- gUnknown_0203A118->unk_05 = 2;
+ case 0:
+ return sub_811B33C();
+ case 1:
+ return sub_811B368();
+ case 2:
+ return sub_811B32C();
}
- gUnknown_0203A118->unk_04 = 1;
- return 3;
}
- /*
- * FIXME: right, down, left, b, and start
- * should be inserted here, but aren't
- */
- if (gUnknown_0203A118->unk_05 < 0)
+
+ if (gMain.newKeys & SELECT_BUTTON)
+ return sub_811B33C();
+
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ return sub_811B528(2);
+
+ if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ return sub_811B528(3);
+
+ if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ return sub_811B528(1);
+
+ if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ return sub_811B528(0);
+
+ return 0;
+}
+
+static u16 sub_811AF00(void)
+{
+ if (gMain.newKeys & B_BUTTON)
{
- gUnknown_0203A118->unk_05 = gUnknown_08597550[gUnknown_0203A118->unk_01].unk_01 - 1;
+ gEasyChatScreen->state = 2;
+ return 14;
}
- if (gUnknown_0203A118->unk_05 >= gUnknown_08597550[gUnknown_0203A118->unk_01].unk_01)
+
+ if (gMain.newKeys & A_BUTTON)
+ return sub_811B394();
+
+ if (gMain.newKeys & START_BUTTON)
+ return sub_811B794(4);
+
+ if (gMain.newKeys & SELECT_BUTTON)
+ return sub_811B794(5);
+
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
+ return sub_811B794(2);
+
+ if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ return sub_811B794(3);
+
+ if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+ return sub_811B794(1);
+
+ if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+ return sub_811B794(0);
+
+ return 0;
+}
+
+static u16 sub_811AF8C(void)
+{
+ u8 var0;
+
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- gUnknown_0203A118->unk_05 = 0;
+ case MENU_B_PRESSED: // B Button
+ case 1: // No
+ gEasyChatScreen->state = sub_811B2A4();
+ return 7;
+ case 0: // Yes
+ gSpecialVar_Result = 0;
+ var0 = gEasyChatScreen->kind - 17;
+ if (var0 < 2)
+ sub_811B3E4();
+
+ return 24;
+ default:
+ return 0;
}
- if (sub_811AB44() && gUnknown_0203A118->unk_05 == 1 && gUnknown_0203A118->unk_06 == 4)
+}
+
+static u16 sub_811AFEC(void)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- gUnknown_0203A118->unk_05 = 0;
+ case MENU_B_PRESSED: // B Button
+ case 1: // No
+ gEasyChatScreen->state = sub_811B2A4();
+ return 7;
+ case 0: // Yes
+ sub_811BE9C();
+ gSpecialVar_Result = sub_811B4EC();
+ sub_811B3E4();
+ return 24;
+ default:
+ return 0;
}
- return 2;
}
-#else
-__attribute__((naked)) static u16 sub_811AB68(void)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tldr r0, =gMain\n"
- "\tldrh r1, [r0, 0x2E]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0811ABB8\n"
- "\tbl sub_811BF78\n"
- "\tldr r1, =gUnknown_0203A118\n"
- "\tldr r3, [r1]\n"
- "\tmovs r2, 0\n"
- "\tmovs r0, 0x2\n"
- "\tstrb r0, [r3, 0x4]\n"
- "\tldr r0, [r1]\n"
- "\tstrb r2, [r0, 0xA]\n"
- "\tldr r0, [r1]\n"
- "\tstrb r2, [r0, 0xB]\n"
- "\tldr r0, [r1]\n"
- "\tstrb r2, [r0, 0xC]\n"
- "\tmovs r0, 0x9\n"
- "\tb _0811ACCC_return_r0\n"
- "\t.pool\n"
- "_0811AB9C:\n"
- "\tmovs r0, 0x20\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbne _0811AC68_dpad_left\n"
- "\tmovs r0, 0x80\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbne _0811AC58_dpad_down\n"
- "\tmovs r0, 0x10\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbne _0811AC48_dpad_right\n"
- "\tmovs r0, 0\n"
- "\tb _0811ACCC_return_r0\n"
- "_0811ABB8:\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbne _0811AC78_b_button\n"
- "\tmovs r0, 0x8\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbne _0811AC7E_start_button\n"
- "\tmovs r0, 0x40\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0811AB9C\n"
- "\tldr r2, =gUnknown_0203A118\n"
- "\tldr r1, [r2]\n"
- "\tldrb r0, [r1, 0x6]\n"
- "\tsubs r0, 0x1\n"
- "_0811ABD8:\n"
- "\tstrb r0, [r1, 0x6]\n"
- "_0811ABDA:\n"
- "\tadds r7, r2, 0\n"
- "\tadds r4, r7, 0\n"
- "\tldr r2, [r4]\n"
- "\tmovs r0, 0x6\n"
- "\tldrsb r0, [r2, r0]\n"
- "\tldr r6, =gUnknown_08597550\n"
- "\tcmp r0, 0\n"
- "\tbge _0811ABF8\n"
- "\tldrb r0, [r2, 0x1]\n"
- "\tlsls r1, r0, 1\n"
- "\tadds r1, r0\n"
- "\tlsls r1, 3\n"
- "\tadds r1, r6\n"
- "\tldrb r0, [r1, 0x2]\n"
- "\tstrb r0, [r2, 0x6]\n"
- "_0811ABF8:\n"
- "\tldr r3, [r4]\n"
- "\tmovs r2, 0x6\n"
- "\tldrsb r2, [r3, r2]\n"
- "\tadds r5, r6, 0\n"
- "\tldrb r1, [r3, 0x1]\n"
- "\tlsls r0, r1, 1\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r5\n"
- "\tldrb r0, [r0, 0x2]\n"
- "\tcmp r2, r0\n"
- "\tble _0811AC14\n"
- "\tmovs r0, 0\n"
- "\tstrb r0, [r3, 0x6]\n"
- "_0811AC14:\n"
- "\tldr r3, [r4]\n"
- "\tmovs r2, 0x6\n"
- "\tldrsb r2, [r3, r2]\n"
- "\tldrb r1, [r3, 0x1]\n"
- "\tlsls r0, r1, 1\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 3\n"
- "\tadds r1, r0, r5\n"
- "\tldrb r0, [r1, 0x2]\n"
- "\tcmp r2, r0\n"
- "\tbne _0811AC88\n"
- "\tmovs r0, 0x5\n"
- "\tldrsb r0, [r3, r0]\n"
- "\tcmp r0, 0x2\n"
- "\tble _0811AC36\n"
- "\tmovs r0, 0x2\n"
- "\tstrb r0, [r3, 0x5]\n"
- "_0811AC36:\n"
- "\tldr r1, [r4]\n"
- "\tmovs r0, 0x1\n"
- "\tstrb r0, [r1, 0x4]\n"
- "\tmovs r0, 0x3\n"
- "\tb _0811ACCC_return_r0\n"
- "\t.pool\n"
- "_0811AC48_dpad_right:\n"
- "\tldr r2, =gUnknown_0203A118\n"
- "\tldr r1, [r2]\n"
- "\tldrb r0, [r1, 0x5]\n"
- "\tadds r0, 0x1\n"
- "\tstrb r0, [r1, 0x5]\n"
- "\tb _0811ABDA\n"
- "\t.pool\n"
- "_0811AC58_dpad_down:\n"
- "\tldr r2, =gUnknown_0203A118\n"
- "\tldr r1, [r2]\n"
- "\tldrb r0, [r1, 0x6]\n"
- "\tadds r0, 0x1\n"
- "\tb _0811ABD8\n"
- "\t.pool\n"
- "_0811AC68_dpad_left:\n"
- "\tldr r2, =gUnknown_0203A118\n"
- "\tldr r1, [r2]\n"
- "\tldrb r0, [r1, 0x5]\n"
- "\tsubs r0, 0x1\n"
- "\tstrb r0, [r1, 0x5]\n"
- "\tb _0811ABDA\n"
- "\t.pool\n"
- "_0811AC78_b_button:\n"
- "\tbl sub_811B150\n"
- "\tb _0811AC82\n"
- "_0811AC7E_start_button:\n"
- "\tbl sub_811B1B4\n"
- "_0811AC82:\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tb _0811ACCC_return_r0\n"
- "_0811AC88:\n"
- "\tmovs r0, 0x5\n"
- "\tldrsb r0, [r3, r0]\n"
- "\tcmp r0, 0\n"
- "\tbge _0811AC96\n"
- "\tldrb r0, [r1, 0x1]\n"
- "\tsubs r0, 0x1\n"
- "\tstrb r0, [r3, 0x5]\n"
- "_0811AC96:\n"
- "\tldr r3, [r4]\n"
- "\tmovs r2, 0x5\n"
- "\tldrsb r2, [r3, r2]\n"
- "\tldrb r1, [r3, 0x1]\n"
- "\tlsls r0, r1, 1\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r6\n"
- "\tldrb r0, [r0, 0x1]\n"
- "\tcmp r2, r0\n"
- "\tblt _0811ACB0\n"
- "\tmovs r0, 0\n"
- "\tstrb r0, [r3, 0x5]\n"
- "_0811ACB0:\n"
- "\tbl sub_811AB44\n"
- "\tcmp r0, 0\n"
- "\tbeq _0811ACCA\n"
- "\tldr r2, [r7]\n"
- "\tldr r0, [r2, 0x4]\n"
- "\tldr r1, =0x00ffff00\n"
- "\tands r0, r1\n"
- "\tldr r1, =0x00040100\n"
- "\tcmp r0, r1\n"
- "\tbne _0811ACCA\n"
- "\tmovs r0, 0\n"
- "\tstrb r0, [r2, 0x5]\n"
- "_0811ACCA:\n"
- "\tmovs r0, 0x2\n"
- "_0811ACCC_return_r0:\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1\n"
- "\t.pool");
-}
-#endif
+
+static u16 sub_811B040(void)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case MENU_B_PRESSED: // B Button
+ case 1: // No
+ gEasyChatScreen->state = 1;
+ return 7;
+ case 0: // Yes
+ sub_811B418();
+ gEasyChatScreen->state = 1;
+ return 8;
+ default:
+ return 0;
+ }
+}
+
+static u16 sub_811B08C(void)
+{
+ if (gMain.newKeys & A_BUTTON)
+ return 26;
+
+ if (gMain.newKeys & B_BUTTON)
+ return sub_811B150();
+
+ return 0;
+}
+
+static u16 sub_811B0BC(void)
+{
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ gEasyChatScreen->state = sub_811B2A4();
+ return 7;
+ }
+
+ return 0;
+}
+
+static u16 sub_811B0E8(void)
+{
+ gEasyChatScreen->state = 10;
+ return 6;
+}
+
+static u16 sub_811B0F8(void)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case MENU_B_PRESSED: // B Button
+ case 1: // No
+ sub_811B454();
+ gEasyChatScreen->unk_08 = 0;
+ gEasyChatScreen->state = 8;
+ return 31;
+ case 0: // Yes
+ gSpecialVar_Result = sub_811B4EC();
+ sub_811B3E4();
+ return 24;
+ default:
+ return 0;
+ }
+}
+
+static u16 sub_811B150(void)
+{
+ if (gEasyChatScreen->kind == 19 || gEasyChatScreen->kind == 11)
+ {
+ gEasyChatScreen->unk_08 = gEasyChatScreen->state;
+ gEasyChatScreen->state = 8;
+ return 34;
+ }
+ else
+ {
+ gEasyChatScreen->unk_08 = gEasyChatScreen->state;
+ gEasyChatScreen->state = 4;
+ return 5;
+ }
+}
+
+int sub_811B184(void)
+{
+ gEasyChatScreen->unk_08 = gEasyChatScreen->state;
+ if (gEasyChatScreen->kind != 6)
+ {
+ gEasyChatScreen->state = 5;
+ return 4;
+ }
+ else
+ {
+ gEasyChatScreen->unk_08 = gEasyChatScreen->state;
+ gEasyChatScreen->state = 8;
+ return 32;
+ }
+}
+
+u16 sub_811B1B4(void)
+{
+ gEasyChatScreen->unk_08 = gEasyChatScreen->state;
+ if (gEasyChatScreen->kind == 17)
+ {
+ if (sub_811BD64())
+ {
+ gEasyChatScreen->state = 8;
+ return 29;
+ }
+
+ if (sub_811BDB0())
+ {
+ gEasyChatScreen->state = 8;
+ return 30;
+ }
+
+ gEasyChatScreen->state = 6;
+ return 6;
+ }
+ else if (gEasyChatScreen->kind == 18)
+ {
+ if (sub_811BDB0())
+ {
+ gEasyChatScreen->state = 8;
+ return 30;
+ }
+
+ if (sub_811BD64())
+ {
+ gEasyChatScreen->state = 8;
+ return 29;
+ }
+
+ gEasyChatScreen->state = 6;
+ return 6;
+ }
+ else if (gEasyChatScreen->kind == 9 || gEasyChatScreen->kind == 13)
+ {
+ if (!sub_811BD2C())
+ {
+ gEasyChatScreen->state = 8;
+ return 33;
+ }
+
+ gEasyChatScreen->state = 6;
+ return 6;
+ }
+ else if (gEasyChatScreen->kind == 19 || gEasyChatScreen->kind == 11)
+ {
+ if (sub_811BCF4())
+ {
+ gEasyChatScreen->state = 8;
+ return 34;
+ }
+
+ gEasyChatScreen->state = 6;
+ return 6;
+ }
+ else if (gEasyChatScreen->kind == 20)
+ {
+ gEasyChatScreen->state = 6;
+ return 6;
+ }
+ else
+ {
+ if (sub_811BCF4() == 1 || !sub_811B4EC())
+ {
+ gEasyChatScreen->state = 4;
+ return 5;
+ }
+
+ gEasyChatScreen->state = 6;
+ return 6;
+ }
+}
+
+int sub_811B264(void)
+{
+ gEasyChatScreen->unk_08 = gEasyChatScreen->state;
+ switch (gEasyChatScreen->kind)
+ {
+ case 15:
+ return 25;
+ case 17:
+ sub_811B3E4();
+ return 28;
+ case 18:
+ sub_811B3E4();
+ return 27;
+ default:
+ return 0;
+ }
+}
+
+static u8 sub_811B2A4(void)
+{
+ return gEasyChatScreen->unk_08;
+}
+
+static int sub_811B2B0(void)
+{
+ u16 var1;
+
+ if (gEasyChatScreen->unk_09 == 0)
+ {
+ u8 var0 = sub_811F3B8(sub_811B8E8());
+ sub_811F548(0, var0);
+ }
+ else
+ {
+ sub_811F548(1, sub_811B908());
+ }
+
+ var1 = sub_811F5B0();
+ if (var1 == 0)
+ return 0;
+
+ gEasyChatScreen->unk_0f = (var1 - 1) / 2;
+ gEasyChatScreen->unk_0e = 0;
+ gEasyChatScreen->unk_10 = 0;
+ gEasyChatScreen->unk_11 = 0;
+ gEasyChatScreen->state = 3;
+ return 11;
+}
+
+static int sub_811B32C(void)
+{
+ gEasyChatScreen->state = 0;
+ return 10;
+}
+
+static int sub_811B33C(void)
+{
+ gEasyChatScreen->unk_0a = 0;
+ gEasyChatScreen->unk_0b = 0;
+ gEasyChatScreen->unk_0c = 0;
+ if (!gEasyChatScreen->unk_09)
+ gEasyChatScreen->unk_09 = 1;
+ else
+ gEasyChatScreen->unk_09 = 0;
+
+ return 23;
+}
+
+static int sub_811B368(void)
+{
+ if (gEasyChatScreen->kind == 6)
+ {
+ PlaySE(SE_HAZURE);
+ return 0;
+ }
+ else
+ {
+ sub_811B488(0xFFFF);
+ return 1;
+ }
+}
+
+static int sub_811B394(void)
+{
+ u16 easyChatWord = sub_811F578(sub_811B940());
+ if (sub_811BF88(easyChatWord))
+ {
+ PlaySE(SE_HAZURE);
+ return 0;
+ }
+ else
+ {
+ sub_811B488(easyChatWord);
+ if (gEasyChatScreen->kind != 6)
+ {
+ gEasyChatScreen->state = 0;
+ return 12;
+ }
+ else
+ {
+ gEasyChatScreen->state = 9;
+ return 13;
+ }
+ }
+}
+
+static void sub_811B3E4(void)
+{
+ int i;
+ for (i = 0; i < gEasyChatScreen->unk_07; i++)
+ gEasyChatScreen->words[i] = gEasyChatScreen->ecWordBuffer[i];
+}
+
+static void sub_811B418(void)
+{
+ int i;
+ for (i = 0; i < gEasyChatScreen->unk_07; i++)
+ gEasyChatScreen->ecWordBuffer[i] = 0xFFFF;
+}
+
+static void sub_811B454(void)
+{
+ int i;
+ for (i = 0; i < gEasyChatScreen->unk_07; i++)
+ gEasyChatScreen->ecWordBuffer[i] = gEasyChatScreen->words[i];
+}
+
+static void sub_811B488(u16 easyChatWord)
+{
+ u16 index = sub_811B8C8();
+ gEasyChatScreen->ecWordBuffer[index] = easyChatWord;
+}
+
+static u8 sub_811B4AC(void)
+{
+ u16 i;
+ for (i = 0; i < gEasyChatScreen->unk_07; i++)
+ {
+ if (gEasyChatScreen->ecWordBuffer[i] != gEasyChatScreen->words[i])
+ return 1;
+ }
+
+ return 0;
+}
+
+static int sub_811B4EC(void)
+{
+ u8 var0 = gEasyChatScreen->kind - 17;
+ if (var0 < 2)
+ {
+ if (sub_811BD64())
+ return 0;
+
+ if (sub_811BDB0())
+ return 0;
+
+ return 1;
+ }
+ else
+ {
+ return sub_811B4AC();
+ }
+}
+
+static u16 sub_811B528(int arg0)
+{
+ if (gEasyChatScreen->unk_0a != -1)
+ {
+ if (gEasyChatScreen->unk_09 == 0)
+ return sub_811B568(arg0);
+ else
+ return sub_811B634(arg0);
+ }
+ else
+ {
+ return sub_811B6C4(arg0);
+ }
+}
+
+static int sub_811B568(u32 arg0)
+{
+ switch (arg0)
+ {
+ case 2:
+ if (gEasyChatScreen->unk_0b != -gEasyChatScreen->unk_0c)
+ {
+ if (gEasyChatScreen->unk_0b)
+ {
+ gEasyChatScreen->unk_0b--;
+ return 15;
+ }
+ else
+ {
+ gEasyChatScreen->unk_0c--;
+ return 17;
+ }
+ }
+ break;
+ case 3:
+ if (gEasyChatScreen->unk_0b + gEasyChatScreen->unk_0c < gEasyChatScreen->unk_0d - 1)
+ {
+ int var0;
+ if (gEasyChatScreen->unk_0b < 3)
+ {
+ gEasyChatScreen->unk_0b++;
+ var0 = 15;
+ }
+ else
+ {
+ gEasyChatScreen->unk_0c++;
+ var0 = 16;
+ }
+
+ sub_811B978();
+ return var0;
+ }
+ break;
+ case 1:
+ if (gEasyChatScreen->unk_0a)
+ gEasyChatScreen->unk_0a--;
+ else
+ sub_811B744();
+
+ return 15;
+ case 0:
+ if (gEasyChatScreen->unk_0a < 1)
+ {
+ gEasyChatScreen->unk_0a++;
+ if (sub_811B9C8())
+ sub_811B744();
+ }
+ else
+ {
+ sub_811B744();
+ }
+ return 15;
+ }
+
+ return 0;
+}
+
+static int sub_811B634(u32 arg0)
+{
+ switch (arg0)
+ {
+ case 2:
+ if (gEasyChatScreen->unk_0b > 0)
+ gEasyChatScreen->unk_0b--;
+ else
+ gEasyChatScreen->unk_0b = 3;
+
+ sub_811B978();
+ return 15;
+ case 3:
+ if (gEasyChatScreen->unk_0b < 3)
+ gEasyChatScreen->unk_0b++;
+ else
+ gEasyChatScreen->unk_0b = 0;
+
+ sub_811B978();
+ return 15;
+ case 0:
+ gEasyChatScreen->unk_0a++;
+ if (sub_811B9C8())
+ sub_811B744();
+
+ return 15;
+ case 1:
+ gEasyChatScreen->unk_0a--;
+ if (gEasyChatScreen->unk_0a < 0)
+ sub_811B744();
+
+ return 15;
+ }
+
+ return 0;
+}
+
+static int sub_811B6C4(u32 arg0)
+{
+ switch (arg0)
+ {
+ case 2:
+ if (gEasyChatScreen->unk_0b)
+ gEasyChatScreen->unk_0b--;
+ else
+ gEasyChatScreen->unk_0b = 2;
+
+ return 15;
+ case 3:
+ if (gEasyChatScreen->unk_0b < 2)
+ gEasyChatScreen->unk_0b++;
+ else
+ gEasyChatScreen->unk_0b = 0;
+
+ return 15;
+ case 1:
+ gEasyChatScreen->unk_0b++;
+ sub_811B768();
+ return 15;
+ case 0:
+ gEasyChatScreen->unk_0a = 0;
+ gEasyChatScreen->unk_0b++;
+ return 15;
+ }
+
+ return 0;
+}
+
+static void sub_811B744(void)
+{
+ gEasyChatScreen->unk_0a = 0xFF;
+ if (gEasyChatScreen->unk_0b)
+ gEasyChatScreen->unk_0b--;
+}
+
+static void sub_811B768(void)
+{
+ if (gEasyChatScreen->unk_09 == 0)
+ {
+ gEasyChatScreen->unk_0a = 1;
+ sub_811B978();
+ }
+ else
+ {
+ gEasyChatScreen->unk_0a = sub_811B960(gEasyChatScreen->unk_0b);
+ }
+}
+
+static u16 sub_811B794(u32 arg0)
+{
+ u16 result;
+ switch (arg0)
+ {
+ case 2:
+ if (gEasyChatScreen->unk_11 + gEasyChatScreen->unk_0e > 0)
+ {
+ if (gEasyChatScreen->unk_11 > 0)
+ {
+ gEasyChatScreen->unk_11--;
+ result = 18;
+ }
+ else
+ {
+ gEasyChatScreen->unk_0e--;
+ result = 19;
+ }
+
+ sub_811B9A0();
+ return result;
+ }
+ break;
+ case 3:
+ if (gEasyChatScreen->unk_11 + gEasyChatScreen->unk_0e < gEasyChatScreen->unk_0f)
+ {
+ if (gEasyChatScreen->unk_11 < 3)
+ {
+ gEasyChatScreen->unk_11++;
+ result = 18;
+ }
+ else
+ {
+ gEasyChatScreen->unk_0e++;
+ result = 20;
+ }
+
+ sub_811B9A0();
+ return result;
+ }
+ break;
+ case 1:
+ if (gEasyChatScreen->unk_10 > 0)
+ gEasyChatScreen->unk_10--;
+ else
+ gEasyChatScreen->unk_10 = 1;
+
+ sub_811B9A0();
+ return 18;
+ case 0:
+ if (gEasyChatScreen->unk_10 < 1)
+ {
+ gEasyChatScreen->unk_10++;
+ if (sub_811BA1C())
+ gEasyChatScreen->unk_10 = 0;
+ }
+ else
+ {
+ gEasyChatScreen->unk_10 = 0;
+ }
+ return 18;
+ case 4:
+ if (gEasyChatScreen->unk_0e)
+ {
+ if (gEasyChatScreen->unk_0e > 3)
+ gEasyChatScreen->unk_0e -= 4;
+ else
+ gEasyChatScreen->unk_0e = 0;
+
+ return 21;
+ }
+ break;
+ case 5:
+ if (gEasyChatScreen->unk_0e <= gEasyChatScreen->unk_0f - 4)
+ {
+ gEasyChatScreen->unk_0e += 4;
+ if (gEasyChatScreen->unk_0e > gEasyChatScreen->unk_0f - 3)
+ gEasyChatScreen->unk_0e = gEasyChatScreen->unk_0f + 0xFD;
+
+ sub_811B9A0();
+ return 22;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+static u16 sub_811B8C8(void)
+{
+ return (gEasyChatScreen->mainCursorRow * gEasyChatScreen->numColumns) + gEasyChatScreen->mainCursorColumn;
+}
+
+static u16 sub_811B8E8(void)
+{
+ return 2 * (gEasyChatScreen->unk_0b + gEasyChatScreen->unk_0c) + gEasyChatScreen->unk_0a;
+}
+
+static int sub_811B908(void)
+{
+ int var0 = (u8)gEasyChatScreen->unk_0a < 7 ? gEasyChatScreen->unk_0a : 0;
+ int var1 = (u8)gEasyChatScreen->unk_0b < 4 ? gEasyChatScreen->unk_0b : 0;
+ return gUnknown_08597748[var1][var0];
+}
+
+u16 sub_811B940(void)
+{
+ return 2 * (gEasyChatScreen->unk_11 + gEasyChatScreen->unk_0e) + gEasyChatScreen->unk_10;
+}
+
+static u8 sub_811B960(u8 arg0)
+{
+ switch (arg0)
+ {
+ case 0:
+ default:
+ return 6;
+ case 1:
+ return 5;
+ }
+}
+
+static void sub_811B978(void)
+{
+ while (sub_811B9C8())
+ {
+ if (gEasyChatScreen->unk_0a)
+ gEasyChatScreen->unk_0a--;
+ else
+ break;
+ }
+}
+
+static void sub_811B9A0(void)
+{
+ while (sub_811BA1C())
+ {
+ if (gEasyChatScreen->unk_10)
+ gEasyChatScreen->unk_10--;
+ else
+ break;
+ }
+}
+
+static u8 sub_811B9C8(void)
+{
+ if (gEasyChatScreen->unk_09 == 0)
+ return sub_811B8E8() >= sub_811F3AC() ? 1 : 0;
+ else
+ return gEasyChatScreen->unk_0a > sub_811B960(gEasyChatScreen->unk_0b) ? 1 : 0;
+}
+
+static u8 sub_811BA1C(void)
+{
+ return sub_811B940() >= sub_811F5B0() ? 1 : 0;
+}
+
+int sub_811BA3C(void)
+{
+ return gEasyChatScreenTemplates[gEasyChatScreen->templateId].unk_03_7;
+}
+
+u8 sub_811BA5C(void)
+{
+ return gEasyChatScreen->kind;
+}
+
+u8 sub_811BA68(void)
+{
+ return gEasyChatScreenTemplates[gEasyChatScreen->templateId].unk_03_0;
+}
+
+const u8 *sub_811BA88(void)
+{
+ return gEasyChatScreen->titleText;
+}
+
+u16 *sub_811BA94(void)
+{
+ return gEasyChatScreen->ecWordBuffer;
+}
+
+u8 sub_811BAA0(void)
+{
+ return gEasyChatScreen->numRows;
+}
+
+u8 sub_811BAAC(void)
+{
+ return gEasyChatScreen->numColumns;
+}
+
+u8 sub_811BAB8(void)
+{
+ return gEasyChatScreen->mainCursorColumn;
+}
+
+u8 sub_811BAC4(void)
+{
+ return gEasyChatScreen->mainCursorRow;
+}
+
+static void GetEasyChatInstructionsText(const u8 **str1, const u8 **str2)
+{
+ *str1 = gEasyChatScreenTemplates[gEasyChatScreen->templateId].instructionsText1;
+ *str2 = gEasyChatScreenTemplates[gEasyChatScreen->templateId].instructionsText2;
+}
+
+static void GetEasyChatConfirmText(const u8 **str1, const u8 **str2)
+{
+ *str1 = gEasyChatScreenTemplates[gEasyChatScreen->templateId].confirmText1;
+ *str2 = gEasyChatScreenTemplates[gEasyChatScreen->templateId].confirmText2;
+}
+
+static void sub_811BB40(const u8 **str1, const u8 **str2)
+{
+ switch (gEasyChatScreen->kind)
+ {
+ case 4:
+ *str1 = gText_StopGivingPkmnMail;
+ *str2 = NULL;
+ break;
+ case 15:
+ case 16:
+ *str1 = gText_LikeToQuitQuiz;
+ *str2 = gText_ChallengeQuestionMark;
+ break;
+ default:
+ *str1 = gText_QuitEditing;
+ *str2 = NULL;
+ break;
+ }
+
+}
+
+static void GetEasyChatConfirmDeletionText(const u8 **str1, const u8 **str2)
+{
+ *str1 = gText_AllTextBeingEditedWill;
+ *str2 = gText_BeDeletedThatOkay;
+}
+
+void sub_811BB9C(u8 *arg0, u8 *arg1)
+{
+ *arg0 = gEasyChatScreen->unk_0a;
+ *arg1 = gEasyChatScreen->unk_0b;
+}
+
+u8 sub_811BBB0(void)
+{
+ return gEasyChatScreen->unk_09;
+}
+
+u8 sub_811BBBC(void)
+{
+ return gEasyChatScreen->unk_0c;
+}
+
+void sub_811BBC8(u8 *arg0, u8 *arg1)
+{
+ *arg0 = gEasyChatScreen->unk_10;
+ *arg1 = gEasyChatScreen->unk_11;
+}
+
+u8 sub_811BBDC(void)
+{
+ return gEasyChatScreen->unk_0e;
+}
+
+u8 sub_811BBE8(void)
+{
+ return gEasyChatScreen->unk_0f;
+}
+
+static u8 unref_sub_811BBF4(void)
+{
+ return 0;
+}
+
+int sub_811BBF8(void)
+{
+ switch (gEasyChatScreen->state)
+ {
+ case 2:
+ if (gEasyChatScreen->unk_09 == 0 && gEasyChatScreen->unk_0c)
+ return 1;
+ break;
+ case 3:
+ if (gEasyChatScreen->unk_0e)
+ return 1;
+ break;
+ }
+
+ return 0;
+}
+
+int sub_811BC2C(void)
+{
+ switch (gEasyChatScreen->state)
+ {
+ case 2:
+ if (gEasyChatScreen->unk_09 == 0 && gEasyChatScreen->unk_0c + 4 <= gEasyChatScreen->unk_0d - 1)
+ return 1;
+ break;
+ case 3:
+ if (gEasyChatScreen->unk_0e + 4 <= gEasyChatScreen->unk_0f)
+ return 1;
+ break;
+ }
+
+ return 0;
+}
+
+static int sub_811BC70(void)
+{
+ return sub_811BA3C();
+}
+
+u8 sub_811BC7C(const u16 *arg0, u8 arg1)
+{
+ u8 i;
+
+ for (i = 0; i < arg1; i++)
+ {
+ if (arg0[i] != gEasyChatScreen->ecWordBuffer[i])
+ return 1;
+ }
+
+ return 0;
+}
+
+u8 sub_811BCBC(void)
+{
+ return gEasyChatScreen->sizeParam;
+}
+
+static u8 sub_811BCC8(u8 entryType)
+{
+ u32 i;
+
+ for (i = 0; i < ARRAY_COUNT(gEasyChatScreenTemplates); i++)
+ {
+ if (gEasyChatScreenTemplates[i].unk_00 == entryType)
+ return i;
+ }
+
+ return 0;
+}
+
+int sub_811BCF4(void)
+{
+ int i;
+
+ for (i = 0; i < gEasyChatScreen->unk_07; i++)
+ {
+ if (gEasyChatScreen->ecWordBuffer[i] != 0xFFFF)
+ return 0;
+ }
+
+ return 1;
+}
+
+static int sub_811BD2C(void)
+{
+ int i;
+
+ for (i = 0; i < gEasyChatScreen->unk_07; i++)
+ {
+ if (gEasyChatScreen->ecWordBuffer[i] == 0xFFFF)
+ return 0;
+ }
+
+ return 1;
+}
+
+static int sub_811BD64(void)
+{
+ int i;
+ struct SaveBlock1 *saveBlock1;
+
+ if (gEasyChatScreen->kind == 17)
+ return sub_811BCF4();
+
+ saveBlock1 = gSaveBlock1Ptr;
+ for (i = 0; i < 9; i++)
+ {
+ if (saveBlock1->lilycoveLady.quiz.unk_002[i] != 0xFFFF)
+ return 0;
+ }
+
+ return 1;
+}
+
+static int sub_811BDB0(void)
+{
+ struct LilycoveLadyQuiz *quiz;
+ if (gEasyChatScreen->kind == 18)
+ return sub_811BCF4();
+
+ quiz = &gSaveBlock1Ptr->lilycoveLady.quiz;
+ return quiz->unk_014 == 0xFFFF ? 1 : 0;
+}
+
+static void sub_811BDF0(u8 *arg0)
+{
+ u8 name[32];
+ struct SaveBlock1 *saveBlock1 = gSaveBlock1Ptr;
+ DynamicPlaceholderTextUtil_Reset();
+ if (StringLength(saveBlock1->lilycoveLady.quiz.playerName) != 0)
+ {
+ TVShowConvertInternationalString(name, saveBlock1->lilycoveLady.quiz.playerName, saveBlock1->lilycoveLady.quiz.language);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name);
+ }
+ else
+ {
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gText_Lady);
+ }
+
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700sQuiz);
+}
+
+static void sub_811BE54(void)
+{
+ int i;
+ u16 *ecWord;
+ u8 *str;
+
+ ecWord = gEasyChatScreen->ecWordBuffer;
+ str = gStringVar2;
+ i = 0;
+ while (i < gEasyChatScreen->unk_07)
+ {
+ str = CopyEasyChatWordPadded(str, *ecWord, 0);
+ *str = 0;
+ str++;
+ ecWord++;
+ i++;
+ }
+
+ str--;
+ str[0] = 0xFF;
+}
+
+static void sub_811BE9C(void)
+{
+ switch (gEasyChatScreen->kind)
+ {
+ case 0:
+ FlagSet(FLAG_SYS_CHAT_USED);
+ break;
+ case 20:
+ if (sub_811BF20())
+ gSpecialVar_0x8004 = 2;
+ else
+ gSpecialVar_0x8004 = 0;
+ break;
+ case 9:
+ sub_811BE54();
+ gSpecialVar_0x8004 = sub_81226D8(gEasyChatScreen->ecWordBuffer);
+ break;
+ case 13:
+ gSpecialVar_0x8004 = sub_811BF40();
+ break;
+ }
+}
+
+static int sub_811BF20(void)
+{
+ return sub_811BC7C(gUnknown_08597764, 4) == 0;
+}
+
+static u16 sub_811BF40(void)
+{
+ int i;
+ for (i = 0; i < 5; i++)
+ {
+ if (!sub_811BC7C(gUnknown_0859776C[i], 2))
+ return i + 1;
+ }
+
+ return 0;
+}
+
+void sub_811BF78(void)
+{
+ gEasyChatScreen->unk_13 = 0;
+}
+
+int sub_811BF88(int easyChatWord)
+{
+ return 0;
+}
+
+static bool8 sub_811BF8C(void)
+{
+ if (!sub_811CE94())
+ return 0;
+ else
+ return 1;
+}
+
+static bool8 sub_811BFA4(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_08597C54, ARRAY_COUNT(gUnknown_08597C54));
+ SetBgTilemapBuffer(3, gUnknown_0203A11C->unkB00);
+ SetBgTilemapBuffer(1, gUnknown_0203A11C->unk300);
+ InitWindows(gUnknown_08597C64);
+ DeactivateAllTextPrinters();
+ sub_811CF64();
+ sub_811CF04();
+ CpuFastFill(0, (void *)VRAM + 0x1000000, 0x400);
+ break;
+ case 1:
+ DecompressAndLoadBgGfxUsingHeap(3, gEasyChatWindow_Gfx, 0, 0, 0);
+ CopyToBgTilemapBuffer(3, gEasyChatWindow_Tilemap, 0, 0);
+ sub_811D60C();
+ sub_811D424(gUnknown_0203A11C->unk300);
+ sub_811D230();
+ sub_811E948();
+ CopyBgTilemapBufferToVram(3);
+ break;
+ case 2:
+ DecompressAndLoadBgGfxUsingHeap(1, gUnknown_08597B54, 0, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+ break;
+ case 3:
+ sub_811CFCC();
+ sub_811D0BC();
+ sub_811D2C8();
+ sub_811D684();
+ break;
+ case 4:
+ sub_811DE90();
+ if (sub_811BA5C() != 16)
+ sub_811DEC4();
+ break;
+ case 5:
+ if (IsDma3ManagerBusyWithBgCopy())
+ {
+ return TRUE;
+ }
+ else
+ {
+ sub_811DE5C(0, 0, 0, 0);
+ SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(0, 63));
+ SetGpuReg(REG_OFFSET_WINOUT, WIN_RANGE(0, 59));
+ ShowBg(3);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(0);
+ sub_811E5D4();
+ sub_811E720();
+ sub_811E828();
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_0203A11C->unk0++;
+ return TRUE;
+}
+
+static void sub_811C13C(void)
+{
+ if (gUnknown_0203A11C)
+ FREE_AND_SET_NULL(gUnknown_0203A11C);
+}
+
+static void sub_811C158(u16 arg0)
+{
+ gUnknown_0203A11C->unk4 = arg0;
+ gUnknown_0203A11C->unk0 = 0;
+ sub_811C170();
+}
+
+static bool8 sub_811C170(void)
+{
+ switch (gUnknown_0203A11C->unk4)
+ {
+ case 0: return FALSE;
+ case 1: return sub_811C2D4();
+ case 2: return sub_811C30C();
+ case 3: return sub_811C3E4();
+ case 4: return sub_811C48C();
+ case 5: return sub_811C404();
+ case 6: return sub_811C448();
+ case 7: return sub_811C4D0();
+ case 8: return sub_811C518();
+ case 9: return sub_811C554();
+ case 10: return sub_811C620();
+ case 11: return sub_811C830();
+ case 12: return sub_811C8F0();
+ case 13: return sub_811C99C();
+ case 14: return sub_811CA5C();
+ case 15: return sub_811C780();
+ case 16: return sub_811C78C();
+ case 17: return sub_811C7D4();
+ case 18: return sub_811CB18();
+ case 19: return sub_811CB98();
+ case 20: return sub_811CB24();
+ case 21: return sub_811CC90();
+ case 22: return sub_811CC08();
+ case 23: return sub_811C6C0();
+ case 24: return FALSE;
+ case 25: return FALSE;
+ case 26: return FALSE;
+ case 27: return FALSE;
+ case 28: return FALSE;
+ case 29: return sub_811CD14();
+ case 30: return sub_811CD54();
+ case 31: return sub_811CD94();
+ case 32: return sub_811CDD4();
+ case 33: return sub_811CE14();
+ case 34: return sub_811CE54();
+ default: return FALSE;
+ }
+}
+
+static bool8 sub_811C2D4(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811D2C8();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C30C(void)
+{
+ u8 i;
+ u16 *ecWordBuffer;
+ u16 *ecWord;
+ u8 var0;
+ u8 cursorColumn, cursorRow, numColumns;
+ s16 var1;
+ int stringWidth;
+ int trueStringWidth;
+ u8 var2;
+ u8 sp0[64];
+
+ ecWordBuffer = sub_811BA94();
+ var0 = sub_811BA68();
+ cursorColumn = sub_811BAB8();
+ cursorRow = sub_811BAC4();
+ numColumns = sub_811BAAC();
+ ecWord = &ecWordBuffer[cursorRow * numColumns];
+ var1 = 8 * gUnknown_08597C30[var0].unk0_0 + 13;
+ for (i = 0; i < cursorColumn; i++)
+ {
+ if (*ecWord == 0xFFFF)
+ {
+ stringWidth = 72;
+ }
+ else
+ {
+ CopyEasyChatWord(sp0, *ecWord);
+ stringWidth = GetStringWidth(1, sp0, 0);
+ }
+
+ trueStringWidth = stringWidth + 17;
+ var1 += trueStringWidth;
+ ecWord++;
+ }
+
+ var2 = 8 * (gUnknown_08597C30[var0].unk0_5 + cursorRow * 2);
+ sub_811DF60(var1, var2 + 8);
+ return FALSE;
+}
+
+static bool8 sub_811C3E4(void)
+{
+ u8 var0 = sub_811E920(sub_811BAB8());
+ sub_811DF60(var0, 96);
+ return FALSE;
+}
+
+static bool8 sub_811C404(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ sub_811D104(2);
+ sub_811D214(1);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C448(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ sub_811D104(3);
+ sub_811D214(0);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C48C(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ sub_811D104(1);
+ sub_811D214(1);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C4D0(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DFB0();
+ sub_811D104(0);
+ sub_811D2C8();
+ ShowBg(0);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C518(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DFB0();
+ sub_811D104(0);
+ sub_811D2C8();
+ gUnknown_0203A11C->unk0++;
+ // Fall through
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C554(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ HideBg(0);
+ sub_811DE5C(0, 0, 0, 0);
+ sub_811D6D4();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811D9CC(0);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy() && !sub_811DAA4())
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811E3AC();
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 4:
+ if (!sub_811E418())
+ {
+ sub_811DFC8();
+ sub_811E6E0(0);
+ sub_811E64C();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C620(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811E050();
+ sub_811E4AC();
+ sub_811E6B0();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ if (sub_811E4D0() == TRUE)
+ break;
+
+ sub_811D9CC(1);
+ gUnknown_0203A11C->unk0++;
+ // Fall through
+ case 2:
+ if (!sub_811DAA4())
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811DFB0();
+ ShowBg(0);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 4:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C6C0(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811E050();
+ sub_811E6B0();
+ sub_811E55C();
+ sub_811D9CC(5);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ if (!sub_811DAA4() && !sub_811E5B8())
+ {
+ sub_811D6D4();
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811D9CC(6);
+ sub_811E578();
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 3:
+ if (!sub_811DAA4() && !sub_811E5B8())
+ {
+ sub_811E64C();
+ sub_811DFC8();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ case 4:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C780(void)
+{
+ sub_811E088();
+ return FALSE;
+}
+
+static bool8 sub_811C78C(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DDAC(1, 4);
+ gUnknown_0203A11C->unk0++;
+ // Fall through
+ case 1:
+ if (!sub_811DE10())
+ {
+ sub_811E088();
+ sub_811E64C();
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C7D4(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DDAC(-1, 4);
+ gUnknown_0203A11C->unk0++;
+ // Fall through
+ case 1:
+ if (!sub_811DE10())
+ {
+ sub_811E64C();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C830(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811E050();
+ sub_811E4AC();
+ sub_811E6B0();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ if (!sub_811E4D0())
+ {
+ sub_811D9B4();
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811D9CC(2);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 3:
+ if (!sub_811DAA4())
+ {
+ sub_811D698(2);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 4:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811E288();
+ sub_811E6E0(1);
+ sub_811E64C();
+ sub_811E794();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ case 5:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C8F0(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811D2C8();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ sub_811E380();
+ sub_811E6B0();
+ sub_811E7F8();
+ sub_811D9B4();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811D9CC(3);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 3:
+ if (!sub_811DAA4())
+ {
+ ShowBg(0);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 4:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811DFB0();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ case 5:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811C99C(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811D2C8();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ sub_811E380();
+ sub_811E6B0();
+ sub_811E7F8();
+ sub_811D9B4();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 2:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811D9CC(3);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 3:
+ if (!sub_811DAA4())
+ {
+ sub_811D104(3);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 4:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ ShowBg(0);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 5:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811DFB0();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ case 6:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CA5C(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811E380();
+ sub_811E6B0();
+ sub_811E7F8();
+ sub_811D9B4();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811D9CC(4);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 2:
+ if (!sub_811DAA4())
+ {
+ sub_811D6D4();
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 3:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811E3AC();
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 4:
+ if (!sub_811E418())
+ {
+ sub_811DFC8();
+ sub_811E6E0(0);
+ sub_811E64C();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CB18(void)
+{
+ sub_811E30C();
+ return FALSE;
+}
+
+static bool8 sub_811CB24(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811D7A4();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811DDAC(1, 4);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 2:
+ if (!sub_811DE10())
+ {
+ sub_811E30C();
+ sub_811E64C();
+ sub_811E794();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CB98(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811D7C8();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ sub_811DDAC(-1, 4);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 2:
+ if (!sub_811DE10())
+ {
+ sub_811E64C();
+ sub_811E794();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CC08(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811D7EC();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ s16 var0 = sub_811BBDC() - sub_811DE48();
+ sub_811DDAC(var0, 8);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 2:
+ if (!sub_811DE10())
+ {
+ sub_811E30C();
+ sub_811E64C();
+ sub_811E794();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CC90(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811D830();
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ s16 var0 = sub_811BBDC() - sub_811DE48();
+ sub_811DDAC(var0, 8);
+ gUnknown_0203A11C->unk0++;
+ }
+ break;
+ case 2:
+ if (!sub_811DE10())
+ {
+ sub_811E64C();
+ sub_811E794();
+ gUnknown_0203A11C->unk0++;
+ return FALSE;
+ }
+ break;
+ case 3:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CD14(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ sub_811D104(4);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CD54(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ sub_811D104(5);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CD94(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ sub_811D104(6);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CDD4(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ sub_811D104(7);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CE14(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ sub_811D104(8);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CE54(void)
+{
+ switch (gUnknown_0203A11C->unk0)
+ {
+ case 0:
+ sub_811DF90();
+ sub_811D104(9);
+ gUnknown_0203A11C->unk0++;
+ break;
+ case 1:
+ return IsDma3ManagerBusyWithBgCopy();
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_811CE94(void)
+{
+ gUnknown_0203A11C = Alloc(sizeof(*gUnknown_0203A11C));
+ if (!gUnknown_0203A11C)
+ return FALSE;
+
+ gUnknown_0203A11C->unk0 = 0;
+ gUnknown_0203A11C->unk2D8 = 0;
+ gUnknown_0203A11C->unk2DC = 0;
+ gUnknown_0203A11C->unk2E0 = 0;
+ gUnknown_0203A11C->unk2E4 = 0;
+ gUnknown_0203A11C->unk2E8 = 0;
+ gUnknown_0203A11C->unk2EC = 0;
+ gUnknown_0203A11C->unk2F0 = 0;
+ gUnknown_0203A11C->unk2F4 = 0;
+ gUnknown_0203A11C->unk2F8 = 0;
+ gUnknown_0203A11C->unk2FC = 0;
+ gUnknown_0203A11C->unkA = sub_811BC70();
+ return TRUE;
+}
+
+static void sub_811CF04(void)
+{
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON);
+}
+
+static void sub_811CF64(void)
+{
+ ResetPaletteFade();
+ LoadPalette(gEasyChatMode_Pal, 0, 32);
+ LoadPalette(gUnknown_08597B14, 1 * 16, 32);
+ LoadPalette(gUnknown_08597B34, 4 * 16, 32);
+ LoadPalette(gUnknown_08597C1C, 10 * 16, 8);
+ LoadPalette(gUnknown_08597C24, 11 * 16, 12);
+ LoadPalette(gUnknown_08597C24, 15 * 16, 12);
+ LoadPalette(gUnknown_08597C24, 3 * 16, 12);
+}
+
+static void sub_811CFCC(void)
+{
+ int xOffset;
+ const u8 *titleText = sub_811BA88();
+ if (!titleText)
+ return;
+
+ xOffset = GetStringCenterAlignXOffset(1, titleText, 144);
+ FillWindowPixelBuffer(0, 0);
+ sub_811D058(0, 1, titleText, xOffset, 1, 0xFF, 0, 2, 3);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+}
+
+void sub_811D028(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
+{
+ AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback);
+}
+
+void sub_811D058(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 red, u8 green, u8 blue)
+{
+ u8 color[3];
+ color[0] = red;
+ color[1] = green;
+ color[2] = blue;
+ AddTextPrinterParameterized3(windowId, fontId, left, top, color, speed, str);
+}
+
+static void sub_811D0BC(void)
+{
+ FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17);
+ LoadUserWindowBorderGfx(1, 1, 0xE0);
+ sub_8098858(1, 1, 14);
+ sub_811D104(0);
+ PutWindowTilemap(1);
+ CopyBgTilemapBufferToVram(0);
+}
+
+static void sub_811D104(u8 arg0)
+{
+ const u8 *text2 = NULL;
+ const u8 *text1 = NULL;
+ switch (arg0)
+ {
+ case 0:
+ GetEasyChatInstructionsText(&text1, &text2);
+ break;
+ case 2:
+ sub_811BB40(&text1, &text2);
+ break;
+ case 3:
+ GetEasyChatConfirmText(&text1, &text2);
+ break;
+ case 1:
+ GetEasyChatConfirmDeletionText(&text1, &text2);
+ break;
+ case 4:
+ text1 = gText_CreateAQuiz;
+ break;
+ case 5:
+ text1 = gText_SelectTheAnswer;
+ break;
+ case 6:
+ text1 = gText_OnlyOnePhrase;
+ text2 = gText_OriginalSongWillBeUsed;
+ break;
+ case 7:
+ text1 = gText_LyricsCantBeDeleted;
+ break;
+ case 8:
+ text1 = gText_CombineTwoWordsOrPhrases3;
+ break;
+ case 9:
+ text1 = gText_YouCannotQuitHere;
+ text2 = gText_SectionMustBeCompleted;
+ break;
+ }
+
+ FillWindowPixelBuffer(1, 0x11);
+ if (text1)
+ sub_811D028(1, 1, text1, 0, 1, 0xFF, 0);
+
+ if (text2)
+ sub_811D028(1, 1, text2, 0, 17, 0xFF, 0);
+
+ CopyWindowToVram(1, 3);
+}
+
+static void sub_811D214(u8 initialCursorPos)
+{
+ CreateYesNoMenu(&gUnknown_08597C84, 1, 14, initialCursorPos);
+}
+
+static void sub_811D230(void)
+{
+ u8 var0;
+ struct WindowTemplate template;
+
+ var0 = sub_811BA68();
+ template.bg = 3;
+ template.tilemapLeft = gUnknown_08597C30[var0].unk0_0;
+ template.tilemapTop = gUnknown_08597C30[var0].unk0_5;
+ template.width = gUnknown_08597C30[var0].unk1;
+ template.height = gUnknown_08597C30[var0].unk2;
+ template.paletteNum = 11;
+ template.baseBlock = 0x6C;
+ gUnknown_0203A11C->windowId = AddWindow(&template);
+ PutWindowTilemap(gUnknown_0203A11C->windowId);
+}
+
+static void sub_811D2C8(void)
+{
+ u8 spC[4];
+ u16 *ecWord;
+ u8 numColumns, numRows;
+ u8 *str;
+ int var0;
+ int var1;
+ int i, j, k;
+
+ ecWord = sub_811BA94();
+ numColumns = sub_811BAAC();
+ numRows = sub_811BAA0();
+ var0 = sub_811BA68();
+ var1 = 0;
+ if (var0 == 7)
+ var1 = 1;
+
+ FillWindowPixelBuffer(gUnknown_0203A11C->windowId, 0x11);
+ for (i = 0; i < numRows; i++)
+ {
+ memcpy(spC, gUnknown_08597C8C, sizeof(gUnknown_08597C8C));
+ if (var1)
+ spC[2] = 6;
+
+ str = gUnknown_0203A11C->unkB;
+ gUnknown_0203A11C->unkB[0] = EOS;
+ str = StringAppend(str, spC);
+ for (j = 0; j < numColumns; j++)
+ {
+ if (*ecWord != 0xFFFF)
+ {
+ str = CopyEasyChatWord(str, *ecWord);
+ ecWord++;
+ }
+ else
+ {
+ ecWord++;
+ if (!var1)
+ {
+ str = WriteColorChangeControlCode(str, 0, 4);
+ for (k = 0; k < 12; k++)
+ {
+ *str = CHAR_HYPHEN;
+ str++;
+ }
+
+ str = WriteColorChangeControlCode(str, 0, 2);
+ }
+ }
+
+ if (var1)
+ spC[2] = 3;
+
+ str = StringAppend(str, spC);
+ if (var0 == 2 || var0 == 7 || var0 == 8)
+ {
+ if (j == 0 && i == 4)
+ break;
+ }
+ }
+
+ *str = EOS;
+ sub_811D028(gUnknown_0203A11C->windowId, 1, gUnknown_0203A11C->unkB, 0, i * 16 + 1, 0xFF, 0);
+ }
+
+ CopyWindowToVram(gUnknown_0203A11C->windowId, 3);
+}
+
+static void sub_811D424(u16 *tilemap)
+{
+ u8 var0;
+ int right, bottom;
+ int x, y;
+
+ var0 = sub_811BA68();
+ CpuFastFill(0, tilemap, BG_SCREEN_SIZE);
+ if (var0 == 2 || var0 == 8)
+ {
+ right = gUnknown_08597C30[var0].unk0_0 + gUnknown_08597C30[var0].unk1;
+ bottom = gUnknown_08597C30[var0].unk0_5 + gUnknown_08597C30[var0].unk2;
+ for (y = gUnknown_08597C30[var0].unk0_5; y < bottom; y++)
+ {
+ x = gUnknown_08597C30[var0].unk0_0 - 1;
+ tilemap[y * 32 + x] = 0x1005;
+ x++;
+ for (; x < right; x++)
+ tilemap[y * 32 + x] = 0x1000;
+
+ tilemap[y* 32 + x] = 0x1007;
+ }
+ }
+ else
+ {
+ y = gUnknown_08597C30[var0].unk0_5 - 1;
+ x = gUnknown_08597C30[var0].unk0_0 - 1;
+ right = gUnknown_08597C30[var0].unk0_0 + gUnknown_08597C30[var0].unk1;
+ bottom = gUnknown_08597C30[var0].unk0_5 + gUnknown_08597C30[var0].unk2;
+ tilemap[y * 32 + x] = 0x1001;
+ x++;
+ for (; x < right; x++)
+ tilemap[y * 32 + x] = 0x1002;
+
+ tilemap[y * 32 + x] = 0x1003;
+ y++;
+ for (; y < bottom; y++)
+ {
+ x = gUnknown_08597C30[var0].unk0_0 - 1;
+ tilemap[y * 32 + x] = 0x1005;
+ x++;
+ for (; x < right; x++)
+ tilemap[y * 32 + x] = 0x1000;
+
+ tilemap[y* 32 + x] = 0x1007;
+ }
+
+ x = gUnknown_08597C30[var0].unk0_0 - 1;
+ tilemap[y * 32 + x] = 0x1009;
+ x++;
+ for (; x < right; x++)
+ tilemap[y * 32 + x] = 0x100A;
+
+ tilemap[y * 32 + x] = 0x100B;
+ }
+}
+
+static void sub_811D60C(void)
+{
+ u8 var0;
+ u16 *tilemap;
+
+ tilemap = GetBgTilemapBuffer(3);
+ var0 = sub_811BA68();
+ switch (gUnknown_08597C30[var0].unk3)
+ {
+ case 2:
+ tilemap += 0x2A0;
+ CopyToBgTilemapBufferRect(3, tilemap, 0, 11, 32, 2);
+ break;
+ case 1:
+ tilemap += 0x300;
+ CopyToBgTilemapBufferRect(3, tilemap, 0, 11, 32, 2);
+ break;
+ case 3:
+ CopyToBgTilemapBufferRect(3, tilemap, 0, 10, 32, 4);
+ break;
+ }
+}
+
+static void sub_811D684(void)
+{
+ PutWindowTilemap(2);
+ CopyBgTilemapBufferToVram(2);
+}
+
+static void sub_811D698(u32 arg0)
+{
+ sub_811DD84();
+ FillWindowPixelBuffer(2, 0x11);
+ switch (arg0)
+ {
+ case 0:
+ sub_811D6F4();
+ break;
+ case 1:
+ sub_811D758();
+ break;
+ case 2:
+ sub_811D794();
+ break;
+ }
+
+ CopyWindowToVram(2, 2);
+}
+
+static void sub_811D6D4(void)
+{
+ if (!sub_811BBB0())
+ sub_811D698(0);
+ else
+ sub_811D698(1);
+}
+
+static void sub_811D6F4(void)
+{
+ int i;
+ int x, y;
+
+ i = 0;
+ y = 97;
+ while (1)
+ {
+ for (x = 0; x < 2; x++)
+ {
+ u8 index = sub_811F3B8(i++);
+ if (index == 22)
+ {
+ sub_811DDAC(sub_811BBBC(), 0);
+ return;
+ }
+
+ sub_811D028(2, 1, sub_811F424(index), x * 84 + 10, y, 0xFF, NULL);
+ }
+
+ y += 16;
+ }
+}
+
+static void sub_811D758(void)
+{
+ u32 i;
+
+ for (i = 0; i < 4; i++)
+ sub_811D028(2, 1, gUnknown_08597C90[i], 10, 97 + i * 16, 0xFF, NULL);
+}
+
+static void sub_811D794(void)
+{
+ sub_811D864(0, 4);
+}
+
+static void sub_811D7A4(void)
+{
+ u8 var0 = sub_811BBDC() + 3;
+ sub_811D950(var0, 1);
+ sub_811D864(var0, 1);
+}
+
+static void sub_811D7C8(void)
+{
+ u8 var0 = sub_811BBDC();
+ sub_811D950(var0, 1);
+ sub_811D864(var0, 1);
+}
+
+static void sub_811D7EC(void)
+{
+ u8 var0 = sub_811BBDC();
+ u8 var1 = var0 + 4;
+ u8 var2 = sub_811BBE8() + 1;
+ if (var1 > var2)
+ var1 = var2;
+
+ if (var0 < var1)
+ {
+ u8 var3 = var1 - var0;
+ sub_811D950(var0, var3);
+ sub_811D864(var0, var3);
+ }
+}
+
+static void sub_811D830(void)
+{
+ u8 var0 = sub_811BBDC();
+ u8 var1 = sub_811DE48();
+ if (var0 < var1)
+ {
+ u8 var2 = var1 - var0;
+ sub_811D950(var0, var2);
+ sub_811D864(var0, var2);
+ }
+}
+
+static void sub_811D864(u8 arg0, u8 arg1)
+{
+ int i, j;
+ u16 easyChatWord;
+ u8 *str;
+ int y;
+ int var0;
+
+ var0 = arg0 * 2;
+ y = (arg0 * 16 + 96) & 0xFF;
+ y++;
+ for (i = 0; i < arg1; i++)
+ {
+ for (j = 0; j < 2; j++)
+ {
+ easyChatWord = sub_811F578(var0++);
+ if (easyChatWord != 0xFFFF)
+ {
+ CopyEasyChatWordPadded(gUnknown_0203A11C->unkCC, easyChatWord, 0);
+ if (!sub_811BF88(easyChatWord))
+ sub_811D028(2, 1, gUnknown_0203A11C->unkCC, (j * 13 + 3) * 8, y, 0xFF, NULL);
+ else
+ sub_811D058(2, 1, gUnknown_0203A11C->unkCC, (j * 13 + 3) * 8, y, 0xFF, 1, 5, 3);
+ }
+ }
+
+ y += 16;
+ }
+
+ CopyWindowToVram(2, 2);
+}
+
+static void sub_811D950(u8 arg0, u8 arg1)
+{
+ int y;
+ int var0;
+ int var1;
+ int var2;
+
+ y = (arg0 * 16 + 96) & 0xFF;
+ var2 = arg1 * 16;
+ var0 = y + var2;
+ if (var0 > 255)
+ {
+ var1 = var0 - 256;
+ var2 = 256 - y;
+ }
+ else
+ {
+ var1 = 0;
+ }
+
+ FillWindowPixelRect(2, 0x11, 0, y, 224, var2);
+ if (var1)
+ FillWindowPixelRect(2, 0x11, 0, 0, 224, var1);
+}
+
+static void sub_811D9B4(void)
+{
+ FillWindowPixelBuffer(2, 0x11);
+ CopyWindowToVram(2, 2);
+}
+
+static void sub_811D9CC(int arg0)
+{
+ switch (arg0)
+ {
+ case 0:
+ gUnknown_0203A11C->unk6 = 0;
+ gUnknown_0203A11C->unk7 = 10;
+ break;
+ case 1:
+ gUnknown_0203A11C->unk6 = 9;
+ gUnknown_0203A11C->unk7 = 0;
+ break;
+ case 2:
+ gUnknown_0203A11C->unk6 = 11;
+ gUnknown_0203A11C->unk7 = 17;
+ break;
+ case 3:
+ gUnknown_0203A11C->unk6 = 17;
+ gUnknown_0203A11C->unk7 = 0;
+ break;
+ case 4:
+ gUnknown_0203A11C->unk6 = 17;
+ gUnknown_0203A11C->unk7 = 10;
+ break;
+ case 5:
+ gUnknown_0203A11C->unk6 = 18;
+ gUnknown_0203A11C->unk7 = 22;
+ break;
+ case 6:
+ gUnknown_0203A11C->unk6 = 22;
+ gUnknown_0203A11C->unk7 = 18;
+ break;
+ }
+
+ gUnknown_0203A11C->unk8 = gUnknown_0203A11C->unk6 < gUnknown_0203A11C->unk7 ? 1 : -1;
+}
+
+static bool8 sub_811DAA4(void)
+{
+ u8 var0, var1;
+ if (gUnknown_0203A11C->unk6 == gUnknown_0203A11C->unk7)
+ return FALSE;
+
+ gUnknown_0203A11C->unk6 += gUnknown_0203A11C->unk8;
+ sub_811DADC(gUnknown_0203A11C->unk6);
+ var0 = gUnknown_0203A11C->unk6;
+ var1 = gUnknown_0203A11C->unk7;
+ return (var0 ^ var1) > 0;
+}