diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-29 20:56:53 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-29 20:56:53 -0500 |
commit | 9200df7516151a84d0fcdda84259179eafafcabb (patch) | |
tree | ff3d40df9887857c11b479f5dd6a7bd48c48d200 | |
parent | 939ae833c3364d7ea7543c4db56df5c90b4e9d8d (diff) |
Finish decomp of mevent.s
-rw-r--r-- | asm/mevent.s | 219 | ||||
-rw-r--r-- | include/global.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/mevent.c | 95 |
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); +} |