diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-29 15:33:58 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-29 15:33:58 -0500 |
commit | 159f242e32532f14496abaa8d2f96e9c3d30d720 (patch) | |
tree | eccf840b6ff7bf468518315649686540fbbbb5fe | |
parent | dfb6bcb6acdebfb3b7fe024148889361e9309dc4 (diff) |
through sub_8144018
-rw-r--r-- | asm/mevent.s | 145 | ||||
-rw-r--r-- | include/battle_tower.h | 1 | ||||
-rw-r--r-- | include/event_data.h | 2 | ||||
-rw-r--r-- | include/global.h | 36 | ||||
-rw-r--r-- | include/script.h | 1 | ||||
-rw-r--r-- | src/mevent.c | 101 |
6 files changed, 116 insertions, 170 deletions
diff --git a/asm/mevent.s b/asm/mevent.s index 3b5012fa7..42d4f322b 100644 --- a/asm/mevent.s +++ b/asm/mevent.s @@ -5,151 +5,6 @@ .text - thumb_func_start sub_8143F38 -sub_8143F38: @ 8143F38 - push {lr} - bl sub_814407C - bl sub_81440B4 - bl sub_8144790 - bl ClearRamScript - bl sub_806E2D0 - bl sub_806E370 - ldr r0, _08143F64 @ =gSaveBlock2Ptr - ldr r0, [r0] - movs r1, 0x94 - lsls r1, 3 - adds r0, r1 - bl sub_80E7524 - pop {r0} - bx r0 - .align 2, 0 -_08143F64: .4byte gSaveBlock2Ptr - thumb_func_end sub_8143F38 - - thumb_func_start sub_8143F68 -sub_8143F68: @ 8143F68 - push {r4-r7,lr} - adds r7, r0, 0 - bl sub_8144018 - cmp r0, 0 - beq _08143FC0 - bl sub_8143F38 - ldr r4, _08143FB0 @ =gSaveBlock1Ptr - ldr r0, [r4] - ldr r5, _08143FB4 @ =0x000032e4 - adds r0, r5 - movs r6, 0xA6 - lsls r6, 1 - adds r1, r7, 0 - adds r2, r6, 0 - bl memcpy - ldr r0, [r4] - adds r0, r5 - adds r1, r6, 0 - bl CalcCRC16WithTable - ldr r1, [r4] - ldr r3, _08143FB8 @ =0x000032e0 - adds r2, r1, r3 - lsls r0, 16 - lsrs r0, 16 - str r0, [r2] - ldr r0, _08143FBC @ =0x00003434 - adds r2, r1, r0 - adds r1, r5 - ldrh r0, [r1, 0x2] - strh r0, [r2, 0x6] - movs r0, 0x1 - b _08143FC2 - .align 2, 0 -_08143FB0: .4byte gSaveBlock1Ptr -_08143FB4: .4byte 0x000032e4 -_08143FB8: .4byte 0x000032e0 -_08143FBC: .4byte 0x00003434 -_08143FC0: - movs r0, 0 -_08143FC2: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8143F68 - - thumb_func_start sub_8143FC8 -sub_8143FC8: @ 8143FC8 - push {r4,r5,lr} - ldr r5, _08144004 @ =gSaveBlock1Ptr - ldr r0, [r5] - ldr r1, _08144008 @ =0x000032e0 - adds r4, r0, r1 - adds r1, 0x4 - adds r0, r1 - movs r1, 0xA6 - lsls r1, 1 - bl CalcCRC16WithTable - lsls r0, 16 - lsrs r0, 16 - ldr r1, [r4] - cmp r1, r0 - bne _08144010 - ldr r0, [r5] - ldr r1, _0814400C @ =0x000032e4 - adds r0, r1 - bl sub_8144018 - cmp r0, 0 - beq _08144010 - bl sub_8069DFC - cmp r0, 0 - beq _08144010 - movs r0, 0x1 - b _08144012 - .align 2, 0 -_08144004: .4byte gSaveBlock1Ptr -_08144008: .4byte 0x000032e0 -_0814400C: .4byte 0x000032e4 -_08144010: - movs r0, 0 -_08144012: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8143FC8 - - thumb_func_start sub_8144018 -sub_8144018: @ 8144018 - push {lr} - adds r2, r0, 0 - ldrh r0, [r2] - cmp r0, 0 - beq _0814404E - ldrb r1, [r2, 0x8] - lsls r0, r1, 30 - lsrs r0, 30 - cmp r0, 0x2 - bhi _0814404E - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0 - beq _0814403C - cmp r0, 0x40 - beq _0814403C - cmp r0, 0x80 - bne _0814404E -_0814403C: - lsls r0, r1, 26 - lsrs r0, 28 - cmp r0, 0x7 - bhi _0814404E - ldrb r0, [r2, 0x9] - cmp r0, 0x7 - bhi _0814404E - movs r0, 0x1 - b _08144050 -_0814404E: - movs r0, 0 -_08144050: - pop {r1} - bx r1 - thumb_func_end sub_8144018 - thumb_func_start sub_8144054 sub_8144054: @ 8144054 push {lr} diff --git a/include/battle_tower.h b/include/battle_tower.h index 120ab9a99..36d5eb1f7 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -4,5 +4,6 @@ #include "global.h" u16 sub_8164FCC(u8, u8); +void sub_80E7524(u32 *); #endif //GUARD_BATTLE_TOWER_H diff --git a/include/event_data.h b/include/event_data.h index 2e340f073..bced2a88f 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -34,6 +34,8 @@ bool8 FlagGet(u16 id); u16 * GetVarPointer(u16 id); bool32 sub_806E2BC(void); void sub_806E6FC(void); +void sub_806E2D0(void); +void sub_806E370(void); extern u16 gSpecialVar_0x8000; extern u16 gSpecialVar_0x8001; diff --git a/include/global.h b/include/global.h index 456f2c083..df2926d0b 100644 --- a/include/global.h +++ b/include/global.h @@ -264,7 +264,9 @@ struct SaveBlock2 /*0x098*/ struct Time localTimeOffset; /*0x0A0*/ struct Time lastBerryTreeUpdate; /*0x0A8*/ u32 field_A8; - /*0x0AC*/ u8 filler_AC[0x9ec]; + /*0x0AC*/ u8 filler_AC[0x3F4]; + /*0x4A0*/ u32 unk_4A0[0x2F]; + /*0x55c*/ u8 filler_55C[0x53C]; /*0xA98*/ u8 unk_A98[2][16]; /*0xAB8*/ u8 filler_AB8[0x468]; /*0xF20*/ u32 encryptionKey; @@ -591,22 +593,48 @@ struct FameCheckerSaveData #define NUM_EASY_CHAT_EXTRA_PHRASES 33 #define EASY_CHAT_EXTRA_PHRASES_SIZE ((NUM_EASY_CHAT_EXTRA_PHRASES >> 3) + (NUM_EASY_CHAT_EXTRA_PHRASES % 8 ? 1 : 0)) +struct MEventBuffer_3120_Sub +{ + u16 unk_00; + u8 unk_02; + u16 filler_04[220]; +}; + struct MEventBuffer_3120 { u32 crc; - u16 data[222]; + struct MEventBuffer_3120_Sub data; +}; + +struct MEventBuffer_32E0_Sub +{ + u16 unk_00; + u16 unk_02; + u8 filler_04[4]; + u8 unk_08_0:2; + u8 unk_08_2:4; + u8 unk_08_6:2; + u8 unk_09; + u8 filler_0A[322]; }; struct MEventBuffer_32E0 { u32 crc; - u16 data[166]; + struct MEventBuffer_32E0_Sub data; +}; + +struct MEventBuffer_3430_Sub +{ + u8 filler_00[6]; + u16 unk_06; + u8 filler_08[28]; }; struct MEventBuffer_3430 { u32 crc; - u16 data[18]; + struct MEventBuffer_3430_Sub data; }; struct MEventBuffers diff --git a/include/script.h b/include/script.h index 9e26b8a28..6ed2e8f49 100644 --- a/include/script.h +++ b/include/script.h @@ -62,5 +62,6 @@ u8 *GetRamScript(u8 objectId, u8 *script); bool32 sub_80991F8(void); u8 *sub_8099244(void); void sub_80992A0(u8 *script, u16 scriptSize); +bool32 sub_8069DFC(void); #endif // GUARD_SCRIPT_H diff --git a/src/mevent.c b/src/mevent.c index dd2891de0..74a3d1b5f 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -10,6 +10,9 @@ #include "link_rfu_4.h" #include "unk_815c27c.h" #include "util.h" +#include "script.h" +#include "event_data.h" +#include "battle_tower.h" #include "menews_jisan.h" struct MEvent_Str_1 @@ -41,13 +44,17 @@ struct MEventTaskData1 }; void sub_8143910(u8 taskId); -bool32 sub_8143E64(const u16 * src); -u8 sub_815D6B4(u8 *); +bool32 sub_8143E64(const struct MEventBuffer_3120_Sub * src); +void sub_8143E9C(void); +void sub_8143ED0(void); +bool32 sub_8144018(const struct MEventBuffer_32E0_Sub * src); bool32 sub_815D794(u8 *); void sub_81422FC(void); void sub_812B484(void); -void sub_8143E9C(void); -void sub_8143ED0(void); +void sub_814407C(void); +void sub_81440B4(void); +void sub_8144790(void); +u8 sub_815D6B4(u8 *); extern const u8 gUnknown_841DE52[]; extern const u8 gUnknown_841DE53[]; @@ -466,19 +473,19 @@ void sub_8143D24(void) sub_80BDE28(); } -u16 * sub_8143D58(void) +struct MEventBuffer_3120_Sub * sub_8143D58(void) { - return gSaveBlock1Ptr->unk_3120.buffer_000.data; + return &gSaveBlock1Ptr->unk_3120.buffer_000.data; } -u16 * sav1_get_mevent_buffer_1(void) +struct MEventBuffer_32E0_Sub * sav1_get_mevent_buffer_1(void) { - return gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + return &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; } -u16 * sav1_get_mevent_buffer_2(void) +struct MEventBuffer_3430_Sub * sav1_get_mevent_buffer_2(void) { - return gSaveBlock1Ptr->unk_3120.buffer_310.data; + return &gSaveBlock1Ptr->unk_3120.buffer_310.data; } struct MysteryEventStruct * sub_8143D94(void) @@ -496,36 +503,36 @@ void sub_8143DBC(void) sub_8143E9C(); } -bool32 sub_8143DC8(const u16 * src) +bool32 sub_8143DC8(const struct MEventBuffer_3120_Sub * src) { if (!sub_8143E64(src)) return FALSE; sub_8143E9C(); - memcpy(gSaveBlock1Ptr->unk_3120.buffer_000.data, src, sizeof(gSaveBlock1Ptr->unk_3120.buffer_000.data)); - gSaveBlock1Ptr->unk_3120.buffer_000.crc = CalcCRC16WithTable((void *)gSaveBlock1Ptr->unk_3120.buffer_000.data, sizeof(gSaveBlock1Ptr->unk_3120.buffer_000.data)); + gSaveBlock1Ptr->unk_3120.buffer_000.data = *src; + gSaveBlock1Ptr->unk_3120.buffer_000.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_3120.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)); return TRUE; } bool32 sub_8143E1C(void) { - if (CalcCRC16WithTable((void *)gSaveBlock1Ptr->unk_3120.buffer_000.data, sizeof(gSaveBlock1Ptr->unk_3120.buffer_000.data)) != gSaveBlock1Ptr->unk_3120.buffer_000.crc) + if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_3120.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)) != gSaveBlock1Ptr->unk_3120.buffer_000.crc) return FALSE; - if (!sub_8143E64(gSaveBlock1Ptr->unk_3120.buffer_000.data)) + if (!sub_8143E64(&gSaveBlock1Ptr->unk_3120.buffer_000.data)) return FALSE; return TRUE; } -bool32 sub_8143E64(const u16 * data) +bool32 sub_8143E64(const struct MEventBuffer_3120_Sub * data) { - if (data[0] == 0) + if (data->unk_00 == 0) return FALSE; return TRUE; } bool32 sub_8143E78(void) { - u16 * data = gSaveBlock1Ptr->unk_3120.buffer_000.data; - if (*(u8 *)&data[1] == 0) + const struct MEventBuffer_3120_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_000.data; + if (data->unk_02 == 0) return FALSE; return TRUE; } @@ -544,14 +551,66 @@ void sub_8143ED0(void) bool32 sub_8143EF4(const u8 * src) { - const u8 * r5 = (const u8 *)gSaveBlock1Ptr->unk_3120.buffer_000.data; + const u8 * r5 = (const u8 *)&gSaveBlock1Ptr->unk_3120.buffer_000.data; u32 i; if (!sub_8143E1C()) return FALSE; - for (i = 0; i < sizeof(gSaveBlock1Ptr->unk_3120.buffer_000.data); i++) + for (i = 0; i < sizeof(struct MEventBuffer_3120_Sub); i++) { if (r5[i] != src[i]) return FALSE; } return TRUE; } + +void sub_8143F38(void) +{ + sub_814407C(); + sub_81440B4(); + sub_8144790(); + ClearRamScript(); + sub_806E2D0(); + sub_806E370(); + sub_80E7524(gSaveBlock2Ptr->unk_4A0); +} + +bool32 sub_8143F68(const struct MEventBuffer_32E0_Sub * data) +{ + struct MEventBuffer_3430_Sub * r2; + struct MEventBuffer_32E0_Sub * r1; + if (!sub_8144018(data)) + return FALSE; + sub_8143F38(); + memcpy(&gSaveBlock1Ptr->unk_3120.buffer_1c0.data, data, sizeof(struct MEventBuffer_32E0_Sub)); + gSaveBlock1Ptr->unk_3120.buffer_1c0.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_3120.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)); + r2 = &gSaveBlock1Ptr->unk_3120.buffer_310.data; + r1 = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + r2->unk_06 = r1->unk_02; + return TRUE; +} + +bool32 sub_8143FC8(void) +{ + if (gSaveBlock1Ptr->unk_3120.buffer_1c0.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_3120.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub))) + return FALSE; + if (!sub_8144018(&gSaveBlock1Ptr->unk_3120.buffer_1c0.data)) + return FALSE; + if (!sub_8069DFC()) + return FALSE; + return TRUE; +} + +bool32 sub_8144018(const struct MEventBuffer_32E0_Sub * data) +{ + if (data->unk_00 == 0) + return FALSE; + if (data->unk_08_0 > 2) + return FALSE; + if (!(data->unk_08_6 == 0 || data->unk_08_6 == 1 || data->unk_08_6 == 2)) + return FALSE; + if (data->unk_08_2 > 7) + return FALSE; + if (data->unk_09 > 7) + return FALSE; + return TRUE; +} |