diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-30 16:51:22 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-30 16:51:22 -0500 |
commit | b9a6cba30a3ee44ccb14548d198accd7f6bbfa8d (patch) | |
tree | 79745a054c34cd7e0526aa20e97e663358c0ffdb /src/mevent_server.c | |
parent | 8a8e86fa4fe0a7932f475c7aa8424ea840327e4b (diff) |
Finish decomp of mevent_server
Diffstat (limited to 'src/mevent_server.c')
-rw-r--r-- | src/mevent_server.c | 241 |
1 files changed, 225 insertions, 16 deletions
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; +} |