summaryrefslogtreecommitdiff
path: root/src/mevent_client.c
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-10-15 12:56:14 -0400
committerGriffinR <griffin.g.richards@gmail.com>2021-10-16 23:35:17 -0400
commit845a5e99cc01607aae5f74c3e5e700a72734145f (patch)
tree26f3f6afd17d97b662aaba249fb165f380b15098 /src/mevent_client.c
parente3bb257bcf4ec855a0a45794c2838f0e2b5708f5 (diff)
General mystery gift documentation, finish mystery gift client/server/scripts
Diffstat (limited to 'src/mevent_client.c')
-rw-r--r--src/mevent_client.c122
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);
}