summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-11-02 20:37:03 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-11-02 20:37:03 -0400
commit881d222621a0f92d8548ba70bb1c5dbdfcf0555f (patch)
treea35200e565ba2c23a3accc64c56997ce15580d26
parent1049cd670d115c114f616e9118bc0fc9fb5fac64 (diff)
sub_811A95C
-rw-r--r--asm/easy_chat.s153
-rw-r--r--src/easy_chat.c96
2 files changed, 92 insertions, 157 deletions
diff --git a/asm/easy_chat.s b/asm/easy_chat.s
index 2e2284aac..efd27ccf7 100644
--- a/asm/easy_chat.s
+++ b/asm/easy_chat.s
@@ -5,159 +5,6 @@
.text
- thumb_func_start sub_811A95C
-sub_811A95C: @ 811A95C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r1
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r4, =gUnknown_0203A118
- movs r0, 0x50
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- bne _0811A984
- movs r0, 0
- b _0811AA7E
- .pool
-_0811A984:
- movs r7, 0
- strb r5, [r0]
- ldr r0, [r4]
- mov r1, r8
- str r1, [r0, 0x38]
- strb r7, [r0, 0x5]
- ldr r0, [r4]
- strb r7, [r0, 0x6]
- ldr r0, [r4]
- strb r7, [r0, 0x9]
- ldr r0, [r4]
- strb r6, [r0, 0x12]
- ldr r0, [r4]
- strb r7, [r0, 0x13]
- adds r0, r5, 0
- bl sub_811BCC8
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r5, 0x10
- bne _0811A9C6
- ldr r0, [r4]
- adds r0, 0x14
- bl sub_811BDF0
- ldr r0, [r4]
- adds r1, r0, 0
- adds r1, 0x14
- str r1, [r0, 0x34]
- movs r1, 0x7
- strb r1, [r0, 0x4]
- lsls r0, r6, 1
- b _0811A9DE
-_0811A9C6:
- ldr r0, [r4]
- strb r7, [r0, 0x4]
- ldr r3, [r4]
- ldr r1, =gUnknown_08597550
- lsls r2, r6, 1
- adds r0, r2, r6
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r0, [r0]
- str r0, [r3, 0x34]
- adds r0, r2, 0
-_0811A9DE:
- ldr r3, =gUnknown_0203A118
- ldr r2, [r3]
- ldr r1, =gUnknown_08597550
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldrb r1, [r0, 0x1]
- strb r1, [r2, 0x2]
- ldr r1, [r3]
- ldrb r0, [r0, 0x2]
- strb r0, [r1, 0x3]
- ldr r0, [r3]
- ldrb r2, [r0, 0x2]
- ldrb r1, [r0, 0x3]
- adds r4, r2, 0
- muls r4, r1
- adds r1, r4, 0
- strb r1, [r0, 0x7]
- ldr r0, [r3]
- strb r6, [r0, 0x1]
- ldr r1, [r3]
- ldrb r0, [r1, 0x7]
- adds r4, r3, 0
- cmp r0, 0x9
- bls _0811AA14
- movs r0, 0x9
- strb r0, [r1, 0x7]
-_0811AA14:
- mov r0, r8
- cmp r0, 0
- beq _0811AA34
- ldr r0, [r4]
- adds r1, r0, 0
- adds r1, 0x3C
- ldrb r2, [r0, 0x7]
- mov r0, r8
- bl CpuSet
- b _0811AA64
- .pool
-_0811AA34:
- movs r3, 0
- ldr r0, [r4]
- ldrb r0, [r0, 0x7]
- cmp r3, r0
- bge _0811AA5C
- adds r6, r4, 0
- ldr r1, =0x0000ffff
- adds r5, r1, 0
-_0811AA44:
- ldr r2, [r6]
- lsls r0, r3, 1
- adds r1, r2, 0
- adds r1, 0x3C
- adds r1, r0
- ldrh r0, [r1]
- orrs r0, r5
- strh r0, [r1]
- adds r3, 0x1
- ldrb r2, [r2, 0x7]
- cmp r3, r2
- blt _0811AA44
-_0811AA5C:
- ldr r1, [r4]
- adds r0, r1, 0
- adds r0, 0x3C
- str r0, [r1, 0x38]
-_0811AA64:
- bl sub_811F3AC
- ldr r1, =gUnknown_0203A118
- ldr r2, [r1]
- lsls r0, 24
- lsrs r0, 24
- subs r0, 0x1
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- adds r0, 0x1
- strb r0, [r2, 0xD]
- movs r0, 0x1
-_0811AA7E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_811A95C
-
thumb_func_start sub_811AA90
sub_811AA90: @ 811AA90
push {r4,lr}
diff --git a/src/easy_chat.c b/src/easy_chat.c
index c1a68f4e2..6a04d6514 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -1,6 +1,7 @@
// Includes
#include "global.h"
+#include "malloc.h"
#include "songs.h"
#include "sound.h"
#include "overworld.h"
@@ -23,6 +24,31 @@
#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;
+ u8 unk_05;
+ u8 unk_06;
+ u8 unk_07;
+ u8 unk_08;
+ u8 unk_09;
+ u8 filler_0a[0x3];
+ 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;
+
+// Static ROM declarations
+
static void sub_811A2C0(u8);
static void sub_811A278(void);
static bool8 sub_811A428(u8);
@@ -31,9 +57,11 @@ static void sub_811A2FC(u8);
static bool32 sub_811A88C(u16);
static void sub_811A8A4(u16);
static void sub_811A8F0(void);
-bool8 sub_811A95C(u8, u32, u8);
+static bool8 sub_811A95C(u8, u16 *, u8);
void sub_811AA90(void);
/*static*/ u16 sub_811AAAC(void);
+u8 sub_811BCC8(u8);
+void sub_811BDF0(u8 *);
bool8 sub_811BF8C(void);
bool8 sub_811BFA4(void);
void sub_811C13C(void);
@@ -41,8 +69,7 @@ void sub_811C13C(void);
/*static*/ bool8 sub_811C170(void);
bool8 sub_811F28C(void);
void sub_811F2B8(void);
-
-// Static ROM declarations
+u8 sub_811F3AC(void);
// .rodata
@@ -50,6 +77,14 @@ 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
@@ -184,7 +219,7 @@ static bool8 sub_811A428(u8 taskId)
}
break;
case 2:
- if (!sub_811A95C(data[EZCHAT_TASK_KIND], GetWordTaskArg(taskId, EZCHAT_TASK_WORDS), data[EZCHAT_TASK_SIZE]))
+ if (!sub_811A95C(data[EZCHAT_TASK_KIND], (u16 *)GetWordTaskArg(taskId, EZCHAT_TASK_WORDS), data[EZCHAT_TASK_SIZE]))
{
sub_811A4D0((MainCallback)GetWordTaskArg(taskId, EZCHAT_TASK_MAINCALLBACK));
}
@@ -386,3 +421,56 @@ static void sub_811A938(void)
{
sub_811A20C(0x11, gSaveBlock1Ptr->lilycoveLady.quiz.unk_002, sub_80861B0, 3);
}
+
+static bool8 sub_811A95C(u8 kind, u16 *words, u8 sizeParam)
+{
+ u8 r6;
+ int i;
+
+ gUnknown_0203A118 = malloc(sizeof(*gUnknown_0203A118));
+ if (gUnknown_0203A118 == 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);
+ if (kind == 0x10)
+ {
+ sub_811BDF0(gUnknown_0203A118->unk_14);
+ gUnknown_0203A118->src = gUnknown_0203A118->unk_14;
+ gUnknown_0203A118->unk_04 = 7;
+ }
+ else
+ {
+ gUnknown_0203A118->unk_04 = 0;
+ gUnknown_0203A118->src = gUnknown_08597550[r6].data;
+ }
+ 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)
+ {
+ gUnknown_0203A118->unk_07 = 9;
+ }
+ if (words != NULL)
+ {
+ CpuCopy16(words, gUnknown_0203A118->ecWordBuffer, gUnknown_0203A118->unk_07 * sizeof(u16));
+ }
+ else
+ {
+ for (i = 0; i < gUnknown_0203A118->unk_07; i ++)
+ {
+ gUnknown_0203A118->ecWordBuffer[i] = -1;
+ }
+ gUnknown_0203A118->words = gUnknown_0203A118->ecWordBuffer;
+ }
+ gUnknown_0203A118->unk_0d = (sub_811F3AC() - 1) / 2 + 1;
+ return TRUE;
+}