diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mevent.c | 9 | ||||
-rw-r--r-- | src/mevent_server.c | 527 | ||||
-rw-r--r-- | src/mevent_server_ish.c | 308 | ||||
-rw-r--r-- | src/mevent_server_sub.c | 211 |
4 files changed, 574 insertions, 481 deletions
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; +} |