summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_message_box.s306
-rw-r--r--ld_script.txt2
-rw-r--r--src/field_message_box.c140
-rw-r--r--sym_ewram.txt5
4 files changed, 143 insertions, 310 deletions
diff --git a/asm/field_message_box.s b/asm/field_message_box.s
deleted file mode 100644
index b823956b7..000000000
--- a/asm/field_message_box.s
+++ /dev/null
@@ -1,306 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8069348
-sub_8069348: @ 8069348
- ldr r1, _08069368 @ =gUnknown_203709C
- movs r0, 0
- strb r0, [r1]
- ldr r2, _0806936C @ =gTextFlags
- ldrb r1, [r2]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- movs r1, 0x3
- negs r1, r1
- ands r0, r1
- subs r1, 0x2
- ands r0, r1
- strb r0, [r2]
- bx lr
- .align 2, 0
-_08069368: .4byte gUnknown_203709C
-_0806936C: .4byte gTextFlags
- thumb_func_end sub_8069348
-
- thumb_func_start sub_8069370
-sub_8069370: @ 8069370
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _08069394 @ =gTasks
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _080693DA
- cmp r0, 0x1
- bgt _08069398
- cmp r0, 0
- beq _0806939E
- b _08069402
- .align 2, 0
-_08069394: .4byte gTasks
-_08069398:
- cmp r0, 0x2
- beq _080693EA
- b _08069402
-_0806939E:
- ldr r0, _080693BC @ =gQuestLogState
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _080693C4
- ldr r2, _080693C0 @ =gTextFlags
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- movs r1, 0x80
- lsls r1, 2
- movs r0, 0
- bl TextWindow_LoadTilesStdFrame1
- b _080693E2
- .align 2, 0
-_080693BC: .4byte gQuestLogState
-_080693C0: .4byte gTextFlags
-_080693C4:
- bl IsMsgSignPost
- lsls r0, 24
- cmp r0, 0
- bne _080693D4
- bl LoadStdWindowFrameGfx
- b _080693E2
-_080693D4:
- bl sub_80F79A4
- b _080693E2
-_080693DA:
- movs r0, 0
- movs r1, 0x1
- bl DrawDialogueFrame
-_080693E2:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _08069402
-_080693EA:
- bl RunTextPrinters_CheckPrinter0Active
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _08069402
- ldr r1, _08069408 @ =gUnknown_203709C
- movs r0, 0
- strb r0, [r1]
- adds r0, r4, 0
- bl DestroyTask
-_08069402:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08069408: .4byte gUnknown_203709C
- thumb_func_end sub_8069370
-
- thumb_func_start task_add_textbox
-task_add_textbox: @ 806940C
- push {lr}
- ldr r0, _0806941C @ =sub_8069370
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_0806941C: .4byte sub_8069370
- thumb_func_end task_add_textbox
-
- thumb_func_start task_del_textbox
-task_del_textbox: @ 8069420
- push {lr}
- ldr r0, _08069438 @ =sub_8069370
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _08069434
- bl DestroyTask
-_08069434:
- pop {r0}
- bx r0
- .align 2, 0
-_08069438: .4byte sub_8069370
- thumb_func_end task_del_textbox
-
- thumb_func_start ShowFieldMessage
-ShowFieldMessage: @ 806943C
- push {r4,lr}
- adds r1, r0, 0
- ldr r4, _08069458 @ =gUnknown_203709C
- ldrb r0, [r4]
- cmp r0, 0
- bne _0806945C
- adds r0, r1, 0
- bl textbox_fdecode_auto_and_task_add
- movs r0, 0x2
- strb r0, [r4]
- movs r0, 0x1
- b _0806945E
- .align 2, 0
-_08069458: .4byte gUnknown_203709C
-_0806945C:
- movs r0, 0
-_0806945E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ShowFieldMessage
-
- thumb_func_start ShowFieldAutoScrollMessage
-ShowFieldAutoScrollMessage: @ 8069464
- push {lr}
- adds r1, r0, 0
- ldr r2, _08069480 @ =gUnknown_203709C
- ldrb r0, [r2]
- cmp r0, 0
- bne _08069484
- movs r0, 0x3
- strb r0, [r2]
- adds r0, r1, 0
- bl textbox_fdecode_auto_and_task_add
- movs r0, 0x1
- b _08069486
- .align 2, 0
-_08069480: .4byte gUnknown_203709C
-_08069484:
- movs r0, 0
-_08069486:
- pop {r1}
- bx r1
- thumb_func_end ShowFieldAutoScrollMessage
-
- thumb_func_start sub_806948C
-sub_806948C: @ 806948C
- push {lr}
- ldr r2, _080694A0 @ =gUnknown_203709C
- movs r1, 0x3
- strb r1, [r2]
- bl textbox_fdecode_auto_and_task_add
- movs r0, 0x1
- pop {r1}
- bx r1
- .align 2, 0
-_080694A0: .4byte gUnknown_203709C
- thumb_func_end sub_806948C
-
- thumb_func_start sub_80694A4
-sub_80694A4: @ 80694A4
- push {lr}
- ldr r1, _080694BC @ =gUnknown_203709C
- ldrb r0, [r1]
- cmp r0, 0
- bne _080694C0
- movs r0, 0x2
- strb r0, [r1]
- bl textbox_auto_and_task_add
- movs r0, 0x1
- b _080694C2
- .align 2, 0
-_080694BC: .4byte gUnknown_203709C
-_080694C0:
- movs r0, 0
-_080694C2:
- pop {r1}
- bx r1
- thumb_func_end sub_80694A4
-
- thumb_func_start textbox_fdecode_auto_and_task_add
-textbox_fdecode_auto_and_task_add: @ 80694C8
- push {lr}
- adds r1, r0, 0
- ldr r0, _080694E0 @ =gStringVar4
- bl StringExpandPlaceholders
- movs r0, 0x1
- bl AddTextPrinterDiffStyle
- bl task_add_textbox
- pop {r0}
- bx r0
- .align 2, 0
-_080694E0: .4byte gStringVar4
- thumb_func_end textbox_fdecode_auto_and_task_add
-
- thumb_func_start textbox_auto_and_task_add
-textbox_auto_and_task_add: @ 80694E4
- push {lr}
- movs r0, 0x1
- bl AddTextPrinterDiffStyle
- bl task_add_textbox
- pop {r0}
- bx r0
- thumb_func_end textbox_auto_and_task_add
-
- thumb_func_start HideFieldMessageBox
-HideFieldMessageBox: @ 80694F4
- push {lr}
- bl task_del_textbox
- movs r0, 0
- movs r1, 0x1
- bl ClearDialogWindowAndFrame
- ldr r1, _0806950C @ =gUnknown_203709C
- movs r0, 0
- strb r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0806950C: .4byte gUnknown_203709C
- thumb_func_end HideFieldMessageBox
-
- thumb_func_start textbox_any_visible
-textbox_any_visible: @ 8069510
- ldr r0, _08069518 @ =gUnknown_203709C
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08069518: .4byte gUnknown_203709C
- thumb_func_end textbox_any_visible
-
- thumb_func_start IsFieldMessageBoxHidden
-IsFieldMessageBoxHidden: @ 806951C
- push {lr}
- ldr r0, _0806952C @ =gUnknown_203709C
- ldrb r0, [r0]
- cmp r0, 0
- beq _08069530
- movs r0, 0
- b _08069532
- .align 2, 0
-_0806952C: .4byte gUnknown_203709C
-_08069530:
- movs r0, 0x1
-_08069532:
- pop {r1}
- bx r1
- thumb_func_end IsFieldMessageBoxHidden
-
- thumb_func_start sub_8069538
-sub_8069538: @ 8069538
- push {lr}
- bl task_del_textbox
- movs r0, 0
- movs r1, 0x1
- bl DrawStdWindowFrame
- ldr r1, _08069550 @ =gUnknown_203709C
- movs r0, 0
- strb r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08069550: .4byte gUnknown_203709C
- thumb_func_end sub_8069538
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/ld_script.txt b/ld_script.txt
index 858627a34..5c908a5f8 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -95,7 +95,7 @@ SECTIONS {
asm/field_player_avatar.o(.text);
asm/event_object_movement.o(.text);
src/event_object_80688E4.o(.text); /* event_object_movement */
- asm/field_message_box.o(.text);
+ src/field_message_box.o(.text);
src/event_object_lock.o(.text);
src/text_window_graphics.o(.text);
src/script.o(.text);
diff --git a/src/field_message_box.c b/src/field_message_box.c
new file mode 100644
index 000000000..272f8ee24
--- /dev/null
+++ b/src/field_message_box.c
@@ -0,0 +1,140 @@
+#include "global.h"
+#include "gflib.h"
+#include "new_menu_helpers.h"
+#include "quest_log.h"
+#include "script.h"
+#include "text_window.h"
+
+EWRAM_DATA u8 gUnknown_203709C = 0;
+
+void textbox_fdecode_auto_and_task_add(const u8 *str);
+void textbox_auto_and_task_add(void);
+
+void sub_8069348(void)
+{
+ gUnknown_203709C = 0;
+ gTextFlags.canABSpeedUpPrint = FALSE;
+ gTextFlags.useAlternateDownArrow = FALSE;
+ gTextFlags.autoScroll = FALSE;
+}
+
+void sub_8069370(u8 taskId)
+{
+ struct Task * task = &gTasks[taskId];
+ switch (task->data[0])
+ {
+ case 0:
+ if (gQuestLogState == 2)
+ {
+ gTextFlags.autoScroll = TRUE;
+ TextWindow_LoadTilesStdFrame1(0, 0x200);
+ }
+ else if (!IsMsgSignPost())
+ {
+ LoadStdWindowFrameGfx();
+ }
+ else
+ {
+ sub_80F79A4();
+ }
+ task->data[0]++;
+ break;
+ case 1:
+ DrawDialogueFrame(0, TRUE);
+ task->data[0]++;
+ break;
+ case 2:
+ if (RunTextPrinters_CheckPrinter0Active() != TRUE)
+ {
+ gUnknown_203709C = 0;
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void task_add_textbox(void)
+{
+ CreateTask(sub_8069370, 80);
+}
+
+void task_del_textbox(void)
+{
+ u8 taskId = FindTaskIdByFunc(sub_8069370);
+ if (taskId != 0xFF)
+ DestroyTask(taskId);
+}
+
+bool8 ShowFieldMessage(const u8 *str)
+{
+ if (gUnknown_203709C != 0)
+ return FALSE;
+ textbox_fdecode_auto_and_task_add(str);
+ gUnknown_203709C = 2;
+ return TRUE;
+}
+
+bool8 ShowFieldAutoScrollMessage(const u8 *str)
+{
+ if (gUnknown_203709C != 0)
+ return FALSE;
+ gUnknown_203709C = 3;
+ textbox_fdecode_auto_and_task_add(str);
+ return TRUE;
+}
+
+bool8 sub_806948C(const u8 *str)
+{
+ gUnknown_203709C = 3;
+ textbox_fdecode_auto_and_task_add(str);
+ return TRUE;
+}
+
+bool8 sub_80694A4(const u8 *str)
+{
+ if (gUnknown_203709C != 0)
+ return FALSE;
+ gUnknown_203709C = 2;
+ textbox_auto_and_task_add();
+ return TRUE;
+}
+
+void textbox_fdecode_auto_and_task_add(const u8 *str)
+{
+ StringExpandPlaceholders(gStringVar4, str);
+ AddTextPrinterDiffStyle(TRUE);
+ task_add_textbox();
+}
+
+void textbox_auto_and_task_add(void)
+{
+ AddTextPrinterDiffStyle(TRUE);
+ task_add_textbox();
+}
+
+void HideFieldMessageBox(void)
+{
+ task_del_textbox();
+ ClearDialogWindowAndFrame(0, TRUE);
+ gUnknown_203709C = 0;
+}
+
+u8 textbox_any_visible(void)
+{
+ return gUnknown_203709C;
+}
+
+bool8 IsFieldMessageBoxHidden(void)
+{
+ if (gUnknown_203709C == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_8069538(void)
+{
+ task_del_textbox();
+ DrawStdWindowFrame(0, TRUE);
+ gUnknown_203709C = 0;
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 8481032c3..2510d6649 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -100,9 +100,8 @@ gUnknown_2037098: @ 2037098
gUnknown_203709A: @ 203709A
.space 0x2
-gUnknown_203709C: @ 203709C
- .space 0x4
-
+ .align 2
+ .include "src/field_message_box.o"
.align 2
.include "src/script.o"
.align 2