Finish mystery_gift_menu.c

This commit is contained in:
PikalaxALT
2019-04-26 12:49:08 -04:00
parent 7b4e2ec05b
commit 274151836b
23 changed files with 869 additions and 1289 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ static u32 sub_8146E0C(struct MysteryEventStruct *);
static void sub_8146DA0(struct MysteryEventStruct *);
static void sub_8146D94(struct MysteryEventStruct *);
void sub_8146C30(u32 a0)
void GenerateRandomNews(u32 a0)
{
struct MysteryEventStruct *r5 = sub_8143D94();
+12 -12
View File
@@ -294,7 +294,7 @@ void sub_8143910(u8 taskId)
case 3:
if (!sub_814374C())
{
sub_80098B8();
CloseLink();
data->t08 = 4;
}
else
@@ -325,26 +325,26 @@ void sub_8143910(u8 taskId)
if (JOY_NEW(B_BUTTON))
{
PlaySE(SE_SELECT);
sub_80098B8();
CloseLink();
sub_81438E8(&data->t00);
data->t08 = 23;
}
else if (GetLinkPlayerCount_2() > 1)
{
sub_81438E8(&data->t00);
sub_80098B8();
CloseLink();
data->t08 = 7;
}
else if (sub_81436EC())
{
PlaySE(SE_SELECT);
sub_80098B8();
CloseLink();
sub_81438E8(&data->t00);
data->t08 = 8;
}
else if (sub_81438F0(&data->t00, 10))
{
sub_80098B8();
CloseLink();
sub_81436BC();
sub_81438E8(&data->t00);
}
@@ -396,16 +396,16 @@ void sub_8143910(u8 taskId)
break;
case 1:
PlaySE(SE_SELECT);
sub_80098B8();
CloseLink();
data->t08 = 23;
break;
case 5:
sub_80098B8();
CloseLink();
data->t08 = 21;
break;
case 3:
case 4:
sub_80098B8();
CloseLink();
data->t08 = 20;
break;
}
@@ -413,7 +413,7 @@ void sub_8143910(u8 taskId)
case 14:
if (HasLinkErrorOccurred())
{
sub_80098B8();
CloseLink();
data->t08 = 20;
}
else if (GetBlockReceivedStatus())
@@ -546,7 +546,7 @@ bool32 sub_8143E64(const struct MEventBuffer_3120_Sub * data)
return TRUE;
}
bool32 sub_8143E78(void)
bool32 WonderNews_Test_Unk_02(void)
{
const struct MEventBuffer_3120_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_000.data;
if (data->unk_02 == 0)
@@ -632,7 +632,7 @@ bool32 sub_8144018(const struct MEventBuffer_32E0_Sub * data)
return TRUE;
}
bool32 sub_8144054(void)
bool32 WonderCard_Test_Unk_08_6(void)
{
const struct MEventBuffer_32E0_Sub * data = &gSaveBlock1Ptr->unk_3120.buffer_1c0.data;
if (data->unk_08_6 == 0)
@@ -672,7 +672,7 @@ bool32 sub_8144124(u16 a0)
return FALSE;
}
bool32 sub_8144144(void)
bool32 CheckReceivedGiftFromWonderCard(void)
{
u16 value = sub_81440E8();
if (!sub_8144124(value))
+3 -3
View File
@@ -671,7 +671,7 @@ s32 FadeOutFromWonderNews(bool32 flag)
return 0;
}
void sub_81467EC(void)
void MENews_RemoveScrollIndicatorArrowPair(void)
{
if (!gUnknown_203F3CC->unk_01C0_0 && gUnknown_203F3CC->unk_01C1 != 0xFF)
{
@@ -682,7 +682,7 @@ void sub_81467EC(void)
}
void sub_8146834(void)
void MENews_AddScrollIndicatorArrowPair(void)
{
if (gUnknown_203F3CC->unk_01C0_0)
{
@@ -691,7 +691,7 @@ void sub_8146834(void)
}
}
u8 sub_8146884(u16 input)
u32 MENews_GetInput(u16 input)
{
if (gUnknown_203F3CC->unk_01C2_0)
{
+44 -44
View File
@@ -11,12 +11,12 @@
#include "mevent.h"
#include "mevent_server.h"
EWRAM_DATA struct mevent_srv_ish * s_mevent_srv_ish_ptr = NULL;
EWRAM_DATA struct mevent_client * s_mevent_client_ptr = NULL;
EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL;
static void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32);
static u32 mevent_srv_ish_exec(struct mevent_srv_ish *);
static void mevent_srv_ish_free_resources(struct mevent_srv_ish *);
static void mevent_client_init(struct mevent_client *, u32, u32);
static u32 mevent_client_exec(struct mevent_client *);
static void mevent_client_free_resources(struct mevent_client *);
static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32);
static void mevent_srv_free_resources(struct mevent_srv_common *);
static u32 mevent_srv_exec_common(struct mevent_srv_common *);
@@ -25,44 +25,44 @@ extern const u8 gUnknown_84687E0[];
extern const struct mevent_cmd gUnknown_8468B6C[];
extern const struct mevent_cmd gUnknown_8468BCC[];
void mevent_srv_ish_do_init(void)
void mevent_client_do_init(void)
{
s_mevent_srv_ish_ptr = AllocZeroed(sizeof(struct mevent_srv_ish));
mevent_srv_ish_init(s_mevent_srv_ish_ptr, 1, 0);
s_mevent_client_ptr = AllocZeroed(sizeof(struct mevent_client));
mevent_client_init(s_mevent_client_ptr, 1, 0);
}
u32 mevent_srv_ish_do_exec(u16 * a0)
u32 mevent_client_do_exec(u16 * a0)
{
u32 result;
if (s_mevent_srv_ish_ptr == NULL)
if (s_mevent_client_ptr == NULL)
return 6;
result = mevent_srv_ish_exec(s_mevent_srv_ish_ptr);
result = mevent_client_exec(s_mevent_client_ptr);
if (result == 6)
{
*a0 = s_mevent_srv_ish_ptr->param;
mevent_srv_ish_free_resources(s_mevent_srv_ish_ptr);
Free(s_mevent_srv_ish_ptr);
s_mevent_srv_ish_ptr = NULL;
*a0 = s_mevent_client_ptr->param;
mevent_client_free_resources(s_mevent_client_ptr);
Free(s_mevent_client_ptr);
s_mevent_client_ptr = NULL;
}
return result;
}
void mevent_srv_ish_inc_flag(void)
void mevent_client_inc_flag(void)
{
s_mevent_srv_ish_ptr->flag++;
s_mevent_client_ptr->flag++;
}
void * mevent_srv_ish_get_buffer(void)
void * mevent_client_get_buffer(void)
{
return s_mevent_srv_ish_ptr->buffer;
return s_mevent_client_ptr->buffer;
}
void mevent_srv_ish_set_param(u32 a0)
void mevent_client_set_param(u32 a0)
{
s_mevent_srv_ish_ptr->param = a0;
s_mevent_client_ptr->param = a0;
}
static void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 sendPlayerNo, u32 recvPlayerNo)
static void mevent_client_init(struct mevent_client * svr, u32 sendPlayerNo, u32 recvPlayerNo)
{
svr->unk_00 = 0;
svr->mainseqno = 0;
@@ -74,7 +74,7 @@ static void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 sendPlayerNo, u
mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo);
}
static void mevent_srv_ish_free_resources(struct mevent_srv_ish * svr)
static void mevent_client_free_resources(struct mevent_client * svr)
{
Free(svr->sendBuffer);
Free(svr->recvBuffer);
@@ -82,20 +82,20 @@ static void mevent_srv_ish_free_resources(struct mevent_srv_ish * svr)
Free(svr->buffer);
}
static void mevent_srv_ish_jmp_buffer(struct mevent_srv_ish * svr)
static void mevent_client_jmp_buffer(struct mevent_client * svr)
{
memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE);
svr->cmdidx = 0;
}
static void mevent_srv_ish_send_word(struct mevent_srv_ish * svr, u32 ident, u32 word)
static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 word)
{
CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE);
*(u32 *)svr->sendBuffer = word;
mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32));
}
static u32 ish_mainseq_0(struct mevent_srv_ish * svr)
static u32 ish_mainseq_0(struct mevent_client * svr)
{
// init
memcpy(svr->cmdBuffer, gUnknown_84687E0, ME_SEND_BUF_SIZE);
@@ -105,13 +105,13 @@ static u32 ish_mainseq_0(struct mevent_srv_ish * svr)
return 0;
}
static u32 ish_mainseq_1(struct mevent_srv_ish * svr)
static u32 ish_mainseq_1(struct mevent_client * svr)
{
// done
return 6;
}
static u32 ish_mainseq_2(struct mevent_srv_ish * svr)
static u32 ish_mainseq_2(struct mevent_client * svr)
{
// do recv
if (mevent_srv_sub_recv(&svr->manager))
@@ -122,7 +122,7 @@ static u32 ish_mainseq_2(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_3(struct mevent_srv_ish * svr)
static u32 ish_mainseq_3(struct mevent_client * svr)
{
// do send
if (mevent_srv_sub_send(&svr->manager))
@@ -133,7 +133,7 @@ static u32 ish_mainseq_3(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
static u32 ish_mainseq_4(struct mevent_client * svr)
{
// process command
struct mevent_cmd_ish * cmd = &svr->cmdBuffer[svr->cmdidx];
@@ -162,20 +162,20 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
svr->flag = 0;
break;
case 19:
mevent_srv_ish_send_word(svr, 0x12, GetGameStat(cmd->parameter));
mevent_client_send_word(svr, 0x12, GetGameStat(cmd->parameter));
svr->mainseqno = 3;
svr->flag = 0;
break;
case 6:
if (svr->param == 0)
mevent_srv_ish_jmp_buffer(svr);
mevent_client_jmp_buffer(svr);
break;
case 7:
if (svr->param == 1)
mevent_srv_ish_jmp_buffer(svr);
mevent_client_jmp_buffer(svr);
break;
case 4:
mevent_srv_ish_jmp_buffer(svr);
mevent_client_jmp_buffer(svr);
break;
case 5:
memcpy(svr->buffer, svr->recvBuffer, 0x40);
@@ -201,7 +201,7 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventStruct_Unk1442CC));
break;
case 14:
mevent_srv_ish_send_word(svr, 0x13, svr->param);
mevent_client_send_word(svr, 0x13, svr->param);
break;
case 10:
sub_8143F68(svr->recvBuffer);
@@ -210,10 +210,10 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
if (!sub_8143EF4(svr->recvBuffer))
{
sub_8143DC8(svr->recvBuffer);
mevent_srv_ish_send_word(svr, 0x13, 0);
mevent_client_send_word(svr, 0x13, 0);
}
else
mevent_srv_ish_send_word(svr, 0x13, 1);
mevent_client_send_word(svr, 0x13, 1);
break;
case 15:
svr->mainseqno = 6;
@@ -239,7 +239,7 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_5(struct mevent_srv_ish * svr)
static u32 ish_mainseq_5(struct mevent_client * svr)
{
// wait flag
if (svr->flag)
@@ -250,7 +250,7 @@ static u32 ish_mainseq_5(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_6(struct mevent_srv_ish * svr)
static u32 ish_mainseq_6(struct mevent_client * svr)
{
// ???
switch (svr->flag)
@@ -270,7 +270,7 @@ static u32 ish_mainseq_6(struct mevent_srv_ish * svr)
return 1;
}
static u32 ish_mainseq_7(struct mevent_srv_ish * svr)
static u32 ish_mainseq_7(struct mevent_client * svr)
{
// exec arbitrary code
u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer;
@@ -282,9 +282,9 @@ static u32 ish_mainseq_7(struct mevent_srv_ish * svr)
return 1;
}
static u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr)
static u32 mevent_client_exec(struct mevent_client * svr)
{
u32 (*funcs[])(struct mevent_srv_ish *) = {
u32 (*funcs[])(struct mevent_client *) = {
ish_mainseq_0,
ish_mainseq_1,
ish_mainseq_2,
@@ -297,19 +297,19 @@ static u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr)
return funcs[svr->mainseqno](svr);
}
void mevent_srv_common_do_init_1(void)
void mevent_srv_init_wnews(void)
{
s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common));
mevent_srv_init_common(s_mevent_srv_common_ptr, gUnknown_8468B6C, 0, 1);
}
void mevent_srv_common_do_init_2(void)
void mevent_srv_new_wcard(void)
{
s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common));
mevent_srv_init_common(s_mevent_srv_common_ptr, gUnknown_8468BCC, 0, 1);
}
u32 mevent_srv_init_do_exec(u16 * a0)
u32 mevent_srv_common_do_exec(u16 * a0)
{
u32 result;
if (s_mevent_srv_common_ptr == NULL)
+712
View File
@@ -19,12 +19,18 @@
#include "string_util.h"
#include "mevent.h"
#include "save.h"
#include "link.h"
#include "event_data.h"
#include "mevent_server.h"
#include "menews_jisan.h"
#include "help_system.h"
#include "constants/songs.h"
EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {};
EWRAM_DATA bool8 gGiftIsFromEReader = FALSE;
void task_add_00_mystery_gift(void);
void task00_mystery_gift(u8 taskId);
void task_add_00_ereader(void);
extern const u8 gText_PickOKExit[];
@@ -69,6 +75,26 @@ extern const u8 gText_CantAcceptCardFromTrainer[];
extern const u8 gText_CantAcceptNewsFromTrainer[];
extern const u8 gText_CommunicationError[];
extern const u8 gText_NewTrainerReceived[];
extern const u8 gText_WonderCardSentTo[];
extern const u8 gText_WonderNewsSentTo[];
extern const u8 gText_StampSentTo[];
extern const u8 gText_OtherTrainerHasCard[];
extern const u8 gText_OtherTrainerHasStamp[];
extern const u8 gText_OtherTrainerHasNews[];
extern const u8 gText_OtherTrainerCanceled[];
extern const u8 gText_GiftSentTo[];
extern const u8 gText_CantSendGiftToTrainer[];
extern const u8 gText_DontHaveCardNewOneInput[];
extern const u8 gText_DontHaveNewsNewOneInput[];
extern const u8 gText_WhereShouldCardBeAccessed[];
extern const u8 gText_WhereShouldNewsBeAccessed[];
extern const u8 gText_Communicating[];
extern const u8 gText_ThrowAwayWonderCard[];
extern const u8 gText_HaventReceivedCardsGift[];
extern const u8 gText_CommunicationCompleted[];
extern const u8 gText_HaventReceivedGiftOkayToDiscard[];
extern const u8 gText_SendingWonderCard[];
extern const u8 gText_SendingWonderNews[];
const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal");
const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz");
@@ -1042,3 +1068,689 @@ const u8 * mevent_message(u32 * flag_p, u8 cardOrNews, u8 cardOrNewsSource, u32
return msg;
}
bool32 PrintMGSuccessMessage(u8 * state, const u8 * arg1, u16 * arg2)
{
switch (*state)
{
case 0:
if (arg1 != NULL)
{
AddTextPrinterToWindow1(arg1);
}
PlayFanfare(MUS_FANFA4);
*arg2 = 0;
(*state)++;
break;
case 1:
if (++(*arg2) > 0xF0)
{
(*state)++;
}
break;
case 2:
if (IsFanfareTaskInactive())
{
*state = 0;
ClearTextWindow();
return TRUE;
}
break;
}
return FALSE;
}
const u8 * mevent_message_stamp_card_etc_send_status(u32 * a0, u8 unused, u32 msgId)
{
const u8 * result = gText_CommunicationError;
*a0 = 0;
switch (msgId)
{
case 0:
result = gText_NothingSentOver;
break;
case 1:
result = gText_RecordUploadedViaWireless;
break;
case 2:
result = gText_WonderCardSentTo;
*a0 = 1;
break;
case 3:
result = gText_WonderNewsSentTo;
*a0 = 1;
break;
case 4:
result = gText_StampSentTo;
break;
case 5:
result = gText_OtherTrainerHasCard;
break;
case 6:
result = gText_OtherTrainerHasStamp;
break;
case 7:
result = gText_OtherTrainerHasNews;
break;
case 8:
result = gText_NoMoreRoomForStamps;
break;
case 9:
result = gText_OtherTrainerCanceled;
break;
case 10:
result = gText_CantSendGiftToTrainer;
break;
case 11:
result = gText_CommunicationError;
break;
case 12:
result = gText_GiftSentTo;
break;
case 13:
result = gText_GiftSentTo;
break;
case 14:
result = gText_CantSendGiftToTrainer;
break;
}
return result;
}
bool32 PrintMGSendStatus(u8 * state, u16 * arg1, u8 arg2, u32 msgId)
{
u32 flag;
const u8 * str = mevent_message_stamp_card_etc_send_status(&flag, arg2, msgId);
if (flag)
{
return PrintMGSuccessMessage(state, str, arg1);
}
else
{
return MG_PrintTextOnWindow1AndWaitButton(state, str);
}
}
void task_add_00_mystery_gift(void)
{
u8 taskId = CreateTask(task00_mystery_gift, 0);
struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data;
data->state = 0;
data->textState = 0;
data->unkA = 0;
data->unkB = 0;
data->IsCardOrNews = 0;
data->source = 0;
data->curPromptWindowId = 0;
data->unk2 = 0;
data->unk4 = 0;
data->unk6 = 0;
data->prevPromptWindowId = 0;
data->buffer = AllocZeroed(0x40);
}
void task00_mystery_gift(u8 taskId)
{
struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data;
u32 sp0;
const u8 * r1;
switch (data->state)
{
case 0:
data->state = 1;
break;
case 1:
switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, FALSE))
{
case 0:
data->IsCardOrNews = 0;
if (ValidateReceivedWonderCard() == TRUE)
{
data->state = 18;
}
else
{
data->state = 2;
}
break;
case 1:
data->IsCardOrNews = 1;
if (ValidateReceivedWonderNews() == TRUE)
{
data->state = 18;
}
else
{
data->state = 2;
}
break;
case -2u:
data->state = 37;
break;
}
break;
case 2:
{
if (data->IsCardOrNews == 0)
{
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveCardNewOneInput))
{
data->state = 3;
PrintMysteryGiftOrEReaderTopMenu(0, 1);
}
}
else
{
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveNewsNewOneInput))
{
data->state = 3;
PrintMysteryGiftOrEReaderTopMenu(0, 1);
}
}
break;
}
case 3:
if (data->IsCardOrNews == 0)
{
AddTextPrinterToWindow1(gText_WhereShouldCardBeAccessed);
}
else
{
AddTextPrinterToWindow1(gText_WhereShouldNewsBeAccessed);
}
data->state = 4;
break;
case 4:
switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, TRUE))
{
case 0:
ClearTextWindow();
data->state = 5;
data->source = 0;
break;
case 1:
ClearTextWindow();
data->state = 5;
data->source = 1;
break;
case -2u:
ClearTextWindow();
if (ValidateCardOrNews(data->IsCardOrNews))
{
data->state = 18;
}
else
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
}
break;
case 5:
{
register u8 eos asm("r1");
gStringVar1[0] = (eos = EOS);
gStringVar2[0] = eos;
gStringVar3[0] = eos;
}
switch (data->IsCardOrNews)
{
case 0:
if (data->source == 1)
{
MEvent_CreateTask_CardOrNewsWithFriend(0x15);
}
else if (data->source == 0)
{
MEvent_CreateTask_CardOrNewsOverWireless(0x15);
}
break;
case 1:
if (data->source == 1)
{
MEvent_CreateTask_CardOrNewsWithFriend(0x16);
}
else if (data->source == 0)
{
MEvent_CreateTask_CardOrNewsOverWireless(0x16);
}
break;
}
data->state = 6;
break;
case 6:
if (gReceivedRemoteLinkPlayers != 0)
{
ClearScreenInBg0(TRUE);
data->state = 7;
mevent_client_do_init();
}
else if (gSpecialVar_Result == 5)
{
ClearScreenInBg0(TRUE);
data->state = 3;
}
break;
case 7:
AddTextPrinterToWindow1(gText_Communicating);
data->state = 8;
break;
case 8:
switch (mevent_client_do_exec(&data->curPromptWindowId))
{
case 6:
task_add_05_task_del_08FA224_when_no_RfuFunc();
data->prevPromptWindowId = data->curPromptWindowId;
data->state = 13;
break;
case 5:
memcpy(data->buffer, mevent_client_get_buffer(), 0x40);
mevent_client_inc_flag();
break;
case 3:
data->state = 10;
break;
case 2:
data->state = 9;
break;
case 4:
data->state = 11;
StringCopy(gStringVar1, gLinkPlayers[0].name);
break;
}
break;
case 9:
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer()))
{
case 0:
mevent_client_set_param(0);
mevent_client_inc_flag();
data->state = 7;
break;
case 1:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
case -1u:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
}
break;
case 10:
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_client_get_buffer()))
{
mevent_client_inc_flag();
data->state = 7;
}
break;
case 11:
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard))
{
case 0:
if (CheckReceivedGiftFromWonderCard() == TRUE)
{
data->state = 12;
}
else
{
mevent_client_set_param(0);
mevent_client_inc_flag();
data->state = 7;
}
break;
case 1:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
case -1u:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
}
break;
case 12:
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift))
{
case 0:
mevent_client_set_param(0);
mevent_client_inc_flag();
data->state = 7;
break;
case 1:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
case -1u:
mevent_client_set_param(1);
mevent_client_inc_flag();
data->state = 7;
break;
}
break;
case 13:
if (IsNoOneConnected())
{
DestroyWirelessStatusIndicatorSprite();
data->state = 14;
}
break;
case 14:
if (PrintStringAndWait2Seconds(&data->textState, gText_CommunicationCompleted))
{
if (data->source == 1)
{
StringCopy(gStringVar1, gLinkPlayers[0].name);
}
data->state = 15;
}
break;
case 15:
{
register bool32 flag asm("r1");
r1 = mevent_message(&sp0, data->IsCardOrNews, data->source, data->prevPromptWindowId);
if (r1 == NULL)
{
r1 = data->buffer;
}
if (sp0)
{
flag = PrintMGSuccessMessage(&data->textState, r1, &data->curPromptWindowId);
}
else
{
flag = MG_PrintTextOnWindow1AndWaitButton(&data->textState, r1);
}
if (flag)
{
if (data->prevPromptWindowId == 3)
{
if (data->source == 1)
{
GenerateRandomNews(1);
}
else
{
GenerateRandomNews(2);
}
}
if (sp0 == 0)
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
else
{
data->state = 17;
}
}
break;
}
case 16:
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError))
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
case 17:
if (mevent_save_game(&data->textState))
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
case 18:
if (HandleLoadWonderCardOrNews(&data->textState, data->IsCardOrNews))
{
data->state = 20;
}
break;
case 20:
if (data->IsCardOrNews == 0)
{
if (JOY_NEW(A_BUTTON))
{
data->state = 21;
}
if (JOY_NEW(B_BUTTON))
{
data->state = 27;
}
}
else
{
switch (MENews_GetInput(gMain.newKeys))
{
case 0:
MENews_RemoveScrollIndicatorArrowPair();
data->state = 21;
break;
case 1:
data->state = 27;
break;
}
}
break;
case 21:
{
u32 result;
if (data->IsCardOrNews == 0)
{
if (WonderCard_Test_Unk_08_6())
{
result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE);
}
else
{
result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE);
}
}
else
{
if (WonderNews_Test_Unk_02())
{
result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE);
}
else
{
result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE);
}
}
switch (result)
{
case 0:
data->state = 28;
break;
case 1:
data->state = 29;
break;
case 2:
data->state = 22;
break;
case -2u:
if (data->IsCardOrNews == 1)
{
MENews_AddScrollIndicatorArrowPair();
}
data->state = 20;
break;
}
break;
}
case 22:
switch (mevent_message_prompt_discard(&data->textState, &data->curPromptWindowId, data->IsCardOrNews))
{
case 0:
if (data->IsCardOrNews == 0 && CheckReceivedGiftFromWonderCard() == TRUE)
{
data->state = 23;
}
else
{
data->state = 24;
}
break;
case 1:
data->state = 21;
break;
case -1:
data->state = 21;
break;
}
break;
case 23:
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, TRUE, gText_HaventReceivedGiftOkayToDiscard))
{
case 0:
data->state = 24;
break;
case 1:
data->state = 21;
break;
case -1u:
data->state = 21;
break;
}
break;
case 24:
if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1))
{
DestroyNewsOrCard(data->IsCardOrNews);
data->state = 25;
}
break;
case 25:
if (mevent_save_game(&data->textState))
{
data->state = 26;
}
break;
case 26:
if (mevent_message_was_thrown_away(&data->textState, data->IsCardOrNews))
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
case 27:
if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 0))
{
data->state = 0;
}
break;
case 28:
if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1))
{
data->state = 3;
}
break;
case 29:
if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1))
{
switch (data->IsCardOrNews)
{
case 0:
MEvent_CreateTask_Leader(21);
break;
case 1:
MEvent_CreateTask_Leader(22);
break;
}
data->source = 1;
data->state = 30;
}
break;
case 30:
if (gReceivedRemoteLinkPlayers != 0)
{
ClearScreenInBg0(1);
data->state = 31;
}
else if (gSpecialVar_Result == 5)
{
ClearScreenInBg0(1);
data->state = 18;
}
break;
case 31:
{
register u8 eos asm("r1");
gStringVar1[0] = (eos = EOS);
gStringVar2[0] = eos;
gStringVar3[0] = eos;
}
if (data->IsCardOrNews == 0)
{
AddTextPrinterToWindow1(gText_SendingWonderCard);
mevent_srv_new_wcard();
}
else
{
AddTextPrinterToWindow1(gText_SendingWonderNews);
mevent_srv_init_wnews();
}
data->state = 32;
break;
case 32:
if (mevent_srv_common_do_exec(&data->curPromptWindowId) == 3)
{
data->prevPromptWindowId = data->curPromptWindowId;
data->state = 33;
}
break;
case 33:
task_add_05_task_del_08FA224_when_no_RfuFunc();
StringCopy(gStringVar1, gLinkPlayers[1].name);
data->state = 34;
break;
case 34:
if (IsNoOneConnected())
{
DestroyWirelessStatusIndicatorSprite();
data->state = 35;
}
break;
case 35:
if (PrintMGSendStatus(&data->textState, &data->curPromptWindowId, data->source, data->prevPromptWindowId))
{
if (data->source == 1 && data->prevPromptWindowId == 3)
{
GenerateRandomNews(3);
data->state = 17;
}
else
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
}
break;
case 36:
if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError))
{
data->state = 0;
PrintMysteryGiftOrEReaderTopMenu(0, 0);
}
break;
case 37:
CloseLink();
sub_812B484();
Free(data->buffer);
DestroyTask(taskId);
SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen);
break;
}
}
u16 GetMysteryGiftBaseBlock(void)
{
return 0x19B;
}