diff options
-rw-r--r-- | asm/mevent.s | 328 | ||||
-rw-r--r-- | include/main.h | 3 | ||||
-rw-r--r-- | include/mevent.h | 18 | ||||
-rw-r--r-- | src/mevent.c | 109 |
4 files changed, 127 insertions, 331 deletions
diff --git a/asm/mevent.s b/asm/mevent.s index 19c6248ae..0e02d5b2b 100644 --- a/asm/mevent.s +++ b/asm/mevent.s @@ -5,334 +5,6 @@ .text - thumb_func_start sub_8144254 -sub_8144254: @ 8144254sub_81441F0 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _08144280 @ =gSaveBlock1Ptr - ldr r0, [r6] - ldr r1, _08144284 @ =0x000032e4 - adds r0, r1 - ldrb r4, [r0, 0x9] - adds r0, r5, 0 - bl sub_81441F0 - cmp r0, 0 - beq _081442BE - ldr r0, [r6] - ldr r1, _08144288 @ =0x00003434 - adds r0, r1 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_81441AC - cmp r0, 0 - beq _08144298 - b _081442BE - .align 2, 0 -_08144280: .4byte gSaveBlock1Ptr -_08144284: .4byte 0x000032e4 -_08144288: .4byte 0x00003434 -_0814428C: - ldrh r0, [r5, 0x2] - strh r0, [r1] - ldrh r0, [r5] - strh r0, [r2] - movs r0, 0x1 - b _081442C0 -_08144298: - movs r3, 0 - cmp r3, r4 - bge _081442BE - ldr r0, [r6] - ldr r6, _081442C8 @ =0x0000343c - adds r2, r0, r6 - adds r6, 0xE - adds r1, r0, r6 -_081442A8: - ldrh r0, [r2, 0xE] - cmp r0, 0 - bne _081442B4 - ldrh r0, [r2] - cmp r0, 0 - beq _0814428C -_081442B4: - adds r2, 0x2 - adds r1, 0x2 - adds r3, 0x1 - cmp r3, r4 - blt _081442A8 -_081442BE: - movs r0, 0 -_081442C0: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081442C8: .4byte 0x0000343c - thumb_func_end sub_8144254 - - thumb_func_start sub_81442CC -sub_81442CC: @ 81442CC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0 - str r0, [sp] - ldr r2, _08144328 @ =0x05000019 - mov r0, sp - adds r1, r4, 0 - bl CpuSet - ldr r0, _0814432C @ =0x00000101 - str r0, [r4] - movs r0, 0x1 - strh r0, [r4, 0x4] - str r0, [r4, 0x8] - strh r0, [r4, 0xC] - str r0, [r4, 0x10] - bl sub_8143FC8 - cmp r0, 0 - beq _08144330 - bl sav1_get_mevent_buffer_1 - ldrh r0, [r0] - strh r0, [r4, 0x14] - bl sav1_get_mevent_buffer_2 - adds r1, r4, 0 - adds r1, 0x20 - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - bl sav1_get_mevent_buffer_1 - ldrb r1, [r0, 0x9] - adds r0, r4, 0 - adds r0, 0x44 - strb r1, [r0] - b _08144332 - .align 2, 0 -_08144328: .4byte 0x05000019 -_0814432C: .4byte 0x00000101 -_08144330: - strh r0, [r4, 0x14] -_08144332: - adds r5, r4, 0 - adds r5, 0x4C - ldr r0, _081443BC @ =gSaveBlock2Ptr - mov r8, r0 - adds r6, r4, 0 - adds r6, 0x45 - adds r7, r4, 0 - adds r7, 0x50 - movs r1, 0x5C - adds r1, r4 - mov r9, r1 - movs r2, 0x60 - adds r2, r4 - mov r10, r2 - ldr r0, _081443C0 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r3, _081443C4 @ =0x00003458 - adds r2, r0, r3 - adds r1, r4, 0 - adds r1, 0x16 - movs r3, 0x3 -_0814435C: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _0814435C - mov r0, r8 - ldr r1, [r0] - adds r1, 0xA - adds r0, r5, 0 - bl CopyUnalignedWord - mov r2, r8 - ldr r1, [r2] - adds r0, r6, 0 - bl StringCopy - ldr r0, _081443C0 @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r3, _081443C8 @ =0x00002ca0 - adds r2, r0, r3 - adds r1, r7, 0 - movs r3, 0x5 -_0814438C: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r3, 0x1 - cmp r3, 0 - bge _0814438C - ldr r1, _081443CC @ =RomHeaderGameCode - mov r0, r9 - movs r2, 0x4 - bl memcpy - ldr r0, _081443D0 @ =RomHeaderSoftwareVersion - ldrb r0, [r0] - mov r5, r10 - strb r0, [r5] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081443BC: .4byte gSaveBlock2Ptr -_081443C0: .4byte gSaveBlock1Ptr -_081443C4: .4byte 0x00003458 -_081443C8: .4byte 0x00002ca0 -_081443CC: .4byte RomHeaderGameCode -_081443D0: .4byte RomHeaderSoftwareVersion - thumb_func_end sub_81442CC - - thumb_func_start sub_81443D4 -sub_81443D4: @ 81443D4 - push {lr} - adds r2, r0, 0 - ldr r1, [r2] - ldr r0, _0814440C @ =0x00000101 - cmp r1, r0 - bne _08144410 - ldrh r1, [r2, 0x4] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08144410 - ldr r0, [r2, 0x8] - ands r0, r3 - cmp r0, 0 - beq _08144410 - ldrh r1, [r2, 0xC] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08144410 - ldr r0, [r2, 0x10] - movs r1, 0xF - ands r0, r1 - cmp r0, 0 - beq _08144410 - movs r0, 0x1 - b _08144412 - .align 2, 0 -_0814440C: .4byte 0x00000101 -_08144410: - movs r0, 0 -_08144412: - pop {r1} - bx r1 - thumb_func_end sub_81443D4 - - thumb_func_start sub_8144418 -sub_8144418: @ 8144418 - push {lr} - ldrh r1, [r1, 0x14] - cmp r1, 0 - bne _08144424 - movs r0, 0 - b _08144430 -_08144424: - ldrh r0, [r0] - cmp r0, r1 - beq _0814442E - movs r0, 0x2 - b _08144430 -_0814442E: - movs r0, 0x1 -_08144430: - pop {r1} - bx r1 - thumb_func_end sub_8144418 - - thumb_func_start sub_8144434 -sub_8144434: @ 8144434 - push {r4-r6,lr} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r4, 0 - adds r5, 0x20 - adds r4, 0x44 - ldrb r1, [r4] - adds r0, r5, 0 - bl sub_8144184 - ldrb r2, [r4] - subs r4, r2, r0 - cmp r4, 0 - bne _08144454 - movs r0, 0x1 - b _0814446E -_08144454: - adds r0, r5, 0 - adds r1, r6, 0 - bl sub_81441AC - cmp r0, 0 - beq _08144464 - movs r0, 0x3 - b _0814446E -_08144464: - cmp r4, 0x1 - beq _0814446C - movs r0, 0x2 - b _0814446E -_0814446C: - movs r0, 0x4 -_0814446E: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8144434 - - thumb_func_start sub_8144474 -sub_8144474: @ 8144474 - push {r4,lr} - movs r3, 0 - adds r2, r0, 0 - adds r2, 0x16 -_0814447C: - ldrh r0, [r2] - ldrh r4, [r1] - cmp r0, r4 - beq _08144488 - movs r0, 0 - b _08144494 -_08144488: - adds r1, 0x2 - adds r2, 0x2 - adds r3, 0x1 - cmp r3, 0x3 - ble _0814447C - movs r0, 0x1 -_08144494: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8144474 - - thumb_func_start sub_814449C -sub_814449C: @ 814449C - push {lr} - adds r2, r0, 0 - adds r2, 0x20 - adds r0, 0x44 - ldrb r1, [r0] - adds r0, r2, 0 - bl sub_8144184 - pop {r1} - bx r1 - thumb_func_end sub_814449C - thumb_func_start sub_81444B0 sub_81444B0: @ 81444B0 push {lr} diff --git a/include/main.h b/include/main.h index 0fe138d1f..adbf1fb5d 100644 --- a/include/main.h +++ b/include/main.h @@ -66,4 +66,7 @@ void DoSoftReset(void); void ClearPokemonCrySongs(void); void RestoreSerialTimer3IntrHandlers(void); +extern const char RomHeaderGameCode[4]; +extern const char RomHeaderSoftwareVersion; + #endif // GUARD_MAIN_H diff --git a/include/mevent.h b/include/mevent.h index 7df669da3..ae301263f 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -3,6 +3,24 @@ #include "global.h" +struct MEventStruct_Unk1442CC +{ + u32 unk_00; + u16 unk_04; + u32 unk_08; + u16 unk_0C; + u32 unk_10; + u16 unk_14; + u16 unk_16[4]; + struct MEventBuffer_3430_Sub unk_20; + u8 unk_44; + u8 unk_45[7]; + u8 unk_4C[4]; + u16 unk_50[6]; + u8 unk_5C[4]; + u8 unk_60; +}; + struct MysteryEventStruct * sub_8143D94(void); bool32 sub_8143E1C(void); diff --git a/src/mevent.c b/src/mevent.c index 5d45a0243..d24219f49 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -14,7 +14,10 @@ #include "script.h" #include "event_data.h" #include "battle_tower.h" +#include "new_game.h" +#include "string_util.h" #include "menews_jisan.h" +#include "mevent.h" struct MEvent_Str_1 { @@ -704,13 +707,113 @@ bool32 sub_81441F0(const u16 * data) return TRUE; } -bool32 sub_8144218(void) +s32 sub_8144218(void) { struct MEventBuffer_32E0_Sub * data; if (!sub_8143FC8()) - return FALSE; + return 0; data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; if (data->unk_08_0 != 1) - return FALSE; + return 0; return sub_8144184(&gSaveBlock1Ptr->unk_3120.buffer_310.data, data->unk_09); } + +bool32 sub_8144254(const u16 * data) +{ + struct MEventBuffer_32E0_Sub * buffer = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + s32 size = buffer->unk_09; + s32 i; + if (!sub_81441F0(data)) + return FALSE; + if (sub_81441AC(&gSaveBlock1Ptr->unk_3120.buffer_310.data, data, size)) + return FALSE; + for (i = 0; i < size; i++) + { + if (gSaveBlock1Ptr->unk_3120.buffer_310.data.unk_08[1][i] == 0 && gSaveBlock1Ptr->unk_3120.buffer_310.data.unk_08[0][i] == 0) + { + gSaveBlock1Ptr->unk_3120.buffer_310.data.unk_08[1][i] = data[1]; + gSaveBlock1Ptr->unk_3120.buffer_310.data.unk_08[0][i] = data[0]; + return TRUE; + } + } + return FALSE; +} + +void sub_81442CC(struct MEventStruct_Unk1442CC * data) +{ + s32 i; + CpuFill32(0, data, sizeof(struct MEventStruct_Unk1442CC)); + data->unk_00 = 0x101; + data->unk_04 = 1; + data->unk_08 = 1; + data->unk_0C = 1; + data->unk_10 = 1; + if (sub_8143FC8()) + { + data->unk_14 = sav1_get_mevent_buffer_1()->unk_00; + data->unk_20 = *sav1_get_mevent_buffer_2(); + data->unk_44 = sav1_get_mevent_buffer_1()->unk_09; + } + else + data->unk_14 = 0; + for (i = 0; i < 4; i++) + data->unk_16[i] = gSaveBlock1Ptr->unk_3120.unk_338[i]; + CopyUnalignedWord(data->unk_4C, gSaveBlock2Ptr->playerTrainerId); + StringCopy(data->unk_45, gSaveBlock2Ptr->playerName); + for (i = 0; i < 6; i++) + data->unk_50[i] = gSaveBlock1Ptr->unk2CA0[i]; + memcpy(data->unk_5C, RomHeaderGameCode, 4); + data->unk_60 = RomHeaderSoftwareVersion; +} + +bool32 sub_81443D4(const struct MEventStruct_Unk1442CC * data) +{ + if (data->unk_00 != 0x101) + return FALSE; + if (!(data->unk_04 & 1)) + return FALSE; + if (!(data->unk_08 & 1)) + return FALSE; + if (!(data->unk_0C & 1)) + return FALSE; + if (!(data->unk_10 & 0x0F)) + return FALSE; + return TRUE; +} + +u32 sub_8144418(const u16 * a0, const struct MEventStruct_Unk1442CC * a1) +{ + if (a1->unk_14 == 0) + return 0; + if (*a0 == a1->unk_14) + return 1; + return 2; +} + +u32 sub_8144434(const u16 * a0, const struct MEventStruct_Unk1442CC * a1) +{ + s32 r4 = a1->unk_44 - sub_8144184(&a1->unk_20, a1->unk_44); + if (r4 == 0) + return 1; + if (sub_81441AC(&a1->unk_20, a0, a1->unk_44)) + return 3; + if (r4 == 1) + return 4; + return 2; +} + +bool32 sub_8144474(const struct MEventStruct_Unk1442CC * a0, const u16 * a1) +{ + s32 i; + for (i = 0; i < 4; i++) + { + if (a0->unk_16[i] != a1[i]) + return FALSE; + } + return TRUE; +} + +s32 sub_814449C(const struct MEventStruct_Unk1442CC * a0) +{ + return sub_8144184(&a0->unk_20, a0->unk_44); +} |