Finish mystery_gift_menu.c
This commit is contained in:
+1
-1
@@ -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
@@ -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))
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user