summaryrefslogtreecommitdiff
path: root/src/field_message_box.c
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2018-02-18 19:59:51 -0600
committercamthesaxman <cameronghall@cox.net>2018-02-18 19:59:51 -0600
commitdaa05c1b7c5e079ad8554e88a290e07b333bd2db (patch)
treef635e307268f6e6027423369d221e2adf32b438d /src/field_message_box.c
parent2e21a867487e2187a954a351f775bd3f3a9535b1 (diff)
remove subdirectories
Diffstat (limited to 'src/field_message_box.c')
-rw-r--r--src/field_message_box.c155
1 files changed, 155 insertions, 0 deletions
diff --git a/src/field_message_box.c b/src/field_message_box.c
new file mode 100644
index 000000000..5eec7a14b
--- /dev/null
+++ b/src/field_message_box.c
@@ -0,0 +1,155 @@
+#include "global.h"
+#include "field_message_box.h"
+#include "menu.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "text_window.h"
+
+static EWRAM_DATA struct Window gFieldMessageBoxWindow = {0};
+
+static u8 sMessageBoxMode;
+
+static void Task_FieldMessageBox(u8 taskId);
+static void CreateFieldMessageBoxTask(void);
+static void DestroyFieldMessageBoxTask(void);
+static void PrintFieldMessage(const u8 *message);
+static void PrintFieldMessageFromStringVar4(void);
+
+void InitFieldMessageBox(void)
+{
+ sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
+ TextWindow_SetDlgFrameBaseTileNum(gMenuTextWindowContentTileOffset);
+ Text_InitWindowWithTemplate(&gFieldMessageBoxWindow, &gWindowTemplate_81E6CE4);
+}
+
+static void Task_FieldMessageBox(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ switch (task->data[0])
+ {
+ case 0:
+ TextWindow_LoadDialogueFrameTiles(&gFieldMessageBoxWindow);
+ task->data[0]++;
+ break;
+ case 1:
+ TextWindow_DrawDialogueFrame(&gFieldMessageBoxWindow);
+ task->data[0]++;
+ break;
+ case 2:
+ switch (sMessageBoxMode)
+ {
+ case FIELD_MESSAGE_BOX_NORMAL:
+ if (!Text_UpdateWindow(&gFieldMessageBoxWindow))
+ return;
+ break;
+ case FIELD_MESSAGE_BOX_AUTO_SCROLL:
+ if (!Text_UpdateWindowAutoscroll(&gFieldMessageBoxWindow))
+ return;
+ break;
+ }
+ sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
+ DestroyTask(taskId);
+ }
+}
+
+static void CreateFieldMessageBoxTask(void)
+{
+ CreateTask(Task_FieldMessageBox, 80);
+}
+
+static void DestroyFieldMessageBoxTask(void)
+{
+ u8 taskId = FindTaskIdByFunc(Task_FieldMessageBox);
+ if (taskId != 0xFF)
+ DestroyTask(taskId);
+}
+
+bool8 ShowFieldMessage(const u8 *message)
+{
+ if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
+ {
+ return FALSE;
+ }
+ else
+ {
+ PrintFieldMessage(message);
+ sMessageBoxMode = FIELD_MESSAGE_BOX_NORMAL;
+ return TRUE;
+ }
+}
+
+bool8 ShowFieldAutoScrollMessage(const u8 *message)
+{
+ if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
+ {
+ return FALSE;
+ }
+ else
+ {
+ sMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL;
+ PrintFieldMessage(message);
+ return TRUE;
+ }
+}
+
+bool8 unref_sub_8064BB8(const u8 *message)
+{
+ sMessageBoxMode = FIELD_MESSAGE_BOX_AUTO_SCROLL;
+ PrintFieldMessage(message);
+ return TRUE;
+}
+
+bool8 unref_sub_8064BD0(const u8 *message)
+{
+ if (sMessageBoxMode != FIELD_MESSAGE_BOX_HIDDEN)
+ {
+ return FALSE;
+ }
+ else
+ {
+ sMessageBoxMode = FIELD_MESSAGE_BOX_NORMAL;
+ PrintFieldMessageFromStringVar4();
+ return TRUE;
+ }
+}
+
+static void PrintFieldMessage(const u8 *message)
+{
+ StringExpandPlaceholders(gStringVar4, message);
+ Text_InitWindow8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15);
+ CreateFieldMessageBoxTask();
+}
+
+static void PrintFieldMessageFromStringVar4(void)
+{
+ Text_InitWindow8002EB0(&gFieldMessageBoxWindow, gStringVar4, gMenuTextTileOffset, 2, 15);
+ CreateFieldMessageBoxTask();
+}
+
+void HideFieldMessageBox(void)
+{
+ DestroyFieldMessageBoxTask();
+ TextWindow_EraseDialogueFrame(&gFieldMessageBoxWindow);
+ sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
+}
+
+u8 GetFieldMessageBoxMode(void)
+{
+ return sMessageBoxMode;
+}
+
+bool8 IsFieldMessageBoxHidden(void)
+{
+ if (sMessageBoxMode == FIELD_MESSAGE_BOX_HIDDEN)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void unref_sub_8064CA0(void)
+{
+ DestroyFieldMessageBoxTask();
+ TextWindow_DrawDialogueFrame(&gFieldMessageBoxWindow);
+ sMessageBoxMode = FIELD_MESSAGE_BOX_HIDDEN;
+}