Finish decomp of mevent_server

This commit is contained in:
PikalaxALT
2018-11-30 16:51:22 -05:00
parent 8a8e86fa4f
commit b9a6cba30a
8 changed files with 257 additions and 794 deletions
+225 -16
View File
@@ -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;
}