summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-11-29 18:48:06 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2018-11-29 18:48:06 -0500
commitd68f434a527d185e2968d8da418fa74110090c79 (patch)
treeb1864f3278dfe168b14f47b1ca396a765f091a9d
parent51622adaec9fd47a8f1be2b61b1f4521cc9d47da (diff)
through sub_814449C
-rw-r--r--asm/mevent.s328
-rw-r--r--include/main.h3
-rw-r--r--include/mevent.h18
-rw-r--r--src/mevent.c109
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);
+}