diff options
-rw-r--r-- | asm/field_message_box.s | 306 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/field_message_box.c | 140 | ||||
-rw-r--r-- | sym_ewram.txt | 5 |
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 |