diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2019-10-24 20:49:10 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2019-10-24 20:49:10 -0400 |
commit | 283084cce49b0bdb65916f35e55654a3b365f452 (patch) | |
tree | 2f0f000b200830f5ee3ed80040d0a02aff85c221 | |
parent | 7579fc65c12bd46c045d10eb8cd9a2320fd1f3f0 (diff) |
script_menu through task_yes_no_maybe
-rw-r--r-- | asm/script_menu.s | 728 | ||||
-rw-r--r-- | common_syms/scrcmd.txt | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/scrcmd.c | 18 | ||||
-rw-r--r-- | src/script_menu.c | 263 | ||||
-rw-r--r-- | sym_common.txt | 3 | ||||
-rw-r--r-- | sym_ewram.txt | 5 |
7 files changed, 278 insertions, 741 deletions
diff --git a/asm/script_menu.s b/asm/script_menu.s index 56781a953..bf7819eb1 100644 --- a/asm/script_menu.s +++ b/asm/script_menu.s @@ -5,734 +5,6 @@ .text - thumb_func_start sub_809C954 -sub_809C954: @ 809C954 - push {lr} - adds r1, r0, 0 - movs r0, 0x1 - movs r2, 0 - bl GetStringWidth - adds r1, r0, 0 - adds r0, r1, 0x7 - cmp r0, 0 - bge _0809C96A - adds r0, 0x7 -_0809C96A: - lsls r0, 13 - lsrs r0, 16 - pop {r1} - bx r1 - thumb_func_end sub_809C954 - - thumb_func_start sub_809C974 -sub_809C974: @ 809C974 - push {r4-r7,lr} - adds r7, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - ldr r0, [r7] - bl sub_809C954 - lsls r0, 24 - lsrs r6, r0, 24 - movs r5, 0x1 - cmp r5, r4 - bcs _0809C9AA -_0809C98C: - lsls r0, r5, 3 - adds r0, r7 - ldr r0, [r0] - bl sub_809C954 - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - bcs _0809C9A0 - adds r6, r0, 0 -_0809C9A0: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r4 - bcc _0809C98C -_0809C9AA: - adds r0, r6, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_809C974 - - thumb_func_start ScriptMenu_Multichoice -ScriptMenu_Multichoice: @ 809C9B4 - push {r4-r7,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r7, r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - lsls r2, 24 - lsrs r5, r2, 24 - lsls r3, 24 - lsrs r4, r3, 24 - ldr r0, _0809C9F0 @ =sub_809CC98 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0809C9F8 - ldr r0, _0809C9F4 @ =gSpecialVar_Result - movs r1, 0xFF - strh r1, [r0] - movs r0, 0 - str r0, [sp] - adds r0, r7, 0 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl sub_809CA64 - movs r0, 0x1 - b _0809C9FA - .align 2, 0 -_0809C9F0: .4byte sub_809CC98 -_0809C9F4: .4byte gSpecialVar_Result -_0809C9F8: - movs r0, 0 -_0809C9FA: - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end ScriptMenu_Multichoice - - thumb_func_start ScriptMenu_MultichoiceWithDefault -ScriptMenu_MultichoiceWithDefault: @ 809CA04 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - ldr r4, [sp, 0x1C] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r6, r2, 24 - lsls r3, 24 - lsrs r5, r3, 24 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0809CA4C @ =sub_809CC98 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0809CA54 - ldr r1, _0809CA50 @ =gSpecialVar_Result - movs r0, 0xFF - strh r0, [r1] - str r4, [sp] - mov r0, r8 - adds r1, r7, 0 - adds r2, r6, 0 - adds r3, r5, 0 - bl sub_809CA64 - movs r0, 0x1 - b _0809CA56 - .align 2, 0 -_0809CA4C: .4byte sub_809CC98 -_0809CA50: .4byte gSpecialVar_Result -_0809CA54: - movs r0, 0 -_0809CA56: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end ScriptMenu_MultichoiceWithDefault - - thumb_func_start sub_809CA64 -sub_809CA64: @ 809CA64 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - ldr r4, [sp, 0x40] - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp, 0x14] - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0x18] - lsls r4, 24 - lsrs r4, 24 - str r4, [sp, 0x1C] - movs r0, 0x2 - ands r0, r3 - cmp r0, 0 - bne _0809CAA6 - ldr r0, _0809CB54 @ =sub_809D6D4 - bl sub_81119D4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0809CBA2 -_0809CAA6: - movs r0, 0x1 - ldr r1, [sp, 0x18] - ands r1, r0 - str r1, [sp, 0x18] - ldr r1, _0809CB58 @ =gUnknown_83E04B0 - mov r2, r10 - lsls r0, r2, 3 - adds r0, r1 - ldrb r7, [r0, 0x4] - ldr r0, [r0] - mov r8, r0 - movs r6, 0 - cmp r6, r7 - bge _0809CADE - mov r5, r8 - adds r4, r7, 0 -_0809CAC6: - ldr r1, [r5] - movs r0, 0x2 - movs r2, 0 - bl GetStringWidth - cmp r0, r6 - ble _0809CAD6 - adds r6, r0, 0 -_0809CAD6: - adds r5, 0x8 - subs r4, 0x1 - cmp r4, 0 - bne _0809CAC6 -_0809CADE: - adds r0, r6, 0 - adds r0, 0x9 - cmp r0, 0 - bge _0809CAE8 - adds r0, 0x7 -_0809CAE8: - asrs r0, 3 - adds r0, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r1, r9 - adds r0, r1, r5 - cmp r0, 0x1C - ble _0809CB02 - movs r0, 0x1C - subs r0, r5 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 -_0809CB02: - adds r0, r7, 0 - bl sub_809CBB4 - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - mov r0, r9 - ldr r1, [sp, 0x14] - adds r2, r5, 0 - bl CreateWindowFromRect - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - movs r1, 0 - bl SetStdWindowBorderStyle - mov r2, r10 - cmp r2, 0x1E - beq _0809CB32 - cmp r2, 0xD - beq _0809CB32 - cmp r2, 0x29 - bne _0809CB5C -_0809CB32: - movs r0, 0xE - str r0, [sp] - str r7, [sp, 0x4] - mov r0, r8 - str r0, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - movs r0, 0x2 - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x2 - movs r2, 0x8 - movs r3, 0x2 - bl MultichoiceList_PrintItems - b _0809CB7A - .align 2, 0 -_0809CB54: .4byte sub_809D6D4 -_0809CB58: .4byte gUnknown_83E04B0 -_0809CB5C: - movs r0, 0xE - str r0, [sp] - str r7, [sp, 0x4] - mov r1, r8 - str r1, [sp, 0x8] - movs r0, 0 - str r0, [sp, 0xC] - movs r0, 0x2 - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x2 - movs r2, 0x8 - movs r3, 0x2 - bl MultichoiceList_PrintItems -_0809CB7A: - movs r0, 0xE - str r0, [sp] - str r7, [sp, 0x4] - ldr r2, [sp, 0x1C] - str r2, [sp, 0x8] - adds r0, r5, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - ldr r0, [sp, 0x18] - adds r1, r7, 0 - adds r2, r5, 0 - mov r3, r10 - bl sub_809CC18 - movs r0, 0 - bl ScheduleBgCopyTilemapToVram -_0809CBA2: - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_809CA64 - - thumb_func_start sub_809CBB4 -sub_809CBB4: @ 809CBB4 - push {lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - bhi _0809CC10 - lsls r0, 2 - ldr r1, _0809CBC8 @ =_0809CBCC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809CBC8: .4byte _0809CBCC - .align 2, 0 -_0809CBCC: - .4byte _0809CC10 - .4byte _0809CBF0 - .4byte _0809CBF4 - .4byte _0809CBF8 - .4byte _0809CBFC - .4byte _0809CC00 - .4byte _0809CC04 - .4byte _0809CC08 - .4byte _0809CC0C -_0809CBF0: - movs r0, 0x2 - b _0809CC12 -_0809CBF4: - movs r0, 0x4 - b _0809CC12 -_0809CBF8: - movs r0, 0x6 - b _0809CC12 -_0809CBFC: - movs r0, 0x7 - b _0809CC12 -_0809CC00: - movs r0, 0x9 - b _0809CC12 -_0809CC04: - movs r0, 0xB - b _0809CC12 -_0809CC08: - movs r0, 0xD - b _0809CC12 -_0809CC0C: - movs r0, 0xE - b _0809CC12 -_0809CC10: - movs r0, 0x1 -_0809CC12: - pop {r1} - bx r1 - thumb_func_end sub_809CBB4 - - thumb_func_start sub_809CC18 -sub_809CC18: @ 809CC18 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r4, r3, 24 - cmp r4, 0x27 - beq _0809CC36 - cmp r4, 0x2F - beq _0809CC36 - cmp r4, 0x32 - bne _0809CC40 -_0809CC36: - ldr r1, _0809CC3C @ =gUnknown_2039988 - movs r0, 0xC - b _0809CC44 - .align 2, 0 -_0809CC3C: .4byte gUnknown_2039988 -_0809CC40: - ldr r1, _0809CC68 @ =gUnknown_2039988 - movs r0, 0 -_0809CC44: - strb r0, [r1] - ldr r0, _0809CC6C @ =sub_809CC98 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _0809CC70 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0, r1 - strh r6, [r1, 0x10] - cmp r5, 0x3 - bls _0809CC74 - movs r0, 0x1 - b _0809CC76 - .align 2, 0 -_0809CC68: .4byte gUnknown_2039988 -_0809CC6C: .4byte sub_809CC98 -_0809CC70: .4byte gTasks -_0809CC74: - movs r0, 0 -_0809CC76: - strh r0, [r1, 0x12] - ldr r1, _0809CC94 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - strh r7, [r0, 0x14] - strh r4, [r0, 0x16] - adds r0, r4, 0 - bl sub_809CD48 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809CC94: .4byte gTasks - thumb_func_end sub_809CC18 - - thumb_func_start sub_809CC98 -sub_809CC98: @ 809CC98 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0809CCC4 @ =gTasks+0x8 - adds r5, r0, r1 - ldr r0, _0809CCC8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0809CD3C - ldr r1, _0809CCCC @ =gUnknown_2039988 - ldrb r0, [r1] - cmp r0, 0 - beq _0809CCD0 - subs r0, 0x1 - strb r0, [r1] - b _0809CD3C - .align 2, 0 -_0809CCC4: .4byte gTasks+0x8 -_0809CCC8: .4byte gPaletteFade -_0809CCCC: .4byte gUnknown_2039988 -_0809CCD0: - movs r1, 0xA - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0809CCDE - bl Menu_ProcessInputNoWrapAround - b _0809CCE2 -_0809CCDE: - bl Menu_ProcessInput -_0809CCE2: - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0809CD20 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0 - beq _0809CCF8 - ldrb r0, [r5, 0xE] - bl sub_809CD48 -_0809CCF8: - lsls r0, r4, 24 - asrs r1, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r1, r0 - beq _0809CD3C - adds r0, 0x1 - cmp r1, r0 - bne _0809CD28 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0809CD3C - movs r0, 0x5 - bl PlaySE - ldr r1, _0809CD24 @ =gSpecialVar_Result - movs r0, 0x7F - strh r0, [r1] - b _0809CD2C - .align 2, 0 -_0809CD20: .4byte gMain -_0809CD24: .4byte gSpecialVar_Result -_0809CD28: - ldr r0, _0809CD44 @ =gSpecialVar_Result - strh r1, [r0] -_0809CD2C: - ldrb r0, [r5, 0xC] - bl sub_809D6B0 - adds r0, r6, 0 - bl DestroyTask - bl EnableBothScriptContexts -_0809CD3C: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809CD44: .4byte gSpecialVar_Result - thumb_func_end sub_809CC98 - - thumb_func_start sub_809CD48 -sub_809CD48: @ 809CD48 - push {r4,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - adds r1, r0, 0 - cmp r0, 0x2F - beq _0809CD78 - cmp r0, 0x2F - bgt _0809CD60 - cmp r0, 0x27 - beq _0809CD66 - b _0809CDE0 -_0809CD60: - cmp r1, 0x32 - beq _0809CDB0 - b _0809CDE0 -_0809CD66: - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r4, _0809CD74 @ =gUnknown_83E072C - b _0809CD82 - .align 2, 0 -_0809CD74: .4byte gUnknown_83E072C -_0809CD78: - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r4, _0809CDAC @ =gUnknown_83E0738 -_0809CD82: - bl Menu_GetCursorPos - lsls r0, 24 - lsrs r0, 22 - adds r0, r4 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - movs r3, 0 - bl AddTextPrinterParameterized2 - b _0809CDE0 - .align 2, 0 -_0809CDAC: .4byte gUnknown_83E0738 -_0809CDB0: - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r4, _0809CDE8 @ =gUnknown_83E0748 - bl Menu_GetCursorPos - lsls r0, 24 - lsrs r0, 22 - adds r0, r4 - ldr r2, [r0] - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - movs r3, 0 - bl AddTextPrinterParameterized2 -_0809CDE0: - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809CDE8: .4byte gUnknown_83E0748 - thumb_func_end sub_809CD48 - - thumb_func_start ScriptMenu_YesNo -ScriptMenu_YesNo: @ 809CDEC - push {r4,lr} - ldr r4, _0809CE04 @ =task_yes_no_maybe - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0809CE08 - movs r0, 0 - b _0809CE28 - .align 2, 0 -_0809CE04: .4byte task_yes_no_maybe -_0809CE08: - ldr r1, _0809CE30 @ =gSpecialVar_Result - movs r0, 0xFF - strh r0, [r1] - ldr r0, _0809CE34 @ =sub_809D6D4 - bl sub_81119D4 - lsls r0, 24 - cmp r0, 0 - bne _0809CE26 - bl DisplayYesNoMenuDefaultYes - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask -_0809CE26: - movs r0, 0x1 -_0809CE28: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0809CE30: .4byte gSpecialVar_Result -_0809CE34: .4byte sub_809D6D4 - thumb_func_end ScriptMenu_YesNo - - thumb_func_start sub_809CE38 -sub_809CE38: @ 809CE38 - push {lr} - ldr r0, _0809CE48 @ =gSpecialVar_Result - ldrh r0, [r0] - cmp r0, 0xFF - beq _0809CE4C - movs r0, 0x1 - b _0809CE4E - .align 2, 0 -_0809CE48: .4byte gSpecialVar_Result -_0809CE4C: - movs r0, 0 -_0809CE4E: - pop {r1} - bx r1 - thumb_func_end sub_809CE38 - - thumb_func_start task_yes_no_maybe -task_yes_no_maybe: @ 809CE54 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _0809CE74 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r1, r0, r1 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0x4 - bgt _0809CE78 - adds r0, r2, 0x1 - strh r0, [r1, 0xC] - b _0809CEBC - .align 2, 0 -_0809CE74: .4byte gTasks -_0809CE78: - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r1, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0809CE9C - cmp r1, r0 - bgt _0809CE94 - subs r0, 0x1 - cmp r1, r0 - beq _0809CEBC - b _0809CEB2 -_0809CE94: - cmp r1, 0 - beq _0809CEAC - cmp r1, 0x1 - bne _0809CEB2 -_0809CE9C: - movs r0, 0x5 - bl PlaySE - ldr r1, _0809CEA8 @ =gSpecialVar_Result - movs r0, 0 - b _0809CEB0 - .align 2, 0 -_0809CEA8: .4byte gSpecialVar_Result -_0809CEAC: - ldr r1, _0809CEC4 @ =gSpecialVar_Result - movs r0, 0x1 -_0809CEB0: - strh r0, [r1] -_0809CEB2: - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_0809CEBC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809CEC4: .4byte gSpecialVar_Result - thumb_func_end task_yes_no_maybe - thumb_func_start ScriptMenu_MultichoiceGrid ScriptMenu_MultichoiceGrid: @ 809CEC8 push {r4-r7,lr} diff --git a/common_syms/scrcmd.txt b/common_syms/scrcmd.txt new file mode 100644 index 000000000..7fb0245af --- /dev/null +++ b/common_syms/scrcmd.txt @@ -0,0 +1 @@ +gUnknown_3005070 diff --git a/ld_script.txt b/ld_script.txt index 6f0b839cb..584d283a0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -141,6 +141,7 @@ SECTIONS { src/item.o(.text); asm/shop.o(.text); src/berry.o(.text); + src/script_menu.o(.text); asm/script_menu.o(.text); asm/naming_screen.o(.text); src/money.o(.text); diff --git a/src/scrcmd.c b/src/scrcmd.c index 7a70d09c7..2a6aff709 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -50,15 +50,15 @@ extern const u8 *const gStdScriptsEnd[]; static bool8 sub_806B93C(struct ScriptContext * ctx); static u8 sub_806B96C(struct ScriptContext * ctx); -EWRAM_DATA ptrdiff_t gVScriptOffset = 0; -EWRAM_DATA u8 gUnknown_20370AC = 0; -EWRAM_DATA u16 sPauseCounter = 0; -EWRAM_DATA u16 sMovingNpcId = 0; -EWRAM_DATA u16 sMovingNpcMapBank = 0; -EWRAM_DATA u16 sMovingNpcMapId = 0; -EWRAM_DATA u16 sFieldEffectScriptId = 0; - -IWRAM_DATA struct ScriptContext * gUnknown_3005070; +static EWRAM_DATA ptrdiff_t gVScriptOffset = 0; +static EWRAM_DATA u8 gUnknown_20370AC = 0; +static EWRAM_DATA u16 sPauseCounter = 0; +static EWRAM_DATA u16 sMovingNpcId = 0; +static EWRAM_DATA u16 sMovingNpcMapBank = 0; +static EWRAM_DATA u16 sMovingNpcMapId = 0; +static EWRAM_DATA u16 sFieldEffectScriptId = 0; + +struct ScriptContext * gUnknown_3005070; extern u8 gSelectedEventObject; diff --git a/src/script_menu.c b/src/script_menu.c new file mode 100644 index 000000000..d375ece08 --- /dev/null +++ b/src/script_menu.c @@ -0,0 +1,263 @@ +#include "global.h" +#include "palette.h" +#include "text.h" +#include "list_menu.h" +#include "menu.h" +#include "task.h" +#include "sound.h" +#include "script_menu.h" +#include "quest_log.h" +#include "window.h" +#include "new_menu_helpers.h" +#include "event_data.h" +#include "script.h" +#include "constants/songs.h" + +struct MultichoiceListStruct +{ + const struct MenuAction *list; + u8 count; +}; + +EWRAM_DATA u8 gUnknown_2039988 = 0; + +void sub_809CA64(u8 left, u8 top, u8 mcId, u8 ignoreBpress, u8 initPos); +u8 sub_809CBB4(u8 count); +void sub_809CC18(u8 ignoreBpress, u8 count, u8 windowId, u8 mcId); +void sub_809CC98(u8 taskId); +void sub_809CD48(u8 mcId); +void task_yes_no_maybe(u8 taskId); +void sub_809D6B0(u8 windowId); +u8 CreateWindowFromRect(u8 left, u8 top, u8 width, u8 height); + +extern const u8 *const gUnknown_83E072C[]; +extern const u8 *const gUnknown_83E0738[]; +extern const u8 *const gUnknown_83E0748[]; +extern const struct MultichoiceListStruct gUnknown_83E04B0[]; + +u16 sub_809C954(const u8 *str) +{ + return (GetStringWidth(1, str, 0) + 7) / 8; +} + +u8 sub_809C974(const struct ListMenuItem * items, u8 count) +{ + u16 i; + u8 width = sub_809C954(items[0].label); + u8 tmp; + + for (i = 1; i < count; i++) + { + tmp = sub_809C954(items[i].label); + if (width < tmp) + width = tmp; + } + return width; +} + +bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 mcId, u8 ignoreBpress) +{ + if (FuncIsActiveTask(sub_809CC98) == TRUE) + return FALSE; + gSpecialVar_Result = 0xFF; + sub_809CA64(left, top, mcId, ignoreBpress, 0); + return TRUE; +} + +bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 mcId, u8 ignoreBpress, u8 cursorPos) +{ + if (FuncIsActiveTask(sub_809CC98) == TRUE) + return FALSE; + gSpecialVar_Result = 0xFF; + sub_809CA64(left, top, mcId, ignoreBpress, cursorPos); + return TRUE; +} + +void sub_809CA64(u8 left, u8 top, u8 mcId, u8 ignoreBpress, u8 initPos) +{ + s32 i; + s32 strWidth; + s32 tmp; + u8 width; + u8 height; + u8 count; + u8 windowId; + const struct MenuAction * list; + + if ((ignoreBpress & 2) || sub_81119D4(sub_809D6D4) != TRUE) + { + ignoreBpress &= 1; + count = gUnknown_83E04B0[mcId].count; + list = gUnknown_83E04B0[mcId].list; + strWidth = 0; + for (i = 0; i < count; i++) + { + tmp = GetStringWidth(2, list[i].text, 0); + if (tmp > strWidth) + strWidth = tmp; + } + width = (strWidth + 9) / 8 + 1; + if (left + width > 28) + left = 28 - width; + height = sub_809CBB4(count); + windowId = CreateWindowFromRect(left, top, width, height); + SetStdWindowBorderStyle(windowId, FALSE); + if (mcId == 30 || mcId == 13 || mcId == 41) + MultichoiceList_PrintItems(windowId, 2, 8, 2, 14, count, list, 0, 2); + else + MultichoiceList_PrintItems(windowId, 2, 8, 2, 14, count, list, 0, 2); + Menu_InitCursor(windowId, 2, 0, 2, 14, count, initPos); + sub_809CC18(ignoreBpress, count, windowId, mcId); + ScheduleBgCopyTilemapToVram(0); + } +} + +u8 sub_809CBB4(u8 count) +{ + switch (count) + { + case 0: + return 1; + case 1: + return 2; + case 2: + return 4; + case 3: + return 6; + case 4: + return 7; + case 5: + return 9; + case 6: + return 11; + case 7: + return 13; + case 8: + return 14; + default: + return 1; + } +} + +void sub_809CC18(u8 ignoreBpress, u8 count, u8 windowId, u8 mcId) +{ + u8 taskId; + if (mcId == 39 || mcId == 47 || mcId == 50) + gUnknown_2039988 = 12; + else + gUnknown_2039988 = 0; + taskId = CreateTask(sub_809CC98, 80); + gTasks[taskId].data[4] = ignoreBpress; + if (count > 3) + gTasks[taskId].data[5] = TRUE; + else + gTasks[taskId].data[5] = FALSE; + gTasks[taskId].data[6] = windowId; + gTasks[taskId].data[7] = mcId; + sub_809CD48(mcId); +} + +void sub_809CC98(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s8 input; + if (!gPaletteFade.active) + { + if (gUnknown_2039988 != 0) + gUnknown_2039988--; + else + { + if (data[5] == FALSE) + input = Menu_ProcessInputNoWrapAround(); + else + input = Menu_ProcessInput(); + if (JOY_NEW(DPAD_UP | DPAD_DOWN)) + sub_809CD48(data[7]); + switch (input) + { + case -2: + return; + case -1: + if (data[4]) + return; + PlaySE(SE_SELECT); + gSpecialVar_Result = 127; + break; + default: + gSpecialVar_Result = input; + break; + } + sub_809D6B0(data[6]); + DestroyTask(taskId); + EnableBothScriptContexts(); + } + } +} + +void sub_809CD48(u8 mcId) +{ + switch (mcId) + { + case 39: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 2, gUnknown_83E072C[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + break; + case 47: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 2, gUnknown_83E0738[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + break; + case 50: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 2, gUnknown_83E0748[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + break; + } +} + +bool8 ScriptMenu_YesNo(u8 unused, u8 stuff) +{ + if (FuncIsActiveTask(task_yes_no_maybe) == TRUE) + return FALSE; + gSpecialVar_Result = 255; + if (!sub_81119D4(sub_809D6D4)) + { + DisplayYesNoMenuDefaultYes(); + CreateTask(task_yes_no_maybe, 80); + } + return TRUE; +} + +bool8 sub_809CE38(void) +{ + if (gSpecialVar_Result == 255) + return FALSE; + else + return TRUE; +} + +void task_yes_no_maybe(u8 taskId) +{ + s8 input; + if (gTasks[taskId].data[2] < 5) + { + gTasks[taskId].data[2]++; + } + else + { + input = Menu_ProcessInputNoWrapClearOnChoose(); + switch (input) + { + case -2: + return; + case -1: + case 1: + PlaySE(SE_SELECT); + gSpecialVar_Result = FALSE; + break; + case 0: + gSpecialVar_Result = TRUE; + break; + } + DestroyTask(taskId); + EnableBothScriptContexts(); + } +} diff --git a/sym_common.txt b/sym_common.txt index 96ac36e1c..d9f2b1586 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -74,8 +74,7 @@ gUnknown_3005068: @ 3005068 gUnknown_300506C: @ 300506C .space 0x4 -gUnknown_3005070: @ 3005070 - .space 0x4 + .include "scrcmd.o" gSelectedEventObject: @ 3005074 .space 0x4 diff --git a/sym_ewram.txt b/sym_ewram.txt index 1d7f2aaec..55df8793e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -781,9 +781,10 @@ gUnknown_203996C: @ 203996C gUnknown_2039984: @ 2039984 .space 0x4 -gUnknown_2039988: @ 2039988 - .space 0x4 + .align 2 + .include "src/script_menu.o" + .align 2 gUnknown_203998C: @ 203998C .space 0x4 |