diff options
Diffstat (limited to 'src/mevent_client.c')
-rw-r--r-- | src/mevent_client.c | 122 |
1 files changed, 63 insertions, 59 deletions
diff --git a/src/mevent_client.c b/src/mevent_client.c index 2bcab1e5a..e260f073f 100644 --- a/src/mevent_client.c +++ b/src/mevent_client.c @@ -15,8 +15,8 @@ enum { FUNC_SEND, FUNC_RUN, FUNC_WAIT, - FUNC_6, - FUNC_7, + FUNC_RUN_GIFT_SCRIPT, + FUNC_RUN_BUFF_SCRIPT, }; EWRAM_DATA static struct MysteryGiftClient * sClient = NULL; @@ -25,7 +25,7 @@ static void MysteryGiftClient_Init(struct MysteryGiftClient *, u32, u32); static u32 MysteryGiftClient_CallFunc(struct MysteryGiftClient *); static void MysteryGiftClient_Free(struct MysteryGiftClient *); -extern const struct MysteryGiftClientCmd gUnknown_082F2598[]; +extern const struct MysteryGiftClientCmd gMysteryGiftClientScript_Init[]; void MysteryGiftClient_Create(bool32 isWonderNews) { @@ -55,9 +55,9 @@ void MysteryGiftClient_AdvanceState(void) sClient->funcState++; } -void * mevent_client_get_buffer(void) +void * MysteryGiftClient_GetMsg(void) { - return sClient->buffer; + return sClient->msg; } void MysteryGiftClient_SetParam(u32 val) @@ -65,42 +65,42 @@ void MysteryGiftClient_SetParam(u32 val) sClient->param = val; } -static void MysteryGiftClient_Init(struct MysteryGiftClient * client, u32 sendPlayerNo, u32 recvPlayerNo) +static void MysteryGiftClient_Init(struct MysteryGiftClient * client, u32 sendPlayerId, u32 recvPlayerId) { - client->unk_00 = 0; + client->unused = 0; client->funcId = FUNC_INIT; client->funcState = 0; - client->sendBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - client->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - client->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - client->buffer = AllocZeroed(0x40); - MysteryGiftLink_Init(&client->link, sendPlayerNo, recvPlayerNo); + client->sendBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE); + client->recvBuffer = AllocZeroed(MG_LINK_BUFFER_SIZE); + client->script = AllocZeroed(MG_LINK_BUFFER_SIZE); + client->msg = AllocZeroed(CLIENT_MAX_MSG_SIZE); + MysteryGiftLink_Init(&client->link, sendPlayerId, recvPlayerId); } static void MysteryGiftClient_Free(struct MysteryGiftClient * client) { Free(client->sendBuffer); Free(client->recvBuffer); - Free(client->cmdBuffer); - Free(client->buffer); + Free(client->script); + Free(client->msg); } static void MysteryGiftClient_CopyRecvScript(struct MysteryGiftClient * client) { - memcpy(client->cmdBuffer, client->recvBuffer, ME_SEND_BUF_SIZE); + memcpy(client->script, client->recvBuffer, MG_LINK_BUFFER_SIZE); client->cmdidx = 0; } -static void MysteryGiftClient_InitSend(struct MysteryGiftClient * client, u32 ident, u32 word) +static void MysteryGiftClient_InitSendWord(struct MysteryGiftClient * client, u32 ident, u32 word) { - CpuFill32(0, client->sendBuffer, ME_SEND_BUF_SIZE); + CpuFill32(0, client->sendBuffer, MG_LINK_BUFFER_SIZE); *(u32 *)client->sendBuffer = word; - MysteryGiftLink_InitSend(&client->link, ident, client->sendBuffer, sizeof(u32)); + MysteryGiftLink_InitSend(&client->link, ident, client->sendBuffer, sizeof(word)); } static u32 Client_Init(struct MysteryGiftClient * client) { - memcpy(client->cmdBuffer, gUnknown_082F2598, ME_SEND_BUF_SIZE); + memcpy(client->script, gMysteryGiftClientScript_Init, MG_LINK_BUFFER_SIZE); client->cmdidx = 0; client->funcId = FUNC_RUN; client->funcState = 0; @@ -120,7 +120,7 @@ static u32 Client_Recv(struct MysteryGiftClient * client) client->funcId = FUNC_RUN; client->funcState = 0; } - return CLI_RET_1; + return CLI_RET_ACTIVE; } static u32 Client_Send(struct MysteryGiftClient * client) @@ -130,13 +130,13 @@ static u32 Client_Send(struct MysteryGiftClient * client) client->funcId = FUNC_RUN; client->funcState = 0; } - return CLI_RET_1; + return CLI_RET_ACTIVE; } static u32 Client_Run(struct MysteryGiftClient * client) { // process command - struct MysteryGiftClientCmd * cmd = &client->cmdBuffer[client->cmdidx]; + struct MysteryGiftClientCmd * cmd = &client->script[client->cmdidx]; client->cmdidx++; switch (cmd->instr) { @@ -158,13 +158,13 @@ static u32 Client_Run(struct MysteryGiftClient * client) client->funcId = FUNC_SEND; client->funcState = 0; break; - case CLI_20: - MysteryGiftLink_InitSend(&client->link, 0x14, client->sendBuffer, 0); + case CLI_SEND_READY_END: + MysteryGiftLink_InitSend(&client->link, MG_LINKID_READY_END, client->sendBuffer, 0); client->funcId = FUNC_SEND; client->funcState = 0; break; case CLI_SEND_STAT: - MysteryGiftClient_InitSend(client, 0x12, GetGameStat(cmd->parameter)); + MysteryGiftClient_InitSendWord(client, MG_LINKID_GAME_STAT, GetGameStat(cmd->parameter)); client->funcId = FUNC_SEND; client->funcState = 0; break; @@ -179,67 +179,71 @@ static u32 Client_Run(struct MysteryGiftClient * client) case CLI_COPY_RECV: MysteryGiftClient_CopyRecvScript(client); break; - case CLI_5: - memcpy(client->buffer, client->recvBuffer, 0x40); + case CLI_YES_NO: + memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE); client->funcId = FUNC_WAIT; client->funcState = 0; - return CLI_RET_2; - case CLI_11: - memcpy(client->buffer, client->recvBuffer, 0x40); + return CLI_RET_YES_NO; + case CLI_PRINT_MSG: + memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE); client->funcId = FUNC_WAIT; client->funcState = 0; - return CLI_RET_3; - case CLI_12: - memcpy(client->buffer, client->recvBuffer, 0x40); + return CLI_RET_PRINT_MSG; + case CLI_COPY_MSG: + memcpy(client->msg, client->recvBuffer, CLIENT_MAX_MSG_SIZE); client->funcId = FUNC_WAIT; client->funcState = 0; - return CLI_RET_5; + return CLI_RET_COPY_MSG; case CLI_ASK_TOSS: client->funcId = FUNC_WAIT; client->funcState = 0; return CLI_RET_ASK_TOSS; - case CLI_8: - sub_801B580(client->sendBuffer, client->isWonderNews); - MysteryGiftLink_InitSend(&client->link, 0x11, client->sendBuffer, sizeof(struct MEventStruct_Unk1442CC)); + case CLI_LOAD_GAME_DATA: + MysteryGift_LoadLinkGameData(client->sendBuffer, client->isWonderNews); + MysteryGiftLink_InitSend(&client->link, MG_LINKID_GAME_DATA, client->sendBuffer, sizeof(struct MysteryGiftLinkGameData)); break; case CLI_LOAD_TOSS_RESPONSE: // param here is set by MG_STATE_LINK_ASK_TOSS or MG_STATE_LINK_ASK_TOSS_UNRECEIVED - MysteryGiftClient_InitSend(client, 0x13, client->param); + MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, client->param); break; - case CLI_10: + case CLI_SAVE_CARD: SaveWonderCard(client->recvBuffer); break; - case CLI_9: - if (!sub_801B1A4(client->recvBuffer)) + case CLI_SAVE_NEWS: + if (!IsWonderNewsSameAsSaved(client->recvBuffer)) { SaveWonderNews(client->recvBuffer); - MysteryGiftClient_InitSend(client, 0x13, 0); + MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, FALSE); } else - MysteryGiftClient_InitSend(client, 0x13, 1); + { + // Wonder News has already been saved (or is invalid). + // Prepare a signal to indicate it was not saved. + MysteryGiftClient_InitSendWord(client, MG_LINKID_RESPONSE, TRUE); + } break; - case CLI_15: - client->funcId = FUNC_6; + case CLI_RUN_GIFT_SCRIPT: + client->funcId = FUNC_RUN_GIFT_SCRIPT; client->funcState = 0; break; - case CLI_16: - sub_801B508(client->recvBuffer); + case CLI_SAVE_STAMP: + MysteryGift_TrySaveStamp(client->recvBuffer); break; - case CLI_17: + case CLI_SAVE_RAM_SCRIPT: InitRamScript_NoObjectEvent(client->recvBuffer, 1000); break; case CLI_RECV_EREADER_TRAINER: memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, client->recvBuffer, sizeof(gSaveBlock2Ptr->frontier.ereaderTrainer)); ValidateEReaderTrainer(); break; - case CLI_21: - memcpy(gDecompressionBuffer, client->recvBuffer, ME_SEND_BUF_SIZE); - client->funcId = FUNC_7; + case CLI_RUN_BUFFER_SCRIPT: + memcpy(gDecompressionBuffer, client->recvBuffer, MG_LINK_BUFFER_SIZE); + client->funcId = FUNC_RUN_BUFF_SCRIPT; client->funcState = 0; break; } - return CLI_RET_1; + return CLI_RET_ACTIVE; } static u32 Client_Wait(struct MysteryGiftClient * client) @@ -249,10 +253,10 @@ static u32 Client_Wait(struct MysteryGiftClient * client) client->funcId = FUNC_RUN; client->funcState = 0; } - return CLI_RET_1; + return CLI_RET_ACTIVE; } -static u32 Client_6(struct MysteryGiftClient * client) +static u32 Client_RunGiftScript(struct MysteryGiftClient * client) { switch (client->funcState) { @@ -268,10 +272,10 @@ static u32 Client_6(struct MysteryGiftClient * client) } break; } - return CLI_RET_1; + return CLI_RET_ACTIVE; } -static u32 Client_7(struct MysteryGiftClient * client) +static u32 Client_RunBufferScript(struct MysteryGiftClient * client) { // exec arbitrary code u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; @@ -280,7 +284,7 @@ static u32 Client_7(struct MysteryGiftClient * client) client->funcId = FUNC_RUN; client->funcState = 0; } - return CLI_RET_1; + return CLI_RET_ACTIVE; } static u32 MysteryGiftClient_CallFunc(struct MysteryGiftClient * client) @@ -292,8 +296,8 @@ static u32 MysteryGiftClient_CallFunc(struct MysteryGiftClient * client) [FUNC_SEND] = Client_Send, [FUNC_RUN] = Client_Run, [FUNC_WAIT] = Client_Wait, - [FUNC_6] = Client_6, - [FUNC_7] = Client_7 + [FUNC_RUN_GIFT_SCRIPT] = Client_RunGiftScript, + [FUNC_RUN_BUFF_SCRIPT] = Client_RunBufferScript }; return funcs[client->funcId](client); } |