From 21a301b77d01851a9d019b594ff11c547cc6514f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 28 Nov 2018 22:15:11 -0500 Subject: through sub_81436EC --- src/mevent.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/mevent.c (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c new file mode 100644 index 000000000..8b710e3f3 --- /dev/null +++ b/src/mevent.c @@ -0,0 +1,75 @@ +#include "global.h" +#include "main.h" +#include "decompress.h" +#include "link.h" +#include "unk_815c27c.h" + +struct MEvent_Str_1 +{ + u16 unk_000; + u32 unk_004; + u32 unk_008; +}; + +void sub_81435DC(struct MEvent_Str_1 *a0, u32 a1, u32 a2) +{ + vu16 imeBak = REG_IME; + REG_IME = 0; + gIntrTable[1] = sub_815C6D4; + gIntrTable[2] = sub_815C6C4; + sub_815C8C8(); + sub_815C960(); + REG_IE |= INTR_FLAG_VCOUNT; + REG_IME = imeBak; + a0->unk_000 = 0; + a0->unk_004 = a1; + a0->unk_008 = a2; +} + +void sub_8143644(void) +{ + vu16 imeBak = REG_IME; + REG_IME = 0; + sub_815C960(); + sub_815C91C(); + RestoreSerialTimer3IntrHandlers(); + REG_IME = imeBak; +} + +u8 sub_8143674(struct MEvent_Str_1 *a0) +{ + u8 resp = 0; + a0->unk_000 = sub_815C498(1, a0->unk_004, a0->unk_008, 0); + if ((a0->unk_000 & 0x13) == 0x10) + resp = 1; + if (a0->unk_000 & 8) + resp = 2; + if (a0->unk_000 & 4) + resp = 3; + gUnknown_3003F84 = 0; + return resp; +} + +void sub_81436BC(void) +{ + memset(gDecompressionBuffer, 0, 0x2000); + gUnknown_202271A = 0x5502; + sub_8009804(); + SetSuppressLinkErrorMessage(TRUE); +} + +bool8 sub_81436EC(void) +{ + vu16 imeBak = REG_IME; + u16 data[4]; + REG_IME = 0; + *(u64 *)data = gUnknown_3003FB4; + REG_IME = imeBak; + if ( data[0] == 0xB9A0 + && data[1] == 0xCCD0 + && data[2] == 0xFFFF + && data[3] == 0xFFFF + ) + return TRUE; + return FALSE; +} -- cgit v1.2.3 From 2943997dcbab30619e0410b294dc109fd3e08e83 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 09:54:26 -0500 Subject: through sub_81438F0 --- src/mevent.c | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index 8b710e3f3..27abf65c3 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -1,5 +1,9 @@ #include "global.h" +#include "constants/songs.h" +#include "malloc.h" +#include "sound.h" #include "main.h" +#include "task.h" #include "decompress.h" #include "link.h" #include "unk_815c27c.h" @@ -11,6 +15,29 @@ struct MEvent_Str_1 u32 unk_008; }; +struct MEvent_Str_2 +{ + u8 fill_00[0x40]; +}; + +struct MEventTaskData1 +{ + u16 t00; + u16 t02; + u16 t04; + u16 t06; + u8 t08; + u8 t09; + u8 t0A; + u8 t0B; + u8 t0C; + u8 t0D; + u8 t0E; + struct MEvent_Str_2 *t10; +}; + +void sub_8143910(u8 taskId); + void sub_81435DC(struct MEvent_Str_1 *a0, u32 a1, u32 a2) { vu16 imeBak = REG_IME; @@ -73,3 +100,122 @@ bool8 sub_81436EC(void) return TRUE; return FALSE; } + +bool8 sub_814374C(void) +{ + if (sub_800AA48() && GetLinkPlayerCount_2() == 2) + return TRUE; + return FALSE; +} + +u8 sub_8143770(u8 * r4, u16 * r5) +{ + if ((*r4 == 3 || *r4 == 4 || *r4 == 5) && HasLinkErrorOccurred()) + { + *r4 = 0; + return 3; + } + switch (*r4) + { + case 0: + if (sub_800AA48() && GetLinkPlayerCount_2() > 1) + { + *r4 = 1; + ; + } + else if (gMain.newKeys & B_BUTTON) + { + *r4 = 0; + return 1; + } + break; + case 1: + if (++(*r5) > 5) + { + *r5 = 0; + *r4 = 2; + } + break; + case 2: + if (GetLinkPlayerCount_2() == 2) + { + PlaySE(SE_TOY_G); + sub_800A5BC(); + *r5 = 0; + *r4 = 3; + } + else if (gMain.newKeys & B_BUTTON) + { + *r4 = 0; + return 1; + } + break; + case 3: + if (++(*r5) > 30) + { + *r4 = 0; + return 5; + } + else if (IsLinkConnectionEstablished()) + { + if (gUnknown_3003F64) + { + if (IsLinkPlayerDataExchangeComplete()) + { + *r4 = 0; + return 2; + } + else + *r4 = 4; + } + else + *r4 = 3; + } + break; + case 4: + sub_800AA80(0); + *r4 = 5; + break; + case 5: + if (!gUnknown_3003F64) + { + *r4 = 0; + return 4; + } + break; + } + return 0; +} + +void sub_81438A0(void) +{ + u8 taskId = CreateTask(sub_8143910, 0); + struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data; + data->t08 = 0; + data->t09 = 0; + data->t0A = 0; + data->t0B = 0; + data->t0C = 0; + data->t0D = 0; + data->t00 = 0; + data->t02 = 0; + data->t04 = 0; + data->t06 = 0; + data->t0E = 0; + data->t10 = AllocZeroed(sizeof(struct MEvent_Str_2)); +} + +void sub_81438E8(u16 *a0) +{ + *a0 = 0; +} + +bool8 sub_81438F0(u16 * a0, u16 a1) +{ + if (++(*a0) > a1) + { + *a0 = 0; + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From 746006911096730ea6d5f14bfff5957ef9b5bc2c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 11:35:31 -0500 Subject: sub_8143910 --- src/mevent.c | 254 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 244 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index 27abf65c3..b2d8ba3f4 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -6,13 +6,14 @@ #include "task.h" #include "decompress.h" #include "link.h" +#include "link_rfu_4.h" #include "unk_815c27c.h" struct MEvent_Str_1 { u16 unk_000; - u32 unk_004; - u32 unk_008; + size_t unk_004; + const void * unk_008; }; struct MEvent_Str_2 @@ -37,8 +38,31 @@ struct MEventTaskData1 }; void sub_8143910(u8 taskId); +void sub_8142504(const u8 *str); +u8 sub_815D6B4(u8 *); +bool32 sub_815D794(u8 *); +void sub_812B484(void); +void sub_81422FC(void); -void sub_81435DC(struct MEvent_Str_1 *a0, u32 a1, u32 a2) +extern const u8 gUnknown_841DE52[]; +extern const u8 gUnknown_841DE53[]; +extern const u8 gUnknown_841DE54[]; +extern const u8 gUnknown_841DE7C[]; +extern const u8 gUnknown_841DE7D[]; +extern const u8 gUnknown_841DE95[]; +extern const u8 gUnknown_841DE96[]; +extern const u8 gUnknown_841DE97[]; +extern const u8 gUnknown_841DE98[]; +extern const u8 gUnknown_841DE99[]; +extern const u8 gUnknown_841DE9A[]; +extern const u8 gUnknown_841DE9B[]; +extern const u8 gUnknown_841DE9C[]; +extern const u8 gUnknownSerialData_Start[]; +extern const u8 gUnknownSerialData_End[]; + +struct MEvent_Str_1 gUnknown_3005ED0; + +void sub_81435DC(struct MEvent_Str_1 *a0, size_t a1, const void * a2) { vu16 imeBak = REG_IME; REG_IME = 0; @@ -53,7 +77,7 @@ void sub_81435DC(struct MEvent_Str_1 *a0, u32 a1, u32 a2) a0->unk_008 = a2; } -void sub_8143644(void) +void sub_8143644(struct MEvent_Str_1 *unused) { vu16 imeBak = REG_IME; REG_IME = 0; @@ -85,7 +109,7 @@ void sub_81436BC(void) SetSuppressLinkErrorMessage(TRUE); } -bool8 sub_81436EC(void) +bool32 sub_81436EC(void) { vu16 imeBak = REG_IME; u16 data[4]; @@ -101,14 +125,14 @@ bool8 sub_81436EC(void) return FALSE; } -bool8 sub_814374C(void) +bool32 sub_814374C(void) { if (sub_800AA48() && GetLinkPlayerCount_2() == 2) return TRUE; return FALSE; } -u8 sub_8143770(u8 * r4, u16 * r5) +u32 sub_8143770(u8 * r4, u16 * r5) { if ((*r4 == 3 || *r4 == 4 || *r4 == 5) && HasLinkErrorOccurred()) { @@ -123,7 +147,7 @@ u8 sub_8143770(u8 * r4, u16 * r5) *r4 = 1; ; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { *r4 = 0; return 1; @@ -144,7 +168,7 @@ u8 sub_8143770(u8 * r4, u16 * r5) *r5 = 0; *r4 = 3; } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { *r4 = 0; return 1; @@ -210,7 +234,7 @@ void sub_81438E8(u16 *a0) *a0 = 0; } -bool8 sub_81438F0(u16 * a0, u16 a1) +bool32 sub_81438F0(u16 * a0, u16 a1) { if (++(*a0) > a1) { @@ -219,3 +243,213 @@ bool8 sub_81438F0(u16 * a0, u16 a1) } return FALSE; } + +void sub_8143910(u8 taskId) +{ + struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data; + switch (data->t08) + { + case 0: + if (mevent_0814257C(&data->t09, gUnknown_841DE52)) + data->t08 = 1; + break; + case 1: + sub_81436BC(); + sub_81438E8(&data->t00); + data->t08 = 2; + break; + case 2: + if (sub_81438F0(&data->t00, 10)) + data->t08 = 3; + break; + case 3: + if (!sub_814374C()) + { + sub_80098B8(); + data->t08 = 4; + } + else + data->t08 = 13; + break; + case 4: + if (mevent_0814257C(&data->t09, gUnknown_841DE53)) + { + sub_8142504(gUnknown_841DE54); + sub_81438E8(&data->t00); + data->t08 = 5; + } + break; + case 5: + if (sub_81438F0(&data->t00, 90)) + { + sub_81436BC(); + data->t08 = 6; + } + else if (JOY_NEW(B_BUTTON)) + { + sub_81438E8(&data->t00); + PlaySE(SE_SELECT); + data->t08 = 23; + } + break; + case 6: + if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_80098B8(); + sub_81438E8(&data->t00); + data->t08 = 23; + } + else if (GetLinkPlayerCount_2() > 1) + { + sub_81438E8(&data->t00); + sub_80098B8(); + data->t08 = 7; + } + else if (sub_81436EC()) + { + PlaySE(SE_SELECT); + sub_80098B8(); + sub_81438E8(&data->t00); + data->t08 = 8; + } + else if (sub_81438F0(&data->t00, 10)) + { + sub_80098B8(); + sub_81436BC(); + sub_81438E8(&data->t00); + } + break; + case 7: + if (mevent_0814257C(&data->t09, gUnknown_841DE7C)) + data->t08 = 4; + break; + case 8: + sub_8142504(gUnknown_841DE95); + sub_81435DC(&gUnknown_3005ED0, gUnknownSerialData_End - gUnknownSerialData_Start, gUnknownSerialData_Start); + data->t08 = 9; + break; + case 9: + data->t0E = sub_8143674(&gUnknown_3005ED0); + if (data->t0E != 0) + data->t08 = 10; + break; + case 10: + sub_8143644(&gUnknown_3005ED0); + if (data->t0E == 3) + data->t08 = 20; + else if (data->t0E == 1) + { + sub_81438E8(&data->t00); + sub_8142504(gUnknown_841DE9B); + data->t08 = 11; + } + else + data->t08 = 0; + break; + case 11: + if (sub_81438F0(&data->t00, 840)) + data->t08 = 12; + break; + case 12: + sub_81436BC(); + sub_8142504(gUnknown_841DE98); + data->t08 = 13; + break; + case 13: + switch (sub_8143770(&data->t09, &data->t00)) + { + case 0: + break; + case 2: + sub_8142504(gUnknown_841DE95); + data->t08 = 14; + break; + case 1: + PlaySE(SE_SELECT); + sub_80098B8(); + data->t08 = 23; + break; + case 5: + sub_80098B8(); + data->t08 = 21; + break; + case 3: + case 4: + sub_80098B8(); + data->t08 = 20; + break; + } + break; + case 14: + if (HasLinkErrorOccurred()) + { + sub_80098B8(); + data->t08 = 20; + } + else if (GetBlockReceivedStatus()) + { + ResetBlockReceivedFlags(); + data->t08 = 15; + } + break; + case 15: + data->t0E = sub_815D6B4(gDecompressionBuffer); + sub_800AA80(data->t0E); + data->t08 = 16; + break; + case 16: + if (!gUnknown_3003F64) + { + if (data->t0E == 1) + data->t08 = 17; + else + data->t08 = 20; + } + break; + case 17: + if (sub_815D794(gDecompressionBuffer)) + { + sub_8142504(gUnknown_841DE99); + sub_81438E8(&data->t00); + data->t08 = 18; + } + else + data->t08 = 22; + break; + case 18: + if (sub_81438F0(&data->t00, 120)) + { + sub_8142504(gUnknown_841DE9A); + PlayFanfare(258); + data->t08 = 19; + } + break; + case 19: + if (IsFanfareTaskInactive() &&JOY_NEW(A_BUTTON | B_BUTTON)) + data->t08 = 26; + break; + case 23: + if (mevent_0814257C(&data->t09, gUnknown_841DE7D)) + data->t08 = 26; + break; + case 20: + if (mevent_0814257C(&data->t09, gUnknown_841DE96)) + data->t08 = 0; + break; + case 21: + if (mevent_0814257C(&data->t09, gUnknown_841DE97)) + data->t08 = 0; + break; + case 22: + if (mevent_0814257C(&data->t09, gUnknown_841DE9C)) + data->t08 = 0; + break; + case 26: + sub_812B484(); + Free(data->t10); + DestroyTask(taskId); + SetMainCallback2(sub_81422FC); + break; + } +} -- cgit v1.2.3 From cec95ebfb41f8381feeb87ff889ebc1d89827ec6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 14:02:49 -0500 Subject: through sub_8143DBC --- src/mevent.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index b2d8ba3f4..c2a05f3c6 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -2,6 +2,7 @@ #include "constants/songs.h" #include "malloc.h" #include "sound.h" +#include "easy_chat.h" #include "main.h" #include "task.h" #include "decompress.h" @@ -38,11 +39,12 @@ struct MEventTaskData1 }; void sub_8143910(u8 taskId); -void sub_8142504(const u8 *str); u8 sub_815D6B4(u8 *); bool32 sub_815D794(u8 *); -void sub_812B484(void); void sub_81422FC(void); +void sub_812B484(void); +void sub_8143E9C(void); +void sub_8143ED0(void); extern const u8 gUnknown_841DE52[]; extern const u8 gUnknown_841DE53[]; @@ -453,3 +455,40 @@ void sub_8143910(u8 taskId) break; } } + +void sub_8143D24(void) +{ + CpuFill32(0, &gSaveBlock1Ptr->unk_3120, sizeof(gSaveBlock1Ptr->unk_3120)); + sub_8143ED0(); + sub_80BDE28(); +} + +u16 * sub_8143D58(void) +{ + return gSaveBlock1Ptr->unk_3120.buffer_000.data; +} + +u16 * sav1_get_mevent_buffer_1(void) +{ + return gSaveBlock1Ptr->unk_3120.buffer_1c0.data; +} + +u16 * sav1_get_mevent_buffer_2(void) +{ + return gSaveBlock1Ptr->unk_3120.buffer_310.data; +} + +struct MysteryEventStruct * sub_8143D94(void) +{ + return &gSaveBlock1Ptr->unk_3120.unk_340; +} + +u16 * sub_8143DA8(void) +{ + return gSaveBlock1Ptr->unk_3120.unk_338; +} + +void sub_8143DBC(void) +{ + sub_8143E9C(); +} -- cgit v1.2.3 From dfb6bcb6acdebfb3b7fe024148889361e9309dc4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 14:35:39 -0500 Subject: through sub_8143EF4 --- src/mevent.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index c2a05f3c6..dd2891de0 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -9,6 +9,8 @@ #include "link.h" #include "link_rfu_4.h" #include "unk_815c27c.h" +#include "util.h" +#include "menews_jisan.h" struct MEvent_Str_1 { @@ -39,6 +41,7 @@ struct MEventTaskData1 }; void sub_8143910(u8 taskId); +bool32 sub_8143E64(const u16 * src); u8 sub_815D6B4(u8 *); bool32 sub_815D794(u8 *); void sub_81422FC(void); @@ -492,3 +495,63 @@ void sub_8143DBC(void) { sub_8143E9C(); } + +bool32 sub_8143DC8(const u16 * 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)); + 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) + return FALSE; + if (!sub_8143E64(gSaveBlock1Ptr->unk_3120.buffer_000.data)) + return FALSE; + return TRUE; +} + +bool32 sub_8143E64(const u16 * data) +{ + if (data[0] == 0) + return FALSE; + return TRUE; +} + +bool32 sub_8143E78(void) +{ + u16 * data = gSaveBlock1Ptr->unk_3120.buffer_000.data; + if (*(u8 *)&data[1] == 0) + return FALSE; + return TRUE; +} + +void sub_8143E9C(void) +{ + CpuFill32(0, sub_8143D58(), sizeof(gSaveBlock1Ptr->unk_3120.buffer_000.data)); + gSaveBlock1Ptr->unk_3120.buffer_000.crc = 0; +} + +void sub_8143ED0(void) +{ + CpuFill32(0, sub_8143D94(), sizeof(struct MysteryEventStruct)); + sub_8146C88(); +} + +bool32 sub_8143EF4(const u8 * src) +{ + 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++) + { + if (r5[i] != src[i]) + return FALSE; + } + return TRUE; +} -- cgit v1.2.3 From 159f242e32532f14496abaa8d2f96e9c3d30d720 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 15:33:58 -0500 Subject: through sub_8144018 --- src/mevent.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 80 insertions(+), 21 deletions(-) (limited to 'src') 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; +} -- cgit v1.2.3 From 9460cbfe6cfbbd679ea6febf112ba6e46679ac02 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 15:37:39 -0500 Subject: through sub_814407C --- src/mevent.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index 74a3d1b5f..f61f7b7a2 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -614,3 +614,17 @@ bool32 sub_8144018(const struct MEventBuffer_32E0_Sub * data) return FALSE; return TRUE; } + +bool32 sub_8144054(void) +{ + const struct MEventBuffer_32E0_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + if (data->unk_08_6 == 0) + return FALSE; + return TRUE; +} + +void sub_814407C(void) +{ + CpuFill32(0, &gSaveBlock1Ptr->unk_3120.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)); + gSaveBlock1Ptr->unk_3120.buffer_1c0.crc = 0; +} -- cgit v1.2.3 From 51622adaec9fd47a8f1be2b61b1f4521cc9d47da Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 18:15:22 -0500 Subject: through sub_8144218 --- src/mevent.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index f61f7b7a2..5d45a0243 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -1,5 +1,6 @@ #include "global.h" #include "constants/songs.h" +#include "constants/species.h" #include "malloc.h" #include "sound.h" #include "easy_chat.h" @@ -72,6 +73,8 @@ extern const u8 gUnknown_841DE9C[]; extern const u8 gUnknownSerialData_Start[]; extern const u8 gUnknownSerialData_End[]; +extern const u16 gUnknown_8466F00[]; + struct MEvent_Str_1 gUnknown_3005ED0; void sub_81435DC(struct MEvent_Str_1 *a0, size_t a1, const void * a2) @@ -628,3 +631,86 @@ void sub_814407C(void) CpuFill32(0, &gSaveBlock1Ptr->unk_3120.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)); gSaveBlock1Ptr->unk_3120.buffer_1c0.crc = 0; } + +void sub_81440B4(void) +{ + CpuFill32(0, sav1_get_mevent_buffer_2(), 18 * sizeof(u16)); + gSaveBlock1Ptr->unk_3120.buffer_310.crc = 0; +} + +u16 sub_81440E8(void) +{ + if (sub_8143FC8()) + return gSaveBlock1Ptr->unk_3120.buffer_1c0.data.unk_00; + return 0; +} + +void sub_814410C(struct MEventBuffer_32E0_Sub * buffer) +{ + if (buffer->unk_08_6 == 1) + buffer->unk_08_6 = 0; +} + +bool32 sub_8144124(u16 a0) +{ + if (a0 >= 1000 && a0 < 1020) + return TRUE; + return FALSE; +} + +bool32 sub_8144144(void) +{ + u16 value = sub_81440E8(); + if (!sub_8144124(value)) + return FALSE; + if (FlagGet(gUnknown_8466F00[value - 1000]) == TRUE) + return FALSE; + return TRUE; +} + +s32 sub_8144184(const struct MEventBuffer_3430_Sub * data, s32 size) +{ + s32 r3 = 0; + s32 i; + for (i = 0; i < size; i++) + { + if (data->unk_08[1][i] && data->unk_08[0][i]) + r3++; + } + return r3; +} + +bool32 sub_81441AC(const struct MEventBuffer_3430_Sub * data1, const u16 * data2, s32 size) +{ + s32 i; + for (i = 0; i < size; i++) + { + if (data1->unk_08[1][i] == data2[1]) + return TRUE; + if (data1->unk_08[0][i] == data2[0]) + return TRUE; + } + return FALSE; +} + +bool32 sub_81441F0(const u16 * data) +{ + if (data[1] == 0) + return FALSE; + if (data[0] == 0) + return FALSE; + if (data[0] >= NUM_SPECIES) + return FALSE; + return TRUE; +} + +bool32 sub_8144218(void) +{ + struct MEventBuffer_32E0_Sub * data; + if (!sub_8143FC8()) + return FALSE; + data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + if (data->unk_08_0 != 1) + return FALSE; + return sub_8144184(&gSaveBlock1Ptr->unk_3120.buffer_310.data, data->unk_09); +} -- cgit v1.2.3 From d68f434a527d185e2968d8da418fa74110090c79 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 18:48:06 -0500 Subject: through sub_814449C --- src/mevent.c | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 3 deletions(-) (limited to 'src') 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); +} -- cgit v1.2.3 From 939ae833c3364d7ea7543c4db56df5c90b4e9d8d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 19:17:38 -0500 Subject: through sub_81445C0 --- src/mevent.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index d24219f49..bf2d2c1a5 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -76,7 +76,28 @@ extern const u8 gUnknown_841DE9C[]; extern const u8 gUnknownSerialData_Start[]; extern const u8 gUnknownSerialData_End[]; -extern const u16 gUnknown_8466F00[]; +const u16 gUnknown_8466F00[] = { + 0x02a7, + 0x02a8, + 0x02a9, + 0x02aa, + 0x02ab, + 0x02ac, + 0x02ad, + 0x02ae, + 0x02af, + 0x02b0, + 0x02b1, + 0x02b2, + 0x02b3, + 0x02b4, + 0x02b5, + 0x02b6, + 0x02b7, + 0x02b8, + 0x02b9, + 0x02ba +}; struct MEvent_Str_1 gUnknown_3005ED0; @@ -817,3 +838,115 @@ 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) + { + case 0: + return a0->unk_20.unk_00; + case 1: + return a0->unk_20.unk_02; + case 2: + return a0->unk_20.unk_04; + case 3: + return sub_814449C(a0); + 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); + return 0; + } +} + +void sub_814451C(u32 command) +{ + struct MEventBuffer_32E0_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + if (data->unk_08_0 == 2) + { + u16 * dest = NULL; + switch (command) + { + case 0: + dest = &gSaveBlock1Ptr->unk_3120.buffer_310.data.unk_00; + break; + case 1: + dest = &gSaveBlock1Ptr->unk_3120.buffer_310.data.unk_02; + break; + case 2: + dest = &gSaveBlock1Ptr->unk_3120.buffer_310.data.unk_04; + break; + case 3: + break; + case 4: + break; + } + 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); + } + else if (++(*dest) > 999) + { + *dest = 999; + } + } +} + +u16 sub_81445C0(u32 command) +{ + switch (command) + { + case 0: + { + struct MEventBuffer_32E0_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + if (data->unk_08_0 == 2) + { + struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->unk_3120.buffer_310.data; + return buffer->unk_00; + } + break; + } + case 1: + { + struct MEventBuffer_32E0_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + if (data->unk_08_0 == 2) + { + struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->unk_3120.buffer_310.data; + return buffer->unk_02; + } + break; + } + case 2: + { + struct MEventBuffer_32E0_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + if (data->unk_08_0 == 2) + { + struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->unk_3120.buffer_310.data; + return buffer->unk_04; + } + break; + } + case 3: + { + struct MEventBuffer_32E0_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + if (data->unk_08_0 == 1) + return sub_8144218(); + break; + } + case 4: + { + struct MEventBuffer_32E0_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data; + if (data->unk_08_0 == 1) + return data->unk_09; + break; + } + } + AGBAssert(gUnknown_8466F28, 913, gUnknown_8466F5C, 1); + return 0; +} -- cgit v1.2.3 From 9200df7516151a84d0fcdda84259179eafafcabb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Nov 2018 20:56:53 -0500 Subject: Finish decomp of mevent.s --- src/mevent.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 86 insertions(+), 9 deletions(-) (limited to 'src') 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); +} -- cgit v1.2.3 From 294b150d70385a117e1324fd1e13bab25bfaabc9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 30 Nov 2018 08:47:58 -0500 Subject: Set up to decomp mevent_server --- src/mevent.c | 12 ------------ src/mevent_server.c | 2 ++ 2 files changed, 2 insertions(+), 12 deletions(-) create mode 100644 src/mevent_server.c (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index a65433999..c81712de6 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -19,18 +19,6 @@ #include "menews_jisan.h" #include "mevent.h" -struct MEvent_Str_1 -{ - u16 unk_000; - size_t unk_004; - const void * unk_008; -}; - -struct MEvent_Str_2 -{ - u8 fill_00[0x40]; -}; - struct MEventTaskData1 { u16 t00; diff --git a/src/mevent_server.c b/src/mevent_server.c new file mode 100644 index 000000000..529b4ba77 --- /dev/null +++ b/src/mevent_server.c @@ -0,0 +1,2 @@ +#include "global.h" +#include "mevent.h" -- cgit v1.2.3 From 80dbdacaced2e4522f29e6974474103926461161 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 30 Nov 2018 10:27:25 -0500 Subject: through sub_814490C --- src/mevent.c | 4 +- src/mevent_server.c | 178 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index c81712de6..b04ac5462 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -8,7 +8,7 @@ #include "task.h" #include "decompress.h" #include "link.h" -#include "link_rfu_4.h" +#include "link_rfu.h" #include "unk_815c27c.h" #include "util.h" #include "script.h" @@ -134,7 +134,7 @@ u8 sub_8143674(struct MEvent_Str_1 *a0) void sub_81436BC(void) { memset(gDecompressionBuffer, 0, 0x2000); - gUnknown_202271A = 0x5502; + gLinkType = 0x5502; sub_8009804(); SetSuppressLinkErrorMessage(TRUE); } diff --git a/src/mevent_server.c b/src/mevent_server.c index 529b4ba77..0c94980ff 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -1,2 +1,180 @@ #include "global.h" +#include "malloc.h" +#include "util.h" +#include "link.h" +#include "link_rfu.h" #include "mevent.h" + +extern u16 gBlockRecvBuffer[][128]; + +struct mevent_srv_sub +{ + s32 unk_00; + u8 unk_04; + u8 unk_05; + u16 unk_06; + u16 unk_08; + u16 unk_0A; + u16 unk_0C; + u16 unk_0E; + u16 unk_10; + u16 unk_12; + u16 unk_14; + void * unk_18; + u32 unk_1C; + u32 (*unk_20)(struct mevent_srv_sub *); + u32 (*unk_24)(struct mevent_srv_sub *); +}; + +struct mevent_srv_ish +{ + u32 unk_00; + u32 unk_04; + u32 unk_08; + u32 unk_0C; + u32 unk_10; + void * unk_14; + void * unk_18; + void * unk_1C; + void * unk_20; + struct mevent_srv_sub unk_24; +}; + +EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; + +u32 sub_814490C(struct mevent_srv_sub *); +u32 sub_81449E0(struct mevent_srv_sub *); + +u32 sub_8144844(struct mevent_srv_sub * srv) +{ + return srv->unk_20(srv); +} + +u32 sub_8144850(struct mevent_srv_sub * srv) +{ + return srv->unk_24(srv); +} + +void sub_814485C(struct mevent_srv_sub * srv, u8 a1, u8 a2) +{ + srv->unk_04 = a1; + srv->unk_05 = a2; + srv->unk_00 = 0; + srv->unk_12 = 0; + srv->unk_14 = 0; + srv->unk_10 = 0; + srv->unk_0A = 0; + srv->unk_0C = 0; + srv->unk_08 = 0; + srv->unk_1C = 0; + srv->unk_18 = NULL; + srv->unk_24 = sub_81449E0; + srv->unk_20 = sub_814490C; +} + +void sub_8144888(struct mevent_srv_sub * srv, u16 a1, u32 a2, u32 a3) +{ + srv->unk_00 = 0; + srv->unk_0E = a1; + srv->unk_10 = 0; + srv->unk_12 = 0; + if (a3 != 0) + srv->unk_14 = a3; + else + srv->unk_14 = 0x400; + srv->unk_1C = a2; +} + +void sub_81448AC(struct mevent_srv_sub * srv, u16 a1, void * a2) +{ + srv->unk_00 = 0; + srv->unk_06 = a1; + srv->unk_08 = 0; + srv->unk_0A = 0; + srv->unk_0C = 0; + srv->unk_18 = a2; +} + +void sub_81448BC(u32 recv_idx, u16 * dest, size_t size) +{ + memcpy(dest, gBlockRecvBuffer[recv_idx], size); +} + +bool32 sub_81448D8(u32 recv_idx) +{ + if ((GetBlockReceivedStatus() >> recv_idx) & 1) + return TRUE; + else + return FALSE; +} + +void sub_81448FC(u32 recv_idx) +{ + ResetBlockReceivedFlag(recv_idx); +} + +bool32 sub_814490C(struct mevent_srv_sub * srv) +{ + u16 buff[4]; + switch (srv->unk_00) + { + case 0: + if (sub_81448D8(srv->unk_05)) + { + u16 * r4; + sub_81448BC(srv->unk_05, (r4 = buff), sizeof(buff)); + srv->unk_0C = r4[2]; + srv->unk_0A = r4[1]; + if (srv->unk_0C > 0x400) + { + sub_80FA190(); + return FALSE; + } + else if (srv->unk_06 != buff[0]) + { + sub_80FA190(); + return FALSE; + } + else + { + srv->unk_08 = 0; + sub_81448FC(srv->unk_05); + ++srv->unk_00; + } + } + break; + case 1: + if (sub_81448D8(srv->unk_05)) + { + size_t r3 = srv->unk_08 * 252; + if (srv->unk_0C - r3 <= 252) + { + sub_81448BC(srv->unk_05, srv->unk_18 + r3, srv->unk_0C - r3); + ++srv->unk_08; + ++srv->unk_00; + } + else + { + sub_81448BC(srv->unk_05, srv->unk_18 + r3, 252); + ++srv->unk_08; + } + sub_81448FC(srv->unk_05); + } + break; + case 2: + if (CalcCRC16WithTable(srv->unk_18, srv->unk_0C) != srv->unk_0A) + { + sub_80FA190(); + return FALSE; + } + else + { + srv->unk_00 = 0; + return TRUE; + } + break; + + } + + return FALSE; +} -- cgit v1.2.3 From 5a80a339cd04864f36bae99eb4b35de2f8bbab16 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 30 Nov 2018 10:52:54 -0500 Subject: sub_81449E0 --- src/mevent_server.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 79 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c index 0c94980ff..8c68a9350 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -21,7 +21,7 @@ struct mevent_srv_sub u16 unk_12; u16 unk_14; void * unk_18; - u32 unk_1C; + void * unk_1C; u32 (*unk_20)(struct mevent_srv_sub *); u32 (*unk_24)(struct mevent_srv_sub *); }; @@ -40,6 +40,13 @@ struct mevent_srv_ish struct mevent_srv_sub unk_24; }; +struct send_recv_buff +{ + u16 unk0; + u16 unk2; + u16 unk4; +}; + EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; u32 sub_814490C(struct mevent_srv_sub *); @@ -66,13 +73,13 @@ void sub_814485C(struct mevent_srv_sub * srv, u8 a1, u8 a2) srv->unk_0A = 0; srv->unk_0C = 0; srv->unk_08 = 0; - srv->unk_1C = 0; + srv->unk_1C = NULL; srv->unk_18 = NULL; srv->unk_24 = sub_81449E0; srv->unk_20 = sub_814490C; } -void sub_8144888(struct mevent_srv_sub * srv, u16 a1, u32 a2, u32 a3) +void sub_8144888(struct mevent_srv_sub * srv, u16 a1, void * a2, u32 a3) { srv->unk_00 = 0; srv->unk_0E = a1; @@ -95,7 +102,7 @@ void sub_81448AC(struct mevent_srv_sub * srv, u16 a1, void * a2) srv->unk_18 = a2; } -void sub_81448BC(u32 recv_idx, u16 * dest, size_t size) +void sub_81448BC(u32 recv_idx, void * dest, size_t size) { memcpy(dest, gBlockRecvBuffer[recv_idx], size); } @@ -115,22 +122,22 @@ void sub_81448FC(u32 recv_idx) bool32 sub_814490C(struct mevent_srv_sub * srv) { - u16 buff[4]; + struct send_recv_buff buff; + switch (srv->unk_00) { case 0: if (sub_81448D8(srv->unk_05)) { - u16 * r4; - sub_81448BC(srv->unk_05, (r4 = buff), sizeof(buff)); - srv->unk_0C = r4[2]; - srv->unk_0A = r4[1]; + sub_81448BC(srv->unk_05, &buff, sizeof(buff)); + srv->unk_0C = buff.unk4; + srv->unk_0A = buff.unk2; if (srv->unk_0C > 0x400) { sub_80FA190(); return FALSE; } - else if (srv->unk_06 != buff[0]) + else if (srv->unk_06 != buff.unk0) { sub_80FA190(); return FALSE; @@ -178,3 +185,65 @@ bool32 sub_814490C(struct mevent_srv_sub * srv) return FALSE; } + +bool32 sub_81449E0(struct mevent_srv_sub * srv) +{ + struct send_recv_buff buff; + + switch (srv->unk_00) + { + case 0: + if (sub_800A4BC()) + { + buff.unk0 = srv->unk_0E; + buff.unk4 = srv->unk_14; + buff.unk2 = CalcCRC16WithTable(srv->unk_1C, srv->unk_14); + srv->unk_12 = buff.unk2; + srv->unk_10 = 0; + SendBlock(0, &buff, sizeof(buff)); + ++srv->unk_00; + } + break; + case 1: + if (sub_800A4BC()) + { + if (sub_81448D8(srv->unk_04)) + { + size_t r3; + sub_81448FC(srv->unk_04); + r3 = 252 * srv->unk_10; + if (srv->unk_14 - r3 <= 252) + { + SendBlock(0, srv->unk_1C + r3, srv->unk_14 - r3); + ++srv->unk_10; + ++srv->unk_00; + } + else + { + SendBlock(0, srv->unk_1C + r3, 252); + ++srv->unk_10; + } + } + } + break; + case 2: + if (sub_800A4BC()) + { + if (CalcCRC16WithTable(srv->unk_1C, srv->unk_14) != srv->unk_12) + sub_80FA190(); + else + ++srv->unk_00; + } + break; + case 3: + if (sub_81448D8(srv->unk_04)) + { + sub_81448FC(srv->unk_04); + srv->unk_00 = 0; + return TRUE; + } + break; + } + + return FALSE; +} -- cgit v1.2.3 From de6cf9f0de562bfc3085ffc2e07825b4487b4b9e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 30 Nov 2018 11:48:13 -0500 Subject: through sub_8144C80 --- src/mevent_server.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 113 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c index 8c68a9350..a94d8a0a1 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -51,6 +51,11 @@ EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; u32 sub_814490C(struct mevent_srv_sub *); u32 sub_81449E0(struct mevent_srv_sub *); +void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); +u32 mevent_srv_ish_exec(struct mevent_srv_ish *); +void sub_8144BC0(struct mevent_srv_ish *); + +extern u8 gUnknown_84687E0[0x400]; u32 sub_8144844(struct mevent_srv_sub * srv) { @@ -62,7 +67,7 @@ u32 sub_8144850(struct mevent_srv_sub * srv) return srv->unk_24(srv); } -void sub_814485C(struct mevent_srv_sub * srv, u8 a1, u8 a2) +void sub_814485C(struct mevent_srv_sub * srv, u32 a1, u32 a2) { srv->unk_04 = a1; srv->unk_05 = a2; @@ -79,7 +84,7 @@ void sub_814485C(struct mevent_srv_sub * srv, u8 a1, u8 a2) srv->unk_20 = sub_814490C; } -void sub_8144888(struct mevent_srv_sub * srv, u16 a1, void * a2, u32 a3) +void sub_8144888(struct mevent_srv_sub * srv, u32 a1, void * a2, u32 a3) { srv->unk_00 = 0; srv->unk_0E = a1; @@ -247,3 +252,109 @@ bool32 sub_81449E0(struct mevent_srv_sub * srv) return FALSE; } + +void sub_8144AEC(void) +{ + gUnknown_203F3C0 = AllocZeroed(sizeof(struct mevent_srv_ish)); + mevent_srv_ish_init(gUnknown_203F3C0, 1, 0); +} + +u32 sub_8144B0C(u16 * a0) +{ + u32 result; + if (gUnknown_203F3C0 == NULL) + return 6; + result = mevent_srv_ish_exec(gUnknown_203F3C0); + if (result == 6) + { + *a0 = gUnknown_203F3C0->unk_04; + sub_8144BC0(gUnknown_203F3C0); + Free(gUnknown_203F3C0); + gUnknown_203F3C0 = NULL; + } + return result; +} + +void sub_8144B48(void) +{ + gUnknown_203F3C0->unk_0C++; +} + +void * sub_8144B58(void) +{ + return gUnknown_203F3C0->unk_20; +} + +void sub_8144B64(u32 a0) +{ + gUnknown_203F3C0->unk_04 = a0; +} + +void mevent_srv_ish_init(struct mevent_srv_ish * srv, u32 a1, u32 a2) +{ + srv->unk_00 = 0; + srv->unk_08 = 0; + srv->unk_0C = 0; + srv->unk_14 = AllocZeroed(0x400); + srv->unk_18 = AllocZeroed(0x400); + srv->unk_1C = AllocZeroed(0x400); + srv->unk_20 = AllocZeroed(0x40); + sub_814485C(&srv->unk_24, a1, a2); +} + +void sub_8144BC0(struct mevent_srv_ish * srv) +{ + Free(srv->unk_14); + Free(srv->unk_18); + Free(srv->unk_1C); + Free(srv->unk_20); +} + +void sub_8144BE4(struct mevent_srv_ish * srv) +{ + memcpy(srv->unk_1C, srv->unk_18, 0x400); + srv->unk_10 = 0; +} + +void sub_8144C00(struct mevent_srv_ish * srv, u32 a1, u32 a2) +{ + CpuFill32(0, srv->unk_14, 0x400); + *(u32 *)srv->unk_14 = a2; + sub_8144888(&srv->unk_24, a1, srv->unk_14, 4); +} + +// funcs in array gUnknown_8466F60 + +u32 sub_8144C34(struct mevent_srv_ish * srv) +{ + memcpy(srv->unk_1C, gUnknown_84687E0, sizeof(gUnknown_84687E0)); + srv->unk_10 = 0; + srv->unk_08 = 4; + srv->unk_0C = 0; + return 0; +} + +u32 sub_8144C5C(struct mevent_srv_ish * srv) +{ + return 6; +} + +u32 sub_8144C60(struct mevent_srv_ish * srv) +{ + if (sub_8144844(&srv->unk_24)) + { + srv->unk_08 = 4; + srv->unk_0C = 0; + } + return 1; +} + +u32 sub_8144C80(struct mevent_srv_ish * srv) +{ + if (sub_8144850(&srv->unk_24)) + { + srv->unk_08 = 4; + srv->unk_0C = 0; + } + return 1; +} -- cgit v1.2.3 From 7c2517611b83ac9d490a99ec32cf1a4412c05ce0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 30 Nov 2018 12:16:42 -0500 Subject: sub_8144CA0 --- src/mevent_server.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c index a94d8a0a1..3297e2658 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -1,8 +1,12 @@ #include "global.h" #include "malloc.h" +#include "decompress.h" #include "util.h" #include "link.h" #include "link_rfu.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" #include "mevent.h" extern u16 gBlockRecvBuffer[][128]; @@ -97,7 +101,7 @@ void sub_8144888(struct mevent_srv_sub * srv, u32 a1, void * a2, u32 a3) srv->unk_1C = a2; } -void sub_81448AC(struct mevent_srv_sub * srv, u16 a1, void * a2) +void sub_81448AC(struct mevent_srv_sub * srv, u32 a1, void * a2) { srv->unk_00 = 0; srv->unk_06 = a1; @@ -358,3 +362,108 @@ u32 sub_8144C80(struct mevent_srv_ish * srv) } return 1; } + +u32 sub_8144CA0(struct mevent_srv_ish * srv) +{ + u32 * r2 = (u32 *)srv->unk_1C + 2 * srv->unk_10; + ++srv->unk_10; + switch (r2[0]) + { + case 0: + break; + case 1: + srv->unk_04 = r2[1]; + srv->unk_08 = 1; + srv->unk_0C = 0; + break; + case 2: + sub_81448AC(&srv->unk_24, r2[1], srv->unk_18); + srv->unk_08 = 2; + srv->unk_0C = 0; + break; + case 3: + srv->unk_08 = 3; + srv->unk_0C = 0; + break; + case 20: + sub_8144888(&srv->unk_24, 0x14, srv->unk_14, 0); + srv->unk_08 = 3; + srv->unk_0C = 0; + break; + case 19: + sub_8144C00(srv, 0x12, GetGameStat(r2[1])); + srv->unk_08 = 3; + srv->unk_0C = 0; + break; + case 6: + if (srv->unk_04 == 0) + sub_8144BE4(srv); + break; + case 7: + if (srv->unk_04 == 1) + sub_8144BE4(srv); + break; + case 4: + sub_8144BE4(srv); + break; + case 5: + memcpy(srv->unk_20, srv->unk_18, 0x40); + srv->unk_08 = 5; + srv->unk_0C = 0; + return 2; + case 11: + memcpy(srv->unk_20, srv->unk_18, 0x40); + srv->unk_08 = 5; + srv->unk_0C = 0; + return 3; + case 12: + memcpy(srv->unk_20, srv->unk_18, 0x40); + srv->unk_08 = 5; + srv->unk_0C = 0; + return 5; + case 13: + srv->unk_08 = 5; + srv->unk_0C = 0; + return 4; + case 8: + sub_81442CC(srv->unk_14); + sub_8144888(&srv->unk_24, 0x11, srv->unk_14, 0x64); + break; + case 14: + sub_8144C00(srv, 0x13, srv->unk_04); + break; + case 10: + sub_8143F68(srv->unk_18); + break; + case 9: + if (!sub_8143EF4(srv->unk_18)) + { + sub_8143DC8(srv->unk_18); + sub_8144C00(srv, 0x13, 0); + } + else + sub_8144C00(srv, 0x13, 1); + break; + case 15: + srv->unk_08 = 6; + srv->unk_0C = 0; + break; + case 16: + sub_8144254(srv->unk_18); + break; + case 17: + sub_8069EA4(srv->unk_18, 1000); + break; + case 18: + memcpy(gSaveBlock2Ptr->unk_4A0, srv->unk_18, 0xbc); + sub_80E7490(); + break; + case 21: + memcpy(gDecompressionBuffer, srv->unk_18, 0x400); + srv->unk_08 = 7; + srv->unk_0C = 0; + break; + } + + return 1; +} -- cgit v1.2.3 From f178d06946a4debf6a0551094d3ef2f70b7b364c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 30 Nov 2018 12:26:24 -0500 Subject: through mevent_srv_ish_exec --- src/mevent_server.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c index 3297e2658..251764441 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -7,6 +7,7 @@ #include "overworld.h" #include "script.h" #include "battle_tower.h" +#include "mystery_event_script.h" #include "mevent.h" extern u16 gBlockRecvBuffer[][128]; @@ -467,3 +468,58 @@ u32 sub_8144CA0(struct mevent_srv_ish * srv) return 1; } + +u32 sub_8144E6C(struct mevent_srv_ish * srv) +{ + if (srv->unk_0C) + { + srv->unk_08 = 4; + srv->unk_0C = 0; + } + return 1; +} + +u32 sub_8144E84(struct mevent_srv_ish * srv) +{ + switch (srv->unk_0C) + { + case 0: + sub_80DA89C(srv->unk_18); + ++srv->unk_0C; + break; + case 1: + if (!sub_80DA8B0(&srv->unk_04)) + { + srv->unk_08 = 4; + srv->unk_0C = 0; + } + break; + } + return 1; +} + +u32 sub_8144EBC(struct mevent_srv_ish * srv) +{ + u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; + if (func(&srv->unk_04, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) + { + srv->unk_08 = 4; + srv->unk_0C = 0; + } + return 1; +} + +u32 mevent_srv_ish_exec(struct mevent_srv_ish * srv) +{ + u32 (*funcs[])(struct mevent_srv_ish *) = { + sub_8144C34, + sub_8144C5C, + sub_8144C60, + sub_8144C80, + sub_8144CA0, + sub_8144E6C, + sub_8144E84, + sub_8144EBC + }; + return funcs[srv->unk_08](srv); +} -- cgit v1.2.3 From 8a8e86fa4fe0a7932f475c7aa8424ea840327e4b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 30 Nov 2018 15:26:16 -0500 Subject: split mevent_server --- src/mevent.c | 9 +- src/mevent_server.c | 527 +++++------------------------------------------- src/mevent_server_ish.c | 308 ++++++++++++++++++++++++++++ src/mevent_server_sub.c | 211 +++++++++++++++++++ 4 files changed, 574 insertions(+), 481 deletions(-) create mode 100644 src/mevent_server_ish.c create mode 100644 src/mevent_server_sub.c (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index b04ac5462..9638e0327 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -17,6 +17,9 @@ #include "new_game.h" #include "string_util.h" #include "menews_jisan.h" +#include "cereader_tool.h" +#include "mystery_gift_menu.h" +#include "help_system.h" #include "mevent.h" struct MEventTaskData1 @@ -40,14 +43,10 @@ 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_814407C(void); void sub_81440B4(void); void sub_8144824(u32, u32, u32 *, s32); void sub_8144790(void); -u8 sub_815D6B4(u8 *); extern const u8 gUnknown_841DE52[]; extern const u8 gUnknown_841DE53[]; @@ -90,7 +89,7 @@ const u16 gUnknown_8466F00[] = { struct MEvent_Str_1 gUnknown_3005ED0; -bool32 gUnknown_203F3BC = FALSE; +static EWRAM_DATA bool32 gUnknown_203F3BC = FALSE; void sub_81435DC(struct MEvent_Str_1 *a0, size_t a1, const void * a2) { diff --git a/src/mevent_server.c b/src/mevent_server.c index 251764441..027a7e994 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -9,517 +9,92 @@ #include "battle_tower.h" #include "mystery_event_script.h" #include "mevent.h" +#include "mevent_server.h" extern u16 gBlockRecvBuffer[][128]; -struct mevent_srv_sub -{ - s32 unk_00; - u8 unk_04; - u8 unk_05; - u16 unk_06; - u16 unk_08; - u16 unk_0A; - u16 unk_0C; - u16 unk_0E; - u16 unk_10; - u16 unk_12; - u16 unk_14; - void * unk_18; - void * unk_1C; - u32 (*unk_20)(struct mevent_srv_sub *); - u32 (*unk_24)(struct mevent_srv_sub *); -}; - -struct mevent_srv_ish +struct mevent_srv_common { u32 unk_00; u32 unk_04; - u32 unk_08; + u32 mainseqno; u32 unk_0C; - u32 unk_10; + const void * unk_10; void * unk_14; void * unk_18; void * unk_1C; void * unk_20; - struct mevent_srv_sub unk_24; -}; - -struct send_recv_buff -{ - u16 unk0; - u16 unk2; - u16 unk4; + u8 filler_24[0x14]; + struct mevent_srv_sub unk_38; }; -EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; - -u32 sub_814490C(struct mevent_srv_sub *); -u32 sub_81449E0(struct mevent_srv_sub *); -void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); -u32 mevent_srv_ish_exec(struct mevent_srv_ish *); -void sub_8144BC0(struct mevent_srv_ish *); - -extern u8 gUnknown_84687E0[0x400]; - -u32 sub_8144844(struct mevent_srv_sub * srv) -{ - return srv->unk_20(srv); -} - -u32 sub_8144850(struct mevent_srv_sub * srv) -{ - return srv->unk_24(srv); -} - -void sub_814485C(struct mevent_srv_sub * srv, u32 a1, u32 a2) -{ - srv->unk_04 = a1; - srv->unk_05 = a2; - srv->unk_00 = 0; - srv->unk_12 = 0; - srv->unk_14 = 0; - srv->unk_10 = 0; - srv->unk_0A = 0; - srv->unk_0C = 0; - srv->unk_08 = 0; - srv->unk_1C = NULL; - srv->unk_18 = NULL; - srv->unk_24 = sub_81449E0; - srv->unk_20 = sub_814490C; -} - -void sub_8144888(struct mevent_srv_sub * srv, u32 a1, void * a2, u32 a3) -{ - srv->unk_00 = 0; - srv->unk_0E = a1; - srv->unk_10 = 0; - srv->unk_12 = 0; - if (a3 != 0) - srv->unk_14 = a3; - else - srv->unk_14 = 0x400; - srv->unk_1C = a2; -} - -void sub_81448AC(struct mevent_srv_sub * srv, u32 a1, void * a2) -{ - srv->unk_00 = 0; - srv->unk_06 = a1; - srv->unk_08 = 0; - srv->unk_0A = 0; - srv->unk_0C = 0; - srv->unk_18 = a2; -} - -void sub_81448BC(u32 recv_idx, void * dest, size_t size) -{ - memcpy(dest, gBlockRecvBuffer[recv_idx], size); -} - -bool32 sub_81448D8(u32 recv_idx) -{ - if ((GetBlockReceivedStatus() >> recv_idx) & 1) - return TRUE; - else - return FALSE; -} - -void sub_81448FC(u32 recv_idx) -{ - ResetBlockReceivedFlag(recv_idx); -} - -bool32 sub_814490C(struct mevent_srv_sub * srv) -{ - struct send_recv_buff buff; - - switch (srv->unk_00) - { - case 0: - if (sub_81448D8(srv->unk_05)) - { - sub_81448BC(srv->unk_05, &buff, sizeof(buff)); - srv->unk_0C = buff.unk4; - srv->unk_0A = buff.unk2; - if (srv->unk_0C > 0x400) - { - sub_80FA190(); - return FALSE; - } - else if (srv->unk_06 != buff.unk0) - { - sub_80FA190(); - return FALSE; - } - else - { - srv->unk_08 = 0; - sub_81448FC(srv->unk_05); - ++srv->unk_00; - } - } - break; - case 1: - if (sub_81448D8(srv->unk_05)) - { - size_t r3 = srv->unk_08 * 252; - if (srv->unk_0C - r3 <= 252) - { - sub_81448BC(srv->unk_05, srv->unk_18 + r3, srv->unk_0C - r3); - ++srv->unk_08; - ++srv->unk_00; - } - else - { - sub_81448BC(srv->unk_05, srv->unk_18 + r3, 252); - ++srv->unk_08; - } - sub_81448FC(srv->unk_05); - } - break; - case 2: - if (CalcCRC16WithTable(srv->unk_18, srv->unk_0C) != srv->unk_0A) - { - sub_80FA190(); - return FALSE; - } - else - { - srv->unk_00 = 0; - return TRUE; - } - break; +EWRAM_DATA struct mevent_srv_common * gUnknown_203F3C4 = NULL; - } +void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32); +void mevent_srv_free_resources(struct mevent_srv_common *); +u32 sub_8145600(struct mevent_srv_common *); - return FALSE; -} +extern const u8 gUnknown_8468B6C[]; +extern const u8 gUnknown_8468BCC[]; -bool32 sub_81449E0(struct mevent_srv_sub * srv) +void sub_8144F1C(void) { - struct send_recv_buff buff; - - switch (srv->unk_00) - { - case 0: - if (sub_800A4BC()) - { - buff.unk0 = srv->unk_0E; - buff.unk4 = srv->unk_14; - buff.unk2 = CalcCRC16WithTable(srv->unk_1C, srv->unk_14); - srv->unk_12 = buff.unk2; - srv->unk_10 = 0; - SendBlock(0, &buff, sizeof(buff)); - ++srv->unk_00; - } - break; - case 1: - if (sub_800A4BC()) - { - if (sub_81448D8(srv->unk_04)) - { - size_t r3; - sub_81448FC(srv->unk_04); - r3 = 252 * srv->unk_10; - if (srv->unk_14 - r3 <= 252) - { - SendBlock(0, srv->unk_1C + r3, srv->unk_14 - r3); - ++srv->unk_10; - ++srv->unk_00; - } - else - { - SendBlock(0, srv->unk_1C + r3, 252); - ++srv->unk_10; - } - } - } - break; - case 2: - if (sub_800A4BC()) - { - if (CalcCRC16WithTable(srv->unk_1C, srv->unk_14) != srv->unk_12) - sub_80FA190(); - else - ++srv->unk_00; - } - break; - case 3: - if (sub_81448D8(srv->unk_04)) - { - sub_81448FC(srv->unk_04); - srv->unk_00 = 0; - return TRUE; - } - break; - } - - return FALSE; + gUnknown_203F3C4 = AllocZeroed(sizeof(struct mevent_srv_common)); + mevent_srv_init_common(gUnknown_203F3C4, gUnknown_8468B6C, 0, 1); } -void sub_8144AEC(void) +void sub_8144F40(void) { - gUnknown_203F3C0 = AllocZeroed(sizeof(struct mevent_srv_ish)); - mevent_srv_ish_init(gUnknown_203F3C0, 1, 0); + gUnknown_203F3C4 = AllocZeroed(sizeof(struct mevent_srv_common)); + mevent_srv_init_common(gUnknown_203F3C4, gUnknown_8468BCC, 0, 1); } -u32 sub_8144B0C(u16 * a0) +u32 sub_8144F64(u16 * a0) { u32 result; - if (gUnknown_203F3C0 == NULL) - return 6; - result = mevent_srv_ish_exec(gUnknown_203F3C0); - if (result == 6) + if (gUnknown_203F3C4 == NULL) + return 3; + result = sub_8145600(gUnknown_203F3C4); + if (result == 3) { - *a0 = gUnknown_203F3C0->unk_04; - sub_8144BC0(gUnknown_203F3C0); - Free(gUnknown_203F3C0); - gUnknown_203F3C0 = NULL; + *a0 = gUnknown_203F3C4->unk_04; + mevent_srv_free_resources(gUnknown_203F3C4); + Free(gUnknown_203F3C4); + gUnknown_203F3C4 = NULL; } return result; } -void sub_8144B48(void) -{ - gUnknown_203F3C0->unk_0C++; -} - -void * sub_8144B58(void) -{ - return gUnknown_203F3C0->unk_20; -} - -void sub_8144B64(u32 a0) -{ - gUnknown_203F3C0->unk_04 = a0; -} - -void mevent_srv_ish_init(struct mevent_srv_ish * srv, u32 a1, u32 a2) -{ - srv->unk_00 = 0; - srv->unk_08 = 0; - srv->unk_0C = 0; - srv->unk_14 = AllocZeroed(0x400); - srv->unk_18 = AllocZeroed(0x400); - srv->unk_1C = AllocZeroed(0x400); - srv->unk_20 = AllocZeroed(0x40); - sub_814485C(&srv->unk_24, a1, a2); -} - -void sub_8144BC0(struct mevent_srv_ish * srv) -{ - Free(srv->unk_14); - Free(srv->unk_18); - Free(srv->unk_1C); - Free(srv->unk_20); -} - -void sub_8144BE4(struct mevent_srv_ish * srv) -{ - memcpy(srv->unk_1C, srv->unk_18, 0x400); - srv->unk_10 = 0; -} - -void sub_8144C00(struct mevent_srv_ish * srv, u32 a1, u32 a2) -{ - CpuFill32(0, srv->unk_14, 0x400); - *(u32 *)srv->unk_14 = a2; - sub_8144888(&srv->unk_24, a1, srv->unk_14, 4); -} - -// funcs in array gUnknown_8466F60 - -u32 sub_8144C34(struct mevent_srv_ish * srv) -{ - memcpy(srv->unk_1C, gUnknown_84687E0, sizeof(gUnknown_84687E0)); - srv->unk_10 = 0; - srv->unk_08 = 4; - srv->unk_0C = 0; - return 0; -} - -u32 sub_8144C5C(struct mevent_srv_ish * srv) -{ - return 6; -} - -u32 sub_8144C60(struct mevent_srv_ish * srv) +void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 a2, u32 a3) { - if (sub_8144844(&srv->unk_24)) - { - srv->unk_08 = 4; - srv->unk_0C = 0; - } - return 1; -} - -u32 sub_8144C80(struct mevent_srv_ish * srv) -{ - if (sub_8144850(&srv->unk_24)) - { - srv->unk_08 = 4; - srv->unk_0C = 0; - } - return 1; -} - -u32 sub_8144CA0(struct mevent_srv_ish * srv) -{ - u32 * r2 = (u32 *)srv->unk_1C + 2 * srv->unk_10; - ++srv->unk_10; - switch (r2[0]) - { - case 0: - break; - case 1: - srv->unk_04 = r2[1]; - srv->unk_08 = 1; - srv->unk_0C = 0; - break; - case 2: - sub_81448AC(&srv->unk_24, r2[1], srv->unk_18); - srv->unk_08 = 2; - srv->unk_0C = 0; - break; - case 3: - srv->unk_08 = 3; - srv->unk_0C = 0; - break; - case 20: - sub_8144888(&srv->unk_24, 0x14, srv->unk_14, 0); - srv->unk_08 = 3; - srv->unk_0C = 0; - break; - case 19: - sub_8144C00(srv, 0x12, GetGameStat(r2[1])); - srv->unk_08 = 3; - srv->unk_0C = 0; - break; - case 6: - if (srv->unk_04 == 0) - sub_8144BE4(srv); - break; - case 7: - if (srv->unk_04 == 1) - sub_8144BE4(srv); - break; - case 4: - sub_8144BE4(srv); - break; - case 5: - memcpy(srv->unk_20, srv->unk_18, 0x40); - srv->unk_08 = 5; - srv->unk_0C = 0; - return 2; - case 11: - memcpy(srv->unk_20, srv->unk_18, 0x40); - srv->unk_08 = 5; - srv->unk_0C = 0; - return 3; - case 12: - memcpy(srv->unk_20, srv->unk_18, 0x40); - srv->unk_08 = 5; - srv->unk_0C = 0; - return 5; - case 13: - srv->unk_08 = 5; - srv->unk_0C = 0; - return 4; - case 8: - sub_81442CC(srv->unk_14); - sub_8144888(&srv->unk_24, 0x11, srv->unk_14, 0x64); - break; - case 14: - sub_8144C00(srv, 0x13, srv->unk_04); - break; - case 10: - sub_8143F68(srv->unk_18); - break; - case 9: - if (!sub_8143EF4(srv->unk_18)) - { - sub_8143DC8(srv->unk_18); - sub_8144C00(srv, 0x13, 0); - } - else - sub_8144C00(srv, 0x13, 1); - break; - case 15: - srv->unk_08 = 6; - srv->unk_0C = 0; - break; - case 16: - sub_8144254(srv->unk_18); - break; - case 17: - sub_8069EA4(srv->unk_18, 1000); - break; - case 18: - memcpy(gSaveBlock2Ptr->unk_4A0, srv->unk_18, 0xbc); - sub_80E7490(); - break; - case 21: - memcpy(gDecompressionBuffer, srv->unk_18, 0x400); - srv->unk_08 = 7; - srv->unk_0C = 0; - break; - } - - return 1; -} - -u32 sub_8144E6C(struct mevent_srv_ish * srv) -{ - if (srv->unk_0C) - { - srv->unk_08 = 4; - srv->unk_0C = 0; - } - return 1; + svr->unk_00 = 0; + svr->mainseqno = 0; + svr->unk_18 = AllocZeroed(332); + svr->unk_1C = AllocZeroed(444); + svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE); + svr->unk_20 = AllocZeroed(100); + svr->unk_10 = a1; + svr->unk_0C = 0; + sub_814485C(&svr->unk_38, a2, a3); } -u32 sub_8144E84(struct mevent_srv_ish * srv) +void mevent_srv_free_resources(struct mevent_srv_common * svr) { - switch (srv->unk_0C) - { - case 0: - sub_80DA89C(srv->unk_18); - ++srv->unk_0C; - break; - case 1: - if (!sub_80DA8B0(&srv->unk_04)) - { - srv->unk_08 = 4; - srv->unk_0C = 0; - } - break; - } - return 1; + Free(svr->unk_18); + Free(svr->unk_1C); + Free(svr->unk_14); + Free(svr->unk_20); } -u32 sub_8144EBC(struct mevent_srv_ish * srv) -{ - u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; - if (func(&srv->unk_04, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) - { - srv->unk_08 = 4; - srv->unk_0C = 0; - } - return 1; -} +const char gUnknown_8466F80[] = "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c"; +const char gUnknown_8466FB8[] = "size <= ME_SEND_BUF_SIZE"; +const char gUnknown_8466FD4[] = "cmd->parameter == NULL"; +const char gUnknown_8466FEC[] = "cmd->flag == FALSE"; +const char gUnknown_8467000[] = "cmd->flag == FALSE && cmd->parameter == NULL"; -u32 mevent_srv_ish_exec(struct mevent_srv_ish * srv) +void sub_814501C(struct mevent_srv_common * svr, u32 a1, void * a2, u32 size) { - u32 (*funcs[])(struct mevent_srv_ish *) = { - sub_8144C34, - sub_8144C5C, - sub_8144C60, - sub_8144C80, - sub_8144CA0, - sub_8144E6C, - sub_8144E84, - sub_8144EBC - }; - return funcs[srv->unk_08](srv); + // AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 257); + size <= ME_SEND_BUF_SIZE ? NULL : AGBAssert(gUnknown_8466F80, 257, gUnknown_8466FB8, 1); + sub_8144888(&svr->unk_38, a1, a2, size); } diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c new file mode 100644 index 000000000..7e9639303 --- /dev/null +++ b/src/mevent_server_ish.c @@ -0,0 +1,308 @@ +#include "global.h" +#include "malloc.h" +#include "decompress.h" +#include "util.h" +#include "link.h" +#include "link_rfu.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" +#include "mystery_event_script.h" +#include "mevent.h" +#include "mevent_server.h" + +extern u16 gBlockRecvBuffer[][128]; + +struct mevent_srv_ish +{ + u32 unk_00; + u32 unk_04; + u32 mainseqno; + u32 unk_0C; + u32 unk_10; + void * unk_14; + void * unk_18; + void * unk_1C; + void * unk_20; + struct mevent_srv_sub unk_24; +}; + +struct mevent_cmd +{ + u32 instr; + bool32 flag; + u32 parameter; +}; + +EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; + +void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); +u32 mevent_srv_ish_exec(struct mevent_srv_ish *); +void sub_8144BC0(struct mevent_srv_ish *); +extern const u8 gUnknown_84687E0[]; + +void sub_8144AEC(void) +{ + gUnknown_203F3C0 = AllocZeroed(sizeof(struct mevent_srv_ish)); + mevent_srv_ish_init(gUnknown_203F3C0, 1, 0); +} + +u32 sub_8144B0C(u16 * a0) +{ + u32 result; + if (gUnknown_203F3C0 == NULL) + return 6; + result = mevent_srv_ish_exec(gUnknown_203F3C0); + if (result == 6) + { + *a0 = gUnknown_203F3C0->unk_04; + sub_8144BC0(gUnknown_203F3C0); + Free(gUnknown_203F3C0); + gUnknown_203F3C0 = NULL; + } + return result; +} + +void sub_8144B48(void) +{ + gUnknown_203F3C0->unk_0C++; +} + +void * sub_8144B58(void) +{ + return gUnknown_203F3C0->unk_20; +} + +void sub_8144B64(u32 a0) +{ + gUnknown_203F3C0->unk_04 = a0; +} + +void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 a1, u32 a2) +{ + svr->unk_00 = 0; + svr->mainseqno = 0; + svr->unk_0C = 0; + svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE); + svr->unk_18 = AllocZeroed(ME_SEND_BUF_SIZE); + svr->unk_1C = AllocZeroed(ME_SEND_BUF_SIZE); + svr->unk_20 = AllocZeroed(0x40); + sub_814485C(&svr->unk_24, a1, a2); +} + +void sub_8144BC0(struct mevent_srv_ish * svr) +{ + Free(svr->unk_14); + Free(svr->unk_18); + Free(svr->unk_1C); + Free(svr->unk_20); +} + +void sub_8144BE4(struct mevent_srv_ish * svr) +{ + memcpy(svr->unk_1C, svr->unk_18, ME_SEND_BUF_SIZE); + svr->unk_10 = 0; +} + +void sub_8144C00(struct mevent_srv_ish * svr, u32 a1, u32 a2) +{ + CpuFill32(0, svr->unk_14, ME_SEND_BUF_SIZE); + *(u32 *)svr->unk_14 = a2; + sub_8144888(&svr->unk_24, a1, svr->unk_14, 4); +} + +// funcs in array gUnknown_8466F60 + +u32 sub_8144C34(struct mevent_srv_ish * svr) +{ + memcpy(svr->unk_1C, gUnknown_84687E0, ME_SEND_BUF_SIZE); + svr->unk_10 = 0; + svr->mainseqno = 4; + svr->unk_0C = 0; + return 0; +} + +u32 sub_8144C5C(struct mevent_srv_ish * svr) +{ + return 6; +} + +u32 sub_8144C60(struct mevent_srv_ish * svr) +{ + if (sub_8144844(&svr->unk_24)) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +u32 sub_8144C80(struct mevent_srv_ish * svr) +{ + if (sub_8144850(&svr->unk_24)) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +u32 sub_8144CA0(struct mevent_srv_ish * svr) +{ + u32 * r2 = (u32 *)svr->unk_1C + 2 * svr->unk_10; + ++svr->unk_10; + switch (r2[0]) + { + case 0: + break; + case 1: + svr->unk_04 = r2[1]; + svr->mainseqno = 1; + svr->unk_0C = 0; + break; + case 2: + sub_81448AC(&svr->unk_24, r2[1], svr->unk_18); + svr->mainseqno = 2; + svr->unk_0C = 0; + break; + case 3: + svr->mainseqno = 3; + svr->unk_0C = 0; + break; + case 20: + sub_8144888(&svr->unk_24, 0x14, svr->unk_14, 0); + svr->mainseqno = 3; + svr->unk_0C = 0; + break; + case 19: + sub_8144C00(svr, 0x12, GetGameStat(r2[1])); + svr->mainseqno = 3; + svr->unk_0C = 0; + break; + case 6: + if (svr->unk_04 == 0) + sub_8144BE4(svr); + break; + case 7: + if (svr->unk_04 == 1) + sub_8144BE4(svr); + break; + case 4: + sub_8144BE4(svr); + break; + case 5: + memcpy(svr->unk_20, svr->unk_18, 0x40); + svr->mainseqno = 5; + svr->unk_0C = 0; + return 2; + case 11: + memcpy(svr->unk_20, svr->unk_18, 0x40); + svr->mainseqno = 5; + svr->unk_0C = 0; + return 3; + case 12: + memcpy(svr->unk_20, svr->unk_18, 0x40); + svr->mainseqno = 5; + svr->unk_0C = 0; + return 5; + case 13: + svr->mainseqno = 5; + svr->unk_0C = 0; + return 4; + case 8: + sub_81442CC(svr->unk_14); + sub_8144888(&svr->unk_24, 0x11, svr->unk_14, 0x64); + break; + case 14: + sub_8144C00(svr, 0x13, svr->unk_04); + break; + case 10: + sub_8143F68(svr->unk_18); + break; + case 9: + if (!sub_8143EF4(svr->unk_18)) + { + sub_8143DC8(svr->unk_18); + sub_8144C00(svr, 0x13, 0); + } + else + sub_8144C00(svr, 0x13, 1); + break; + case 15: + svr->mainseqno = 6; + svr->unk_0C = 0; + break; + case 16: + sub_8144254(svr->unk_18); + break; + case 17: + sub_8069EA4(svr->unk_18, 1000); + break; + case 18: + memcpy(gSaveBlock2Ptr->unk_4A0, svr->unk_18, 0xbc); + sub_80E7490(); + break; + case 21: + memcpy(gDecompressionBuffer, svr->unk_18, ME_SEND_BUF_SIZE); + svr->mainseqno = 7; + svr->unk_0C = 0; + break; + } + + return 1; +} + +u32 sub_8144E6C(struct mevent_srv_ish * svr) +{ + if (svr->unk_0C) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +u32 sub_8144E84(struct mevent_srv_ish * svr) +{ + switch (svr->unk_0C) + { + case 0: + sub_80DA89C(svr->unk_18); + ++svr->unk_0C; + break; + case 1: + if (!sub_80DA8B0(&svr->unk_04)) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + break; + } + return 1; +} + +u32 sub_8144EBC(struct mevent_srv_ish * svr) +{ + u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; + if (func(&svr->unk_04, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr) +{ + u32 (*funcs[])(struct mevent_srv_ish *) = { + sub_8144C34, + sub_8144C5C, + sub_8144C60, + sub_8144C80, + sub_8144CA0, + sub_8144E6C, + sub_8144E84, + sub_8144EBC + }; + return funcs[svr->mainseqno](svr); +} diff --git a/src/mevent_server_sub.c b/src/mevent_server_sub.c new file mode 100644 index 000000000..83b8f62ca --- /dev/null +++ b/src/mevent_server_sub.c @@ -0,0 +1,211 @@ +#include "global.h" +#include "malloc.h" +#include "decompress.h" +#include "util.h" +#include "link.h" +#include "link_rfu.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" +#include "mystery_event_script.h" +#include "mevent.h" +#include "mevent_server.h" + +u32 sub_814490C(struct mevent_srv_sub *); +u32 sub_81449E0(struct mevent_srv_sub *); + +u32 sub_8144844(struct mevent_srv_sub * svr) +{ + return svr->unk_20(svr); +} + +u32 sub_8144850(struct mevent_srv_sub * svr) +{ + return svr->unk_24(svr); +} + +void sub_814485C(struct mevent_srv_sub * svr, u32 a1, u32 a2) +{ + svr->unk_04 = a1; + svr->unk_05 = a2; + svr->unk_00 = 0; + svr->unk_12 = 0; + svr->unk_14 = 0; + svr->unk_10 = 0; + svr->unk_0A = 0; + svr->unk_0C = 0; + svr->unk_08 = 0; + svr->unk_1C = NULL; + svr->unk_18 = NULL; + svr->unk_24 = sub_81449E0; + svr->unk_20 = sub_814490C; +} + +void sub_8144888(struct mevent_srv_sub * svr, u32 a1, void * a2, u32 a3) +{ + svr->unk_00 = 0; + svr->unk_0E = a1; + svr->unk_10 = 0; + svr->unk_12 = 0; + if (a3 != 0) + svr->unk_14 = a3; + else + svr->unk_14 = ME_SEND_BUF_SIZE; + svr->unk_1C = a2; +} + +void sub_81448AC(struct mevent_srv_sub * svr, u32 a1, void * a2) +{ + svr->unk_00 = 0; + svr->unk_06 = a1; + svr->unk_08 = 0; + svr->unk_0A = 0; + svr->unk_0C = 0; + svr->unk_18 = a2; +} + +void sub_81448BC(u32 recv_idx, void * dest, size_t size) +{ + memcpy(dest, gBlockRecvBuffer[recv_idx], size); +} + +bool32 sub_81448D8(u32 recv_idx) +{ + if ((GetBlockReceivedStatus() >> recv_idx) & 1) + return TRUE; + else + return FALSE; +} + +void sub_81448FC(u32 recv_idx) +{ + ResetBlockReceivedFlag(recv_idx); +} + +bool32 sub_814490C(struct mevent_srv_sub * svr) +{ + struct send_recv_buff buff; + + switch (svr->unk_00) + { + case 0: + if (sub_81448D8(svr->unk_05)) + { + sub_81448BC(svr->unk_05, &buff, sizeof(buff)); + svr->unk_0C = buff.unk4; + svr->unk_0A = buff.unk2; + if (svr->unk_0C > ME_SEND_BUF_SIZE) + { + sub_80FA190(); + return FALSE; + } + else if (svr->unk_06 != buff.unk0) + { + sub_80FA190(); + return FALSE; + } + else + { + svr->unk_08 = 0; + sub_81448FC(svr->unk_05); + ++svr->unk_00; + } + } + break; + case 1: + if (sub_81448D8(svr->unk_05)) + { + size_t r3 = svr->unk_08 * 252; + if (svr->unk_0C - r3 <= 252) + { + sub_81448BC(svr->unk_05, svr->unk_18 + r3, svr->unk_0C - r3); + ++svr->unk_08; + ++svr->unk_00; + } + else + { + sub_81448BC(svr->unk_05, svr->unk_18 + r3, 252); + ++svr->unk_08; + } + sub_81448FC(svr->unk_05); + } + break; + case 2: + if (CalcCRC16WithTable(svr->unk_18, svr->unk_0C) != svr->unk_0A) + { + sub_80FA190(); + return FALSE; + } + else + { + svr->unk_00 = 0; + return TRUE; + } + break; + + } + + return FALSE; +} + +bool32 sub_81449E0(struct mevent_srv_sub * svr) +{ + struct send_recv_buff buff; + + switch (svr->unk_00) + { + case 0: + if (sub_800A4BC()) + { + buff.unk0 = svr->unk_0E; + buff.unk4 = svr->unk_14; + buff.unk2 = CalcCRC16WithTable(svr->unk_1C, svr->unk_14); + svr->unk_12 = buff.unk2; + svr->unk_10 = 0; + SendBlock(0, &buff, sizeof(buff)); + ++svr->unk_00; + } + break; + case 1: + if (sub_800A4BC()) + { + if (sub_81448D8(svr->unk_04)) + { + size_t r3; + sub_81448FC(svr->unk_04); + r3 = 252 * svr->unk_10; + if (svr->unk_14 - r3 <= 252) + { + SendBlock(0, svr->unk_1C + r3, svr->unk_14 - r3); + ++svr->unk_10; + ++svr->unk_00; + } + else + { + SendBlock(0, svr->unk_1C + r3, 252); + ++svr->unk_10; + } + } + } + break; + case 2: + if (sub_800A4BC()) + { + if (CalcCRC16WithTable(svr->unk_1C, svr->unk_14) != svr->unk_12) + sub_80FA190(); + else + ++svr->unk_00; + } + break; + case 3: + if (sub_81448D8(svr->unk_04)) + { + sub_81448FC(svr->unk_04); + svr->unk_00 = 0; + return TRUE; + } + break; + } + + return FALSE; +} -- cgit v1.2.3 From b9a6cba30a3ee44ccb14548d198accd7f6bbfa8d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 30 Nov 2018 16:51:22 -0500 Subject: Finish decomp of mevent_server --- src/mevent.c | 4 +- src/mevent_server.c | 241 ++++++++++++++++++++++++++++++++++++++++++++---- src/mevent_server_ish.c | 43 ++++----- 3 files changed, 247 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/mevent.c b/src/mevent.c index 9638e0327..7a7fcc399 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -792,7 +792,7 @@ bool32 sub_81443D4(const struct MEventStruct_Unk1442CC * data) return TRUE; } -u32 sub_8144418(const u16 * a0, const struct MEventStruct_Unk1442CC * a1) +u32 sub_8144418(const u16 * a0, const struct MEventStruct_Unk1442CC * a1, void * unused) { if (a1->unk_14 == 0) return 0; @@ -801,7 +801,7 @@ u32 sub_8144418(const u16 * a0, const struct MEventStruct_Unk1442CC * a1) return 2; } -u32 sub_8144434(const u16 * a0, const struct MEventStruct_Unk1442CC * a1) +u32 sub_8144434(const u16 * a0, const struct MEventStruct_Unk1442CC * a1, void * unused) { s32 r4 = a1->unk_44 - sub_8144184(&a1->unk_20, a1->unk_44); if (r4 == 0) diff --git a/src/mevent_server.c b/src/mevent_server.c index 027a7e994..2242dabce 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -13,18 +13,29 @@ extern u16 gBlockRecvBuffer[][128]; +struct mevent_cmd +{ + u32 instr; + bool32 flag; + void * parameter; +}; + struct mevent_srv_common { u32 unk_00; u32 unk_04; u32 mainseqno; - u32 unk_0C; - const void * unk_10; + u32 cmdidx; + const struct mevent_cmd * cmdBuffer; void * unk_14; - void * unk_18; - void * unk_1C; - void * unk_20; - u8 filler_24[0x14]; + struct MEventBuffer_32E0_Sub * unk_18; + struct MEventBuffer_3120_Sub * unk_1C; + struct MEventStruct_Unk1442CC * unk_20; + void * unk_24; + u32 unk_28; + void * unk_2C; + u32 unk_30; + void * unk_34; struct mevent_srv_sub unk_38; }; @@ -73,8 +84,8 @@ void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 svr->unk_1C = AllocZeroed(444); svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE); svr->unk_20 = AllocZeroed(100); - svr->unk_10 = a1; - svr->unk_0C = 0; + svr->cmdBuffer = a1; + svr->cmdidx = 0; sub_814485C(&svr->unk_38, a2, a3); } @@ -86,15 +97,213 @@ void mevent_srv_free_resources(struct mevent_srv_common * svr) Free(svr->unk_20); } -const char gUnknown_8466F80[] = "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c"; -const char gUnknown_8466FB8[] = "size <= ME_SEND_BUF_SIZE"; -const char gUnknown_8466FD4[] = "cmd->parameter == NULL"; -const char gUnknown_8466FEC[] = "cmd->flag == FALSE"; -const char gUnknown_8467000[] = "cmd->flag == FALSE && cmd->parameter == NULL"; - void sub_814501C(struct mevent_srv_common * svr, u32 a1, void * a2, u32 size) { - // AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 257); - size <= ME_SEND_BUF_SIZE ? NULL : AGBAssert(gUnknown_8466F80, 257, gUnknown_8466FB8, 1); + AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 257); sub_8144888(&svr->unk_38, a1, a2, size); } + +void * sub_814505C(void * a0, void * a1) +{ + if (a0 != NULL) + return a0; + else + return a1; +} + +u32 sub_8145068(void * a0, void * a1) +{ + if (a1 < a0) + return 0; + else if (a1 == a0) + return 1; + else + return 2; +} + +u32 sub_8145080(struct mevent_srv_common * svr) +{ + svr->mainseqno = 4; + return 0; +} + +u32 sub_8145088(struct mevent_srv_common * svr) +{ + return 3; +} + +u32 sub_814508C(struct mevent_srv_common * svr) +{ + if (sub_8144844(&svr->unk_38)) + svr->mainseqno = 4; + return 1; +} + +u32 sub_81450A8(struct mevent_srv_common * svr) +{ + if (sub_8144850(&svr->unk_38)) + svr->mainseqno = 4; + return 1; +} + +u32 sub_81450C4(struct mevent_srv_common * svr) +{ + const struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; + void * ptr; + svr->cmdidx++; + + switch (cmd->instr) + { + case 0: + AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 354); + svr->mainseqno = 1; + svr->unk_04 = cmd->flag; + break; + case 1: + svr->mainseqno = 3; + break; + case 2: + AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 364); + sub_81448AC(&svr->unk_38, cmd->flag, svr->unk_14); + svr->mainseqno = 2; + break; + case 3: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 370); + svr->cmdidx = 0; + svr->cmdBuffer = cmd->parameter; + break; + case 5: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 376); + AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 377); + memcpy(svr->unk_20, svr->unk_14, 100); + break; + case 6: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 382); + AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 383); + svr->unk_04 = sub_81443D4(svr->unk_20); + break; + case 4: + if (svr->unk_04 == cmd->flag) + { + svr->cmdidx = 0; + svr->cmdBuffer = cmd->parameter; + } + break; + case 7: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 396); + ptr = sub_814505C(cmd->parameter, svr->unk_18); + svr->unk_04 = sub_8144418(ptr, svr->unk_20, ptr); + break; + case 8: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 402); + AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 403); + svr->unk_04 = *(u32 *)svr->unk_14; + break; + case 9: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 408); + ptr = sub_814505C(cmd->parameter, &svr->unk_34); + svr->unk_04 = sub_8144434(ptr, svr->unk_20, ptr); + break; + case 10: + AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 415); + svr->unk_04 = sub_81444B0(svr->unk_20, cmd->flag); + break; + case 11: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 420); + svr->unk_04 = sub_8144474(svr->unk_20, cmd->parameter); + break; + case 12: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 426); + svr->unk_04 = sub_8145068(cmd->parameter, *(void **)svr->unk_14); + break; + case 14: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 432); + sub_814501C(svr, 0x17, sub_814505C(cmd->parameter, svr->unk_1C), 444); + break; + case 13: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 438); + sub_814501C(svr, 0x16, sub_814505C(cmd->parameter, svr->unk_18), 332); + break; + case 16: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 444); + sub_814501C(svr, 0x18, sub_814505C(cmd->parameter, &svr->unk_34), 4); + break; + case 15: + if (cmd->parameter == NULL) + sub_814501C(svr, 0x19, svr->unk_24, svr->unk_28); + else + sub_814501C(svr, 0x19, cmd->parameter, cmd->flag); + break; + case 18: + if (cmd->parameter == NULL) + sub_814501C(svr, 0x10, svr->unk_2C, svr->unk_30); + else + sub_814501C(svr, 0x10, cmd->parameter, cmd->flag); + break; + case 19: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 466); + sub_814501C(svr, 0x1a, cmd->parameter, 188); + break; + case 20: + sub_814501C(svr, 0x15, cmd->parameter, cmd->flag); + break; + case 17: + sub_814501C(svr, 0x1c, cmd->parameter, cmd->flag); + break; + case 22: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 481); + memcpy(svr->unk_18, cmd->parameter, 332); + break; + case 23: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 486); + memcpy(svr->unk_1C, cmd->parameter, 444); + break; + case 21: + AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 491); + svr->unk_34 = *(void **)cmd->parameter; + break; + case 24: + svr->unk_24 = cmd->parameter; + svr->unk_28 = cmd->flag; + break; + case 25: + svr->unk_2C = cmd->parameter; + svr->unk_30 = cmd->flag; + break; + case 26: + AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 506); + memcpy(svr->unk_18, sav1_get_mevent_buffer_1(), 332); + sub_814410C(svr->unk_18); + break; + case 27: + AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 512); + memcpy(svr->unk_1C, sub_8143D58(), 444); + break; + case 28: + AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 517); + svr->unk_24 = sub_8069E48(); + break; + case 29: + sub_814501C(svr, 0x1b, cmd->parameter, cmd->flag); + break; + } + + return 1; +} + +static u32 (*const func_tbl[])(struct mevent_srv_common *) = { + sub_8145080, + sub_8145088, + sub_814508C, + sub_81450A8, + sub_81450C4 +}; + +u32 sub_8145600(struct mevent_srv_common * svr) +{ + u32 response; + AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 546); + response = func_tbl[svr->mainseqno](svr); + AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 548); + return response; +} diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c index 7e9639303..e544c0f42 100644 --- a/src/mevent_server_ish.c +++ b/src/mevent_server_ish.c @@ -13,27 +13,26 @@ extern u16 gBlockRecvBuffer[][128]; +struct mevent_cmd +{ + u32 instr; + u32 parameter; +}; + struct mevent_srv_ish { u32 unk_00; u32 unk_04; u32 mainseqno; u32 unk_0C; - u32 unk_10; + u32 cmdidx; void * unk_14; void * unk_18; - void * unk_1C; + struct mevent_cmd * cmdBuffer; void * unk_20; struct mevent_srv_sub unk_24; }; -struct mevent_cmd -{ - u32 instr; - bool32 flag; - u32 parameter; -}; - EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); @@ -85,7 +84,7 @@ void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 a1, u32 a2) svr->unk_0C = 0; svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE); svr->unk_18 = AllocZeroed(ME_SEND_BUF_SIZE); - svr->unk_1C = AllocZeroed(ME_SEND_BUF_SIZE); + svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); svr->unk_20 = AllocZeroed(0x40); sub_814485C(&svr->unk_24, a1, a2); } @@ -94,14 +93,14 @@ void sub_8144BC0(struct mevent_srv_ish * svr) { Free(svr->unk_14); Free(svr->unk_18); - Free(svr->unk_1C); + Free(svr->cmdBuffer); Free(svr->unk_20); } void sub_8144BE4(struct mevent_srv_ish * svr) { - memcpy(svr->unk_1C, svr->unk_18, ME_SEND_BUF_SIZE); - svr->unk_10 = 0; + memcpy(svr->cmdBuffer, svr->unk_18, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; } void sub_8144C00(struct mevent_srv_ish * svr, u32 a1, u32 a2) @@ -111,12 +110,10 @@ void sub_8144C00(struct mevent_srv_ish * svr, u32 a1, u32 a2) sub_8144888(&svr->unk_24, a1, svr->unk_14, 4); } -// funcs in array gUnknown_8466F60 - u32 sub_8144C34(struct mevent_srv_ish * svr) { - memcpy(svr->unk_1C, gUnknown_84687E0, ME_SEND_BUF_SIZE); - svr->unk_10 = 0; + memcpy(svr->cmdBuffer, gUnknown_84687E0, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; svr->mainseqno = 4; svr->unk_0C = 0; return 0; @@ -149,19 +146,19 @@ u32 sub_8144C80(struct mevent_srv_ish * svr) u32 sub_8144CA0(struct mevent_srv_ish * svr) { - u32 * r2 = (u32 *)svr->unk_1C + 2 * svr->unk_10; - ++svr->unk_10; - switch (r2[0]) + struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; + ++svr->cmdidx; + switch (cmd->instr) { case 0: break; case 1: - svr->unk_04 = r2[1]; + svr->unk_04 = cmd->parameter; svr->mainseqno = 1; svr->unk_0C = 0; break; case 2: - sub_81448AC(&svr->unk_24, r2[1], svr->unk_18); + sub_81448AC(&svr->unk_24, cmd->parameter, svr->unk_18); svr->mainseqno = 2; svr->unk_0C = 0; break; @@ -175,7 +172,7 @@ u32 sub_8144CA0(struct mevent_srv_ish * svr) svr->unk_0C = 0; break; case 19: - sub_8144C00(svr, 0x12, GetGameStat(r2[1])); + sub_8144C00(svr, 0x12, GetGameStat(cmd->parameter)); svr->mainseqno = 3; svr->unk_0C = 0; break; -- cgit v1.2.3 From 01aada9e93b5e132635feb214baa5d302c4f2154 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 1 Dec 2018 11:24:05 -0500 Subject: merge mevent server and document mevent_server_helpers --- src/mevent_server.c | 332 ++++++++++++++++++++++++++++++++++++++------ src/mevent_server_helpers.c | 211 ++++++++++++++++++++++++++++ src/mevent_server_ish.c | 305 ---------------------------------------- src/mevent_server_sub.c | 211 ---------------------------- 4 files changed, 497 insertions(+), 562 deletions(-) create mode 100644 src/mevent_server_helpers.c delete mode 100644 src/mevent_server_ish.c delete mode 100644 src/mevent_server_sub.c (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c index 2242dabce..2c0dcafad 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -11,42 +11,282 @@ #include "mevent.h" #include "mevent_server.h" -extern u16 gBlockRecvBuffer[][128]; +EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; +EWRAM_DATA struct mevent_srv_common * gUnknown_203F3C4 = NULL; + +static void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); +static u32 mevent_srv_ish_exec(struct mevent_srv_ish *); +static void sub_8144BC0(struct mevent_srv_ish *); +static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32); +static void mevent_srv_free_resources(struct mevent_srv_common *); +static u32 sub_8145600(struct mevent_srv_common *); -struct mevent_cmd +void sub_8144AEC(void) { - u32 instr; - bool32 flag; - void * parameter; -}; + gUnknown_203F3C0 = AllocZeroed(sizeof(struct mevent_srv_ish)); + mevent_srv_ish_init(gUnknown_203F3C0, 1, 0); +} -struct mevent_srv_common -{ - u32 unk_00; - u32 unk_04; - u32 mainseqno; - u32 cmdidx; - const struct mevent_cmd * cmdBuffer; - void * unk_14; - struct MEventBuffer_32E0_Sub * unk_18; - struct MEventBuffer_3120_Sub * unk_1C; - struct MEventStruct_Unk1442CC * unk_20; - void * unk_24; - u32 unk_28; - void * unk_2C; - u32 unk_30; - void * unk_34; - struct mevent_srv_sub unk_38; -}; +u32 sub_8144B0C(u16 * a0) +{ + u32 result; + if (gUnknown_203F3C0 == NULL) + return 6; + result = mevent_srv_ish_exec(gUnknown_203F3C0); + if (result == 6) + { + *a0 = gUnknown_203F3C0->unk_04; + sub_8144BC0(gUnknown_203F3C0); + Free(gUnknown_203F3C0); + gUnknown_203F3C0 = NULL; + } + return result; +} -EWRAM_DATA struct mevent_srv_common * gUnknown_203F3C4 = NULL; +void sub_8144B48(void) +{ + gUnknown_203F3C0->unk_0C++; +} + +void * sub_8144B58(void) +{ + return gUnknown_203F3C0->unk_20; +} + +void sub_8144B64(u32 a0) +{ + gUnknown_203F3C0->unk_04 = a0; +} + +static void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 a1, u32 a2) +{ + svr->unk_00 = 0; + svr->mainseqno = 0; + svr->unk_0C = 0; + svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE); + svr->unk_18 = AllocZeroed(ME_SEND_BUF_SIZE); + svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->unk_20 = AllocZeroed(0x40); + mevent_srv_sub_init(&svr->unk_24, a1, a2); +} + +static void sub_8144BC0(struct mevent_srv_ish * svr) +{ + Free(svr->unk_14); + Free(svr->unk_18); + Free(svr->cmdBuffer); + Free(svr->unk_20); +} + +static void sub_8144BE4(struct mevent_srv_ish * svr) +{ + memcpy(svr->cmdBuffer, svr->unk_18, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; +} + +static void sub_8144C00(struct mevent_srv_ish * svr, u32 a1, u32 a2) +{ + CpuFill32(0, svr->unk_14, ME_SEND_BUF_SIZE); + *(u32 *)svr->unk_14 = a2; + mevent_srv_sub_init_send(&svr->unk_24, a1, svr->unk_14, 4); +} + +static u32 ish_mainseq_0(struct mevent_srv_ish * svr) +{ + // init + memcpy(svr->cmdBuffer, gUnknown_84687E0, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; + svr->mainseqno = 4; + svr->unk_0C = 0; + return 0; +} + +static u32 ish_mainseq_1(struct mevent_srv_ish * svr) +{ + // done + return 6; +} + +static u32 ish_mainseq_2(struct mevent_srv_ish * svr) +{ + + if (mevent_srv_sub_recv(&svr->unk_24)) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +static u32 ish_mainseq_3(struct mevent_srv_ish * svr) +{ + if (mevent_srv_sub_send(&svr->unk_24)) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +static u32 ish_mainseq_4(struct mevent_srv_ish * svr) +{ + struct mevent_cmd_ish * cmd = &svr->cmdBuffer[svr->cmdidx]; + ++svr->cmdidx; + switch (cmd->instr) + { + case 0: + break; + case 1: + svr->unk_04 = cmd->parameter; + svr->mainseqno = 1; + svr->unk_0C = 0; + break; + case 2: + mevent_srv_sub_init_recv(&svr->unk_24, cmd->parameter, svr->unk_18); + svr->mainseqno = 2; + svr->unk_0C = 0; + break; + case 3: + svr->mainseqno = 3; + svr->unk_0C = 0; + break; + case 20: + mevent_srv_sub_init_send(&svr->unk_24, 0x14, svr->unk_14, 0); + svr->mainseqno = 3; + svr->unk_0C = 0; + break; + case 19: + sub_8144C00(svr, 0x12, GetGameStat(cmd->parameter)); + svr->mainseqno = 3; + svr->unk_0C = 0; + break; + case 6: + if (svr->unk_04 == 0) + sub_8144BE4(svr); + break; + case 7: + if (svr->unk_04 == 1) + sub_8144BE4(svr); + break; + case 4: + sub_8144BE4(svr); + break; + case 5: + memcpy(svr->unk_20, svr->unk_18, 0x40); + svr->mainseqno = 5; + svr->unk_0C = 0; + return 2; + case 11: + memcpy(svr->unk_20, svr->unk_18, 0x40); + svr->mainseqno = 5; + svr->unk_0C = 0; + return 3; + case 12: + memcpy(svr->unk_20, svr->unk_18, 0x40); + svr->mainseqno = 5; + svr->unk_0C = 0; + return 5; + case 13: + svr->mainseqno = 5; + svr->unk_0C = 0; + return 4; + case 8: + sub_81442CC(svr->unk_14); + mevent_srv_sub_init_send(&svr->unk_24, 0x11, svr->unk_14, 0x64); + break; + case 14: + sub_8144C00(svr, 0x13, svr->unk_04); + break; + case 10: + sub_8143F68(svr->unk_18); + break; + case 9: + if (!sub_8143EF4(svr->unk_18)) + { + sub_8143DC8(svr->unk_18); + sub_8144C00(svr, 0x13, 0); + } + else + sub_8144C00(svr, 0x13, 1); + break; + case 15: + svr->mainseqno = 6; + svr->unk_0C = 0; + break; + case 16: + sub_8144254(svr->unk_18); + break; + case 17: + sub_8069EA4(svr->unk_18, 1000); + break; + case 18: + memcpy(gSaveBlock2Ptr->unk_4A0, svr->unk_18, 0xbc); + sub_80E7490(); + break; + case 21: + memcpy(gDecompressionBuffer, svr->unk_18, ME_SEND_BUF_SIZE); + svr->mainseqno = 7; + svr->unk_0C = 0; + break; + } + + return 1; +} + +static u32 ish_mainseq_5(struct mevent_srv_ish * svr) +{ + if (svr->unk_0C) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +static u32 ish_mainseq_6(struct mevent_srv_ish * svr) +{ + switch (svr->unk_0C) + { + case 0: + sub_80DA89C(svr->unk_18); + ++svr->unk_0C; + break; + case 1: + if (!sub_80DA8B0(&svr->unk_04)) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + break; + } + return 1; +} -void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32); -void mevent_srv_free_resources(struct mevent_srv_common *); -u32 sub_8145600(struct mevent_srv_common *); +static u32 ish_mainseq_7(struct mevent_srv_ish * svr) +{ + u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; + if (func(&svr->unk_04, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} -extern const u8 gUnknown_8468B6C[]; -extern const u8 gUnknown_8468BCC[]; +static u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr) +{ + u32 (*funcs[])(struct mevent_srv_ish *) = { + ish_mainseq_0, + ish_mainseq_1, + ish_mainseq_2, + ish_mainseq_3, + ish_mainseq_4, + ish_mainseq_5, + ish_mainseq_6, + ish_mainseq_7 + }; + return funcs[svr->mainseqno](svr); +} void sub_8144F1C(void) { @@ -76,7 +316,7 @@ u32 sub_8144F64(u16 * a0) return result; } -void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 a2, u32 a3) +static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 a2, u32 a3) { svr->unk_00 = 0; svr->mainseqno = 0; @@ -86,10 +326,10 @@ void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 svr->unk_20 = AllocZeroed(100); svr->cmdBuffer = a1; svr->cmdidx = 0; - sub_814485C(&svr->unk_38, a2, a3); + mevent_srv_sub_init(&svr->unk_38, a2, a3); } -void mevent_srv_free_resources(struct mevent_srv_common * svr) +static void mevent_srv_free_resources(struct mevent_srv_common * svr) { Free(svr->unk_18); Free(svr->unk_1C); @@ -97,13 +337,13 @@ void mevent_srv_free_resources(struct mevent_srv_common * svr) Free(svr->unk_20); } -void sub_814501C(struct mevent_srv_common * svr, u32 a1, void * a2, u32 size) +static void sub_814501C(struct mevent_srv_common * svr, u32 a1, void * a2, u32 size) { AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 257); - sub_8144888(&svr->unk_38, a1, a2, size); + mevent_srv_sub_init_send(&svr->unk_38, a1, a2, size); } -void * sub_814505C(void * a0, void * a1) +static void * sub_814505C(void * a0, void * a1) { if (a0 != NULL) return a0; @@ -111,7 +351,7 @@ void * sub_814505C(void * a0, void * a1) return a1; } -u32 sub_8145068(void * a0, void * a1) +static u32 sub_8145068(void * a0, void * a1) { if (a1 < a0) return 0; @@ -121,32 +361,32 @@ u32 sub_8145068(void * a0, void * a1) return 2; } -u32 sub_8145080(struct mevent_srv_common * svr) +static u32 sub_8145080(struct mevent_srv_common * svr) { svr->mainseqno = 4; return 0; } -u32 sub_8145088(struct mevent_srv_common * svr) +static u32 sub_8145088(struct mevent_srv_common * svr) { return 3; } -u32 sub_814508C(struct mevent_srv_common * svr) +static u32 sub_814508C(struct mevent_srv_common * svr) { - if (sub_8144844(&svr->unk_38)) + if (mevent_srv_sub_recv(&svr->unk_38)) svr->mainseqno = 4; return 1; } -u32 sub_81450A8(struct mevent_srv_common * svr) +static u32 sub_81450A8(struct mevent_srv_common * svr) { - if (sub_8144850(&svr->unk_38)) + if (mevent_srv_sub_send(&svr->unk_38)) svr->mainseqno = 4; return 1; } -u32 sub_81450C4(struct mevent_srv_common * svr) +static u32 sub_81450C4(struct mevent_srv_common * svr) { const struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; void * ptr; @@ -164,7 +404,7 @@ u32 sub_81450C4(struct mevent_srv_common * svr) break; case 2: AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 364); - sub_81448AC(&svr->unk_38, cmd->flag, svr->unk_14); + mevent_srv_sub_init_recv(&svr->unk_38, cmd->flag, svr->unk_14); svr->mainseqno = 2; break; case 3: @@ -299,7 +539,7 @@ static u32 (*const func_tbl[])(struct mevent_srv_common *) = { sub_81450C4 }; -u32 sub_8145600(struct mevent_srv_common * svr) +static u32 sub_8145600(struct mevent_srv_common * svr) { u32 response; AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 546); diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c new file mode 100644 index 000000000..a5ce595b0 --- /dev/null +++ b/src/mevent_server_helpers.c @@ -0,0 +1,211 @@ +#include "global.h" +#include "malloc.h" +#include "decompress.h" +#include "util.h" +#include "link.h" +#include "link_rfu.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" +#include "mystery_event_script.h" +#include "mevent.h" +#include "mevent_server.h" + +static u32 mevent_receive_func(struct mevent_srv_sub *); +static u32 mevent_send_func(struct mevent_srv_sub *); + +u32 mevent_srv_sub_recv(struct mevent_srv_sub * svr) +{ + return svr->recvFunc(svr); +} + +u32 mevent_srv_sub_send(struct mevent_srv_sub * svr) +{ + return svr->sendFunc(svr); +} + +void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recvPlayerNo) +{ + svr->sendPlayerNo = sendPlayerNo; + svr->recvPlayerNo = recvPlayerNo; + svr->seqno = 0; + svr->sendCRC = 0; + svr->sendSize = 0; + svr->sendCounter = 0; + svr->recvCRC = 0; + svr->recvSize = 0; + svr->recvCounter = 0; + svr->sendBfr = NULL; + svr->recvBfr = NULL; + svr->sendFunc = mevent_send_func; + svr->recvFunc = mevent_receive_func; +} + +void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 a1, const void * src, u32 size) +{ + svr->seqno = 0; + svr->sendIdent = a1; + svr->sendCounter = 0; + svr->sendCRC = 0; + if (size != 0) + svr->sendSize = size; + else + svr->sendSize = ME_SEND_BUF_SIZE; + svr->sendBfr = src; +} + +void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void * dest) +{ + svr->seqno = 0; + svr->recvIdent = ident; + svr->recvCounter = 0; + svr->recvCRC = 0; + svr->recvSize = 0; + svr->recvBfr = dest; +} + +static void mevent_recv_block(u32 recv_idx, void * dest, size_t size) +{ + memcpy(dest, gBlockRecvBuffer[recv_idx], size); +} + +static bool32 mevent_has_received(u32 recv_idx) +{ + if ((GetBlockReceivedStatus() >> recv_idx) & 1) + return TRUE; + else + return FALSE; +} + +static void mevent_reset_recv(u32 recv_idx) +{ + ResetBlockReceivedFlag(recv_idx); +} + +static bool32 mevent_receive_func(struct mevent_srv_sub * svr) +{ + struct send_recv_header header; + + switch (svr->seqno) + { + case 0: + if (mevent_has_received(svr->recvPlayerNo)) + { + mevent_recv_block(svr->recvPlayerNo, &header, sizeof(header)); + svr->recvSize = header.size; + svr->recvCRC = header.crc; + if (svr->recvSize > ME_SEND_BUF_SIZE) + { + sub_80FA190(); + return FALSE; + } + else if (svr->recvIdent != header.ident) + { + sub_80FA190(); + return FALSE; + } + else + { + svr->recvCounter = 0; + mevent_reset_recv(svr->recvPlayerNo); + ++svr->seqno; + } + } + break; + case 1: + if (mevent_has_received(svr->recvPlayerNo)) + { + size_t r3 = svr->recvCounter * 252; + if (svr->recvSize - r3 <= 252) + { + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, svr->recvSize - r3); + ++svr->recvCounter; + ++svr->seqno; + } + else + { + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, 252); + ++svr->recvCounter; + } + mevent_reset_recv(svr->recvPlayerNo); + } + break; + case 2: + if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC) + { + sub_80FA190(); + return FALSE; + } + else + { + svr->seqno = 0; + return TRUE; + } + break; + + } + + return FALSE; +} + +static bool32 mevent_send_func(struct mevent_srv_sub * svr) +{ + struct send_recv_header header; + + switch (svr->seqno) + { + case 0: + if (sub_800A4BC()) + { + header.ident = svr->sendIdent; + header.size = svr->sendSize; + header.crc = CalcCRC16WithTable(svr->sendBfr, svr->sendSize); + svr->sendCRC = header.crc; + svr->sendCounter = 0; + SendBlock(0, &header, sizeof(header)); + ++svr->seqno; + } + break; + case 1: + if (sub_800A4BC()) + { + if (mevent_has_received(svr->sendPlayerNo)) + { + size_t r3; + mevent_reset_recv(svr->sendPlayerNo); + r3 = 252 * svr->sendCounter; + if (svr->sendSize - r3 <= 252) + { + SendBlock(0, svr->sendBfr + r3, svr->sendSize - r3); + ++svr->sendCounter; + ++svr->seqno; + } + else + { + SendBlock(0, svr->sendBfr + r3, 252); + ++svr->sendCounter; + } + } + } + break; + case 2: + if (sub_800A4BC()) + { + if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC) + sub_80FA190(); + else + ++svr->seqno; + } + break; + case 3: + if (mevent_has_received(svr->sendPlayerNo)) + { + mevent_reset_recv(svr->sendPlayerNo); + svr->seqno = 0; + return TRUE; + } + break; + } + + return FALSE; +} diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c deleted file mode 100644 index e544c0f42..000000000 --- a/src/mevent_server_ish.c +++ /dev/null @@ -1,305 +0,0 @@ -#include "global.h" -#include "malloc.h" -#include "decompress.h" -#include "util.h" -#include "link.h" -#include "link_rfu.h" -#include "overworld.h" -#include "script.h" -#include "battle_tower.h" -#include "mystery_event_script.h" -#include "mevent.h" -#include "mevent_server.h" - -extern u16 gBlockRecvBuffer[][128]; - -struct mevent_cmd -{ - u32 instr; - u32 parameter; -}; - -struct mevent_srv_ish -{ - u32 unk_00; - u32 unk_04; - u32 mainseqno; - u32 unk_0C; - u32 cmdidx; - void * unk_14; - void * unk_18; - struct mevent_cmd * cmdBuffer; - void * unk_20; - struct mevent_srv_sub unk_24; -}; - -EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; - -void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); -u32 mevent_srv_ish_exec(struct mevent_srv_ish *); -void sub_8144BC0(struct mevent_srv_ish *); -extern const u8 gUnknown_84687E0[]; - -void sub_8144AEC(void) -{ - gUnknown_203F3C0 = AllocZeroed(sizeof(struct mevent_srv_ish)); - mevent_srv_ish_init(gUnknown_203F3C0, 1, 0); -} - -u32 sub_8144B0C(u16 * a0) -{ - u32 result; - if (gUnknown_203F3C0 == NULL) - return 6; - result = mevent_srv_ish_exec(gUnknown_203F3C0); - if (result == 6) - { - *a0 = gUnknown_203F3C0->unk_04; - sub_8144BC0(gUnknown_203F3C0); - Free(gUnknown_203F3C0); - gUnknown_203F3C0 = NULL; - } - return result; -} - -void sub_8144B48(void) -{ - gUnknown_203F3C0->unk_0C++; -} - -void * sub_8144B58(void) -{ - return gUnknown_203F3C0->unk_20; -} - -void sub_8144B64(u32 a0) -{ - gUnknown_203F3C0->unk_04 = a0; -} - -void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 a1, u32 a2) -{ - svr->unk_00 = 0; - svr->mainseqno = 0; - svr->unk_0C = 0; - svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE); - svr->unk_18 = AllocZeroed(ME_SEND_BUF_SIZE); - svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->unk_20 = AllocZeroed(0x40); - sub_814485C(&svr->unk_24, a1, a2); -} - -void sub_8144BC0(struct mevent_srv_ish * svr) -{ - Free(svr->unk_14); - Free(svr->unk_18); - Free(svr->cmdBuffer); - Free(svr->unk_20); -} - -void sub_8144BE4(struct mevent_srv_ish * svr) -{ - memcpy(svr->cmdBuffer, svr->unk_18, ME_SEND_BUF_SIZE); - svr->cmdidx = 0; -} - -void sub_8144C00(struct mevent_srv_ish * svr, u32 a1, u32 a2) -{ - CpuFill32(0, svr->unk_14, ME_SEND_BUF_SIZE); - *(u32 *)svr->unk_14 = a2; - sub_8144888(&svr->unk_24, a1, svr->unk_14, 4); -} - -u32 sub_8144C34(struct mevent_srv_ish * svr) -{ - memcpy(svr->cmdBuffer, gUnknown_84687E0, ME_SEND_BUF_SIZE); - svr->cmdidx = 0; - svr->mainseqno = 4; - svr->unk_0C = 0; - return 0; -} - -u32 sub_8144C5C(struct mevent_srv_ish * svr) -{ - return 6; -} - -u32 sub_8144C60(struct mevent_srv_ish * svr) -{ - if (sub_8144844(&svr->unk_24)) - { - svr->mainseqno = 4; - svr->unk_0C = 0; - } - return 1; -} - -u32 sub_8144C80(struct mevent_srv_ish * svr) -{ - if (sub_8144850(&svr->unk_24)) - { - svr->mainseqno = 4; - svr->unk_0C = 0; - } - return 1; -} - -u32 sub_8144CA0(struct mevent_srv_ish * svr) -{ - struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; - ++svr->cmdidx; - switch (cmd->instr) - { - case 0: - break; - case 1: - svr->unk_04 = cmd->parameter; - svr->mainseqno = 1; - svr->unk_0C = 0; - break; - case 2: - sub_81448AC(&svr->unk_24, cmd->parameter, svr->unk_18); - svr->mainseqno = 2; - svr->unk_0C = 0; - break; - case 3: - svr->mainseqno = 3; - svr->unk_0C = 0; - break; - case 20: - sub_8144888(&svr->unk_24, 0x14, svr->unk_14, 0); - svr->mainseqno = 3; - svr->unk_0C = 0; - break; - case 19: - sub_8144C00(svr, 0x12, GetGameStat(cmd->parameter)); - svr->mainseqno = 3; - svr->unk_0C = 0; - break; - case 6: - if (svr->unk_04 == 0) - sub_8144BE4(svr); - break; - case 7: - if (svr->unk_04 == 1) - sub_8144BE4(svr); - break; - case 4: - sub_8144BE4(svr); - break; - case 5: - memcpy(svr->unk_20, svr->unk_18, 0x40); - svr->mainseqno = 5; - svr->unk_0C = 0; - return 2; - case 11: - memcpy(svr->unk_20, svr->unk_18, 0x40); - svr->mainseqno = 5; - svr->unk_0C = 0; - return 3; - case 12: - memcpy(svr->unk_20, svr->unk_18, 0x40); - svr->mainseqno = 5; - svr->unk_0C = 0; - return 5; - case 13: - svr->mainseqno = 5; - svr->unk_0C = 0; - return 4; - case 8: - sub_81442CC(svr->unk_14); - sub_8144888(&svr->unk_24, 0x11, svr->unk_14, 0x64); - break; - case 14: - sub_8144C00(svr, 0x13, svr->unk_04); - break; - case 10: - sub_8143F68(svr->unk_18); - break; - case 9: - if (!sub_8143EF4(svr->unk_18)) - { - sub_8143DC8(svr->unk_18); - sub_8144C00(svr, 0x13, 0); - } - else - sub_8144C00(svr, 0x13, 1); - break; - case 15: - svr->mainseqno = 6; - svr->unk_0C = 0; - break; - case 16: - sub_8144254(svr->unk_18); - break; - case 17: - sub_8069EA4(svr->unk_18, 1000); - break; - case 18: - memcpy(gSaveBlock2Ptr->unk_4A0, svr->unk_18, 0xbc); - sub_80E7490(); - break; - case 21: - memcpy(gDecompressionBuffer, svr->unk_18, ME_SEND_BUF_SIZE); - svr->mainseqno = 7; - svr->unk_0C = 0; - break; - } - - return 1; -} - -u32 sub_8144E6C(struct mevent_srv_ish * svr) -{ - if (svr->unk_0C) - { - svr->mainseqno = 4; - svr->unk_0C = 0; - } - return 1; -} - -u32 sub_8144E84(struct mevent_srv_ish * svr) -{ - switch (svr->unk_0C) - { - case 0: - sub_80DA89C(svr->unk_18); - ++svr->unk_0C; - break; - case 1: - if (!sub_80DA8B0(&svr->unk_04)) - { - svr->mainseqno = 4; - svr->unk_0C = 0; - } - break; - } - return 1; -} - -u32 sub_8144EBC(struct mevent_srv_ish * svr) -{ - u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; - if (func(&svr->unk_04, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) - { - svr->mainseqno = 4; - svr->unk_0C = 0; - } - return 1; -} - -u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr) -{ - u32 (*funcs[])(struct mevent_srv_ish *) = { - sub_8144C34, - sub_8144C5C, - sub_8144C60, - sub_8144C80, - sub_8144CA0, - sub_8144E6C, - sub_8144E84, - sub_8144EBC - }; - return funcs[svr->mainseqno](svr); -} diff --git a/src/mevent_server_sub.c b/src/mevent_server_sub.c deleted file mode 100644 index 83b8f62ca..000000000 --- a/src/mevent_server_sub.c +++ /dev/null @@ -1,211 +0,0 @@ -#include "global.h" -#include "malloc.h" -#include "decompress.h" -#include "util.h" -#include "link.h" -#include "link_rfu.h" -#include "overworld.h" -#include "script.h" -#include "battle_tower.h" -#include "mystery_event_script.h" -#include "mevent.h" -#include "mevent_server.h" - -u32 sub_814490C(struct mevent_srv_sub *); -u32 sub_81449E0(struct mevent_srv_sub *); - -u32 sub_8144844(struct mevent_srv_sub * svr) -{ - return svr->unk_20(svr); -} - -u32 sub_8144850(struct mevent_srv_sub * svr) -{ - return svr->unk_24(svr); -} - -void sub_814485C(struct mevent_srv_sub * svr, u32 a1, u32 a2) -{ - svr->unk_04 = a1; - svr->unk_05 = a2; - svr->unk_00 = 0; - svr->unk_12 = 0; - svr->unk_14 = 0; - svr->unk_10 = 0; - svr->unk_0A = 0; - svr->unk_0C = 0; - svr->unk_08 = 0; - svr->unk_1C = NULL; - svr->unk_18 = NULL; - svr->unk_24 = sub_81449E0; - svr->unk_20 = sub_814490C; -} - -void sub_8144888(struct mevent_srv_sub * svr, u32 a1, void * a2, u32 a3) -{ - svr->unk_00 = 0; - svr->unk_0E = a1; - svr->unk_10 = 0; - svr->unk_12 = 0; - if (a3 != 0) - svr->unk_14 = a3; - else - svr->unk_14 = ME_SEND_BUF_SIZE; - svr->unk_1C = a2; -} - -void sub_81448AC(struct mevent_srv_sub * svr, u32 a1, void * a2) -{ - svr->unk_00 = 0; - svr->unk_06 = a1; - svr->unk_08 = 0; - svr->unk_0A = 0; - svr->unk_0C = 0; - svr->unk_18 = a2; -} - -void sub_81448BC(u32 recv_idx, void * dest, size_t size) -{ - memcpy(dest, gBlockRecvBuffer[recv_idx], size); -} - -bool32 sub_81448D8(u32 recv_idx) -{ - if ((GetBlockReceivedStatus() >> recv_idx) & 1) - return TRUE; - else - return FALSE; -} - -void sub_81448FC(u32 recv_idx) -{ - ResetBlockReceivedFlag(recv_idx); -} - -bool32 sub_814490C(struct mevent_srv_sub * svr) -{ - struct send_recv_buff buff; - - switch (svr->unk_00) - { - case 0: - if (sub_81448D8(svr->unk_05)) - { - sub_81448BC(svr->unk_05, &buff, sizeof(buff)); - svr->unk_0C = buff.unk4; - svr->unk_0A = buff.unk2; - if (svr->unk_0C > ME_SEND_BUF_SIZE) - { - sub_80FA190(); - return FALSE; - } - else if (svr->unk_06 != buff.unk0) - { - sub_80FA190(); - return FALSE; - } - else - { - svr->unk_08 = 0; - sub_81448FC(svr->unk_05); - ++svr->unk_00; - } - } - break; - case 1: - if (sub_81448D8(svr->unk_05)) - { - size_t r3 = svr->unk_08 * 252; - if (svr->unk_0C - r3 <= 252) - { - sub_81448BC(svr->unk_05, svr->unk_18 + r3, svr->unk_0C - r3); - ++svr->unk_08; - ++svr->unk_00; - } - else - { - sub_81448BC(svr->unk_05, svr->unk_18 + r3, 252); - ++svr->unk_08; - } - sub_81448FC(svr->unk_05); - } - break; - case 2: - if (CalcCRC16WithTable(svr->unk_18, svr->unk_0C) != svr->unk_0A) - { - sub_80FA190(); - return FALSE; - } - else - { - svr->unk_00 = 0; - return TRUE; - } - break; - - } - - return FALSE; -} - -bool32 sub_81449E0(struct mevent_srv_sub * svr) -{ - struct send_recv_buff buff; - - switch (svr->unk_00) - { - case 0: - if (sub_800A4BC()) - { - buff.unk0 = svr->unk_0E; - buff.unk4 = svr->unk_14; - buff.unk2 = CalcCRC16WithTable(svr->unk_1C, svr->unk_14); - svr->unk_12 = buff.unk2; - svr->unk_10 = 0; - SendBlock(0, &buff, sizeof(buff)); - ++svr->unk_00; - } - break; - case 1: - if (sub_800A4BC()) - { - if (sub_81448D8(svr->unk_04)) - { - size_t r3; - sub_81448FC(svr->unk_04); - r3 = 252 * svr->unk_10; - if (svr->unk_14 - r3 <= 252) - { - SendBlock(0, svr->unk_1C + r3, svr->unk_14 - r3); - ++svr->unk_10; - ++svr->unk_00; - } - else - { - SendBlock(0, svr->unk_1C + r3, 252); - ++svr->unk_10; - } - } - } - break; - case 2: - if (sub_800A4BC()) - { - if (CalcCRC16WithTable(svr->unk_1C, svr->unk_14) != svr->unk_12) - sub_80FA190(); - else - ++svr->unk_00; - } - break; - case 3: - if (sub_81448D8(svr->unk_04)) - { - sub_81448FC(svr->unk_04); - svr->unk_00 = 0; - return TRUE; - } - break; - } - - return FALSE; -} -- cgit v1.2.3 From d4d209428107f0530b4018b6373c6f0bf697793e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 1 Dec 2018 11:24:48 -0500 Subject: also rename r3 in the mevent helper send and recv functions --- src/mevent_server_helpers.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c index a5ce595b0..7e2119088 100644 --- a/src/mevent_server_helpers.c +++ b/src/mevent_server_helpers.c @@ -115,16 +115,16 @@ static bool32 mevent_receive_func(struct mevent_srv_sub * svr) case 1: if (mevent_has_received(svr->recvPlayerNo)) { - size_t r3 = svr->recvCounter * 252; - if (svr->recvSize - r3 <= 252) + size_t blocksiz = svr->recvCounter * 252; + if (svr->recvSize - blocksiz <= 252) { - mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, svr->recvSize - r3); + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, svr->recvSize - blocksiz); ++svr->recvCounter; ++svr->seqno; } else { - mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, 252); + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, 252); ++svr->recvCounter; } mevent_reset_recv(svr->recvPlayerNo); @@ -171,18 +171,18 @@ static bool32 mevent_send_func(struct mevent_srv_sub * svr) { if (mevent_has_received(svr->sendPlayerNo)) { - size_t r3; + size_t blocksiz; mevent_reset_recv(svr->sendPlayerNo); - r3 = 252 * svr->sendCounter; - if (svr->sendSize - r3 <= 252) + blocksiz = 252 * svr->sendCounter; + if (svr->sendSize - blocksiz <= 252) { - SendBlock(0, svr->sendBfr + r3, svr->sendSize - r3); + SendBlock(0, svr->sendBfr + blocksiz, svr->sendSize - blocksiz); ++svr->sendCounter; ++svr->seqno; } else { - SendBlock(0, svr->sendBfr + r3, 252); + SendBlock(0, svr->sendBfr + blocksiz, 252); ++svr->sendCounter; } } -- cgit v1.2.3 From 8473bf1bcd8ef38bcb7db0125b4840ee23b6e8c6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 1 Dec 2018 11:31:54 -0500 Subject: More symbol names in mevent server --- src/mevent_server.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c index 2c0dcafad..fff22acdb 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -109,7 +109,7 @@ static u32 ish_mainseq_1(struct mevent_srv_ish * svr) static u32 ish_mainseq_2(struct mevent_srv_ish * svr) { - + // do recv if (mevent_srv_sub_recv(&svr->unk_24)) { svr->mainseqno = 4; @@ -120,6 +120,7 @@ static u32 ish_mainseq_2(struct mevent_srv_ish * svr) static u32 ish_mainseq_3(struct mevent_srv_ish * svr) { + // do send if (mevent_srv_sub_send(&svr->unk_24)) { svr->mainseqno = 4; @@ -130,6 +131,7 @@ static u32 ish_mainseq_3(struct mevent_srv_ish * svr) static u32 ish_mainseq_4(struct mevent_srv_ish * svr) { + // process command struct mevent_cmd_ish * cmd = &svr->cmdBuffer[svr->cmdidx]; ++svr->cmdidx; switch (cmd->instr) @@ -235,6 +237,7 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr) static u32 ish_mainseq_5(struct mevent_srv_ish * svr) { + // wait unk_0C if (svr->unk_0C) { svr->mainseqno = 4; @@ -245,6 +248,7 @@ static u32 ish_mainseq_5(struct mevent_srv_ish * svr) static u32 ish_mainseq_6(struct mevent_srv_ish * svr) { + // ??? switch (svr->unk_0C) { case 0: @@ -264,6 +268,7 @@ static u32 ish_mainseq_6(struct mevent_srv_ish * svr) static u32 ish_mainseq_7(struct mevent_srv_ish * svr) { + // exec arbitrary code u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; if (func(&svr->unk_04, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) { @@ -361,33 +366,38 @@ static u32 sub_8145068(void * a0, void * a1) return 2; } -static u32 sub_8145080(struct mevent_srv_common * svr) +static u32 common_mainseq_0(struct mevent_srv_common * svr) { + // start svr->mainseqno = 4; return 0; } -static u32 sub_8145088(struct mevent_srv_common * svr) +static u32 common_mainseq_1(struct mevent_srv_common * svr) { + // done return 3; } -static u32 sub_814508C(struct mevent_srv_common * svr) +static u32 common_mainseq_2(struct mevent_srv_common * svr) { + // do recv if (mevent_srv_sub_recv(&svr->unk_38)) svr->mainseqno = 4; return 1; } -static u32 sub_81450A8(struct mevent_srv_common * svr) +static u32 common_mainseq_3(struct mevent_srv_common * svr) { + // do send if (mevent_srv_sub_send(&svr->unk_38)) svr->mainseqno = 4; return 1; } -static u32 sub_81450C4(struct mevent_srv_common * svr) +static u32 common_mainseq_4(struct mevent_srv_common * svr) { + // process command const struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; void * ptr; svr->cmdidx++; @@ -532,11 +542,11 @@ static u32 sub_81450C4(struct mevent_srv_common * svr) } static u32 (*const func_tbl[])(struct mevent_srv_common *) = { - sub_8145080, - sub_8145088, - sub_814508C, - sub_81450A8, - sub_81450C4 + common_mainseq_0, + common_mainseq_1, + common_mainseq_2, + common_mainseq_3, + common_mainseq_4 }; static u32 sub_8145600(struct mevent_srv_common * svr) -- cgit v1.2.3 From 2fbe528d5e2db723db338cb2d1635f0fa76ac905 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 1 Dec 2018 20:27:35 -0500 Subject: Attempt to give meaningful names to mevent srv fields --- src/mevent_server.c | 308 ++++++++++++++++++++++---------------------- src/mevent_server_helpers.c | 4 +- 2 files changed, 158 insertions(+), 154 deletions(-) (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c index fff22acdb..d5a9a0c0e 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -11,84 +11,88 @@ #include "mevent.h" #include "mevent_server.h" -EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; -EWRAM_DATA struct mevent_srv_common * gUnknown_203F3C4 = NULL; +EWRAM_DATA struct mevent_srv_ish * s_mevent_srv_ish_ptr = NULL; +EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL; static void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); static u32 mevent_srv_ish_exec(struct mevent_srv_ish *); -static void sub_8144BC0(struct mevent_srv_ish *); +static void mevent_srv_ish_free_resources(struct mevent_srv_ish *); static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32); static void mevent_srv_free_resources(struct mevent_srv_common *); -static u32 sub_8145600(struct mevent_srv_common *); +static u32 mevent_srv_exec_common(struct mevent_srv_common *); -void sub_8144AEC(void) +extern const u8 gUnknown_84687E0[]; +extern const struct mevent_cmd gUnknown_8468B6C[]; +extern const struct mevent_cmd gUnknown_8468BCC[]; + +void mevent_srv_ish_do_init(void) { - gUnknown_203F3C0 = AllocZeroed(sizeof(struct mevent_srv_ish)); - mevent_srv_ish_init(gUnknown_203F3C0, 1, 0); + s_mevent_srv_ish_ptr = AllocZeroed(sizeof(struct mevent_srv_ish)); + mevent_srv_ish_init(s_mevent_srv_ish_ptr, 1, 0); } -u32 sub_8144B0C(u16 * a0) +u32 mevent_srv_ish_do_exec(u16 * a0) { u32 result; - if (gUnknown_203F3C0 == NULL) + if (s_mevent_srv_ish_ptr == NULL) return 6; - result = mevent_srv_ish_exec(gUnknown_203F3C0); + result = mevent_srv_ish_exec(s_mevent_srv_ish_ptr); if (result == 6) { - *a0 = gUnknown_203F3C0->unk_04; - sub_8144BC0(gUnknown_203F3C0); - Free(gUnknown_203F3C0); - gUnknown_203F3C0 = NULL; + *a0 = s_mevent_srv_ish_ptr->param; + mevent_srv_ish_free_resources(s_mevent_srv_ish_ptr); + Free(s_mevent_srv_ish_ptr); + s_mevent_srv_ish_ptr = NULL; } return result; } -void sub_8144B48(void) +void mevent_srv_ish_inc_flag(void) { - gUnknown_203F3C0->unk_0C++; + s_mevent_srv_ish_ptr->flag++; } -void * sub_8144B58(void) +void * mevent_srv_ish_get_buffer(void) { - return gUnknown_203F3C0->unk_20; + return s_mevent_srv_ish_ptr->buffer; } -void sub_8144B64(u32 a0) +void mevent_srv_ish_set_param(u32 a0) { - gUnknown_203F3C0->unk_04 = a0; + s_mevent_srv_ish_ptr->param = a0; } -static void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 a1, u32 a2) +static void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 sendPlayerNo, u32 recvPlayerNo) { svr->unk_00 = 0; svr->mainseqno = 0; - svr->unk_0C = 0; - svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE); - svr->unk_18 = AllocZeroed(ME_SEND_BUF_SIZE); + svr->flag = 0; + svr->sendBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->unk_20 = AllocZeroed(0x40); - mevent_srv_sub_init(&svr->unk_24, a1, a2); + svr->buffer = AllocZeroed(0x40); + mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); } -static void sub_8144BC0(struct mevent_srv_ish * svr) +static void mevent_srv_ish_free_resources(struct mevent_srv_ish * svr) { - Free(svr->unk_14); - Free(svr->unk_18); + Free(svr->sendBuffer); + Free(svr->recvBuffer); Free(svr->cmdBuffer); - Free(svr->unk_20); + Free(svr->buffer); } -static void sub_8144BE4(struct mevent_srv_ish * svr) +static void mevent_srv_ish_jmp_buffer(struct mevent_srv_ish * svr) { - memcpy(svr->cmdBuffer, svr->unk_18, ME_SEND_BUF_SIZE); + memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); svr->cmdidx = 0; } -static void sub_8144C00(struct mevent_srv_ish * svr, u32 a1, u32 a2) +static void mevent_srv_ish_send_word(struct mevent_srv_ish * svr, u32 ident, u32 word) { - CpuFill32(0, svr->unk_14, ME_SEND_BUF_SIZE); - *(u32 *)svr->unk_14 = a2; - mevent_srv_sub_init_send(&svr->unk_24, a1, svr->unk_14, 4); + CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE); + *(u32 *)svr->sendBuffer = word; + mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32)); } static u32 ish_mainseq_0(struct mevent_srv_ish * svr) @@ -97,7 +101,7 @@ static u32 ish_mainseq_0(struct mevent_srv_ish * svr) memcpy(svr->cmdBuffer, gUnknown_84687E0, ME_SEND_BUF_SIZE); svr->cmdidx = 0; svr->mainseqno = 4; - svr->unk_0C = 0; + svr->flag = 0; return 0; } @@ -110,10 +114,10 @@ static u32 ish_mainseq_1(struct mevent_srv_ish * svr) static u32 ish_mainseq_2(struct mevent_srv_ish * svr) { // do recv - if (mevent_srv_sub_recv(&svr->unk_24)) + if (mevent_srv_sub_recv(&svr->manager)) { svr->mainseqno = 4; - svr->unk_0C = 0; + svr->flag = 0; } return 1; } @@ -121,10 +125,10 @@ static u32 ish_mainseq_2(struct mevent_srv_ish * svr) static u32 ish_mainseq_3(struct mevent_srv_ish * svr) { // do send - if (mevent_srv_sub_send(&svr->unk_24)) + if (mevent_srv_sub_send(&svr->manager)) { svr->mainseqno = 4; - svr->unk_0C = 0; + svr->flag = 0; } return 1; } @@ -139,96 +143,96 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr) case 0: break; case 1: - svr->unk_04 = cmd->parameter; + svr->param = cmd->parameter; svr->mainseqno = 1; - svr->unk_0C = 0; + svr->flag = 0; break; case 2: - mevent_srv_sub_init_recv(&svr->unk_24, cmd->parameter, svr->unk_18); + mevent_srv_sub_init_recv(&svr->manager, cmd->parameter, svr->recvBuffer); svr->mainseqno = 2; - svr->unk_0C = 0; + svr->flag = 0; break; case 3: svr->mainseqno = 3; - svr->unk_0C = 0; + svr->flag = 0; break; case 20: - mevent_srv_sub_init_send(&svr->unk_24, 0x14, svr->unk_14, 0); + mevent_srv_sub_init_send(&svr->manager, 0x14, svr->sendBuffer, 0); svr->mainseqno = 3; - svr->unk_0C = 0; + svr->flag = 0; break; case 19: - sub_8144C00(svr, 0x12, GetGameStat(cmd->parameter)); + mevent_srv_ish_send_word(svr, 0x12, GetGameStat(cmd->parameter)); svr->mainseqno = 3; - svr->unk_0C = 0; + svr->flag = 0; break; case 6: - if (svr->unk_04 == 0) - sub_8144BE4(svr); + if (svr->param == 0) + mevent_srv_ish_jmp_buffer(svr); break; case 7: - if (svr->unk_04 == 1) - sub_8144BE4(svr); + if (svr->param == 1) + mevent_srv_ish_jmp_buffer(svr); break; case 4: - sub_8144BE4(svr); + mevent_srv_ish_jmp_buffer(svr); break; case 5: - memcpy(svr->unk_20, svr->unk_18, 0x40); + memcpy(svr->buffer, svr->recvBuffer, 0x40); svr->mainseqno = 5; - svr->unk_0C = 0; + svr->flag = 0; return 2; case 11: - memcpy(svr->unk_20, svr->unk_18, 0x40); + memcpy(svr->buffer, svr->recvBuffer, 0x40); svr->mainseqno = 5; - svr->unk_0C = 0; + svr->flag = 0; return 3; case 12: - memcpy(svr->unk_20, svr->unk_18, 0x40); + memcpy(svr->buffer, svr->recvBuffer, 0x40); svr->mainseqno = 5; - svr->unk_0C = 0; + svr->flag = 0; return 5; case 13: svr->mainseqno = 5; - svr->unk_0C = 0; + svr->flag = 0; return 4; case 8: - sub_81442CC(svr->unk_14); - mevent_srv_sub_init_send(&svr->unk_24, 0x11, svr->unk_14, 0x64); + sub_81442CC(svr->sendBuffer); + mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventStruct_Unk1442CC)); break; case 14: - sub_8144C00(svr, 0x13, svr->unk_04); + mevent_srv_ish_send_word(svr, 0x13, svr->param); break; case 10: - sub_8143F68(svr->unk_18); + sub_8143F68(svr->recvBuffer); break; case 9: - if (!sub_8143EF4(svr->unk_18)) + if (!sub_8143EF4(svr->recvBuffer)) { - sub_8143DC8(svr->unk_18); - sub_8144C00(svr, 0x13, 0); + sub_8143DC8(svr->recvBuffer); + mevent_srv_ish_send_word(svr, 0x13, 0); } else - sub_8144C00(svr, 0x13, 1); + mevent_srv_ish_send_word(svr, 0x13, 1); break; case 15: svr->mainseqno = 6; - svr->unk_0C = 0; + svr->flag = 0; break; case 16: - sub_8144254(svr->unk_18); + sub_8144254(svr->recvBuffer); break; case 17: - sub_8069EA4(svr->unk_18, 1000); + sub_8069EA4(svr->recvBuffer, 1000); break; case 18: - memcpy(gSaveBlock2Ptr->unk_4A0, svr->unk_18, 0xbc); + memcpy(gSaveBlock2Ptr->unk_4A0, svr->recvBuffer, 0xbc); sub_80E7490(); break; case 21: - memcpy(gDecompressionBuffer, svr->unk_18, ME_SEND_BUF_SIZE); + memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); svr->mainseqno = 7; - svr->unk_0C = 0; + svr->flag = 0; break; } @@ -237,11 +241,11 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr) static u32 ish_mainseq_5(struct mevent_srv_ish * svr) { - // wait unk_0C - if (svr->unk_0C) + // wait flag + if (svr->flag) { svr->mainseqno = 4; - svr->unk_0C = 0; + svr->flag = 0; } return 1; } @@ -249,17 +253,17 @@ static u32 ish_mainseq_5(struct mevent_srv_ish * svr) static u32 ish_mainseq_6(struct mevent_srv_ish * svr) { // ??? - switch (svr->unk_0C) + switch (svr->flag) { case 0: - sub_80DA89C(svr->unk_18); - ++svr->unk_0C; + sub_80DA89C(svr->recvBuffer); + ++svr->flag; break; case 1: - if (!sub_80DA8B0(&svr->unk_04)) + if (!sub_80DA8B0(&svr->param)) { svr->mainseqno = 4; - svr->unk_0C = 0; + svr->flag = 0; } break; } @@ -270,10 +274,10 @@ static u32 ish_mainseq_7(struct mevent_srv_ish * svr) { // exec arbitrary code u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; - if (func(&svr->unk_04, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) + if (func(&svr->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) { svr->mainseqno = 4; - svr->unk_0C = 0; + svr->flag = 0; } return 1; } @@ -293,62 +297,62 @@ static u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr) return funcs[svr->mainseqno](svr); } -void sub_8144F1C(void) +void mevent_srv_common_do_init_1(void) { - gUnknown_203F3C4 = AllocZeroed(sizeof(struct mevent_srv_common)); - mevent_srv_init_common(gUnknown_203F3C4, gUnknown_8468B6C, 0, 1); + s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common)); + mevent_srv_init_common(s_mevent_srv_common_ptr, gUnknown_8468B6C, 0, 1); } -void sub_8144F40(void) +void mevent_srv_common_do_init_2(void) { - gUnknown_203F3C4 = AllocZeroed(sizeof(struct mevent_srv_common)); - mevent_srv_init_common(gUnknown_203F3C4, gUnknown_8468BCC, 0, 1); + s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common)); + mevent_srv_init_common(s_mevent_srv_common_ptr, gUnknown_8468BCC, 0, 1); } -u32 sub_8144F64(u16 * a0) +u32 mevent_srv_init_do_exec(u16 * a0) { u32 result; - if (gUnknown_203F3C4 == NULL) + if (s_mevent_srv_common_ptr == NULL) return 3; - result = sub_8145600(gUnknown_203F3C4); + result = mevent_srv_exec_common(s_mevent_srv_common_ptr); if (result == 3) { - *a0 = gUnknown_203F3C4->unk_04; - mevent_srv_free_resources(gUnknown_203F3C4); - Free(gUnknown_203F3C4); - gUnknown_203F3C4 = NULL; + *a0 = s_mevent_srv_common_ptr->param; + mevent_srv_free_resources(s_mevent_srv_common_ptr); + Free(s_mevent_srv_common_ptr); + s_mevent_srv_common_ptr = NULL; } return result; } -static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 a2, u32 a3) +static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * cmdBuffer, u32 sendPlayerNo, u32 recvPlayerNo) { svr->unk_00 = 0; svr->mainseqno = 0; - svr->unk_18 = AllocZeroed(332); - svr->unk_1C = AllocZeroed(444); - svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE); - svr->unk_20 = AllocZeroed(100); - svr->cmdBuffer = a1; + svr->mevent_32e0 = AllocZeroed(sizeof(struct MEventBuffer_32E0_Sub)); + svr->mevent_3120 = AllocZeroed(sizeof(struct MEventBuffer_3120_Sub)); + svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MEventStruct_Unk1442CC)); + svr->cmdBuffer = cmdBuffer; svr->cmdidx = 0; - mevent_srv_sub_init(&svr->unk_38, a2, a3); + mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); } static void mevent_srv_free_resources(struct mevent_srv_common * svr) { - Free(svr->unk_18); - Free(svr->unk_1C); - Free(svr->unk_14); - Free(svr->unk_20); + Free(svr->mevent_32e0); + Free(svr->mevent_3120); + Free(svr->recvBuffer); + Free(svr->mevent_unk1442cc); } -static void sub_814501C(struct mevent_srv_common * svr, u32 a1, void * a2, u32 size) +static void mevent_srv_common_init_send(struct mevent_srv_common * svr, u32 ident, const void * src, u32 size) { AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 257); - mevent_srv_sub_init_send(&svr->unk_38, a1, a2, size); + mevent_srv_sub_init_send(&svr->manager, ident, src, size); } -static void * sub_814505C(void * a0, void * a1) +static void * mevent_first_if_not_null_else_second(void * a0, void * a1) { if (a0 != NULL) return a0; @@ -356,7 +360,7 @@ static void * sub_814505C(void * a0, void * a1) return a1; } -static u32 sub_8145068(void * a0, void * a1) +static u32 mevent_compare_pointers(void * a0, void * a1) { if (a1 < a0) return 0; @@ -382,7 +386,7 @@ static u32 common_mainseq_1(struct mevent_srv_common * svr) static u32 common_mainseq_2(struct mevent_srv_common * svr) { // do recv - if (mevent_srv_sub_recv(&svr->unk_38)) + if (mevent_srv_sub_recv(&svr->manager)) svr->mainseqno = 4; return 1; } @@ -390,7 +394,7 @@ static u32 common_mainseq_2(struct mevent_srv_common * svr) static u32 common_mainseq_3(struct mevent_srv_common * svr) { // do send - if (mevent_srv_sub_send(&svr->unk_38)) + if (mevent_srv_sub_send(&svr->manager)) svr->mainseqno = 4; return 1; } @@ -407,14 +411,14 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) case 0: AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 354); svr->mainseqno = 1; - svr->unk_04 = cmd->flag; + svr->param = cmd->flag; break; case 1: svr->mainseqno = 3; break; case 2: AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 364); - mevent_srv_sub_init_recv(&svr->unk_38, cmd->flag, svr->unk_14); + mevent_srv_sub_init_recv(&svr->manager, cmd->flag, svr->recvBuffer); svr->mainseqno = 2; break; case 3: @@ -425,15 +429,15 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) case 5: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 376); AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 377); - memcpy(svr->unk_20, svr->unk_14, 100); + memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MEventStruct_Unk1442CC)); break; case 6: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 382); AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 383); - svr->unk_04 = sub_81443D4(svr->unk_20); + svr->param = sub_81443D4(svr->mevent_unk1442cc); break; case 4: - if (svr->unk_04 == cmd->flag) + if (svr->param == cmd->flag) { svr->cmdidx = 0; svr->cmdBuffer = cmd->parameter; @@ -441,100 +445,100 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) break; case 7: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 396); - ptr = sub_814505C(cmd->parameter, svr->unk_18); - svr->unk_04 = sub_8144418(ptr, svr->unk_20, ptr); + ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_32e0); + svr->param = sub_8144418(ptr, svr->mevent_unk1442cc, ptr); break; case 8: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 402); AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 403); - svr->unk_04 = *(u32 *)svr->unk_14; + svr->param = *(u32 *)svr->recvBuffer; break; case 9: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 408); - ptr = sub_814505C(cmd->parameter, &svr->unk_34); - svr->unk_04 = sub_8144434(ptr, svr->unk_20, ptr); + ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord); + svr->param = sub_8144434(ptr, svr->mevent_unk1442cc, ptr); break; case 10: AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 415); - svr->unk_04 = sub_81444B0(svr->unk_20, cmd->flag); + svr->param = sub_81444B0(svr->mevent_unk1442cc, cmd->flag); break; case 11: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 420); - svr->unk_04 = sub_8144474(svr->unk_20, cmd->parameter); + svr->param = sub_8144474(svr->mevent_unk1442cc, cmd->parameter); break; case 12: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 426); - svr->unk_04 = sub_8145068(cmd->parameter, *(void **)svr->unk_14); + svr->param = mevent_compare_pointers(cmd->parameter, *(void **)svr->recvBuffer); break; case 14: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 432); - sub_814501C(svr, 0x17, sub_814505C(cmd->parameter, svr->unk_1C), 444); + mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_3120), sizeof(struct MEventBuffer_3120_Sub)); break; case 13: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 438); - sub_814501C(svr, 0x16, sub_814505C(cmd->parameter, svr->unk_18), 332); + mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_32e0), sizeof(struct MEventBuffer_32E0_Sub)); break; case 16: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 444); - sub_814501C(svr, 0x18, sub_814505C(cmd->parameter, &svr->unk_34), 4); + mevent_srv_common_init_send(svr, 0x18, mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord), 4); break; case 15: if (cmd->parameter == NULL) - sub_814501C(svr, 0x19, svr->unk_24, svr->unk_28); + mevent_srv_common_init_send(svr, 0x19, svr->sendBuffer1, svr->sendBuffer1Size); else - sub_814501C(svr, 0x19, cmd->parameter, cmd->flag); + mevent_srv_common_init_send(svr, 0x19, cmd->parameter, cmd->flag); break; case 18: if (cmd->parameter == NULL) - sub_814501C(svr, 0x10, svr->unk_2C, svr->unk_30); + mevent_srv_common_init_send(svr, 0x10, svr->sendBuffer2, svr->sendBuffer2Size); else - sub_814501C(svr, 0x10, cmd->parameter, cmd->flag); + mevent_srv_common_init_send(svr, 0x10, cmd->parameter, cmd->flag); break; case 19: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 466); - sub_814501C(svr, 0x1a, cmd->parameter, 188); + mevent_srv_common_init_send(svr, 0x1a, cmd->parameter, 188); break; case 20: - sub_814501C(svr, 0x15, cmd->parameter, cmd->flag); + mevent_srv_common_init_send(svr, 0x15, cmd->parameter, cmd->flag); break; case 17: - sub_814501C(svr, 0x1c, cmd->parameter, cmd->flag); + mevent_srv_common_init_send(svr, 0x1c, cmd->parameter, cmd->flag); break; case 22: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 481); - memcpy(svr->unk_18, cmd->parameter, 332); + memcpy(svr->mevent_32e0, cmd->parameter, 332); break; case 23: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 486); - memcpy(svr->unk_1C, cmd->parameter, 444); + memcpy(svr->mevent_3120, cmd->parameter, 444); break; case 21: AGB_ASSERT_EX(cmd->flag == FALSE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 491); - svr->unk_34 = *(void **)cmd->parameter; + svr->sendWord = *(u32 *)cmd->parameter; break; case 24: - svr->unk_24 = cmd->parameter; - svr->unk_28 = cmd->flag; + svr->sendBuffer1 = cmd->parameter; + svr->sendBuffer1Size = cmd->flag; break; case 25: - svr->unk_2C = cmd->parameter; - svr->unk_30 = cmd->flag; + svr->sendBuffer2 = cmd->parameter; + svr->sendBuffer2Size = cmd->flag; break; case 26: AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 506); - memcpy(svr->unk_18, sav1_get_mevent_buffer_1(), 332); - sub_814410C(svr->unk_18); + memcpy(svr->mevent_32e0, sav1_get_mevent_buffer_1(), 332); + sub_814410C(svr->mevent_32e0); break; case 27: AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 512); - memcpy(svr->unk_1C, sub_8143D58(), 444); + memcpy(svr->mevent_3120, sub_8143D58(), 444); break; case 28: AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 517); - svr->unk_24 = sub_8069E48(); + svr->sendBuffer1 = sub_8069E48(); break; case 29: - sub_814501C(svr, 0x1b, cmd->parameter, cmd->flag); + mevent_srv_common_init_send(svr, 0x1b, cmd->parameter, cmd->flag); break; } @@ -549,7 +553,7 @@ static u32 (*const func_tbl[])(struct mevent_srv_common *) = { common_mainseq_4 }; -static u32 sub_8145600(struct mevent_srv_common * svr) +static u32 mevent_srv_exec_common(struct mevent_srv_common * svr) { u32 response; AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 546); diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c index 7e2119088..35efa68c8 100644 --- a/src/mevent_server_helpers.c +++ b/src/mevent_server_helpers.c @@ -41,10 +41,10 @@ void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recv svr->recvFunc = mevent_receive_func; } -void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 a1, const void * src, u32 size) +void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 ident, const void * src, u32 size) { svr->seqno = 0; - svr->sendIdent = a1; + svr->sendIdent = ident; svr->sendCounter = 0; svr->sendCRC = 0; if (size != 0) -- cgit v1.2.3 From 884f1934e8bf34813701f745140f1d8429e8beaf Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 10:02:39 -0500 Subject: start decompiling mevent_8145654 --- src/mevent_8145654.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/mevent_8145654.c (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c new file mode 100644 index 000000000..9c26a21a1 --- /dev/null +++ b/src/mevent_8145654.c @@ -0,0 +1,52 @@ +#include "global.h" +#include "malloc.h" +#include "mevent.h" + +struct UnkStruct_8467FB8 +{ + u16 ident; + const void * unk_04; + const void * unk_08; + const void * unk_0C; +}; + +struct UnkStruct_203F3C8 +{ + /*0000*/ struct MEventBuffer_32E0_Sub unk_0000; + /*014c*/ struct MEventBuffer_3430_Sub unk_014c; + /*0170*/ const struct UnkStruct_8467FB8 * unk_0170; + /*0174*/ u8 filler_0174[0x12E8]; +}; + +EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_203F3C8 = NULL; + +extern const struct UnkStruct_8467FB8 gUnknown_8467FB8[8]; + +bool32 sub_8145654(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6) +{ + if (r5 == NULL || r6 == NULL) + return FALSE; + gUnknown_203F3C8 = AllocZeroed(sizeof(struct UnkStruct_203F3C8)); + if (gUnknown_203F3C8 == NULL) + return FALSE; + gUnknown_203F3C8->unk_0000 = *r5; + gUnknown_203F3C8->unk_014c = *r6; + if (gUnknown_203F3C8->unk_0000.unk_08_2 > 7) + gUnknown_203F3C8->unk_0000.unk_08_2 = 0; + if (gUnknown_203F3C8->unk_0000.unk_08_0 > 2) + gUnknown_203F3C8->unk_0000.unk_08_0 = 0; + if (gUnknown_203F3C8->unk_0000.unk_09 > 7) + gUnknown_203F3C8->unk_0000.unk_09 = 0; + gUnknown_203F3C8->unk_0170 = &gUnknown_8467FB8[gUnknown_203F3C8->unk_0000.unk_08_2]; + return TRUE; +} + +void sub_81456F0(void) +{ + if (gUnknown_203F3C8 != NULL) + { + *gUnknown_203F3C8 = (struct UnkStruct_203F3C8){}; + Free(gUnknown_203F3C8); + gUnknown_203F3C8 = NULL; + } +} -- cgit v1.2.3 From 8f0f725039e9b0ae9de440df28e1eb4bd7d00dc3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 11:42:45 -0500 Subject: sub_814571C and associated graphics dump --- src/mevent_8145654.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 84 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 9c26a21a1..3477543a8 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -1,13 +1,18 @@ #include "global.h" +#include "bg.h" +#include "palette.h" +#include "decompress.h" #include "malloc.h" +#include "menu.h" +#include "pokemon_icon.h" #include "mevent.h" struct UnkStruct_8467FB8 { u16 ident; - const void * unk_04; - const void * unk_08; - const void * unk_0C; + const u8 * tiles; + const u8 * map; + const u16 * pal; }; struct UnkStruct_203F3C8 @@ -15,11 +20,22 @@ struct UnkStruct_203F3C8 /*0000*/ struct MEventBuffer_32E0_Sub unk_0000; /*014c*/ struct MEventBuffer_3430_Sub unk_014c; /*0170*/ const struct UnkStruct_8467FB8 * unk_0170; - /*0174*/ u8 filler_0174[0x12E8]; + /*0174*/ u8 unk_0174; + /*0176*/ u16 unk_0176; + /*0178*/ u16 unk_0178; + /*017A*/ u16 unk_017A; + /*017C*/ u8 filler_0178[0x2E0]; + /*045C*/ u8 buffer_045C[0x1000]; }; EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_203F3C8 = NULL; +void sub_8145A98(void); +void sub_8145D18(u8 bgId); +void sub_8146060(void); + +extern const struct WindowTemplate gUnknown_8467074[3]; + extern const struct UnkStruct_8467FB8 gUnknown_8467FB8[8]; bool32 sub_8145654(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6) @@ -50,3 +66,67 @@ void sub_81456F0(void) gUnknown_203F3C8 = NULL; } } + +s32 sub_814571C(void) +{ + if (gUnknown_203F3C8 == NULL) + return -1; + switch(gUnknown_203F3C8->unk_0174) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + decompress_and_copy_tile_data_to_vram(2, gUnknown_203F3C8->unk_0170->tiles, 0, 0x008, 0); + gUnknown_203F3C8->unk_0176 = AddWindow(&gUnknown_8467074[0]); + gUnknown_203F3C8->unk_0178 = AddWindow(&gUnknown_8467074[1]); + gUnknown_203F3C8->unk_017A = AddWindow(&gUnknown_8467074[2]); + break; + case 3: + if (free_temp_tile_data_buffers_if_possible()) + return 0; + gPaletteFade.bufferTransferDisabled = TRUE; + LoadPalette(gUnknown_203F3C8->unk_0170->pal, 0x10, 0x20); + LZ77UnCompWram(gUnknown_203F3C8->unk_0170->map, gUnknown_203F3C8->buffer_045C); + CopyRectToBgTilemapBufferRect(2, gUnknown_203F3C8->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0); + CopyBgTilemapBufferToVram(2); + break; + case 4: + sub_8145A98(); + break; + case 5: + sub_8145D18(0); + sub_8145D18(1); + sub_8145D18(2); + CopyBgTilemapBufferToVram(1); + break; + case 6: + sub_809707C(); + break; + case 7: + ShowBg(1); + ShowBg(2); + gPaletteFade.bufferTransferDisabled = FALSE; + sub_8146060(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + UpdatePaletteFade(); + break; + default: + if (UpdatePaletteFade()) + return 0; + gUnknown_203F3C8->unk_0174 = 0; + return 1; + } + ++gUnknown_203F3C8->unk_0174; + return 0; +} -- cgit v1.2.3 From 2fb1404613d12e5384c7650ef9d46d2678865544 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 12:09:16 -0500 Subject: sub_814593C and associated ewram --- src/mevent_8145654.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 3477543a8..6c51f9091 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -5,6 +5,7 @@ #include "malloc.h" #include "menu.h" #include "pokemon_icon.h" +#include "mystery_gift_menu.h" #include "mevent.h" struct UnkStruct_8467FB8 @@ -28,11 +29,18 @@ struct UnkStruct_203F3C8 /*045C*/ u8 buffer_045C[0x1000]; }; +struct UnkStruct_203F3CC +{ + /*0000*/ u8 filler_0000[0x13a4]; +}; + EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_203F3C8 = NULL; +EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_203F3CC = NULL; void sub_8145A98(void); void sub_8145D18(u8 bgId); void sub_8146060(void); +void sub_81461D8(void); extern const struct WindowTemplate gUnknown_8467074[3]; @@ -130,3 +138,52 @@ s32 sub_814571C(void) ++gUnknown_203F3C8->unk_0174; return 0; } + +s32 sub_814593C(bool32 flag) +{ + if (gUnknown_203F3C8 == NULL) + return -1; + switch (gUnknown_203F3C8->unk_0174) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + break; + case 3: + HideBg(1); + HideBg(2); + RemoveWindow(gUnknown_203F3C8->unk_017A); + RemoveWindow(gUnknown_203F3C8->unk_0178); + RemoveWindow(gUnknown_203F3C8->unk_0176); + break; + case 4: + sub_81461D8(); + FreeMonIconPalettes(); + break; + case 5: + sub_8142344(gUnknown_203F3B8, flag); + break; + case 6: + CopyBgTilemapBufferToVram(0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + break; + default: + if (UpdatePaletteFade()) + return 0; + gUnknown_203F3C8->unk_0174 = 0; + return 1; + } + ++gUnknown_203F3C8->unk_0174; + return 0; +} -- cgit v1.2.3 From cd42b22d6b450b1fc1d79b046fe7cd1a0fdcf543 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 13:33:03 -0500 Subject: sub_8145A98 --- src/mevent_8145654.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 6c51f9091..d3ec2e0ce 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -6,6 +6,7 @@ #include "menu.h" #include "pokemon_icon.h" #include "mystery_gift_menu.h" +#include "string_util.h" #include "mevent.h" struct UnkStruct_8467FB8 @@ -16,16 +17,31 @@ struct UnkStruct_8467FB8 const u16 * pal; }; +struct UnkStruct_203F3C8_02DC +{ + u8 unk_00; + u8 unk_01[41]; + u8 unk_42[4]; +}; + struct UnkStruct_203F3C8 { /*0000*/ struct MEventBuffer_32E0_Sub unk_0000; /*014c*/ struct MEventBuffer_3430_Sub unk_014c; /*0170*/ const struct UnkStruct_8467FB8 * unk_0170; /*0174*/ u8 unk_0174; + /*0175*/ u8 unk_0175; /*0176*/ u16 unk_0176; /*0178*/ u16 unk_0178; /*017A*/ u16 unk_017A; - /*017C*/ u8 filler_0178[0x2E0]; + /*017C*/ u8 filler_017C[15]; + /*018B*/ u8 unk_018B[41]; + /*01B4*/ u8 unk_01B4[41]; + /*01DD*/ u8 unk_01DD[7]; + /*01E4*/ u8 unk_01E4[4][41]; + /*0288*/ u8 unk_0288[41]; + /*02B1*/ u8 unk_02B1[41]; + /*02DC*/ struct UnkStruct_203F3C8_02DC unk_02DC[8]; /*045C*/ u8 buffer_045C[0x1000]; }; @@ -187,3 +203,71 @@ s32 sub_814593C(bool32 flag) ++gUnknown_203F3C8->unk_0174; return 0; } + +void sub_8145A98(void) +{ + u16 i = 0; + u16 r6; + u16 sp0[3] = {0, 0, 0}; + + memcpy(gUnknown_203F3C8->unk_018B, gUnknown_203F3C8->unk_0000.unk_0A, 40); + gUnknown_203F3C8->unk_018B[40] = EOS; + memcpy(gUnknown_203F3C8->unk_01B4, gUnknown_203F3C8->unk_0000.unk_32, 40); + gUnknown_203F3C8->unk_01B4[40] = EOS; + if (gUnknown_203F3C8->unk_0000.unk_04 > 999999) + gUnknown_203F3C8->unk_0000.unk_04 = 999999; + ConvertIntToDecimalStringN(gUnknown_203F3C8->unk_01DD, gUnknown_203F3C8->unk_0000.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6); + for (i = 0; i < 4; i++) + { + memcpy(gUnknown_203F3C8->unk_01E4[i], gUnknown_203F3C8->unk_0000.unk_5A[i], 40); + gUnknown_203F3C8->unk_01E4[i][40] = EOS; + } + memcpy(gUnknown_203F3C8->unk_0288, gUnknown_203F3C8->unk_0000.unk_FA, 40); + gUnknown_203F3C8->unk_0288[40] = EOS; + switch (gUnknown_203F3C8->unk_0000.unk_08_0) + { + case 0: + memcpy(gUnknown_203F3C8->unk_02B1, gUnknown_203F3C8->unk_0000.unk_122, 40); + gUnknown_203F3C8->unk_02B1[40] = EOS; + break; + case 1: + gUnknown_203F3C8->unk_02B1[00] = EOS; + break; + case 2: + gUnknown_203F3C8->unk_02B1[00] = EOS; + sp0[0] = gUnknown_203F3C8->unk_014c.unk_00 < 999 ? gUnknown_203F3C8->unk_014c.unk_00 : 999; + sp0[1] = gUnknown_203F3C8->unk_014c.unk_02 < 999 ? gUnknown_203F3C8->unk_014c.unk_02 : 999; + sp0[2] = gUnknown_203F3C8->unk_014c.unk_04 < 999 ? gUnknown_203F3C8->unk_014c.unk_04 : 999; + for (i = 0; i < 8; i++) + { + memset(gUnknown_203F3C8->unk_02DC[i].unk_42, EOS, 4); + memset(gUnknown_203F3C8->unk_02DC[i].unk_01, EOS, 41); + } + for (i = 0, r6 = 0; i < 40; i++) + { + if (gUnknown_203F3C8->unk_0000.unk_122[i] != 0xF7) + { + gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_01[r6] = gUnknown_203F3C8->unk_0000.unk_122[i]; + r6++; + } + else + { + u8 r3 = gUnknown_203F3C8->unk_0000.unk_122[i + 1]; + if (r3 > 2) + { + i += 2; + } + else + { + ConvertIntToDecimalStringN(gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_42, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3); + gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_00 = gUnknown_203F3C8->unk_0000.unk_122[i + 2]; + gUnknown_203F3C8->unk_0175++; + if (gUnknown_203F3C8->unk_0175 > 7) + break; + r6 = 0; + i += 2; + } + } + } + } +} -- cgit v1.2.3 From 30d4803a44a8f11ee88c4d4e37cef9f2373b3542 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 16:06:01 -0500 Subject: sub_8145D18 --- src/mevent_8145654.c | 111 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 94 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index d3ec2e0ce..ec1664643 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -1,4 +1,5 @@ #include "global.h" +#include "constants/species.h" #include "bg.h" #include "palette.h" #include "decompress.h" @@ -11,7 +12,10 @@ struct UnkStruct_8467FB8 { - u16 ident; + u8 textPal1:4; + u8 textPal2:4; + u8 textPal3:4; + u8 textPal4:4; const u8 * tiles; const u8 * map; const u16 * pal; @@ -27,14 +31,13 @@ struct UnkStruct_203F3C8_02DC struct UnkStruct_203F3C8 { /*0000*/ struct MEventBuffer_32E0_Sub unk_0000; - /*014c*/ struct MEventBuffer_3430_Sub unk_014c; + /*014c*/ struct MEventBuffer_3430_Sub unk_014C; /*0170*/ const struct UnkStruct_8467FB8 * unk_0170; /*0174*/ u8 unk_0174; /*0175*/ u8 unk_0175; - /*0176*/ u16 unk_0176; - /*0178*/ u16 unk_0178; - /*017A*/ u16 unk_017A; - /*017C*/ u8 filler_017C[15]; + /*0176*/ u16 unk_0176[3]; + /*017C*/ u8 unk_017C; + /*017D*/ u8 filler_017D[14]; /*018B*/ u8 unk_018B[41]; /*01B4*/ u8 unk_01B4[41]; /*01DD*/ u8 unk_01DD[7]; @@ -54,12 +57,15 @@ EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_203F3C8 = NULL; EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_203F3CC = NULL; void sub_8145A98(void); -void sub_8145D18(u8 bgId); +void sub_8145D18(u8 whichWindow); void sub_8146060(void); void sub_81461D8(void); +extern const struct TextColor gUnknown_8467068[2]; +extern const u8 gUnknown_8467070[3]; extern const struct WindowTemplate gUnknown_8467074[3]; +extern const struct CompressedSpriteSheet gUnknown_8467F58; extern const struct UnkStruct_8467FB8 gUnknown_8467FB8[8]; bool32 sub_8145654(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6) @@ -70,7 +76,7 @@ bool32 sub_8145654(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_S if (gUnknown_203F3C8 == NULL) return FALSE; gUnknown_203F3C8->unk_0000 = *r5; - gUnknown_203F3C8->unk_014c = *r6; + gUnknown_203F3C8->unk_014C = *r6; if (gUnknown_203F3C8->unk_0000.unk_08_2 > 7) gUnknown_203F3C8->unk_0000.unk_08_2 = 0; if (gUnknown_203F3C8->unk_0000.unk_08_0 > 2) @@ -112,9 +118,9 @@ s32 sub_814571C(void) CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); decompress_and_copy_tile_data_to_vram(2, gUnknown_203F3C8->unk_0170->tiles, 0, 0x008, 0); - gUnknown_203F3C8->unk_0176 = AddWindow(&gUnknown_8467074[0]); - gUnknown_203F3C8->unk_0178 = AddWindow(&gUnknown_8467074[1]); - gUnknown_203F3C8->unk_017A = AddWindow(&gUnknown_8467074[2]); + gUnknown_203F3C8->unk_0176[0] = AddWindow(&gUnknown_8467074[0]); + gUnknown_203F3C8->unk_0176[1] = AddWindow(&gUnknown_8467074[1]); + gUnknown_203F3C8->unk_0176[2] = AddWindow(&gUnknown_8467074[2]); break; case 3: if (free_temp_tile_data_buffers_if_possible()) @@ -179,9 +185,9 @@ s32 sub_814593C(bool32 flag) case 3: HideBg(1); HideBg(2); - RemoveWindow(gUnknown_203F3C8->unk_017A); - RemoveWindow(gUnknown_203F3C8->unk_0178); - RemoveWindow(gUnknown_203F3C8->unk_0176); + RemoveWindow(gUnknown_203F3C8->unk_0176[2]); + RemoveWindow(gUnknown_203F3C8->unk_0176[1]); + RemoveWindow(gUnknown_203F3C8->unk_0176[0]); break; case 4: sub_81461D8(); @@ -235,9 +241,9 @@ void sub_8145A98(void) break; case 2: gUnknown_203F3C8->unk_02B1[00] = EOS; - sp0[0] = gUnknown_203F3C8->unk_014c.unk_00 < 999 ? gUnknown_203F3C8->unk_014c.unk_00 : 999; - sp0[1] = gUnknown_203F3C8->unk_014c.unk_02 < 999 ? gUnknown_203F3C8->unk_014c.unk_02 : 999; - sp0[2] = gUnknown_203F3C8->unk_014c.unk_04 < 999 ? gUnknown_203F3C8->unk_014c.unk_04 : 999; + sp0[0] = gUnknown_203F3C8->unk_014C.unk_00 < 999 ? gUnknown_203F3C8->unk_014C.unk_00 : 999; + sp0[1] = gUnknown_203F3C8->unk_014C.unk_02 < 999 ? gUnknown_203F3C8->unk_014C.unk_02 : 999; + sp0[2] = gUnknown_203F3C8->unk_014C.unk_04 < 999 ? gUnknown_203F3C8->unk_014C.unk_04 : 999; for (i = 0; i < 8; i++) { memset(gUnknown_203F3C8->unk_02DC[i].unk_42, EOS, 4); @@ -271,3 +277,74 @@ void sub_8145A98(void) } } } + +void sub_8145D18(u8 whichWindow) +{ + s8 sp0C = 0; + s32 windowId = gUnknown_203F3C8->unk_0176[whichWindow]; + PutWindowTilemap(windowId); + FillWindowPixelBuffer(windowId, 0); + switch (whichWindow) + { + case 0: + { + s32 x; + box_print(windowId, 3, 0, 1, &gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_018B); + x = 160 - GetStringWidth(3, gUnknown_203F3C8->unk_01B4, GetFontAttribute(3, 2)); + if (x < 0) + x = 0; + box_print(windowId, 3, x, 17, &gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_01B4); + if (gUnknown_203F3C8->unk_0000.unk_04 != 0) + { + box_print(windowId, 2, 166, 17, &gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_01DD); + } + break; + } + case 1: + for (; sp0C < 4; sp0C++) + { + box_print(windowId, 3, 0, 16 * sp0C + 2, &gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal2], 0, gUnknown_203F3C8->unk_01E4[sp0C]); + } + break; + case 2: + box_print(windowId, 3, 0, gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0], &gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_0288); + if (gUnknown_203F3C8->unk_0000.unk_08_0 != 2) + { + box_print(windowId, 3, 0, 16 + gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0], &gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02B1); + } + else + { + s32 x = 0; + s32 y = gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0] + 16; + s32 spacing = GetFontAttribute(3, 2); + for (; sp0C < gUnknown_203F3C8->unk_0175; sp0C++) + { + box_print(windowId, 3, x, y, &gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02DC[sp0C].unk_01); + if (gUnknown_203F3C8->unk_02DC[sp0C].unk_42[0] != EOS) + { + x += GetStringWidth(3, gUnknown_203F3C8->unk_02DC[sp0C].unk_01, spacing); + box_print(windowId, 2, x, y, &gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02DC[sp0C].unk_42); + x += GetStringWidth(3, gUnknown_203F3C8->unk_02DC[sp0C].unk_42, spacing) + gUnknown_203F3C8->unk_02DC[sp0C].unk_00; + } + } + } + break; + } + CopyWindowToVram(windowId, 3); +} + +/* +void sub_8146060(void) +{ + gUnknown_203F3C8->unk_017C = 0xFF; + if (gUnknown_203F3C8->unk_014C.unk_06 != SPECIES_NONE) + { + gUnknown_203F3C8->unk_017C = sub_8096ECC(sub_8096FD4(gUnknown_203F3C8->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE); + gSprites[gUnknown_203F3C8->unk_017C].oam.priority = 2; + } + if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1) + { + sub_800F034(gUnknown_8467F58); + } +} + */ -- cgit v1.2.3 From 9e34e6b53d8c21c79e67c7b46ac658506abb4ed3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 16:38:07 -0500 Subject: sub_8146060 --- src/mevent_8145654.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index ec1664643..db714ce80 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -37,7 +37,7 @@ struct UnkStruct_203F3C8 /*0175*/ u8 unk_0175; /*0176*/ u16 unk_0176[3]; /*017C*/ u8 unk_017C; - /*017D*/ u8 filler_017D[14]; + /*017D*/ u8 unk_017D[7][2]; /*018B*/ u8 unk_018B[41]; /*01B4*/ u8 unk_01B4[41]; /*01DD*/ u8 unk_01DD[7]; @@ -66,7 +66,9 @@ extern const u8 gUnknown_8467070[3]; extern const struct WindowTemplate gUnknown_8467074[3]; extern const struct CompressedSpriteSheet gUnknown_8467F58; +extern const struct SpritePalette gUnknown_8467F60[]; extern const struct UnkStruct_8467FB8 gUnknown_8467FB8[8]; +extern const struct SpriteTemplate gUnknown_8467FA0; bool32 sub_8145654(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6) { @@ -333,9 +335,9 @@ void sub_8145D18(u8 whichWindow) CopyWindowToVram(windowId, 3); } -/* void sub_8146060(void) { + u8 r7 = 0; gUnknown_203F3C8->unk_017C = 0xFF; if (gUnknown_203F3C8->unk_014C.unk_06 != SPECIES_NONE) { @@ -344,7 +346,18 @@ void sub_8146060(void) } if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1) { - sub_800F034(gUnknown_8467F58); + sub_800F034(&gUnknown_8467F58); + LoadSpritePalette(&gUnknown_8467F60[gUnknown_203F3C8->unk_0170->textPal4]); + for (; r7 < gUnknown_203F3C8->unk_0000.unk_09; r7++) + { + gUnknown_203F3C8->unk_017D[r7][0] = 0xFF; + gUnknown_203F3C8->unk_017D[r7][1] = 0xFF; + gUnknown_203F3C8->unk_017D[r7][0] = CreateSprite(&gUnknown_8467FA0, 0xd8 - 32 * r7, 0x90, 8); + if (gUnknown_203F3C8->unk_014C.unk_08[0][r7] != 0) + { + gUnknown_203F3C8->unk_017D[r7][1] = sub_8096ECC(sub_8096FD4(gUnknown_203F3C8->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0); + gSprites[gUnknown_203F3C8->unk_017D[r7][1]].oam.priority = 2; + } + } } } - */ -- cgit v1.2.3 From 60b8858b19f50751d1222abd0c662d1ee938b3ce Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 16:48:04 -0500 Subject: sub_81461D8 --- src/mevent_8145654.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index db714ce80..116db2e0e 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -361,3 +361,28 @@ void sub_8146060(void) } } } + +void sub_81461D8(void) +{ + u8 r6 = 0; + if (gUnknown_203F3C8->unk_017C != 0xFF) + sub_8097070(&gSprites[gUnknown_203F3C8->unk_017C]); + if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1) + { + for (; r6 < gUnknown_203F3C8->unk_0000.unk_09; r6++) + { + if (gUnknown_203F3C8->unk_017D[r6][0] != 0xFF) + { + DestroySprite(&gSprites[gUnknown_203F3C8->unk_017D[r6][0]]); + // This might be a typo. Uncomment the next line, and comment the one that follows, to get the presumed intended behavior. + // if (gUnknown_203F3C8->unk_017D[r6][1] != 0xFF) + if (gUnknown_203F3C8->unk_017D[r6][0] != 0xFF) + { + sub_8097070(&gSprites[gUnknown_203F3C8->unk_017D[r6][1]]); + } + } + } + FreeSpriteTilesByTag(0x8000); + FreeSpritePaletteByTag(0x8000); + } +} -- cgit v1.2.3 From 39a9e186e05fd87d7b4787822b7207e8ab9fd9fd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 17:01:48 -0500 Subject: Decompile mevent_8145654 data so far --- src/mevent_8145654.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 116db2e0e..578b90b54 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -61,14 +61,73 @@ void sub_8145D18(u8 whichWindow); void sub_8146060(void); void sub_81461D8(void); -extern const struct TextColor gUnknown_8467068[2]; -extern const u8 gUnknown_8467070[3]; -extern const struct WindowTemplate gUnknown_8467074[3]; +extern const struct OamData gUnknown_83AC9F8; -extern const struct CompressedSpriteSheet gUnknown_8467F58; -extern const struct SpritePalette gUnknown_8467F60[]; -extern const struct UnkStruct_8467FB8 gUnknown_8467FB8[8]; -extern const struct SpriteTemplate gUnknown_8467FA0; +const struct TextColor gUnknown_8467068[] = { + {0, 2, 3}, + {0, 1, 2} +}; +const u8 ALIGNED(4) gUnknown_8467070[3] = {7, 4, 7}; +const struct WindowTemplate gUnknown_8467074[] = { + {0x01, 0x01, 0x01, 0x19, 0x04, 0x0f, 0x029c}, + {0x01, 0x01, 0x06, 0x1c, 0x08, 0x0f, 0x01bc}, + {0x01, 0x01, 0x0e, 0x1c, 0x05, 0x0f, 0x0130} +}; + +const u16 gUnknown_846708C[] = INCBIN_U16("data/graphics/mevent/pal_46708C.gbapal"); +const u16 gUnknown_84670AC[] = INCBIN_U16("data/graphics/mevent/pal_4670AC.gbapal"); +const u16 gUnknown_84670CC[] = INCBIN_U16("data/graphics/mevent/pal_4670CC.gbapal"); +const u16 gUnknown_84670EC[] = INCBIN_U16("data/graphics/mevent/pal_4670EC.gbapal"); +const u16 gUnknown_846710C[] = INCBIN_U16("data/graphics/mevent/pal_46710C.gbapal"); +const u16 gUnknown_846712C[] = INCBIN_U16("data/graphics/mevent/pal_46712C.gbapal"); +const u16 gUnknown_846714C[] = INCBIN_U16("data/graphics/mevent/pal_46714C.gbapal"); +const u16 gUnknown_846716C[] = INCBIN_U16("data/graphics/mevent/pal_46716C.gbapal"); +const u8 gUnknown_846718C[] = INCBIN_U8("data/graphics/mevent/gfx_46718C.4bpp.lz"); +const u8 gUnknown_8467288[] = INCBIN_U8("data/graphics/mevent/tilemap_467288.bin.lz"); +const u8 gUnknown_846737C[] = INCBIN_U8("data/graphics/mevent/gfx_46737C.4bpp.lz"); +const u8 gUnknown_8467470[] = INCBIN_U8("data/graphics/mevent/tilemap_467470.bin.lz"); +const u8 gUnknown_8467558[] = INCBIN_U8("data/graphics/mevent/gfx_467558.4bpp.lz"); +const u8 gUnknown_846762C[] = INCBIN_U8("data/graphics/mevent/tilemap_46762C.bin.lz"); +const u8 gUnknown_8467700[] = INCBIN_U8("data/graphics/mevent/gfx_467700.4bpp.lz"); +const u8 gUnknown_8467934[] = INCBIN_U8("data/graphics/mevent/tilemap_467934.bin.lz"); +const u8 gUnknown_8467A7C[] = INCBIN_U8("data/graphics/mevent/gfx_467A7C.4bpp.lz"); +const u8 gUnknown_8467CAC[] = INCBIN_U8("data/graphics/mevent/tilemap_467CAC.bin.lz"); +const u16 gUnknown_8467DF4[] = INCBIN_U16("data/graphics/mevent/pal_467DF4.gbapal"); +const u16 gUnknown_8467E14[] = INCBIN_U16("data/graphics/mevent/pal_467E14.gbapal"); +const u16 gUnknown_8467E34[] = INCBIN_U16("data/graphics/mevent/pal_467E34.gbapal"); +const u16 gUnknown_8467E54[] = INCBIN_U16("data/graphics/mevent/pal_467E54.gbapal"); +const u16 gUnknown_8467E74[] = INCBIN_U16("data/graphics/mevent/pal_467E74.gbapal"); +const u16 gUnknown_8467E94[] = INCBIN_U16("data/graphics/mevent/pal_467E94.gbapal"); +const u16 gUnknown_8467EB4[] = INCBIN_U16("data/graphics/mevent/pal_467EB4.gbapal"); +const u16 gUnknown_8467ED4[] = INCBIN_U16("data/graphics/mevent/pal_467ED4.gbapal"); +const u8 gUnknown_8467EF4[] = INCBIN_U8("data/graphics/mevent/gfx_467F58.4bpp.lz"); + +const struct CompressedSpriteSheet gUnknown_8467F58 = { + gUnknown_8467EF4, 0x100, 0x8000 +}; +const struct SpritePalette gUnknown_8467F60[] = { + {gUnknown_8467DF4, 0x8000}, + {gUnknown_8467E14, 0x8000}, + {gUnknown_8467E34, 0x8000}, + {gUnknown_8467E54, 0x8000}, + {gUnknown_8467E74, 0x8000}, + {gUnknown_8467E94, 0x8000}, + {gUnknown_8467EB4, 0x8000}, + {gUnknown_8467ED4, 0x8000} +}; +const struct SpriteTemplate gUnknown_8467FA0 = { + 0x8000, 0x8000, &gUnknown_83AC9F8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; +const struct UnkStruct_8467FB8 gUnknown_8467FB8[8] = { + {1, 0, 0, 0, gUnknown_846718C, gUnknown_8467288, gUnknown_846708C}, + {1, 0, 0, 1, gUnknown_846737C, gUnknown_8467470, gUnknown_84670AC}, + {1, 0, 0, 2, gUnknown_8467558, gUnknown_846762C, gUnknown_84670CC}, + {1, 0, 0, 3, gUnknown_8467558, gUnknown_846762C, gUnknown_84670EC}, + {1, 0, 0, 4, gUnknown_8467558, gUnknown_846762C, gUnknown_846710C}, + {1, 0, 0, 5, gUnknown_8467558, gUnknown_846762C, gUnknown_846712C}, + {1, 0, 0, 6, gUnknown_8467700, gUnknown_8467934, gUnknown_846714C}, + {1, 0, 0, 7, gUnknown_8467A7C, gUnknown_8467CAC, gUnknown_846716C} +}; bool32 sub_8145654(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6) { -- cgit v1.2.3 From 5151db6054d0704584fdf53e55840e262cde32a4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 17:25:59 -0500 Subject: sub_8146288 --- src/mevent_8145654.c | 50 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 578b90b54..4c81cb620 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -48,13 +48,7 @@ struct UnkStruct_203F3C8 /*045C*/ u8 buffer_045C[0x1000]; }; -struct UnkStruct_203F3CC -{ - /*0000*/ u8 filler_0000[0x13a4]; -}; - EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_203F3C8 = NULL; -EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_203F3CC = NULL; void sub_8145A98(void); void sub_8145D18(u8 whichWindow); @@ -138,11 +132,11 @@ bool32 sub_8145654(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_S return FALSE; gUnknown_203F3C8->unk_0000 = *r5; gUnknown_203F3C8->unk_014C = *r6; - if (gUnknown_203F3C8->unk_0000.unk_08_2 > 7) + if (gUnknown_203F3C8->unk_0000.unk_08_2 >= NELEMS(gUnknown_8467FB8)) gUnknown_203F3C8->unk_0000.unk_08_2 = 0; - if (gUnknown_203F3C8->unk_0000.unk_08_0 > 2) + if (gUnknown_203F3C8->unk_0000.unk_08_0 >= NELEMS(gUnknown_8467070)) gUnknown_203F3C8->unk_0000.unk_08_0 = 0; - if (gUnknown_203F3C8->unk_0000.unk_09 > 7) + if (gUnknown_203F3C8->unk_0000.unk_09 > NELEMS(gUnknown_203F3C8->unk_017D)) gUnknown_203F3C8->unk_0000.unk_09 = 0; gUnknown_203F3C8->unk_0170 = &gUnknown_8467FB8[gUnknown_203F3C8->unk_0000.unk_08_2]; return TRUE; @@ -445,3 +439,41 @@ void sub_81461D8(void) FreeSpritePaletteByTag(0x8000); } } + +struct UnkStruct_8468720 +{ + u8 unk0; + const void * unk4; + const void * unk8; + const void * unkC; +}; + +struct UnkStruct_203F3CC +{ + /*0000*/ struct MEventBuffer_3120_Sub unk_0000; + /*01bc*/ const struct UnkStruct_8468720 * unk_01BC; + /*01c0*/ u8 unk_01C0; + /*01c1*/ u8 unk_01C1; + /*01c2*/ u8 filler_01C2[0x11e2]; +}; + +EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_203F3CC = NULL; + +extern const struct TextColor gUnknown_8468038[2]; +extern const struct UnkStruct_8468720 gUnknown_8468720[8]; +extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8468050; + +bool32 sub_8146288(const struct MEventBuffer_3120_Sub * a0) +{ + if (a0 == NULL) + return FALSE; + gUnknown_203F3CC = AllocZeroed(sizeof(struct UnkStruct_203F3CC)); + if (gUnknown_203F3CC == NULL) + return FALSE; + gUnknown_203F3CC->unk_0000 = *a0; + if (gUnknown_203F3CC->unk_0000.unk_03 >= NELEMS(gUnknown_8468720)) + gUnknown_203F3CC->unk_0000.unk_03 = 0; + gUnknown_203F3CC->unk_01BC = &gUnknown_8468720[gUnknown_203F3CC->unk_0000.unk_03]; + gUnknown_203F3CC->unk_01C1 = 0xFF; + return TRUE; +} -- cgit v1.2.3 From c7f9c8f1a52ca6284892442a76b462d67d23145e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 17:31:54 -0500 Subject: sub_81462EC --- src/mevent_8145654.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 4c81cb620..300a1bf3e 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -477,3 +477,13 @@ bool32 sub_8146288(const struct MEventBuffer_3120_Sub * a0) gUnknown_203F3CC->unk_01C1 = 0xFF; return TRUE; } + +void sub_81462EC(void) +{ + if (gUnknown_203F3CC != NULL) + { + *gUnknown_203F3CC = (struct UnkStruct_203F3CC){}; + Free(gUnknown_203F3CC); + gUnknown_203F3CC = NULL; + } +} -- cgit v1.2.3 From ecc4af703a163336219a87d7b4755da1406c5f2e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 2 Dec 2018 19:01:51 -0500 Subject: Add missing graphics files --- src/mevent_8145654.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 300a1bf3e..dc0969630 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -94,7 +94,7 @@ const u16 gUnknown_8467E74[] = INCBIN_U16("data/graphics/mevent/pal_467E74.gbapa const u16 gUnknown_8467E94[] = INCBIN_U16("data/graphics/mevent/pal_467E94.gbapal"); const u16 gUnknown_8467EB4[] = INCBIN_U16("data/graphics/mevent/pal_467EB4.gbapal"); const u16 gUnknown_8467ED4[] = INCBIN_U16("data/graphics/mevent/pal_467ED4.gbapal"); -const u8 gUnknown_8467EF4[] = INCBIN_U8("data/graphics/mevent/gfx_467F58.4bpp.lz"); +const u8 gUnknown_8467EF4[] = INCBIN_U8("data/graphics/mevent/gfx_467EF4.4bpp.lz"); const struct CompressedSpriteSheet gUnknown_8467F58 = { gUnknown_8467EF4, 0x100, 0x8000 -- cgit v1.2.3 From 9ff5f62747589e403bc8bf215f8ebe3f5ba82353 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 3 Dec 2018 08:28:05 -0500 Subject: sub_8146318 --- src/mevent_8145654.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index dc0969630..3d7f6d3ca 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -1,12 +1,14 @@ #include "global.h" #include "constants/species.h" #include "bg.h" +#include "gpu_regs.h" #include "palette.h" #include "decompress.h" #include "malloc.h" #include "menu.h" #include "pokemon_icon.h" #include "mystery_gift_menu.h" +#include "menu_indicators.h" #include "string_util.h" #include "mevent.h" @@ -452,14 +454,24 @@ struct UnkStruct_203F3CC { /*0000*/ struct MEventBuffer_3120_Sub unk_0000; /*01bc*/ const struct UnkStruct_8468720 * unk_01BC; - /*01c0*/ u8 unk_01C0; + /*01c0*/ u8 unk_01C0_0:1; + /*01c0*/ u8 unk_01C0_1:7; /*01c1*/ u8 unk_01C1; - /*01c2*/ u8 filler_01C2[0x11e2]; + /*01c2*/ u8 filler_01C2[4]; + /*01c6*/ u16 unk_01C6; + /*01c8*/ u16 unk_01C8[2]; + /*01cc*/ u8 filler_01CC[0x1C8]; + /*0394*/ struct ScrollIndicatorArrowPairTemplate unk_0394; + /*03a4*/ u8 buffer_03A4[0x1000]; }; EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_203F3CC = NULL; +void sub_8146980(void); +void sub_8146A30(void); + extern const struct TextColor gUnknown_8468038[2]; +extern const struct WindowTemplate gUnknown_8468040[2]; extern const struct UnkStruct_8468720 gUnknown_8468720[8]; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8468050; @@ -487,3 +499,78 @@ void sub_81462EC(void) gUnknown_203F3CC = NULL; } } + +s32 sub_8146318(void) +{ + if (gUnknown_203F3CC == NULL) + return -1; + + switch (gUnknown_203F3CC->unk_01C0_1) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + ChangeBgY(0, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0xF0); + SetGpuReg(REG_OFFSET_WIN0V, 0x1A98); + SetGpuReg(REG_OFFSET_WININ, 0x1F); + SetGpuReg(REG_OFFSET_WINOUT, 0x1B); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + decompress_and_copy_tile_data_to_vram(3, gUnknown_203F3CC->unk_01BC->unk4, 0, 8, 0); + gUnknown_203F3CC->unk_01C8[0] = AddWindow(&gUnknown_8468040[0]); + gUnknown_203F3CC->unk_01C8[1] = AddWindow(&gUnknown_8468040[1]); + break; + case 3: + if (free_temp_tile_data_buffers_if_possible()) + return 0; + gPaletteFade.bufferTransferDisabled = TRUE; + LoadPalette(gUnknown_203F3CC->unk_01BC->unkC, 0x10, 0x20); + LZ77UnCompWram(gUnknown_203F3CC->unk_01BC->unk8, gUnknown_203F3CC->buffer_03A4); + CopyRectToBgTilemapBufferRect(1, gUnknown_203F3CC->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0); + CopyRectToBgTilemapBufferRect(3, gUnknown_203F3CC->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(3); + break; + case 4: + sub_8146980(); + break; + case 5: + sub_8146A30(); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(2); + break; + case 6: + ShowBg(1); + ShowBg(2); + ShowBg(3); + gPaletteFade.bufferTransferDisabled = FALSE; + gUnknown_203F3CC->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_203F3CC->unk_0394, &gUnknown_203F3CC->unk_01C6); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + UpdatePaletteFade(); + break; + default: + if (UpdatePaletteFade()) + return 0; + gUnknown_203F3CC->unk_01C0_1 = 0; + return 1; + } + + ++gUnknown_203F3CC->unk_01C0_1; + return 0; +} -- cgit v1.2.3 From 208c6054475030ce48482c34647bd5728172b074 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 3 Dec 2018 08:41:06 -0500 Subject: sub_8146604 --- src/mevent_8145654.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 3d7f6d3ca..5161d5380 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -10,6 +10,7 @@ #include "mystery_gift_menu.h" #include "menu_indicators.h" #include "string_util.h" +#include "link_rfu.h" #include "mevent.h" struct UnkStruct_8467FB8 @@ -574,3 +575,66 @@ s32 sub_8146318(void) ++gUnknown_203F3CC->unk_01C0_1; return 0; } + +s32 sub_8146604(bool32 flag) +{ + if (gUnknown_203F3CC == NULL) + return -1; + switch (gUnknown_203F3CC->unk_01C0_1) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + ChangeBgY(2, 0, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24); + FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + break; + case 3: + HideBg(1); + HideBg(2); + RemoveWindow(gUnknown_203F3CC->unk_01C8[1]); + RemoveWindow(gUnknown_203F3CC->unk_01C8[0]); + break; + case 4: + ChangeBgY(2, 0, 0); + ChangeBgY(3, 0, 0); + if (gUnknown_203F3CC->unk_01C1 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203F3CC->unk_01C1); + gUnknown_203F3CC->unk_01C1 = 0xFF; + } + break; + case 5: + sub_8142344(gUnknown_203F3B8, flag); + break; + case 6: + sub_8142420(); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(3); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + break; + default: + if (UpdatePaletteFade()) + return 0; + gUnknown_203F3CC->unk_01C0_1 = 0; + return 1; + } + ++gUnknown_203F3CC->unk_01C0_1; + return 0; +} -- cgit v1.2.3 From 3700b24a316d4c053e719c97642e32e3b1b297ca Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 3 Dec 2018 08:44:24 -0500 Subject: through sub_8146834 --- src/mevent_8145654.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 5161d5380..04fac680e 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -638,3 +638,23 @@ s32 sub_8146604(bool32 flag) ++gUnknown_203F3CC->unk_01C0_1; return 0; } + +void sub_81467EC(void) +{ + if (!gUnknown_203F3CC->unk_01C0_0 && gUnknown_203F3CC->unk_01C1 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203F3CC->unk_01C1); + gUnknown_203F3CC->unk_01C1 = 0xFF; + gUnknown_203F3CC->unk_01C0_0 = TRUE; + } +} + + +void sub_8146834(void) +{ + if (gUnknown_203F3CC->unk_01C0_0) + { + gUnknown_203F3CC->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_203F3CC->unk_0394, &gUnknown_203F3CC->unk_01C6); + gUnknown_203F3CC->unk_01C0_0 = FALSE; + } +} \ No newline at end of file -- cgit v1.2.3 From 0f486fec545ed2583b478033410b648329fc98f1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 3 Dec 2018 09:43:03 -0500 Subject: sub_8146884 --- src/mevent_8145654.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 04fac680e..443aa0b76 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -456,9 +456,13 @@ struct UnkStruct_203F3CC /*0000*/ struct MEventBuffer_3120_Sub unk_0000; /*01bc*/ const struct UnkStruct_8468720 * unk_01BC; /*01c0*/ u8 unk_01C0_0:1; - /*01c0*/ u8 unk_01C0_1:7; + u8 unk_01C0_1:7; /*01c1*/ u8 unk_01C1; - /*01c2*/ u8 filler_01C2[4]; + /*01c2*/ u8 unk_01C2_0:1; + u8 unk_01C2_1:7; + /*01c3*/ u8 unk_01C3_0:1; + u8 unk_01C3_1:7; + /*01c4*/ u16 unk_01C4; /*01c6*/ u16 unk_01C6; /*01c8*/ u16 unk_01C8[2]; /*01cc*/ u8 filler_01CC[0x1C8]; @@ -470,6 +474,7 @@ EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_203F3CC = NULL; void sub_8146980(void); void sub_8146A30(void); +void sub_8146B58(void); extern const struct TextColor gUnknown_8468038[2]; extern const struct WindowTemplate gUnknown_8468040[2]; @@ -657,4 +662,43 @@ void sub_8146834(void) gUnknown_203F3CC->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_203F3CC->unk_0394, &gUnknown_203F3CC->unk_01C6); gUnknown_203F3CC->unk_01C0_0 = FALSE; } -} \ No newline at end of file +} + +u8 sub_8146884(u16 input) +{ + if (gUnknown_203F3CC->unk_01C2_0) + { + sub_8146B58(); + return 0xFF; + } + switch (input) + { + case A_BUTTON: + return 0; + case B_BUTTON: + return 1; + case DPAD_UP: + if (gUnknown_203F3CC->unk_01C6 == 0) + return 0xFF; + if (gUnknown_203F3CC->unk_01C0_0) + return 0xFF; + gUnknown_203F3CC->unk_01C3_0 = FALSE; + break; + case DPAD_DOWN: + if (gUnknown_203F3CC->unk_01C6 == gUnknown_203F3CC->unk_01C4) + return 0xFF; + if (gUnknown_203F3CC->unk_01C0_0) + return 0xFF; + gUnknown_203F3CC->unk_01C3_0 = TRUE; + break; + default: + return 0xFF; + } + gUnknown_203F3CC->unk_01C2_0 = TRUE; + gUnknown_203F3CC->unk_01C2_1 = 2; + gUnknown_203F3CC->unk_01C3_1 = 0; + if (gUnknown_203F3CC->unk_01C3_0 == FALSE) + return 2; + else + return 3; +} -- cgit v1.2.3 From 59b87e9d2af887401736d8fd06d3a9266e3983e5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 3 Dec 2018 10:09:28 -0500 Subject: sub_8146980 --- src/mevent_8145654.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 443aa0b76..0be18ad8f 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -465,7 +465,9 @@ struct UnkStruct_203F3CC /*01c4*/ u16 unk_01C4; /*01c6*/ u16 unk_01C6; /*01c8*/ u16 unk_01C8[2]; - /*01cc*/ u8 filler_01CC[0x1C8]; + /*01cc*/ u8 filler_01CC[2]; + /*01ce*/ u8 unk_01CE[41]; + /*01f7*/ u8 unk_01F7[10][41]; /*0394*/ struct ScrollIndicatorArrowPairTemplate unk_0394; /*03a4*/ u8 buffer_03A4[0x1000]; }; @@ -476,10 +478,19 @@ void sub_8146980(void); void sub_8146A30(void); void sub_8146B58(void); -extern const struct TextColor gUnknown_8468038[2]; -extern const struct WindowTemplate gUnknown_8468040[2]; +const struct TextColor gUnknown_8468038[] = { + {0, 2, 3}, + {0, 1, 2} +}; +const struct WindowTemplate gUnknown_8468040[] = { + {0, 1, 0, 28, 3, 15, 0x000}, + {2, 1, 3, 28, 20, 15, 0x000} +}; +const struct ScrollIndicatorArrowPairTemplate gUnknown_8468050 = { + 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, + 0x0000, 0x0002, 0x1000, 0x1000, 0x0, 0x000 +}; extern const struct UnkStruct_8468720 gUnknown_8468720[8]; -extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8468050; bool32 sub_8146288(const struct MEventBuffer_3120_Sub * a0) { @@ -702,3 +713,19 @@ u8 sub_8146884(u16 input) else return 3; } + +void sub_8146980(void) +{ + u8 i = 0; + memcpy(gUnknown_203F3CC->unk_01CE, gUnknown_203F3CC->unk_0000.unk_04, 40); + gUnknown_203F3CC->unk_01CE[40] = EOS; + for (i = 0; i < 10; ++i) + { + memcpy(gUnknown_203F3CC->unk_01F7[i], gUnknown_203F3CC->unk_0000.unk_2C[i], 40); + gUnknown_203F3CC->unk_01F7[i][40] = EOS; + if (i > 7 && gUnknown_203F3CC->unk_01F7[i][0] != EOS) + ++gUnknown_203F3CC->unk_01C4; + } + gUnknown_203F3CC->unk_0394 = gUnknown_8468050; + gUnknown_203F3CC->unk_0394.unk_08 = gUnknown_203F3CC->unk_01C4; +} -- cgit v1.2.3 From c500754d6bfbfc1ae0d67b89e725bcb0014de892 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 3 Dec 2018 10:40:38 -0500 Subject: Finish decomp and dism of mevent_8145654 --- src/mevent_8145654.c | 90 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 76 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 0be18ad8f..c39d76f25 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -443,18 +443,10 @@ void sub_81461D8(void) } } -struct UnkStruct_8468720 -{ - u8 unk0; - const void * unk4; - const void * unk8; - const void * unkC; -}; - struct UnkStruct_203F3CC { /*0000*/ struct MEventBuffer_3120_Sub unk_0000; - /*01bc*/ const struct UnkStruct_8468720 * unk_01BC; + /*01bc*/ const struct UnkStruct_8467FB8 * unk_01BC; /*01c0*/ u8 unk_01C0_0:1; u8 unk_01C0_1:7; /*01c1*/ u8 unk_01C1; @@ -490,7 +482,31 @@ const struct ScrollIndicatorArrowPairTemplate gUnknown_8468050 = { 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, 0x0000, 0x0002, 0x1000, 0x1000, 0x0, 0x000 }; -extern const struct UnkStruct_8468720 gUnknown_8468720[8]; + +const u16 gUnknown_8468060[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal"); +const u16 gUnknown_8468080[] = INCBIN_U16("data/graphics/mevent/pal_468080.gbapal"); +const u16 gUnknown_84680A0[] = INCBIN_U16("data/graphics/mevent/pal_4680A0.gbapal"); +const u8 gUnknown_84680C0[] = INCBIN_U8("data/graphics/mevent/gfx_4680C0.4bpp.lz"); +const u8 gUnknown_8468140[] = INCBIN_U8("data/graphics/mevent/tilemap_468140.bin.lz"); +const u8 gUnknown_846821C[] = INCBIN_U8("data/graphics/mevent/gfx_46821C.4bpp.lz"); +const u8 gUnknown_846824C[] = INCBIN_U8("data/graphics/mevent/tilemap_46824C.bin.lz"); +const u8 gUnknown_846830C[] = INCBIN_U8("data/graphics/mevent/gfx_46830C.4bpp.lz"); +const u8 gUnknown_846837C[] = INCBIN_U8("data/graphics/mevent/tilemap_46837C.bin.lz"); +const u8 gUnknown_8468448[] = INCBIN_U8("data/graphics/mevent/gfx_468448.4bpp.lz"); +const u8 gUnknown_84684D8[] = INCBIN_U8("data/graphics/mevent/tilemap_4684D8.bin.lz"); +const u8 gUnknown_84685B4[] = INCBIN_U8("data/graphics/mevent/gfx_4685B4.4bpp.lz"); +const u8 gUnknown_8468644[] = INCBIN_U8("data/graphics/mevent/tilemap_468644.bin.lz"); + +const struct UnkStruct_8467FB8 gUnknown_8468720[] = { + {1, 0, 0, 0, gUnknown_84680C0, gUnknown_8468140, gUnknown_8468060}, + {1, 0, 0, 0, gUnknown_846821C, gUnknown_846824C, gUnknown_84670AC}, + {1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_84670CC}, + {1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_84670EC}, + {1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_846710C}, + {1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_846712C}, + {1, 0, 0, 0, gUnknown_8468448, gUnknown_84684D8, gUnknown_8468080}, + {1, 0, 0, 0, gUnknown_84685B4, gUnknown_8468644, gUnknown_84680A0} +}; bool32 sub_8146288(const struct MEventBuffer_3120_Sub * a0) { @@ -549,7 +565,7 @@ s32 sub_8146318(void) CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); - decompress_and_copy_tile_data_to_vram(3, gUnknown_203F3CC->unk_01BC->unk4, 0, 8, 0); + decompress_and_copy_tile_data_to_vram(3, gUnknown_203F3CC->unk_01BC->tiles, 0, 8, 0); gUnknown_203F3CC->unk_01C8[0] = AddWindow(&gUnknown_8468040[0]); gUnknown_203F3CC->unk_01C8[1] = AddWindow(&gUnknown_8468040[1]); break; @@ -557,8 +573,8 @@ s32 sub_8146318(void) if (free_temp_tile_data_buffers_if_possible()) return 0; gPaletteFade.bufferTransferDisabled = TRUE; - LoadPalette(gUnknown_203F3CC->unk_01BC->unkC, 0x10, 0x20); - LZ77UnCompWram(gUnknown_203F3CC->unk_01BC->unk8, gUnknown_203F3CC->buffer_03A4); + LoadPalette(gUnknown_203F3CC->unk_01BC->pal, 0x10, 0x20); + LZ77UnCompWram(gUnknown_203F3CC->unk_01BC->map, gUnknown_203F3CC->buffer_03A4); CopyRectToBgTilemapBufferRect(1, gUnknown_203F3CC->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0); CopyRectToBgTilemapBufferRect(3, gUnknown_203F3CC->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0); CopyBgTilemapBufferToVram(1); @@ -719,7 +735,7 @@ void sub_8146980(void) u8 i = 0; memcpy(gUnknown_203F3CC->unk_01CE, gUnknown_203F3CC->unk_0000.unk_04, 40); gUnknown_203F3CC->unk_01CE[40] = EOS; - for (i = 0; i < 10; ++i) + for (; i < 10; ++i) { memcpy(gUnknown_203F3CC->unk_01F7[i], gUnknown_203F3CC->unk_0000.unk_2C[i], 40); gUnknown_203F3CC->unk_01F7[i][40] = EOS; @@ -729,3 +745,49 @@ void sub_8146980(void) gUnknown_203F3CC->unk_0394 = gUnknown_8468050; gUnknown_203F3CC->unk_0394.unk_08 = gUnknown_203F3CC->unk_01C4; } + +void sub_8146A30(void) +{ + u8 i = 0; + s32 x; + PutWindowTilemap(gUnknown_203F3CC->unk_01C8[0]); + PutWindowTilemap(gUnknown_203F3CC->unk_01C8[1]); + FillWindowPixelBuffer(gUnknown_203F3CC->unk_01C8[0], 0); + FillWindowPixelBuffer(gUnknown_203F3CC->unk_01C8[1], 0); + x = (0xe0 - GetStringWidth(3, gUnknown_203F3CC->unk_01CE, GetFontAttribute(3, 2))) / 2; + if (x < 0) + x = 0; + box_print(gUnknown_203F3CC->unk_01C8[0], 3, x, 6, &gUnknown_8468038[gUnknown_203F3CC->unk_01BC->textPal1], 0, gUnknown_203F3CC->unk_01CE); + for (; i < 10; ++i) + { + box_print(gUnknown_203F3CC->unk_01C8[1], 3, 0, 16 * i + 2, &gUnknown_8468038[gUnknown_203F3CC->unk_01BC->textPal2], 0, gUnknown_203F3CC->unk_01F7[i]); + } + CopyWindowToVram(gUnknown_203F3CC->unk_01C8[0], 3); + CopyWindowToVram(gUnknown_203F3CC->unk_01C8[1], 3); +} + +void sub_8146B58(void) +{ + u16 r4 = gUnknown_203F3CC->unk_01C2_1; + r4 <<= 8; + if (gUnknown_203F3CC->unk_01C3_0) + { + ChangeBgY(2, r4, 1); + ChangeBgY(3, r4, 1); + } + else + { + ChangeBgY(2, r4, 2); + ChangeBgY(3, r4, 2); + } + gUnknown_203F3CC->unk_01C3_1 += gUnknown_203F3CC->unk_01C2_1; + if (gUnknown_203F3CC->unk_01C3_1 > 15) + { + if (gUnknown_203F3CC->unk_01C3_0) + ++gUnknown_203F3CC->unk_01C6; + else + --gUnknown_203F3CC->unk_01C6; + gUnknown_203F3CC->unk_01C2_0 = FALSE; + gUnknown_203F3CC->unk_01C3_1 = 0; + } +} -- cgit v1.2.3 From 931f19d2ead516a5fb5a2a15784391ea02bdbbc3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 3 Dec 2018 20:21:35 -0500 Subject: Port mystery_event_script --- src/mevent_server.c | 2 +- src/mystery_event_script.c | 322 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 323 insertions(+), 1 deletion(-) create mode 100644 src/mystery_event_script.c (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c index d5a9a0c0e..5e384ae0b 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -227,7 +227,7 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr) break; case 18: memcpy(gSaveBlock2Ptr->unk_4A0, svr->recvBuffer, 0xbc); - sub_80E7490(); + ValidateEReaderTrainer(); break; case 21: memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c new file mode 100644 index 000000000..c9dc6ae81 --- /dev/null +++ b/src/mystery_event_script.c @@ -0,0 +1,322 @@ +#include "global.h" +#include "berry.h" +#include "battle_tower.h" +#include "easy_chat.h" +#include "event_data.h" +#include "mail.h" +#include "mail_data.h" +#include "mystery_event_script.h" +#include "pokedex.h" +#include "pokemon.h" +#include "pokemon_size_record.h" +#include "script.h" +#include "constants/species.h" +#include "strings.h" +#include "string_util.h" +#include "text.h" +#include "util.h" +#include "mystery_event_msg.h" +#include "pokemon_storage_system.h" + +extern ScrCmdFunc gMysteryEventScriptCmdTable[]; +extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[]; + +#define LANGUAGE_MASK 0x1 +#define VERSION_MASK 0x1 + +EWRAM_DATA static struct ScriptContext sMysteryEventScriptContext = {0}; + +static bool32 CheckCompatibility(u16 a1, u32 a2, u16 a3, u32 a4) +{ + if (!(a1 & LANGUAGE_MASK)) + return FALSE; + + if (!(a2 & LANGUAGE_MASK)) + return FALSE; + + if (!(a3 & 0x1)) + return FALSE; + + if (!(a4 & VERSION_MASK)) + return FALSE; + + return TRUE; +} + +static void SetIncompatible(void) +{ + StringExpandPlaceholders(gStringVar4, gText_MysteryGiftCantBeUsed); + SetMysteryEventScriptStatus(3); +} + +static void InitMysteryEventScript(struct ScriptContext *ctx, u8 *script) +{ + InitScriptContext(ctx, gMysteryEventScriptCmdTable, gMysteryEventScriptCmdTableEnd); + SetupBytecodeScript(ctx, script); + ctx->data[0] = (u32)script; + ctx->data[1] = 0; + ctx->data[2] = 0; + ctx->data[3] = 0; +} + +static bool32 RunMysteryEventScriptCommand(struct ScriptContext *ctx) +{ + if (RunScriptCommand(ctx) && ctx->data[3]) + return TRUE; + else + return FALSE; +} + +void sub_80DA89C(u8 *script) +{ + InitMysteryEventScript(&sMysteryEventScriptContext, script); +} + +bool32 sub_80DA8B0(u32 *a0) +{ + bool32 ret = RunMysteryEventScriptCommand(&sMysteryEventScriptContext); + *a0 = sMysteryEventScriptContext.data[2]; + + return ret; +} + +u32 RunMysteryEventScript(u8 *script) +{ + u32 ret; + sub_80DA89C(script); + while (sub_80DA8B0(&ret)); + + return ret; +} + +void SetMysteryEventScriptStatus(u32 val) +{ + sMysteryEventScriptContext.data[2] = val; +} + +bool8 MEScrCmd_end(struct ScriptContext *ctx) +{ + StopScript(ctx); + return TRUE; +} + +bool8 MEScrCmd_checkcompat(struct ScriptContext *ctx) +{ + u16 v1; + u32 v2; + u16 v3; + u32 v4; + + ctx->data[1] = ScriptReadWord(ctx); + v1 = ScriptReadHalfword(ctx); + v2 = ScriptReadWord(ctx); + v3 = ScriptReadHalfword(ctx); + v4 = ScriptReadWord(ctx); + + if (CheckCompatibility(v1, v2, v3, v4) == TRUE) + ctx->data[3] = 1; + else + SetIncompatible(); + + return TRUE; +} + +bool8 MEScrCmd_nop(struct ScriptContext *ctx) +{ + return FALSE; +} + +bool8 MEScrCmd_setstatus(struct ScriptContext *ctx) +{ + u8 value = ScriptReadByte(ctx); + ctx->data[2] = value; + return FALSE; +} + +bool8 MEScrCmd_setmsg(struct ScriptContext *ctx) +{ + u8 value = ScriptReadByte(ctx); + u8 *str = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + if (value == 0xFF || value == ctx->data[2]) + StringExpandPlaceholders(gStringVar4, str); + return FALSE; +} + +bool8 MEScrCmd_runscript(struct ScriptContext *ctx) +{ + u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + ScriptContext2_RunNewScript(script); + return FALSE; +} + +bool8 MEScrCmd_setenigmaberry(struct ScriptContext *ctx) +{ + u8 *str; + const u8 *message; + bool32 haveBerry = IsEnigmaBerryValid(); + u8 *berry = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + StringCopyN(gStringVar1, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1); + SetEnigmaBerry(berry); + StringCopyN(gStringVar2, gSaveBlock1Ptr->enigmaBerry.berry.name, BERRY_NAME_LENGTH + 1); + + if (!haveBerry) + { + str = gStringVar4; + message = gText_MysteryGiftBerry; + } + else if (StringCompare(gStringVar1, gStringVar2)) + { + str = gStringVar4; + message = gText_MysteryGiftBerryTransform; + } + else + { + str = gStringVar4; + message = gText_MysteryGiftBerryObtained; + } + + StringExpandPlaceholders(str, message); + + ctx->data[2] = 2; + + if (IsEnigmaBerryValid() == TRUE) + VarSet(VAR_ENIGMA_BERRY_AVAILABLE, 1); + else + ctx->data[2] = 1; + + return FALSE; +} + +bool8 MEScrCmd_giveribbon(struct ScriptContext *ctx) +{ + u8 index = ScriptReadByte(ctx); + u8 ribbonId = ScriptReadByte(ctx); + GiveGiftRibbonToParty(index, ribbonId); + StringExpandPlaceholders(gStringVar4, gText_MysteryGiftSpecialRibbon); + ctx->data[2] = 2; + return FALSE; +} + +bool8 MEScrCmd_initramscript(struct ScriptContext *ctx) +{ + u8 mapGroup = ScriptReadByte(ctx); + u8 mapNum = ScriptReadByte(ctx); + u8 objectId = ScriptReadByte(ctx); + u8 *script = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *scriptEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + InitRamScript(script, scriptEnd - script, mapGroup, mapNum, objectId); + return FALSE; +} + +bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx) +{ + EnableNationalPokedex(); + StringExpandPlaceholders(gStringVar4, gText_MysteryGiftNationalDex); + ctx->data[2] = 2; + return FALSE; +} + +bool8 MEScrCmd_addrareword(struct ScriptContext *ctx) +{ + EnableRareWord(ScriptReadByte(ctx)); + StringExpandPlaceholders(gStringVar4, gText_MysteryGiftRareWord); + ctx->data[2] = 2; + return FALSE; +} + +bool8 MEScrCmd_setrecordmixinggift(struct ScriptContext *ctx) +{ + SetIncompatible(); + ctx->data[3] = 0; + return TRUE; +} + +bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) +{ + struct MailStruct mail; + struct Pokemon pokemon; + u16 species; + u16 heldItem; + u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; + void *pokemonPtr = (void *)data; + void *mailPtr = (void *)(data + sizeof(struct Pokemon)); + + pokemon = *(struct Pokemon *)pokemonPtr; + species = GetMonData(&pokemon, MON_DATA_SPECIES2); + + if (species == SPECIES_EGG) + StringCopyN(gStringVar1, gText_EggNickname, POKEMON_NAME_LENGTH + 1); + else + StringCopyN(gStringVar1, gText_Pokemon, POKEMON_NAME_LENGTH + 1); + + if (gPlayerPartyCount == PARTY_SIZE) + { + StringExpandPlaceholders(gStringVar4, gText_MysteryGiftFullParty); + ctx->data[2] = 3; + } + else + { + memcpy(&gPlayerParty[5], pokemonPtr, sizeof(struct Pokemon)); + memcpy(&mail, mailPtr, sizeof(struct MailStruct)); + + if (species != SPECIES_EGG) + { + u16 pokedexNum = SpeciesToNationalPokedexNum(species); + GetSetPokedexFlag(pokedexNum, FLAG_SET_SEEN); + GetSetPokedexFlag(pokedexNum, FLAG_SET_CAUGHT); + } + + heldItem = GetMonData(&gPlayerParty[5], MON_DATA_HELD_ITEM); + if (itemid_is_mail(heldItem)) + GiveMailToMon2(&gPlayerParty[5], &mail); + CompactPartySlots(); + CalculatePlayerPartyCount(); + StringExpandPlaceholders(gStringVar4, gText_MysteryGiftSentOver); + ctx->data[2] = 2; + } + + return FALSE; +} + +bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) +{ + u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; + memcpy(gSaveBlock2Ptr->unk_4A0, (void *)data, 0xBC); + ValidateEReaderTrainer(); + StringExpandPlaceholders(gStringVar4, gText_MysteryGiftNewTrainer); + ctx->data[2] = 2; + return FALSE; +} + +bool8 MEScrCmd_enableresetrtc(struct ScriptContext *ctx) +{ + SetIncompatible(); + ctx->data[3] = 0; + return TRUE; +} + +bool8 MEScrCmd_checksum(struct ScriptContext *ctx) +{ + int checksum = ScriptReadWord(ctx); + u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + if (checksum != CalcByteArraySum(data, dataEnd - data)) + { + ctx->data[3] = 0; + ctx->data[2] = 1; + } + return TRUE; +} + +bool8 MEScrCmd_crc(struct ScriptContext *ctx) +{ + int crc = ScriptReadWord(ctx); + u8 *data = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + u8 *dataEnd = (u8 *)(ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]); + if (crc != CalcCRC16(data, dataEnd - data)) + { + ctx->data[3] = 0; + ctx->data[2] = 1; + } + return TRUE; +} -- cgit v1.2.3 From 089703dc086d03081f80aa90c2978a0f091d7d77 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 3 Dec 2018 21:15:42 -0500 Subject: Decompile (partially) mystery_event_msg --- src/mystery_event_msg.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/mystery_event_msg.c (limited to 'src') diff --git a/src/mystery_event_msg.c b/src/mystery_event_msg.c new file mode 100644 index 000000000..a21750b7a --- /dev/null +++ b/src/mystery_event_msg.c @@ -0,0 +1,13 @@ +#include "global.h" + +const u8 gText_MysteryGiftBerry[] = _("Obtained a {STR_VAR_2} BERRY!\nDad has it at PETALBURG GYM."); +const u8 gText_MysteryGiftBerryTransform[] = _("The {STR_VAR_1} BERRY transformed into\none {STR_VAR_2} BERRY."); +const u8 gText_MysteryGiftBerryObtained[] = _("The {STR_VAR_1} BERRY has already been\nobtained."); +const u8 gText_MysteryGiftSpecialRibbon[] = _("A special RIBBON was awarded to\nyour party POKéMON."); +const u8 gText_MysteryGiftNationalDex[] = _("The POKéDEX has been upgraded\nwith the NATIONAL MODE."); +const u8 gText_MysteryGiftRareWord[] = _("A rare word has been added."); +const u8 gText_MysteryGiftSentOver[] = _("{STR_VAR_1} was sent over!"); +const u8 gText_MysteryGiftFullParty[] = _("Your party is full.\n{STR_VAR_1} could not be sent over."); +const u8 gText_MysteryGiftNewTrainer[] = _("A new TRAINER has arrived in\nHOENN."); +const u8 gText_MysteryGiftNewAdversaryInBattleTower[] = _("バトルタワーに あらたな\nたいせんしゃが あらわれた!"); +const u8 gText_MysteryGiftCantBeUsed[] = _("This data can’t be used in\nthis version."); -- cgit v1.2.3 From c14c6d36f8a60fd561f7c24339b575807bc6066f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 5 Dec 2018 08:43:55 -0500 Subject: Rename most special vars --- src/fame_checker.c | 10 +++++----- src/menews_jisan.c | 2 +- src/quest_log.c | 8 ++++---- src/vs_seeker.c | 10 +++++----- 4 files changed, 15 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/fame_checker.c b/src/fame_checker.c index ed38406cb..bbbe02c58 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1038,9 +1038,9 @@ static void FCSetup_ResetBGCoords(void) void SetFlavorTextFlagFromSpecialVars(void) { - if (gUnknown_20370C0 < NUM_FAMECHECKER_PERSONS && gSpecialVar_0x8005 < 6) + if (gSpecialVar_0x8004 < NUM_FAMECHECKER_PERSONS && gSpecialVar_0x8005 < 6) { - gSaveBlock1Ptr->fameChecker[gUnknown_20370C0].flavorTextFlags |= (1 << gSpecialVar_0x8005); + gSaveBlock1Ptr->fameChecker[gSpecialVar_0x8004].flavorTextFlags |= (1 << gSpecialVar_0x8005); gSpecialVar_0x8005 = FCPICKSTATE_SILHOUETTE; UpdatePickStateFromSpecialVar8005(); } @@ -1048,15 +1048,15 @@ void SetFlavorTextFlagFromSpecialVars(void) void UpdatePickStateFromSpecialVar8005(void) { - if (gUnknown_20370C0 < NUM_FAMECHECKER_PERSONS && gSpecialVar_0x8005 < 3) + if (gSpecialVar_0x8004 < NUM_FAMECHECKER_PERSONS && gSpecialVar_0x8005 < 3) { if (gSpecialVar_0x8005 == FCPICKSTATE_NO_DRAW) return; if ( gSpecialVar_0x8005 == FCPICKSTATE_SILHOUETTE - && gSaveBlock1Ptr->fameChecker[gUnknown_20370C0].pickState == FCPICKSTATE_COLORED + && gSaveBlock1Ptr->fameChecker[gSpecialVar_0x8004].pickState == FCPICKSTATE_COLORED ) return; - gSaveBlock1Ptr->fameChecker[gUnknown_20370C0].pickState = gSpecialVar_0x8005; + gSaveBlock1Ptr->fameChecker[gSpecialVar_0x8004].pickState = gSpecialVar_0x8005; } } diff --git a/src/menews_jisan.c b/src/menews_jisan.c index 13c787df7..b4fe080bf 100644 --- a/src/menews_jisan.c +++ b/src/menews_jisan.c @@ -107,7 +107,7 @@ void sub_8146CA4(void) u16 sub_8146CE8(void) { - u16 *r6 = &gUnknown_20370D0; + u16 *r6 = &gSpecialVar_Result; struct MysteryEventStruct *r4 = sub_8143D94(); u16 r5; diff --git a/src/quest_log.c b/src/quest_log.c index 546ff6e05..8e890af21 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -523,7 +523,7 @@ void sub_8110A3C(void) void sub_8110AB4(void) { - gUnknown_20370D0 = gUnknown_203ADFA; + gSpecialVar_Result = gUnknown_203ADFA; } u8 sub_8110AC8(void) @@ -2654,7 +2654,7 @@ bool16 sub_8113364(void) bool16 sub_811337C(struct Var4038Struct * a0) { - return (a0->unk_1 >> gUnknown_20370C0) & 1; + return (a0->unk_1 >> gSpecialVar_0x8004) & 1; } void sub_8113390(struct Var4038Struct * a0) @@ -2669,7 +2669,7 @@ void sub_81133A4(void) u8 r3 = 0; u8 r2 = 0; - switch (gUnknown_20370C0) + switch (gSpecialVar_0x8004) { case 0: r2 = 0; @@ -2770,7 +2770,7 @@ void sub_8113524(struct Var4038Struct * a0) u8 sub_8113530(void) { - return sub_8113114(VAR_0x4038_STRUCT, gUnknown_20370C0); + return sub_8113114(VAR_0x4038_STRUCT, gSpecialVar_0x8004); } static u16 * (*const sQuestLogStorageCBs[])(u16 *, const u16 *) = { diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 17a13ab01..4d42f270d 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -63,7 +63,7 @@ struct VsSeekerStruct u8 responseCode:5; }; -extern u16 gUnknown_20370D2; +extern u16 gSpecialVar_LastTalked; extern struct MapObject gMapObjects[MAP_OBJECTS_COUNT]; extern u8 gUnknown_3005074; @@ -588,7 +588,7 @@ void Task_VsSeeker_0(u8 taskId) } else if (respval == 2) { - sub_80A2294(4, 0, gUnknown_203AD30, 0xffff); + sub_80A2294(4, 0, gSpecialVar_ItemId, 0xffff); FieldEffectStart(FLDEFF_UNK_41); // TODO: name this enum gTasks[taskId].func = Task_VsSeeker_1; gTasks[taskId].data[0] = 15; @@ -1078,7 +1078,7 @@ static bool8 sub_810CD80(const VsSeekerData *vsSeekerData, u16 trainerBattleOppo return FALSE; if (rematchIdx >= 0 && rematchIdx < ARRAY_COUNT(sVsSeekerData)) { - if (IsThisTrainerRematchable(gUnknown_20370D2)) + if (IsThisTrainerRematchable(gSpecialVar_LastTalked)) return TRUE; } return FALSE; @@ -1097,7 +1097,7 @@ static bool8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData *vsSeekerData void sub_810CDE8(void) { - gSaveBlock1Ptr->trainerRematches[gUnknown_20370D2] = 0; + gSaveBlock1Ptr->trainerRematches[gSpecialVar_LastTalked] = 0; sub_80803FC(); } @@ -1148,7 +1148,7 @@ static bool8 sub_810CED0(const VsSeekerData * a0, u16 a1) return FALSE; if ((u32)r1 >= ARRAY_COUNT(sVsSeekerData)) return FALSE; - if (!IsThisTrainerRematchable(gUnknown_20370D2)) + if (!IsThisTrainerRematchable(gSpecialVar_LastTalked)) return FALSE; return TRUE; } -- cgit v1.2.3