diff options
author | Phlosioneer <mattmdrr2@gmail.com> | 2019-02-21 21:21:10 -0500 |
---|---|---|
committer | Phlosioneer <mattmdrr2@gmail.com> | 2019-02-21 21:22:10 -0500 |
commit | eca329f9c500d89f451a4ab88f65da79c112bf71 (patch) | |
tree | 7fd4fa77064398ad1a19354df534f31f8355f839 /src/easy_chat.c | |
parent | 0a7b97ee0605e48a34c7af193a26d770c6d23d29 (diff) | |
parent | b105d20d1e0297d0c858fe99a0946e5c07da81c1 (diff) |
Merge branch 'master' into multiplayer-stuff
Diffstat (limited to 'src/easy_chat.c')
-rw-r--r-- | src/easy_chat.c | 2042 |
1 files changed, 1723 insertions, 319 deletions
diff --git a/src/easy_chat.c b/src/easy_chat.c index 2dce4de0d..5eb3f5ccd 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -2,20 +2,24 @@ // 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 "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 "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 "window.h" +#include "constants/flags.h" +#include "constants/songs.h" #define EZCHAT_TASK_STATE 0 #define EZCHAT_TASK_KIND 1 @@ -24,38 +28,52 @@ #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; +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]; +}; +EWRAM_DATA struct EasyChatScreen *gEasyChatScreen = NULL; EWRAM_DATA void *gUnknown_0203A11C = 0; EWRAM_DATA void *gUnknown_0203A120 = 0; -// Static ROM declarations - static void sub_811A2C0(u8); static void sub_811A278(void); static bool8 sub_811A428(u8); @@ -68,23 +86,23 @@ 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); +static bool8 sub_811BF8C(void); bool8 sub_811BFA4(void); void sub_811C13C(void); /*static*/ void sub_811C158(u16); @@ -92,23 +110,60 @@ void sub_811C13C(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); +u8 sub_811CE94(void); +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]; void sub_811A20C(u8 kind, u16 *words, MainCallback callback, u8 sizeParam) { @@ -359,7 +414,7 @@ void easy_chat_input_maybe(void) words = gSaveBlock2Ptr->apprentices[0].easyChatWords; break; case 20: - words = sub_801B058(); + words = GetSaveBlock1Field3564(); break; default: return; @@ -444,66 +499,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 +604,1612 @@ 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) + { + if (gEasyChatScreen->mainCursorColumn > 2) + gEasyChatScreen->mainCursorColumn = 2; + + gEasyChatScreen->state = 1; + return 3; + } + + 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) { - gUnknown_0203A118->unk_06 = gUnknown_08597550[gUnknown_0203A118->unk_01].unk_02; + switch (gEasyChatScreen->mainCursorColumn) + { + case 0: + return sub_811B184(); + case 1: + return sub_811B150(); + case 2: + return sub_811B1B4(); + case 3: + return sub_811B264(); + } } - if (gUnknown_0203A118->unk_06 > gUnknown_08597550[gUnknown_0203A118->unk_01].unk_02) + + 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; +} + +void sub_811BAD0(const u8 **str1, const u8 **str2) +{ + *str1 = gEasyChatScreenTemplates[gEasyChatScreen->templateId].instructionsText1; + *str2 = gEasyChatScreenTemplates[gEasyChatScreen->templateId].instructionsText2; +} + +void sub_811BB08(const u8 **str1, const u8 **str2) +{ + *str1 = gEasyChatScreenTemplates[gEasyChatScreen->templateId].confirmText1; + *str2 = gEasyChatScreenTemplates[gEasyChatScreen->templateId].confirmText2; +} + +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; + } + +} + +void sub_811BB88(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; +} + +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; +} |