Document src/field_message_box.c

This commit is contained in:
cbt6
2022-07-03 23:48:40 +08:00
parent 724068dadf
commit 951b72145f
3 changed files with 51 additions and 42 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ bool8 ShowFieldMessage(const u8 *message);
bool8 ShowFieldAutoScrollMessage(const u8 *message); bool8 ShowFieldAutoScrollMessage(const u8 *message);
void HideFieldMessageBox(void); void HideFieldMessageBox(void);
bool8 IsFieldMessageBoxHidden(void); bool8 IsFieldMessageBoxHidden(void);
bool8 textbox_any_visible(void); u8 GetFieldMessageBoxType(void);
void InitFieldMessageBox(void); void InitFieldMessageBox(void);
#endif // GUARD_FIELD_MESSAGE_BOX_H #endif // GUARD_FIELD_MESSAGE_BOX_H
+2 -2
View File
@@ -219,7 +219,7 @@ static void Task_Linkup1(u8 taskId)
static void Task_LinkupMaster_2(u8 taskId) static void Task_LinkupMaster_2(u8 taskId)
{ {
if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !GetFieldMessageBoxType())
{ {
gTasks[taskId].data[3] = 0; gTasks[taskId].data[3] = 0;
gTasks[taskId].func = Task_LinkupMaster_3; gTasks[taskId].func = Task_LinkupMaster_3;
@@ -246,7 +246,7 @@ static void Task_LinkupMaster_3(u8 taskId)
static void Task_LinkupMaster_4(u8 taskId) static void Task_LinkupMaster_4(u8 taskId)
{ {
if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !textbox_any_visible()) if (sub_80808F0(taskId) != TRUE && sub_8080990(taskId) != TRUE && sub_80808BC(taskId) != TRUE && !GetFieldMessageBoxType())
{ {
if (GetSavedPlayerCount() != GetLinkPlayerCount_2()) if (GetSavedPlayerCount() != GetLinkPlayerCount_2())
{ {
+48 -39
View File
@@ -5,22 +5,30 @@
#include "script.h" #include "script.h"
#include "text_window.h" #include "text_window.h"
static EWRAM_DATA u8 sMessageBoxType = 0; enum
{
FIELD_MESSAGE_BOX_HIDDEN,
FIELD_MESSAGE_BOX_UNUSED,
FIELD_MESSAGE_BOX_NORMAL,
FIELD_MESSAGE_BOX_AUTO_SCROLL,
};
static void textbox_fdecode_auto_and_task_add(const u8 *str); static EWRAM_DATA u8 sMessageBoxType = FIELD_MESSAGE_BOX_HIDDEN;
static void textbox_auto_and_task_add(void);
static void ExpandStringAndStartDrawFieldMessageBox(const u8 *str);
static void StartDrawFieldMessageBox(void);
void InitFieldMessageBox(void) void InitFieldMessageBox(void)
{ {
sMessageBoxType = 0; sMessageBoxType = FIELD_MESSAGE_BOX_HIDDEN;
gTextFlags.canABSpeedUpPrint = FALSE; gTextFlags.canABSpeedUpPrint = FALSE;
gTextFlags.useAlternateDownArrow = FALSE; gTextFlags.useAlternateDownArrow = FALSE;
gTextFlags.autoScroll = FALSE; gTextFlags.autoScroll = FALSE;
} }
static void Task_RunFieldMessageBoxPrinter(u8 taskId) static void Task_DrawFieldMessageBox(u8 taskId)
{ {
struct Task * task = &gTasks[taskId]; struct Task *task = &gTasks[taskId];
switch (task->data[0]) switch (task->data[0])
{ {
case 0: case 0:
@@ -30,13 +38,9 @@ static void Task_RunFieldMessageBoxPrinter(u8 taskId)
TextWindow_LoadTilesStdFrame1(0, 0x200); TextWindow_LoadTilesStdFrame1(0, 0x200);
} }
else if (!IsMsgSignPost()) else if (!IsMsgSignPost())
{
LoadStdWindowFrameGfx(); LoadStdWindowFrameGfx();
}
else else
{
LoadSignPostWindowFrameGfx(); LoadSignPostWindowFrameGfx();
}
task->data[0]++; task->data[0]++;
break; break;
case 1: case 1:
@@ -46,95 +50,100 @@ static void Task_RunFieldMessageBoxPrinter(u8 taskId)
case 2: case 2:
if (RunTextPrinters_CheckPrinter0Active() != TRUE) if (RunTextPrinters_CheckPrinter0Active() != TRUE)
{ {
sMessageBoxType = 0; sMessageBoxType = FIELD_MESSAGE_BOX_HIDDEN;
DestroyTask(taskId); DestroyTask(taskId);
} }
break; break;
} }
} }
static void task_add_textbox(void) static void CreateTask_DrawFieldMessageBox(void)
{ {
CreateTask(Task_RunFieldMessageBoxPrinter, 80); CreateTask(Task_DrawFieldMessageBox, 80);
} }
static void task_del_textbox(void) static void DestroyTask_DrawFieldMessageBox(void)
{ {
u8 taskId = FindTaskIdByFunc(Task_RunFieldMessageBoxPrinter); u8 taskId = FindTaskIdByFunc(Task_DrawFieldMessageBox);
if (taskId != 0xFF) if (taskId != 0xFF)
DestroyTask(taskId); DestroyTask(taskId);
} }
bool8 ShowFieldMessage(const u8 *str) bool8 ShowFieldMessage(const u8 *str)
{ {
if (sMessageBoxType != 0) if (sMessageBoxType != FIELD_MESSAGE_BOX_HIDDEN)
return FALSE; return FALSE;
textbox_fdecode_auto_and_task_add(str); ExpandStringAndStartDrawFieldMessageBox(str);
sMessageBoxType = 2; sMessageBoxType = FIELD_MESSAGE_BOX_NORMAL;
return TRUE; return TRUE;
} }
bool8 ShowFieldAutoScrollMessage(const u8 *str) bool8 ShowFieldAutoScrollMessage(const u8 *str)
{ {
if (sMessageBoxType != 0) if (sMessageBoxType != FIELD_MESSAGE_BOX_HIDDEN)
return FALSE; return FALSE;
sMessageBoxType = 3; sMessageBoxType = FIELD_MESSAGE_BOX_AUTO_SCROLL;
textbox_fdecode_auto_and_task_add(str); ExpandStringAndStartDrawFieldMessageBox(str);
return TRUE; return TRUE;
} }
bool8 sub_806948C(const u8 *str) // Unused
static bool8 ForceShowFieldAutoScrollMessage(const u8 *str)
{ {
sMessageBoxType = 3; sMessageBoxType = FIELD_MESSAGE_BOX_AUTO_SCROLL;
textbox_fdecode_auto_and_task_add(str); ExpandStringAndStartDrawFieldMessageBox(str);
return TRUE; return TRUE;
} }
bool8 sub_80694A4(const u8 *str) // Unused
// Same as ShowFieldMessage, but instead of accepting a string argument,
// it just prints whatever that's already in gStringVar4
static bool8 ShowFieldMessageFromBuffer(void)
{ {
if (sMessageBoxType != 0) if (sMessageBoxType != FIELD_MESSAGE_BOX_HIDDEN)
return FALSE; return FALSE;
sMessageBoxType = 2; sMessageBoxType = FIELD_MESSAGE_BOX_NORMAL;
textbox_auto_and_task_add(); StartDrawFieldMessageBox();
return TRUE; return TRUE;
} }
static void textbox_fdecode_auto_and_task_add(const u8 *str) static void ExpandStringAndStartDrawFieldMessageBox(const u8 *str)
{ {
StringExpandPlaceholders(gStringVar4, str); StringExpandPlaceholders(gStringVar4, str);
AddTextPrinterDiffStyle(TRUE); AddTextPrinterDiffStyle(TRUE);
task_add_textbox(); CreateTask_DrawFieldMessageBox();
} }
static void textbox_auto_and_task_add(void) static void StartDrawFieldMessageBox(void)
{ {
AddTextPrinterDiffStyle(TRUE); AddTextPrinterDiffStyle(TRUE);
task_add_textbox(); CreateTask_DrawFieldMessageBox();
} }
void HideFieldMessageBox(void) void HideFieldMessageBox(void)
{ {
task_del_textbox(); DestroyTask_DrawFieldMessageBox();
ClearDialogWindowAndFrame(0, TRUE); ClearDialogWindowAndFrame(0, TRUE);
sMessageBoxType = 0; sMessageBoxType = FIELD_MESSAGE_BOX_HIDDEN;
} }
u8 textbox_any_visible(void) u8 GetFieldMessageBoxType(void)
{ {
return sMessageBoxType; return sMessageBoxType;
} }
bool8 IsFieldMessageBoxHidden(void) bool8 IsFieldMessageBoxHidden(void)
{ {
if (sMessageBoxType == 0) if (sMessageBoxType == FIELD_MESSAGE_BOX_HIDDEN)
return TRUE; return TRUE;
else else
return FALSE; return FALSE;
} }
void sub_8069538(void) // Unused
static void ReplaceFieldMessageWithFrame(void)
{ {
task_del_textbox(); DestroyTask_DrawFieldMessageBox();
DrawStdWindowFrame(0, TRUE); DrawStdWindowFrame(0, TRUE);
sMessageBoxType = 0; sMessageBoxType = FIELD_MESSAGE_BOX_HIDDEN;
} }