summaryrefslogtreecommitdiff
path: root/src/mystery_gift_menu.c
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-04-25 17:44:25 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-04-25 17:44:25 -0400
commitd3057e7ae686750f561a6b23552a072f53dd8f63 (patch)
tree435ee775183c8620530ada7c30c447b3ba7f284e /src/mystery_gift_menu.c
parent6cebd1f85311b1aa7321eb141521686d21bd091c (diff)
through HandleLoadWonderCardOrNews
Diffstat (limited to 'src/mystery_gift_menu.c')
-rw-r--r--src/mystery_gift_menu.c211
1 files changed, 204 insertions, 7 deletions
diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c
index b0d00035c..f7bf7a207 100644
--- a/src/mystery_gift_menu.c
+++ b/src/mystery_gift_menu.c
@@ -17,15 +17,9 @@
#include "list_menu.h"
#include "link_rfu.h"
#include "string_util.h"
+#include "mevent.h"
#include "constants/songs.h"
-extern const struct WindowTemplate sWindowTemplate_ThreeOptions;
-extern const struct ListMenuItem sListMenuItems_CardsOrNews[];
-extern const struct ListMenuItem sListMenuItems_WirelessOrFriend[];
-extern const struct ListMenuTemplate sListMenuTemplate_ThreeOptions;
-extern const struct TextColor sMG_Ereader_TextColor_1;
-extern const struct TextColor sMG_Ereader_TextColor_2;
-
EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {};
EWRAM_DATA bool8 gGiftIsFromEReader = FALSE;
@@ -117,6 +111,24 @@ static const struct WindowTemplate sMainWindows[] = {
}
};
+extern const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width28;
+extern const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width20;
+extern const struct WindowTemplate sMysteryGiftMenuWindowTemplate;
+extern const struct WindowTemplate sWindowTemplate_ThreeOptions;
+extern const struct WindowTemplate sWindowTemplate_YesNoBox;
+extern const struct WindowTemplate sWindowTemplate_7by8;
+extern const struct WindowTemplate sWindowTemplate_7by6;
+extern const struct WindowTemplate sWindowTemplate_7by4;
+extern const struct ListMenuItem sListMenuItems_CardsOrNews[];
+extern const struct ListMenuItem sListMenuItems_WirelessOrFriend[];
+extern const struct ListMenuTemplate sListMenuTemplate_ThreeOptions;
+extern const struct ListMenuTemplate sListMenu_ReceiveSendToss;
+extern const struct ListMenuTemplate sListMenu_ReceiveToss;
+extern const struct ListMenuTemplate sListMenu_ReceiveSend;
+extern const struct ListMenuTemplate sListMenu_Receive;
+extern const struct TextColor sMG_Ereader_TextColor_1;
+extern const struct TextColor sMG_Ereader_TextColor_2;
+
void vblankcb_mystery_gift_e_reader_run(void)
{
ProcessSpriteCopyRequests();
@@ -236,6 +248,8 @@ extern const u8 gUnknown_841EDCA[];
extern const u8 gUnknown_841EDBD[];
extern const u8 gUnknown_841DE50[];
extern const u8 gUnknown_841DE51[];
+extern const u8 gText_WhatToDoWithCards[];
+extern const u8 gText_WhatToDoWithNews[];
void PrintMysteryGiftOrEReaderTopMenu(bool8 mg_or_ereader, bool32 usePickOkCancel)
{
@@ -426,5 +440,188 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu)
return response;
}
+s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str)
+{
+ struct WindowTemplate windowTemplate;
+ s8 input;
+
+ switch (*textState)
+ {
+ case 0:
+ StringExpandPlaceholders(gStringVar4, str);
+ if (yesNoBoxPlacement == 0)
+ {
+ *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width28);
+ }
+ else
+ {
+ *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width20);
+ }
+ FillWindowPixelBuffer(*windowId, 0x11);
+ AddTextPrinterParametrized2(*windowId, 2, 0, 2, 0, 2, &sMG_Ereader_TextColor_2, 0, gStringVar4);
+ DrawTextBorderOuter(*windowId, 0x001, 0x0F);
+ CopyWindowToVram(*windowId, 2);
+ PutWindowTilemap(*windowId);
+ (*textState)++;
+ break;
+ case 1:
+ windowTemplate = sWindowTemplate_YesNoBox;
+ if (yesNoBoxPlacement == 0)
+ {
+ windowTemplate.tilemapTop = 9;
+ }
+ else
+ {
+ windowTemplate.tilemapTop = 15;
+ }
+ sub_810FF60(&windowTemplate, 2, 0, 2, 10, 14, 0);
+ (*textState)++;
+ break;
+ case 2:
+ input = ProcessMenuInputNoWrap_();
+ if (input == -1 || input == 0 || input == 1)
+ {
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return input;
+ }
+ break;
+ case 0xFF:
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return -1;
+ }
+
+ return -2;
+}
+
+s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend)
+{
+ struct WindowTemplate windowTemplate;
+ s32 input;
+
+ switch (*textState)
+ {
+ case 0:
+ if (cannotToss == 0)
+ {
+ StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithCards);
+ }
+ else
+ {
+ StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithNews);
+ }
+ *windowId = AddWindow(&sMysteryGiftMenuWindowTemplate);
+ FillWindowPixelBuffer(*windowId, 0x11);
+ AddTextPrinterParametrized2(*windowId, 2, 0, 2, 0, 2, &sMG_Ereader_TextColor_2, 0, gStringVar4);
+ DrawTextBorderOuter(*windowId, 0x001, 0x0F);
+ CopyWindowToVram(*windowId, 2);
+ PutWindowTilemap(*windowId);
+ (*textState)++;
+ break;
+ case 1:
+ windowTemplate = sWindowTemplate_YesNoBox;
+ if (cannotSend)
+ {
+ if (cannotToss == 0)
+ {
+ input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveToss, 1, 0x00A, 0xE0);
+ }
+ else
+ {
+ input = DoMysteryGiftListMenu(&sWindowTemplate_7by4, &sListMenu_Receive, 1, 0x00A, 0xE0);
+ }
+ }
+ else
+ {
+ if (cannotToss == 0)
+ {
+ input = DoMysteryGiftListMenu(&sWindowTemplate_7by8, &sListMenu_ReceiveSendToss, 1, 0x00A, 0xE0);
+ }
+ else
+ {
+ input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveSend, 1, 0x00A, 0xE0);
+ }
+ }
+ if (input != -1)
+ {
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return input;
+ }
+ break;
+ case 0xFF:
+ *textState = 0;
+ rbox_fill_rectangle(*windowId);
+ ClearWindowTilemap(*windowId);
+ CopyWindowToVram(*windowId, 1);
+ RemoveWindow(*windowId);
+ return -2;
+ }
+
+ return -1;
+}
+
+bool32 ValidateCardOrNews(bool32 cardOrNews)
+{
+ if (cardOrNews == 0)
+ {
+ return ValidateReceivedWonderNews();
+ }
+ else
+ {
+ return ValidateReceivedWonderCard();
+ }
+}
+
+bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews)
+{
+ s32 v0;
+
+ switch (*state)
+ {
+ case 0:
+ if (cardOrNews == 0)
+ {
+ InitWonderCardResources(GetSavedWonderCard(), sav1_get_mevent_buffer_2());
+ }
+ else
+ {
+ InitWonderNewsResources(GetSavedWonderNews());
+ }
+ (*state)++;
+ break;
+ case 1:
+ if (cardOrNews == 0)
+ {
+ v0 = FadeToWonderCardMenu();
+ check:
+ if (v0 != 0)
+ {
+ goto done;
+ }
+ break;
+ }
+ else
+ {
+ v0 = FadeToWonderNewsMenu();
+ goto check;
+ }
+ done:
+ *state = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}