summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-11-29 20:56:53 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2018-11-29 20:56:53 -0500
commit9200df7516151a84d0fcdda84259179eafafcabb (patch)
treeff3d40df9887857c11b479f5dd6a7bd48c48d200
parent939ae833c3364d7ea7543c4db56df5c90b4e9d8d (diff)
Finish decomp of mevent.s
-rw-r--r--asm/mevent.s219
-rw-r--r--include/global.h2
-rw-r--r--ld_script.txt1
-rw-r--r--src/mevent.c95
4 files changed, 87 insertions, 230 deletions
diff --git a/asm/mevent.s b/asm/mevent.s
deleted file mode 100644
index 819179c2b..000000000
--- a/asm/mevent.s
+++ /dev/null
@@ -1,219 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81446C4
-sub_81446C4: @ 81446C4
- ldr r1, _081446CC @ =gUnknown_203F3BC
- movs r0, 0
- str r0, [r1]
- bx lr
- .align 2, 0
-_081446CC: .4byte gUnknown_203F3BC
- thumb_func_end sub_81446C4
-
- thumb_func_start sub_81446D0
-sub_81446D0: @ 81446D0
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r0, 16
- adds r4, r0, 0
- ldr r5, _08144700 @ =gUnknown_203F3BC
- movs r0, 0
- str r0, [r5]
- cmp r4, 0
- beq _0814470E
- bl sub_8143FC8
- cmp r0, 0
- beq _0814470C
- ldr r0, _08144704 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, _08144708 @ =0x000032e4
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, r4
- bne _0814470C
- movs r0, 0x1
- str r0, [r5]
- b _0814470E
- .align 2, 0
-_08144700: .4byte gUnknown_203F3BC
-_08144704: .4byte gSaveBlock1Ptr
-_08144708: .4byte 0x000032e4
-_0814470C:
- movs r0, 0
-_0814470E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81446D0
-
- thumb_func_start sub_8144714
-sub_8144714: @ 8144714
- push {lr}
- adds r2, r0, 0
- ldr r0, _08144738 @ =gUnknown_203F3BC
- ldr r0, [r0]
- cmp r0, 0
- beq _08144782
- cmp r2, 0x1
- beq _08144758
- cmp r2, 0x1
- bcc _08144744
- cmp r2, 0x2
- bne _08144774
- ldr r0, _0814473C @ =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, _08144740 @ =0x00003478
- adds r2, r0
- movs r0, 0x2
- b _08144762
- .align 2, 0
-_08144738: .4byte gUnknown_203F3BC
-_0814473C: .4byte gSaveBlock1Ptr
-_08144740: .4byte 0x00003478
-_08144744:
- ldr r0, _08144750 @ =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, _08144754 @ =0x00003464
- adds r2, r0
- movs r0, 0
- b _08144762
- .align 2, 0
-_08144750: .4byte gSaveBlock1Ptr
-_08144754: .4byte 0x00003464
-_08144758:
- ldr r0, _0814476C @ =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, _08144770 @ =0x00003464
- adds r2, r0
- movs r0, 0x1
-_08144762:
- movs r3, 0x5
- bl sub_8144824
- b _08144782
- .align 2, 0
-_0814476C: .4byte gSaveBlock1Ptr
-_08144770: .4byte 0x00003464
-_08144774:
- ldr r0, _08144788 @ =gUnknown_8466F28 "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c"
- movs r1, 0xF7
- lsls r1, 2
- ldr r2, _0814478C @ =gUnknown_8466F5C "0"
- movs r3, 0x1
- bl AGBAssert
-_08144782:
- pop {r0}
- bx r0
- .align 2, 0
-_08144788: .4byte gUnknown_8466F28
-_0814478C: .4byte gUnknown_8466F5C
- thumb_func_end sub_8144714
-
- thumb_func_start sub_8144790
-sub_8144790: @ 8144790
- push {lr}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- ldr r0, _081447B0 @ =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, _081447B4 @ =0x00003464
- adds r1, r0
- ldr r2, _081447B8 @ =0x0500000a
- mov r0, sp
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_081447B0: .4byte gSaveBlock1Ptr
-_081447B4: .4byte 0x00003464
-_081447B8: .4byte 0x0500000a
- thumb_func_end sub_8144790
-
- thumb_func_start sub_81447BC
-sub_81447BC: @ 81447BC
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r1, 0
- cmp r1, r2
- bge _081447DE
- ldr r0, [r4]
- cmp r0, r5
- beq _081447DE
- adds r3, r4, 0
-_081447D0:
- adds r3, 0x4
- adds r1, 0x1
- cmp r1, r2
- bge _081447DE
- ldr r0, [r3]
- cmp r0, r5
- bne _081447D0
-_081447DE:
- cmp r1, r2
- bne _08144800
- subs r3, r1, 0x1
- cmp r3, 0
- ble _081447FA
- lsls r0, r3, 2
- subs r0, 0x4
- adds r2, r0, r4
-_081447EE:
- ldr r0, [r2]
- str r0, [r2, 0x4]
- subs r2, 0x4
- subs r3, 0x1
- cmp r3, 0
- bgt _081447EE
-_081447FA:
- str r5, [r4]
- movs r0, 0x1
- b _0814481C
-_08144800:
- adds r3, r1, 0
- cmp r3, 0
- ble _08144818
- lsls r0, r3, 2
- subs r0, 0x4
- adds r2, r0, r4
-_0814480C:
- ldr r0, [r2]
- str r0, [r2, 0x4]
- subs r2, 0x4
- subs r3, 0x1
- cmp r3, 0
- bgt _0814480C
-_08144818:
- str r5, [r4]
- movs r0, 0
-_0814481C:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81447BC
-
- thumb_func_start sub_8144824
-sub_8144824: @ 8144824
- push {r4,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- adds r1, r2, 0
- adds r2, r3, 0
- bl sub_81447BC
- cmp r0, 0
- beq _0814483C
- adds r0, r4, 0
- bl sub_814451C
-_0814483C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8144824
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/global.h b/include/global.h
index 92e6b7da1..b1c6adcf3 100644
--- a/include/global.h
+++ b/include/global.h
@@ -646,7 +646,7 @@ struct MEventBuffers
/*0x310 0x3430*/ struct MEventBuffer_3430 buffer_310;
/*0x338 0x3458*/ u16 unk_338[4];
/*0x340 0x3460*/ struct MysteryEventStruct unk_340;
- /*0x344 0x3464*/ u8 filler_344[0x28];
+ /*0x344 0x3464*/ u32 unk_344[2][5];
}; // 0x36C 0x348C
struct SaveBlock1
diff --git a/ld_script.txt b/ld_script.txt
index 91bd070af..237166975 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -244,7 +244,6 @@ SECTIONS {
asm/mystery_gift_menu.o(.text);
asm/link_rfu_4.o(.text);
src/mevent.o(.text);
- asm/mevent.o(.text);
asm/mevent_server.o(.text);
asm/mevent_8145654.o(.text);
src/menews_jisan.o(.text);
diff --git a/src/mevent.c b/src/mevent.c
index bf2d2c1a5..a65433999 100644
--- a/src/mevent.c
+++ b/src/mevent.c
@@ -57,6 +57,7 @@ void sub_81422FC(void);
void sub_812B484(void);
void sub_814407C(void);
void sub_81440B4(void);
+void sub_8144824(u32, u32, u32 *, s32);
void sub_8144790(void);
u8 sub_815D6B4(u8 *);
@@ -101,6 +102,8 @@ const u16 gUnknown_8466F00[] = {
struct MEvent_Str_1 gUnknown_3005ED0;
+bool32 gUnknown_203F3BC = FALSE;
+
void sub_81435DC(struct MEvent_Str_1 *a0, size_t a1, const void * a2)
{
vu16 imeBak = REG_IME;
@@ -839,10 +842,6 @@ s32 sub_814449C(const struct MEventStruct_Unk1442CC * a0)
return sub_8144184(&a0->unk_20, a0->unk_44);
}
-//TODO: Remove these later
-const char ALIGNED(4) gUnknown_8466F28[] = "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c";
-const char ALIGNED(4) gUnknown_8466F5C[] = "0";
-
u16 sub_81444B0(const struct MEventStruct_Unk1442CC * a0, u32 command)
{
switch (command)
@@ -858,8 +857,7 @@ u16 sub_81444B0(const struct MEventStruct_Unk1442CC * a0, u32 command)
case 4:
return a0->unk_44;
default:
- AGBAssert(gUnknown_8466F28, 825, gUnknown_8466F5C, 1);
- // AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 825);
+ AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 825);
return 0;
}
}
@@ -888,8 +886,7 @@ void sub_814451C(u32 command)
}
if (dest == NULL)
{
- AGBAssert(gUnknown_8466F28, 868, gUnknown_8466F5C, 1);
- // AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 868);
+ AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 868);
}
else if (++(*dest) > 999)
{
@@ -947,6 +944,86 @@ u16 sub_81445C0(u32 command)
break;
}
}
- AGBAssert(gUnknown_8466F28, 913, gUnknown_8466F5C, 1);
+ AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 913);
return 0;
}
+
+void sub_81446C4(void)
+{
+ gUnknown_203F3BC = FALSE;
+}
+
+bool32 sub_81446D0(u16 a0)
+{
+ gUnknown_203F3BC = FALSE;
+ if (a0 == 0)
+ return FALSE;
+ if (!sub_8143FC8())
+ return FALSE;
+ if (gSaveBlock1Ptr->unk_3120.buffer_1c0.data.unk_00 != a0)
+ return FALSE;
+ gUnknown_203F3BC = TRUE;
+ return TRUE;
+}
+
+void sub_8144714(u32 a0, u32 a1)
+{
+ if (gUnknown_203F3BC)
+ {
+ switch (a0)
+ {
+ case 2:
+ sub_8144824(2, a1, gSaveBlock1Ptr->unk_3120.unk_344[1], 5);
+ break;
+ case 0:
+ sub_8144824(0, a1, gSaveBlock1Ptr->unk_3120.unk_344[0], 5);
+ break;
+ case 1:
+ sub_8144824(1, a1, gSaveBlock1Ptr->unk_3120.unk_344[0], 5);
+ break;
+ default:
+ AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent.c", 988);
+ }
+ }
+}
+
+void sub_8144790(void)
+{
+ CpuFill32(0, gSaveBlock1Ptr->unk_3120.unk_344, sizeof(gSaveBlock1Ptr->unk_3120.unk_344));
+}
+
+bool32 sub_81447BC(u32 a0, u32 * a1, s32 size)
+{
+ s32 i;
+ s32 j;
+
+ for (i = 0; i < size; i++)
+ {
+ if (a1[i] == a0)
+ break;
+ }
+ if (i == size)
+ {
+ for (j = size - 1; j > 0; j--)
+ {
+ a1[j] = a1[j - 1];
+ }
+ a1[0] = a0;
+ return TRUE;
+ }
+ else
+ {
+ for (j = i; j > 0; j--)
+ {
+ a1[j] = a1[j - 1];
+ }
+ a1[0] = a0;
+ return FALSE;
+ }
+}
+
+void sub_8144824(u32 a0, u32 a1, u32 * a2, s32 a3)
+{
+ if (sub_81447BC(a1, a2, a3))
+ sub_814451C(a0);
+}