diff options
-rw-r--r-- | asm/script_menu.s | 1330 | ||||
-rw-r--r-- | data/data_835B488.s | 20 | ||||
-rw-r--r-- | data/maps/PewterCity_Museum_1F/scripts.inc | 8 | ||||
-rw-r--r-- | data/specials.inc | 4 | ||||
-rw-r--r-- | include/event_scripts.h | 3 | ||||
-rw-r--r-- | include/field_effect.h | 2 | ||||
-rw-r--r-- | include/quest_log.h | 2 | ||||
-rw-r--r-- | include/script_menu.h | 2 | ||||
-rw-r--r-- | include/strings.h | 10 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/berry_powder.c | 2 | ||||
-rw-r--r-- | src/field_specials.c | 4 | ||||
-rw-r--r-- | src/quest_log.c | 674 | ||||
-rw-r--r-- | src/scrcmd.c | 4 | ||||
-rw-r--r-- | src/script_menu.c | 428 |
15 files changed, 800 insertions, 1694 deletions
diff --git a/asm/script_menu.s b/asm/script_menu.s deleted file mode 100644 index bf7819eb1..000000000 --- a/asm/script_menu.s +++ /dev/null @@ -1,1330 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ScriptMenu_MultichoiceGrid -ScriptMenu_MultichoiceGrid: @ 809CEC8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - ldr r4, [sp, 0x38] - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x10] - lsls r1, 24 - lsrs r1, 24 - str r1, [sp, 0x14] - lsls r2, 24 - lsrs r5, r2, 24 - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - lsls r4, 24 - lsrs r7, r4, 24 - ldr r0, _0809CF04 @ =sub_809CFDC - mov r9, r0 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0809CF08 - movs r0, 0 - b _0809CFBA - .align 2, 0 -_0809CF04: .4byte sub_809CFDC -_0809CF08: - ldr r1, _0809CFCC @ =gSpecialVar_Result - movs r0, 0xFF - strh r0, [r1] - ldr r0, _0809CFD0 @ =sub_809D6D4 - bl sub_81119D4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0809CFB8 - ldr r1, _0809CFD4 @ =gUnknown_83E04B0 - lsls r0, r5, 3 - adds r0, r1 - ldr r1, [r0] - mov r8, r1 - ldrb r4, [r0, 0x4] - mov r0, r8 - adds r1, r4, 0 - bl sub_809C974 - adds r5, r0, 0 - adds r5, 0x1 - lsls r5, 24 - lsrs r5, 24 - adds r0, r4, 0 - adds r1, r7, 0 - bl __udivsi3 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - mov r0, r9 - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0809CFD8 @ =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - movs r0, 0 - mov r9, r0 - mov r1, r10 - strh r1, [r4, 0x10] - adds r2, r5, 0 - muls r2, r7 - lsls r2, 24 - lsrs r2, 24 - lsls r3, r6, 25 - lsrs r3, 24 - ldr r0, [sp, 0x10] - ldr r1, [sp, 0x14] - bl CreateWindowFromRect - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x14] - movs r1, 0 - bl SetStdWindowBorderStyle - ldrb r0, [r4, 0x14] - lsls r5, 27 - lsrs r5, 24 - str r7, [sp] - str r6, [sp, 0x4] - mov r1, r8 - str r1, [sp, 0x8] - movs r1, 0x1 - adds r2, r5, 0 - movs r3, 0x10 - bl MultichoiceGrid_PrintItems - ldrb r0, [r4, 0x14] - str r5, [sp] - str r7, [sp, 0x4] - str r6, [sp, 0x8] - mov r1, r9 - str r1, [sp, 0xC] - movs r1, 0x1 - movs r2, 0 - movs r3, 0x1 - bl MultichoiceGrid_InitCursor - movs r0, 0 - bl ScheduleBgCopyTilemapToVram -_0809CFB8: - movs r0, 0x1 -_0809CFBA: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0809CFCC: .4byte gSpecialVar_Result -_0809CFD0: .4byte sub_809D6D4 -_0809CFD4: .4byte gUnknown_83E04B0 -_0809CFD8: .4byte gTasks - thumb_func_end ScriptMenu_MultichoiceGrid - - thumb_func_start sub_809CFDC -sub_809CFDC: @ 809CFDC - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _0809D018 @ =gTasks+0x8 - adds r5, r0, r1 - bl Menu_ProcessInputGridLayout - lsls r0, 24 - asrs r1, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r1, r0 - beq _0809D034 - adds r0, 0x1 - cmp r1, r0 - bne _0809D020 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0809D034 - movs r0, 0x5 - bl PlaySE - ldr r1, _0809D01C @ =gSpecialVar_Result - movs r0, 0x7F - strh r0, [r1] - b _0809D024 - .align 2, 0 -_0809D018: .4byte gTasks+0x8 -_0809D01C: .4byte gSpecialVar_Result -_0809D020: - ldr r0, _0809D03C @ =gSpecialVar_Result - strh r1, [r0] -_0809D024: - ldrb r0, [r5, 0xC] - bl sub_809D6B0 - adds r0, r4, 0 - bl DestroyTask - bl EnableBothScriptContexts -_0809D034: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809D03C: .4byte gSpecialVar_Result - thumb_func_end sub_809CFDC - - thumb_func_start ScrSpecial_CreatePCMenu -ScrSpecial_CreatePCMenu: @ 809D040 - push {lr} - ldr r0, _0809D060 @ =sub_809CC98 - bl FuncIsActiveTask - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0809D068 - ldr r1, _0809D064 @ =gSpecialVar_Result - movs r0, 0xFF - strh r0, [r1] - bl sub_809D070 - movs r0, 0x1 - b _0809D06A - .align 2, 0 -_0809D060: .4byte sub_809CC98 -_0809D064: .4byte gSpecialVar_Result -_0809D068: - movs r0, 0 -_0809D06A: - pop {r1} - bx r1 - thumb_func_end ScrSpecial_CreatePCMenu - - thumb_func_start sub_809D070 -sub_809D070: @ 809D070 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - lsls r0, 24 - lsrs r7, r0, 24 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - ldr r0, _0809D11C @ =gUnknown_8417BB6 - bl sub_809C954 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xA - bgt _0809D0A0 - cmp r0, 0x9 - bge _0809D0AE -_0809D0A0: - ldr r0, _0809D120 @ =0x00000829 - bl FlagGet - lsls r0, 24 - movs r4, 0xD - cmp r0, 0 - beq _0809D0B0 -_0809D0AE: - movs r4, 0xE -_0809D0B0: - ldr r0, _0809D124 @ =0x0000082c - bl FlagGet - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - beq _0809D134 - movs r0, 0x5 - mov r9, r0 - movs r0, 0 - movs r1, 0 - adds r2, r4, 0 - movs r3, 0xA - bl CreateWindowFromRect - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r6, 0 - movs r1, 0 - bl SetStdWindowBorderStyle - ldr r2, _0809D128 @ =gUnknown_8417BD3 - movs r0, 0x22 - str r0, [sp] - movs r5, 0xFF - str r5, [sp, 0x4] - movs r4, 0 - str r4, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - adds r3, r7, 0 - bl AddTextPrinterParameterized - ldr r2, _0809D12C @ =gUnknown_8417BBE - movs r0, 0x32 - str r0, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - adds r3, r7, 0 - bl AddTextPrinterParameterized - ldr r2, _0809D130 @ =gUnknown_8417BCB - movs r0, 0x42 - str r0, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - adds r3, r7, 0 - bl AddTextPrinterParameterized - b _0809D1A8 - .align 2, 0 -_0809D11C: .4byte gUnknown_8417BB6 -_0809D120: .4byte 0x00000829 -_0809D124: .4byte 0x0000082c -_0809D128: .4byte gUnknown_8417BD3 -_0809D12C: .4byte gUnknown_8417BBE -_0809D130: .4byte gUnknown_8417BCB -_0809D134: - ldr r1, _0809D1D0 @ =0x00000829 - mov r8, r1 - mov r0, r8 - bl FlagGet - lsls r0, 24 - movs r1, 0x3 - mov r9, r1 - cmp r0, 0 - beq _0809D14C - movs r0, 0x4 - mov r9, r0 -_0809D14C: - mov r1, r9 - lsls r3, r1, 1 - movs r0, 0 - movs r1, 0 - adds r2, r4, 0 - bl CreateWindowFromRect - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r6, 0 - movs r1, 0 - bl SetStdWindowBorderStyle - mov r0, r8 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _0809D188 - ldr r2, _0809D1D4 @ =gUnknown_8417BD3 - movs r0, 0x22 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r5, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - adds r3, r7, 0 - bl AddTextPrinterParameterized -_0809D188: - ldr r2, _0809D1D8 @ =gUnknown_8417BCB - mov r0, r9 - subs r0, 0x1 - lsls r0, 4 - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r5, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - adds r3, r7, 0 - bl AddTextPrinterParameterized -_0809D1A8: - ldr r0, _0809D1DC @ =0x00000834 - bl FlagGet - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _0809D1E4 - ldr r2, _0809D1E0 @ =gUnknown_8417BAC - movs r0, 0x2 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - adds r3, r7, 0 - bl AddTextPrinterParameterized - b _0809D1FA - .align 2, 0 -_0809D1D0: .4byte 0x00000829 -_0809D1D4: .4byte gUnknown_8417BD3 -_0809D1D8: .4byte gUnknown_8417BCB -_0809D1DC: .4byte 0x00000834 -_0809D1E0: .4byte gUnknown_8417BAC -_0809D1E4: - ldr r2, _0809D248 @ =gUnknown_8417B9F - movs r0, 0x2 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r1, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - adds r3, r7, 0 - bl AddTextPrinterParameterized -_0809D1FA: - ldr r4, _0809D24C @ =gStringVar4 - ldr r1, _0809D250 @ =gUnknown_8417BB6 - adds r0, r4, 0 - bl StringExpandPlaceholders - adds r0, r6, 0 - adds r1, r4, 0 - adds r2, r7, 0 - movs r3, 0x12 - bl Menu_PrintFormatIntlPlayerName - movs r0, 0x10 - str r0, [sp] - mov r0, r9 - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - movs r0, 0 - mov r1, r9 - adds r2, r6, 0 - movs r3, 0xFF - bl sub_809CC18 - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809D248: .4byte gUnknown_8417B9F -_0809D24C: .4byte gStringVar4 -_0809D250: .4byte gUnknown_8417BB6 - thumb_func_end sub_809D070 - - thumb_func_start ScriptMenu_DisplayPCStartupPrompt -ScriptMenu_DisplayPCStartupPrompt: @ 809D254 - push {lr} - sub sp, 0x10 - movs r0, 0 - movs r1, 0x1 - bl sub_80F7768 - ldr r2, _0809D284 @ =gUnknown_81A508A - 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 - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_0809D284: .4byte gUnknown_81A508A - thumb_func_end ScriptMenu_DisplayPCStartupPrompt - - thumb_func_start sub_809D288 -sub_809D288: @ 809D288 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0809D2AC @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0809D2E8 - cmp r0, 0x1 - bgt _0809D2B0 - cmp r0, 0 - beq _0809D2CE - b _0809D2E8 - .align 2, 0 -_0809D2AC: .4byte gTasks -_0809D2B0: - cmp r0, 0x2 - beq _0809D2BA - cmp r0, 0x3 - beq _0809D2DC - b _0809D2E8 -_0809D2BA: - movs r0, 0xC - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0809D2D8 @ =gSprites - adds r0, r1 - ldrb r1, [r4, 0xC] - bl sub_8083A5C -_0809D2CE: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0809D2E8 - .align 2, 0 -_0809D2D8: .4byte gSprites -_0809D2DC: - ldrb r0, [r4, 0x12] - bl sub_809D6B0 - adds r0, r5, 0 - bl DestroyTask -_0809D2E8: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_809D288 - - thumb_func_start ScriptMenu_ShowPokemonPic -ScriptMenu_ShowPokemonPic: @ 809D2F0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r6, r2, 24 - ldr r0, _0809D318 @ =sub_809D6D4 - bl sub_81119D4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0809D31C - movs r0, 0x1 - b _0809D3C2 - .align 2, 0 -_0809D318: .4byte sub_809D6D4 -_0809D31C: - ldr r4, _0809D3B0 @ =sub_809D288 - adds r0, r4, 0 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _0809D3C0 - lsls r1, r7, 19 - movs r0, 0xA0 - lsls r0, 14 - adds r1, r0 - asrs r1, 16 - lsls r2, r6, 19 - adds r2, r0 - asrs r2, 16 - mov r0, r8 - movs r3, 0 - bl sub_8083970 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - adds r0, r4, 0 - movs r1, 0x50 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r7, 0 - adds r1, r6, 0 - movs r2, 0x8 - movs r3, 0x8 - bl CreateWindowFromRect - ldr r1, _0809D3B4 @ =gTasks - lsls r3, r4, 2 - adds r3, r4 - lsls r3, 3 - adds r3, r1 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - strh r0, [r3, 0x12] - strh r1, [r3, 0x8] - mov r0, r8 - strh r0, [r3, 0xA] - strh r5, [r3, 0xC] - ldr r4, _0809D3B8 @ =gSprites - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 2 - adds r0, r4, 0 - adds r0, 0x1C - adds r0, r1, r0 - ldr r2, _0809D3BC @ =SpriteCallbackDummy - str r2, [r0] - adds r1, r4 - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x5] - ldrb r0, [r3, 0x12] - movs r1, 0x1 - bl SetStdWindowBorderStyle - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x1 - b _0809D3C2 - .align 2, 0 -_0809D3B0: .4byte sub_809D288 -_0809D3B4: .4byte gTasks -_0809D3B8: .4byte gSprites -_0809D3BC: .4byte SpriteCallbackDummy -_0809D3C0: - movs r0, 0 -_0809D3C2: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end ScriptMenu_ShowPokemonPic - - thumb_func_start ScriptMenu_GetPicboxWaitFunc -ScriptMenu_GetPicboxWaitFunc: @ 809D3CC - push {lr} - ldr r0, _0809D3F0 @ =sub_809D288 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _0809D3FC - ldr r0, _0809D3F4 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - ldr r0, _0809D3F8 @ =sub_809D404 - b _0809D3FE - .align 2, 0 -_0809D3F0: .4byte sub_809D288 -_0809D3F4: .4byte gTasks -_0809D3F8: .4byte sub_809D404 -_0809D3FC: - movs r0, 0 -_0809D3FE: - pop {r1} - bx r1 - thumb_func_end ScriptMenu_GetPicboxWaitFunc - - thumb_func_start sub_809D404 -sub_809D404: @ 809D404 - push {lr} - ldr r0, _0809D418 @ =sub_809D288 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _0809D41C - movs r0, 0 - b _0809D41E - .align 2, 0 -_0809D418: .4byte sub_809D288 -_0809D41C: - movs r0, 0x1 -_0809D41E: - pop {r1} - bx r1 - thumb_func_end sub_809D404 - - thumb_func_start sub_809D424 -sub_809D424: @ 809D424 - push {r4,r5,lr} - ldr r0, _0809D450 @ =sub_809D288 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xFF - beq _0809D48C - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0809D454 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - blt _0809D48C - cmp r0, 0x2 - ble _0809D458 - cmp r0, 0x3 - beq _0809D480 - b _0809D48C - .align 2, 0 -_0809D450: .4byte sub_809D288 -_0809D454: .4byte gTasks -_0809D458: - movs r0, 0xC - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0809D47C @ =gSprites - adds r0, r1 - ldrb r1, [r4, 0xC] - bl sub_8083A5C - ldrb r0, [r4, 0x12] - bl sub_809D6B0 - adds r0, r5, 0 - bl DestroyTask - b _0809D48C - .align 2, 0 -_0809D47C: .4byte gSprites -_0809D480: - ldrb r0, [r4, 0x12] - bl sub_809D6B0 - adds r0, r5, 0 - bl DestroyTask -_0809D48C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_809D424 - - thumb_func_start sub_809D494 -sub_809D494: @ 809D494 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0809D4B8 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - beq _0809D4FC - cmp r0, 0x1 - bgt _0809D4BC - cmp r0, 0 - beq _0809D4DE - b _0809D4FC - .align 2, 0 -_0809D4B8: .4byte gTasks -_0809D4BC: - cmp r0, 0x2 - beq _0809D4C6 - cmp r0, 0x3 - beq _0809D4F0 - b _0809D4FC -_0809D4C6: - movs r0, 0xC - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0809D4E8 @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r0, _0809D4EC @ =0x00001b58 - bl FreeSpriteTilesByTag -_0809D4DE: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0809D4FC - .align 2, 0 -_0809D4E8: .4byte gSprites -_0809D4EC: .4byte 0x00001b58 -_0809D4F0: - ldrb r0, [r4, 0x12] - bl sub_809D6B0 - adds r0, r5, 0 - bl DestroyTask -_0809D4FC: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_809D494 - - thumb_func_start sub_809D504 -sub_809D504: @ 809D504 - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r0, _0809D544 @ =sub_809D6D4 - bl sub_81119D4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0809D5F2 - ldr r0, _0809D548 @ =sub_809D494 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _0809D55C - ldr r0, _0809D54C @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x8D - bne _0809D558 - ldr r0, _0809D550 @ =gUnknown_83E17C0 - bl LoadSpriteSheets - ldr r0, _0809D554 @ =gUnknown_83E17A0 - movs r1, 0xE8 - lsls r1, 1 - movs r2, 0x20 - bl LoadPalette - b _0809D572 - .align 2, 0 -_0809D544: .4byte sub_809D6D4 -_0809D548: .4byte sub_809D494 -_0809D54C: .4byte gSpecialVar_0x8004 -_0809D550: .4byte gUnknown_83E17C0 -_0809D554: .4byte gUnknown_83E17A0 -_0809D558: - cmp r0, 0x8E - beq _0809D560 -_0809D55C: - movs r0, 0 - b _0809D5F4 -_0809D560: - ldr r0, _0809D600 @ =gUnknown_83E17D0 - bl LoadSpriteSheets - ldr r0, _0809D604 @ =gUnknown_83E0F80 - movs r1, 0xE8 - lsls r1, 1 - movs r2, 0x20 - bl LoadPalette -_0809D572: - ldr r0, _0809D608 @ =gUnknown_83E0768 - ldr r1, _0809D60C @ =gSpecialVar_0x8005 - mov r8, r1 - ldrh r1, [r1] - lsls r1, 19 - movs r2, 0xA0 - lsls r2, 14 - adds r1, r2 - asrs r1, 16 - ldr r6, _0809D610 @ =gSpecialVar_0x8006 - ldrh r2, [r6] - lsls r2, 19 - movs r3, 0xA0 - lsls r3, 14 - adds r2, r3 - asrs r2, 16 - movs r3, 0 - bl CreateSprite - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - ldr r1, _0809D614 @ =gSprites - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r0, r1 - ldrb r2, [r0, 0x5] - movs r1, 0xF - ands r1, r2 - movs r2, 0xD0 - orrs r1, r2 - strb r1, [r0, 0x5] - ldr r0, _0809D618 @ =sub_809D494 - movs r1, 0x50 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r1, r8 - ldrb r0, [r1] - ldrb r1, [r6] - movs r2, 0x8 - movs r3, 0x8 - bl CreateWindowFromRect - ldr r2, _0809D61C @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - movs r2, 0 - strh r0, [r1, 0x12] - strh r2, [r1, 0x8] - strh r5, [r1, 0xC] - movs r1, 0x1 - bl SetStdWindowBorderStyle - movs r0, 0 - bl ScheduleBgCopyTilemapToVram -_0809D5F2: - movs r0, 0x1 -_0809D5F4: - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0809D600: .4byte gUnknown_83E17D0 -_0809D604: .4byte gUnknown_83E0F80 -_0809D608: .4byte gUnknown_83E0768 -_0809D60C: .4byte gSpecialVar_0x8005 -_0809D610: .4byte gSpecialVar_0x8006 -_0809D614: .4byte gSprites -_0809D618: .4byte sub_809D494 -_0809D61C: .4byte gTasks - thumb_func_end sub_809D504 - - thumb_func_start sub_809D620 -sub_809D620: @ 809D620 - push {lr} - ldr r0, _0809D644 @ =sub_809D494 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _0809D64C - ldr r0, _0809D648 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x1 - b _0809D64E - .align 2, 0 -_0809D644: .4byte sub_809D494 -_0809D648: .4byte gTasks -_0809D64C: - movs r0, 0 -_0809D64E: - pop {r1} - bx r1 - thumb_func_end sub_809D620 - - thumb_func_start CreateWindowFromRect -CreateWindowFromRect: @ 809D654 - push {r4,r5,lr} - sub sp, 0x20 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsls r5, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0x80 - lsls r0, 17 - adds r4, r0 - lsrs r4, 24 - adds r5, r0 - lsrs r5, 24 - str r2, [sp] - str r3, [sp, 0x4] - movs r0, 0xF - str r0, [sp, 0x8] - movs r0, 0x38 - str r0, [sp, 0xC] - add r0, sp, 0x10 - movs r1, 0 - adds r2, r4, 0 - adds r3, r5, 0 - bl SetWindowTemplateFields - ldr r0, [sp, 0x10] - ldr r1, [sp, 0x14] - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - add r0, sp, 0x18 - bl AddWindow - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl PutWindowTilemap - adds r0, r4, 0 - add sp, 0x20 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end CreateWindowFromRect - - thumb_func_start sub_809D6B0 -sub_809D6B0: @ 809D6B0 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl ClearWindowTilemap - adds r0, r4, 0 - movs r1, 0x1 - bl ClearStdWindowAndFrameToTransparent - adds r0, r4, 0 - bl RemoveWindow - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_809D6B0 - - thumb_func_start sub_809D6D4 -sub_809D6D4: @ 809D6D4 - push {lr} - ldr r0, _0809D74C @ =EventScript_1A7AE0 - bl ScriptContext1_SetupScript - ldr r0, _0809D750 @ =sub_809D288 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xFF - beq _0809D710 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _0809D754 @ =gTasks+0x8 - adds r2, r0, r1 - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0x1 - bgt _0809D710 - movs r0, 0x4 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0809D758 @ =gSprites - adds r0, r1 - ldrb r1, [r2, 0x4] - bl sub_8083A5C -_0809D710: - ldr r0, _0809D75C @ =sub_809D494 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xFF - beq _0809D748 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _0809D754 @ =gTasks+0x8 - adds r2, r0, r1 - movs r1, 0 - ldrsh r0, [r2, r1] - cmp r0, 0x1 - bgt _0809D748 - movs r0, 0x4 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0809D758 @ =gSprites - adds r0, r1 - bl DestroySprite - ldr r0, _0809D760 @ =0x00001b58 - bl FreeSpriteTilesByTag -_0809D748: - pop {r0} - bx r0 - .align 2, 0 -_0809D74C: .4byte EventScript_1A7AE0 -_0809D750: .4byte sub_809D288 -_0809D754: .4byte gTasks+0x8 -_0809D758: .4byte gSprites -_0809D75C: .4byte sub_809D494 -_0809D760: .4byte 0x00001b58 - thumb_func_end sub_809D6D4 - - thumb_func_start sub_809D764 -sub_809D764: @ 809D764 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - ldr r1, _0809D7A0 @ =gSpecialVar_Result - movs r0, 0xFF - strh r0, [r1] - ldr r0, _0809D7A4 @ =sub_809D6D4 - bl sub_81119D4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0809D784 - b _0809D8A8 -_0809D784: - ldr r0, _0809D7A8 @ =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0x1 - bne _0809D7B0 - ldr r0, _0809D7AC @ =gSpecialVar_0x8004 - ldrh r0, [r0] - movs r4, 0x4 - cmp r0, 0x4 - bhi _0809D798 - movs r4, 0x5 -_0809D798: - movs r0, 0x5 - mov r9, r0 - movs r5, 0x2 - b _0809D7B8 - .align 2, 0 -_0809D7A0: .4byte gSpecialVar_Result -_0809D7A4: .4byte sub_809D6D4 -_0809D7A8: .4byte gSpecialVar_0x8005 -_0809D7AC: .4byte gSpecialVar_0x8004 -_0809D7B0: - movs r4, 0 - movs r0, 0x6 - mov r9, r0 - movs r5, 0 -_0809D7B8: - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - mov r0, r9 - lsls r3, r0, 1 - movs r0, 0x11 - adds r1, r5, 0 - movs r2, 0xB - bl CreateWindowFromRect - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r7, 0 - movs r1, 0 - bl SetStdWindowBorderStyle - movs r6, 0 - mov r5, r9 - subs r5, 0x2 - cmp r6, r5 - bge _0809D844 -_0809D7F2: - ldr r0, _0809D820 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r4, r0 - beq _0809D828 - ldr r1, _0809D824 @ =gUnknown_83E17E0 - lsls r0, r4, 2 - adds r0, r1 - ldr r2, [r0] - lsls r0, r6, 4 - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x2 - mov r3, r8 - bl AddTextPrinterParameterized - b _0809D82E - .align 2, 0 -_0809D820: .4byte gSpecialVar_0x8004 -_0809D824: .4byte gUnknown_83E17E0 -_0809D828: - subs r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 -_0809D82E: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x8 - bne _0809D83A - movs r4, 0 -_0809D83A: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, r5 - blt _0809D7F2 -_0809D844: - ldr r2, _0809D8B8 @ =gUnknown_8417DED - lsls r0, r6, 4 - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r5, 0xFF - str r5, [sp, 0x4] - movs r4, 0 - str r4, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x2 - mov r3, r8 - bl AddTextPrinterParameterized - adds r0, r6, 0x1 - lsls r0, 24 - ldr r2, _0809D8BC @ =gOtherText_Exit - lsrs r0, 20 - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - str r5, [sp, 0x4] - str r4, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x2 - mov r3, r8 - bl AddTextPrinterParameterized - movs r0, 0x10 - str r0, [sp] - mov r0, r9 - str r0, [sp, 0x4] - str r4, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - movs r0, 0 - mov r1, r9 - adds r2, r7, 0 - movs r3, 0xFF - bl sub_809CC18 - movs r0, 0 - bl ScheduleBgCopyTilemapToVram -_0809D8A8: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809D8B8: .4byte gUnknown_8417DED -_0809D8BC: .4byte gOtherText_Exit - thumb_func_end sub_809D764 - - thumb_func_start sub_809D8C0 -sub_809D8C0: @ 809D8C0 - push {lr} - ldr r3, _0809D8EC @ =gSpecialVar_Result - ldrh r2, [r3] - adds r1, r2, 0 - cmp r1, 0x7F - beq _0809D930 - ldr r0, _0809D8F0 @ =gSpecialVar_0x8005 - ldrh r0, [r0] - cmp r0, 0x1 - bne _0809D924 - cmp r1, 0x3 - beq _0809D928 - cmp r1, 0x4 - beq _0809D930 - cmp r1, 0 - bne _0809D8F8 - ldr r0, _0809D8F4 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x4 - bls _0809D904 - movs r0, 0x4 - b _0809D94E - .align 2, 0 -_0809D8EC: .4byte gSpecialVar_Result -_0809D8F0: .4byte gSpecialVar_0x8005 -_0809D8F4: .4byte gSpecialVar_0x8004 -_0809D8F8: - cmp r1, 0x1 - bne _0809D90C - ldr r0, _0809D908 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x5 - bls _0809D918 -_0809D904: - movs r0, 0x5 - b _0809D94E - .align 2, 0 -_0809D908: .4byte gSpecialVar_0x8004 -_0809D90C: - cmp r1, 0x2 - bne _0809D94C - ldr r0, _0809D91C @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x6 - bls _0809D920 -_0809D918: - movs r0, 0x6 - b _0809D94E - .align 2, 0 -_0809D91C: .4byte gSpecialVar_0x8004 -_0809D920: - movs r0, 0x7 - b _0809D94E -_0809D924: - cmp r1, 0x4 - bne _0809D92C -_0809D928: - movs r0, 0xFE - b _0809D94E -_0809D92C: - cmp r1, 0x5 - bne _0809D934 -_0809D930: - movs r0, 0x7F - b _0809D94E -_0809D934: - ldr r0, _0809D944 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r1, r0 - bcc _0809D948 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r0, 16 - b _0809D94E - .align 2, 0 -_0809D944: .4byte gSpecialVar_0x8004 -_0809D948: - ldrh r0, [r3] - b _0809D94E -_0809D94C: - movs r0, 0 -_0809D94E: - pop {r1} - bx r1 - thumb_func_end sub_809D8C0 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data_835B488.s b/data/data_835B488.s index e49b310a6..a909cfbff 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -1033,19 +1033,25 @@ gUnknown_83E0738:: @ 83E0738 gUnknown_83E0748:: @ 83E0748 .incbin "baserom.gba", 0x3E0748, 0x20 -gUnknown_83E0768:: @ 83E0768 - .incbin "baserom.gba", 0x3E0768, 0x818 +sMuseumFossilSprTemplate:: @ 83E0768 + .incbin "baserom.gba", 0x3E0768, 0x18 -gUnknown_83E0F80:: @ 83E0F80 - .incbin "baserom.gba", 0x3E0F80, 0x820 +gUnknown_83E7080:: + .incbin "baserom.gba", 0x3E0780, 0x800 -gUnknown_83E17A0:: @ 83E17A0 +sMuseumAerodactylSprPalette:: @ 83E0F80 + .incbin "baserom.gba", 0x3E0F80, 0x20 + +gUnknown_83E0FA0:: + .incbin "baserom.gba", 0x3E0FA0, 0x800 + +sMuseumKabutopsSprPalette:: @ 83E17A0 .incbin "baserom.gba", 0x3E17A0, 0x20 -gUnknown_83E17C0:: @ 83E17C0 +sMuseumKabutopsSprSheets:: @ 83E17C0 .incbin "baserom.gba", 0x3E17C0, 0x10 -gUnknown_83E17D0:: @ 83E17D0 +sMuseumAerodactylSprSheets:: @ 83E17D0 .incbin "baserom.gba", 0x3E17D0, 0x10 gUnknown_83E17E0:: @ 83E17E0 diff --git a/data/maps/PewterCity_Museum_1F/scripts.inc b/data/maps/PewterCity_Museum_1F/scripts.inc index 8a3bdd640..8d4f9dc6d 100644 --- a/data/maps/PewterCity_Museum_1F/scripts.inc +++ b/data/maps/PewterCity_Museum_1F/scripts.inc @@ -190,9 +190,9 @@ PewterCity_Museum_1F_EventScript_16A512:: @ 816A512 setvar VAR_0x8004, SPECIES_AERODACTYL setvar VAR_0x8005, 10 setvar VAR_0x8006, 3 - special sub_809D504 + special Special_OpenMuseumFossilPic msgbox gUnknown_8190945 - special sub_809D620 + special Special_CloseMuseumFossilPic releaseall end @@ -201,8 +201,8 @@ PewterCity_Museum_1F_EventScript_16A532:: @ 816A532 setvar VAR_0x8004, SPECIES_KABUTOPS setvar VAR_0x8005, 10 setvar VAR_0x8006, 3 - special sub_809D504 + special Special_OpenMuseumFossilPic msgbox gUnknown_8190975 - special sub_809D620 + special Special_CloseMuseumFossilPic releaseall end diff --git a/data/specials.inc b/data/specials.inc index 96d997597..ac15812e3 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -403,8 +403,8 @@ gSpecials:: @ 815FD60 def_special sub_8112364 def_special Special_GetMENewsJisanItemAndState def_special get_unknown_box_id - def_special sub_809D504 - def_special sub_809D620 + def_special Special_OpenMuseumFossilPic + def_special Special_CloseMuseumFossilPic def_special sub_812781C def_special sub_8127888 def_special sub_80803FC diff --git a/include/event_scripts.h b/include/event_scripts.h index 99b453c85..28058af81 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1168,4 +1168,7 @@ extern const u8 gText_SavingDontTurnOffThePower[]; extern const u8 gText_PlayerSavedTheGame[]; extern const u8 gText_DifferentGameFile[]; +// script_menu +extern const u8 EventScript_1A7AE0[]; + #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/field_effect.h b/include/field_effect.h index 70398313b..4afc5cace 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -21,5 +21,7 @@ void sub_8084784(u8 a0, u8 a1); void sub_8084F2C(u8 a0); void sub_80853CC(u8 a0); void sub_8083598(u8 a0); +void sub_8083A5C(struct Sprite * sprite, u8 spriteId); +u8 sub_8083970(u16 species, s16 x, s16 y, bool8 unused); #endif //GUARD_FIELD_EFFECTS_H diff --git a/include/quest_log.h b/include/quest_log.h index f5fd820b0..b7dcec871 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -25,7 +25,7 @@ void sub_8113550(u16, const u16 *); void sub_811539C(void); void sub_8115748(u16); u8 sub_8112CAC(void); -bool8 sub_81119D4(void (*func)(void)); +bool8 QuestLog_ScheduleRoutineIfNotInPlaybackMode(void (*func)(void)); void sub_8111F38(u16, u16); void sub_8111134(void); void DestroyHelpMessageWindow(u8 a0); diff --git a/include/script_menu.h b/include/script_menu.h index d3d04c65d..95eb30d74 100644 --- a/include/script_menu.h +++ b/include/script_menu.h @@ -10,7 +10,7 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 var3, u8 var4, u8 va bool8 ScriptMenu_YesNo(u8 var1, u8 var2); bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount); bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3); -bool32 ScrSpecial_CreatePCMenu(void); +bool8 ScrSpecial_CreatePCMenu(void); void ScriptMenu_DisplayPCStartupPrompt(void); bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void); diff --git a/include/strings.h b/include/strings.h index ee7536d9b..121a577a2 100644 --- a/include/strings.h +++ b/include/strings.h @@ -521,4 +521,14 @@ extern const u8 gUnknown_8418142[]; extern const u8 gUnknown_8418152[]; extern const u8 gUnknown_8418163[]; +// script_menu +extern const u8 gUnknown_8417B9F[]; +extern const u8 gUnknown_8417BAC[]; +extern const u8 gUnknown_8417BB6[]; +extern const u8 gUnknown_8417BBE[]; +extern const u8 gUnknown_8417BCB[]; +extern const u8 gUnknown_8417BD3[]; +extern const u8 gUnknown_8417DED[]; +extern const u8 gUnknown_81A508A[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index 584d283a0..5c3c5ccb7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -142,7 +142,6 @@ SECTIONS { 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); asm/script_pokemon_util_80A0058.o(.text); diff --git a/src/berry_powder.c b/src/berry_powder.c index 992e82522..6adf4a4f9 100644 --- a/src/berry_powder.c +++ b/src/berry_powder.c @@ -111,7 +111,7 @@ void sub_815F094(void) { struct WindowTemplate template; - if (sub_81119D4(sub_809D6D4) != TRUE) + if (QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) != TRUE) { template = SetWindowTemplateFields(0, 1, 1, 8, 3, 15, 32); gUnknown_203F464 = AddWindow(&template); diff --git a/src/field_specials.c b/src/field_specials.c index 867df4b94..d701a9145 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1064,7 +1064,7 @@ void Special_DrawElevatorCurrentFloorWindow(void) { const u8 *floorname; u32 strwidth; - if (sub_81119D4(sub_809D6D4) != TRUE) + if (QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) != TRUE) { sElevatorCurrentFloorWindowId = AddWindow(&sElevatorCurrentFloorWindowTemplate); TextWindow_SetStdFrame0_WithPal(sElevatorCurrentFloorWindowId, 0x21D, 0xD0); @@ -1137,7 +1137,7 @@ void Special_ListMenu(void) { u8 taskId; struct Task * task; - if (sub_81119D4(sub_809D6D4) != TRUE) + if (QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) != TRUE) { taskId = CreateTask(Task_CreateScriptListMenu, 8); task = &gTasks[taskId]; diff --git a/src/quest_log.c b/src/quest_log.c index ffced87ee..b5e333688 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -813,13 +813,13 @@ static bool8 sub_8110E68(struct UnkStruct_203AE98 * a0) return FALSE; switch (a0[i].unk_6) { - case 0: - case 1: - gUnknown_203AE08 = sub_8113D48(gUnknown_203AE08, &a0[i]); - break; - default: - gUnknown_203AE08 = sub_8113CC8(gUnknown_203AE08, &a0[i]); - break; + case 0: + case 1: + gUnknown_203AE08 = sub_8113D48(gUnknown_203AE08, &a0[i]); + break; + default: + gUnknown_203AE08 = sub_8113CC8(gUnknown_203AE08, &a0[i]); + break; } if (gUnknown_203AE08 == NULL) { @@ -1176,29 +1176,29 @@ static void sub_811175C(u8 a0, struct UnkStruct_203AE98 * a1) { switch (r4[0] & 0xFFF) { - case 0: - r4 = sub_8113D08(r4, &a1[r6]); - r6++; - break; - case 1: - case 2: - r4 = sub_8113D94(r4, &a1[r6]); - r6++; - break; - case 39: - r4 = sub_8113C20(r4, &a1[r6]); - r6++; - break; - case 41: - r4 = sub_8113C8C(r4, &a1[r6]); - r6++; - break; - default: - r4 = sub_8113A78(r4, &gUnknown_203AE0C[r9]); - if (r9 == 0) - sub_8113ABC(gUnknown_203AE0C[0]); - r9++; - break; + case 0: + r4 = sub_8113D08(r4, &a1[r6]); + r6++; + break; + case 1: + case 2: + r4 = sub_8113D94(r4, &a1[r6]); + r6++; + break; + case 39: + r4 = sub_8113C20(r4, &a1[r6]); + r6++; + break; + case 41: + r4 = sub_8113C8C(r4, &a1[r6]); + r6++; + break; + default: + r4 = sub_8113A78(r4, &gUnknown_203AE0C[r9]); + if (r9 == 0) + sub_8113ABC(gUnknown_203AE0C[0]); + r9++; + break; } if (r4 == NULL) break; @@ -1246,7 +1246,7 @@ void sub_81119C8(void) sub_8111914(); } -bool8 sub_81119D4(void (*a0)(void)) +bool8 QuestLog_ScheduleRoutineIfNotInPlaybackMode(void (*a0)(void)) { u8 taskId; @@ -1260,7 +1260,7 @@ bool8 sub_81119D4(void (*a0)(void)) taskId = CreateTask(sub_8111A34, 80); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - SetWordTaskArg(taskId, 14, (u32)a0); + SetWordTaskArg(taskId, 14, (uintptr_t)a0); return TRUE; } return FALSE; @@ -1273,25 +1273,25 @@ static void sub_8111A34(u8 taskId) switch (data[1]) { - case 0: - if (++data[0] == 0x7F) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gUnknown_203AE94.unk_0_6 = 2; - data[1]++; - } - break; - case 1: - if (!gPaletteFade.active) - { - gUnknown_3005E88 = 0; - routine = (void (*)(void)) GetWordTaskArg(taskId, 14); - if (routine != NULL) - routine(); - DestroyTask(taskId); - gUnknown_203AE8C = sub_8111914; - } - break; + case 0: + if (++data[0] == 0x7F) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gUnknown_203AE94.unk_0_6 = 2; + data[1]++; + } + break; + case 1: + if (!gPaletteFade.active) + { + gUnknown_3005E88 = 0; + routine = (void (*)(void)) GetWordTaskArg(taskId, 14); + if (routine != NULL) + routine(); + DestroyTask(taskId); + gUnknown_203AE8C = sub_8111914; + } + break; } } @@ -1431,15 +1431,15 @@ static void sub_8111D90(u8 a0) { switch (i) { - default: - y = 1; - break; - case 0: - y = 0; - break; - case 5: - y = 2; - break; + default: + y = 1; + break; + case 0: + y = 0; + break; + case 5: + y = 2; + break; } // r6 = y * 32 @@ -1563,46 +1563,46 @@ static void sub_81120AC(u8 taskId) switch (data[0]) { - case 0: - gDisableMapMusicChangeOnMapLoad = 0; - Overworld_PlaySpecialMapMusic(); - sub_811229C(); - FillWindowPixelRect(gUnknown_203ADFE[0], 0xF, 0, 0, gUnknown_845661C[0].width * 8, gUnknown_845661C[0].height * 8); - data[0]++; - break; - case 1: - if (sub_81121D8(taskId)) + case 0: + gDisableMapMusicChangeOnMapLoad = 0; + Overworld_PlaySpecialMapMusic(); + sub_811229C(); + FillWindowPixelRect(gUnknown_203ADFE[0], 0xF, 0, 0, gUnknown_845661C[0].width * 8, gUnknown_845661C[0].height * 8); + data[0]++; + break; + case 1: + if (sub_81121D8(taskId)) + { + for (i = 0; i < 3; i++) { - for (i = 0; i < 3; i++) - { - ClearWindowTilemap(gUnknown_203ADFE[i]); - CopyWindowToVram(gUnknown_203ADFE[i], 1); - RemoveWindow(gUnknown_203ADFE[i]); - } - data[1] = 0; - data[0]++; + ClearWindowTilemap(gUnknown_203ADFE[i]); + CopyWindowToVram(gUnknown_203ADFE[i], 1); + RemoveWindow(gUnknown_203ADFE[i]); } - break; - case 2: - if (data[1] < 32) - data[1]++; - else - data[0]++; - break; - default: - if (gUnknown_203AE94.unk_0_6 == 1) - sub_8098110(1); - CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400); - Free(gUnknown_203AE90); - gUnknown_203AE94 = (struct UnkStruct_203AE94){}; - sub_80696C0(); - ScriptContext2_Disable(); - gTextFlags.autoScroll = FALSE; - gUnknown_2036E28 = 0; - sub_8082740(0); - gHelpSystemEnabled = TRUE; - DestroyTask(taskId); - break; + data[1] = 0; + data[0]++; + } + break; + case 2: + if (data[1] < 32) + data[1]++; + else + data[0]++; + break; + default: + if (gUnknown_203AE94.unk_0_6 == 1) + sub_8098110(1); + CpuCopy16(gUnknown_203AE90, gPlttBufferUnfaded, 0x400); + Free(gUnknown_203AE90); + gUnknown_203AE94 = (struct UnkStruct_203AE94){}; + sub_80696C0(); + ScriptContext2_Disable(); + gTextFlags.autoScroll = FALSE; + gUnknown_2036E28 = 0; + sub_8082740(0); + gHelpSystemEnabled = TRUE; + DestroyTask(taskId); + break; } } @@ -1834,14 +1834,14 @@ static void sub_8112888(u8 a0) { switch (a0) { - case 1: - if (gUnknown_3005E88 == 1) - gUnknown_3005E88 = 3; - break; - case 2: - if (gUnknown_3005E88 == 3) - gUnknown_3005E88 = 1; - break; + case 1: + if (gUnknown_3005E88 == 1) + gUnknown_3005E88 = 3; + break; + case 2: + if (gUnknown_3005E88 == 3) + gUnknown_3005E88 = 1; + break; } } @@ -1851,24 +1851,24 @@ void sub_81128BC(u8 a0) switch (a0) { - case 1: - if (r1 == 1) - gUnknown_3005E88 = 3; - else if (r1 == 2) - { - gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A; - gUnknown_3005E94[sQuestLogIdx].unk_6 = 3; - sQuestLogIdx++; - gUnknown_203B01A = 0; - gUnknown_3005E88 = 4; - } - break; - case 2: - if (r1 == 1) - gUnknown_3005E88 = 1; - else if (r1 == 2) - gUnknown_3005E88 = 2; - break; + case 1: + if (r1 == 1) + gUnknown_3005E88 = 3; + else if (r1 == 2) + { + gUnknown_3005E94[sQuestLogIdx].unk_4 = gUnknown_203B01A; + gUnknown_3005E94[sQuestLogIdx].unk_6 = 3; + sQuestLogIdx++; + gUnknown_203B01A = 0; + gUnknown_3005E88 = 4; + } + break; + case 2: + if (r1 == 1) + gUnknown_3005E88 = 1; + else if (r1 == 2) + gUnknown_3005E88 = 2; + break; } } @@ -1878,64 +1878,64 @@ static void sub_8112940(u8 a0, struct UnkStruct_203AE98 *a1, u16 a2) switch (a0) { - default: - gUnknown_3005E88 = 0; - break; + default: + gUnknown_3005E88 = 0; + break; + case 1: + gUnknown_3005E94 = a1; + sNumQuestLogs = a2 / 8; + for (i = 0; i < 0x40; i++) + { + gUnknown_203AF9A[i][0] |= 0xFF; + gUnknown_203AF9A[i][1] |= 0xFF; + } + sQuestLogIdx = 0; + gUnknown_203B01C = 0; + gUnknown_3005E90 = (struct UnkStruct_3005E90){}; + gUnknown_203B01A = gUnknown_3005E94[sQuestLogIdx].unk_4; + gUnknown_203AF9A[0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3; + gUnknown_203AF9A[0][1] = 0xFF; + gUnknown_3005E88 = 1; + break; + case 2: + gUnknown_3005E94 = a1; + sNumQuestLogs = a2 / 8; + for (i = 0; i < sNumQuestLogs; i++) + { + gUnknown_3005E94[i] = (struct UnkStruct_203AE98){ 0, 0, 0, 0, 0xFFFF, 0xFF }; + } + sQuestLogIdx = 0; + gUnknown_203B01A = 0; + gUnknown_3005E94[sQuestLogIdx].unk_4 = 0; + gUnknown_3005E94[sQuestLogIdx].unk_6 = 0; + gUnknown_3005E94[sQuestLogIdx].unk_0 = 0; + switch (GetPlayerFacingDirection()) + { + case 0: case 1: - gUnknown_3005E94 = a1; - sNumQuestLogs = a2 / 8; - for (i = 0; i < 0x40; i++) - { - gUnknown_203AF9A[i][0] |= 0xFF; - gUnknown_203AF9A[i][1] |= 0xFF; - } - sQuestLogIdx = 0; - gUnknown_203B01C = 0; - gUnknown_3005E90 = (struct UnkStruct_3005E90){}; - gUnknown_203B01A = gUnknown_3005E94[sQuestLogIdx].unk_4; - gUnknown_203AF9A[0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3; - gUnknown_203AF9A[0][1] = 0xFF; - gUnknown_3005E88 = 1; + gUnknown_3005E94[sQuestLogIdx].unk_3 = 0; + break; + case 4: + gUnknown_3005E94[sQuestLogIdx].unk_3 = 3; break; case 2: - gUnknown_3005E94 = a1; - sNumQuestLogs = a2 / 8; - for (i = 0; i < sNumQuestLogs; i++) - { - gUnknown_3005E94[i] = (struct UnkStruct_203AE98){ 0, 0, 0, 0, 0xFFFF, 0xFF }; - } - sQuestLogIdx = 0; - gUnknown_203B01A = 0; - gUnknown_3005E94[sQuestLogIdx].unk_4 = 0; - gUnknown_3005E94[sQuestLogIdx].unk_6 = 0; - gUnknown_3005E94[sQuestLogIdx].unk_0 = 0; - switch (GetPlayerFacingDirection()) - { - case 0: - case 1: - gUnknown_3005E94[sQuestLogIdx].unk_3 = 0; - break; - case 4: - gUnknown_3005E94[sQuestLogIdx].unk_3 = 3; - break; - case 2: - gUnknown_3005E94[sQuestLogIdx].unk_3 = 1; - break; - case 3: - gUnknown_3005E94[sQuestLogIdx].unk_3 = 2; - break; - } - gUnknown_203B01C = 0; - sQuestLogIdx++; - gUnknown_3005E94[sQuestLogIdx].unk_4 = 0; - gUnknown_3005E94[sQuestLogIdx].unk_6 = 2; - gUnknown_3005E94[sQuestLogIdx].unk_0 = 0; - gUnknown_3005E94[sQuestLogIdx].unk_1 = 0; - gUnknown_3005E94[sQuestLogIdx].unk_2 = 0; - gUnknown_3005E94[sQuestLogIdx].unk_3 = 0; - sQuestLogIdx++; - gUnknown_3005E88 = 2; + gUnknown_3005E94[sQuestLogIdx].unk_3 = 1; break; + case 3: + gUnknown_3005E94[sQuestLogIdx].unk_3 = 2; + break; + } + gUnknown_203B01C = 0; + sQuestLogIdx++; + gUnknown_3005E94[sQuestLogIdx].unk_4 = 0; + gUnknown_3005E94[sQuestLogIdx].unk_6 = 2; + gUnknown_3005E94[sQuestLogIdx].unk_0 = 0; + gUnknown_3005E94[sQuestLogIdx].unk_1 = 0; + gUnknown_3005E94[sQuestLogIdx].unk_2 = 0; + gUnknown_3005E94[sQuestLogIdx].unk_3 = 0; + sQuestLogIdx++; + gUnknown_3005E88 = 2; + break; } } @@ -1944,67 +1944,67 @@ void sub_8112B3C(void) { switch (gUnknown_3005E88) { - case 0: - break; - case 1: - if (sub_8112CEC()) + case 0: + break; + case 1: + if (sub_8112CEC()) + { + if (gUnknown_203B01A != 0) + gUnknown_203B01A--; + else { - if (gUnknown_203B01A != 0) - gUnknown_203B01A--; - else + while (1) { - while (1) + switch (gUnknown_3005E94[sQuestLogIdx].unk_6) { - switch (gUnknown_3005E94[sQuestLogIdx].unk_6) - { - case 0: - gUnknown_203AF9A[gUnknown_3005E94[sQuestLogIdx].unk_0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3; - break; - case 1: - gUnknown_203AF9A[gUnknown_3005E94[sQuestLogIdx].unk_0][1] = gUnknown_3005E94[sQuestLogIdx].unk_3; - break; - case 2: - *(u32 *)&gUnknown_3005E90 = ((gUnknown_3005E94[sQuestLogIdx].unk_3 << 24) | (gUnknown_3005E94[sQuestLogIdx].unk_2 << 16) | (gUnknown_3005E94[sQuestLogIdx].unk_1 << 8) | (gUnknown_3005E94[sQuestLogIdx].unk_0 << 0)); - break; - case 3: - gUnknown_3005E88 = 3; - break; - case 0xFE: - break; - case 0xFF: - gUnknown_3005E88 = 0; - break; - } - if (gUnknown_3005E88 == 0) - break; - if (++sQuestLogIdx >= sNumQuestLogs) - { - gUnknown_3005E88 = 0; - break; - } - gUnknown_203B01A = gUnknown_3005E94[sQuestLogIdx].unk_4; - if (gUnknown_3005E88 == 3) - break; - if (gUnknown_203B01A == 0) - continue; - if (gUnknown_203B01A == 0xFFFF) - break; - } + case 0: + gUnknown_203AF9A[gUnknown_3005E94[sQuestLogIdx].unk_0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3; + break; + case 1: + gUnknown_203AF9A[gUnknown_3005E94[sQuestLogIdx].unk_0][1] = gUnknown_3005E94[sQuestLogIdx].unk_3; + break; + case 2: + *(u32 *)&gUnknown_3005E90 = ((gUnknown_3005E94[sQuestLogIdx].unk_3 << 24) | (gUnknown_3005E94[sQuestLogIdx].unk_2 << 16) | (gUnknown_3005E94[sQuestLogIdx].unk_1 << 8) | (gUnknown_3005E94[sQuestLogIdx].unk_0 << 0)); + break; + case 3: + gUnknown_3005E88 = 3; + break; + case 0xFE: + break; + case 0xFF: + gUnknown_3005E88 = 0; + break; + } + if (gUnknown_3005E88 == 0) + break; + if (++sQuestLogIdx >= sNumQuestLogs) + { + gUnknown_3005E88 = 0; + break; + } + gUnknown_203B01A = gUnknown_3005E94[sQuestLogIdx].unk_4; + if (gUnknown_3005E88 == 3) + break; + if (gUnknown_203B01A == 0) + continue; + if (gUnknown_203B01A == 0xFFFF) + break; } } - else if (sQuestLogIdx >= sNumQuestLogs) - gUnknown_3005E88 = 0; - break; - case 2: - if (ScriptContext2_IsEnabled() != 1) - gUnknown_203B01A++; - if (sQuestLogIdx >= sNumQuestLogs) - gUnknown_3005E88 = 0; - break; - case 3: - break; - case 4: - break; + } + else if (sQuestLogIdx >= sNumQuestLogs) + gUnknown_3005E88 = 0; + break; + case 2: + if (ScriptContext2_IsEnabled() != 1) + gUnknown_203B01A++; + if (sQuestLogIdx >= sNumQuestLogs) + gUnknown_3005E88 = 0; + break; + case 3: + break; + case 4: + break; } } #else @@ -2203,15 +2203,15 @@ u8 sub_8112CAC(void) { switch (gUnknown_3005E88) { - case 0: - default: - return 0; - case 1: - case 3: - return 1; - case 2: - case 4: - return 2; + case 0: + default: + return 0; + case 1: + case 3: + return 1; + case 2: + case 4: + return 2; } } @@ -2669,27 +2669,27 @@ void BufferStreakTrainerText(void) switch (gSpecialVar_0x8004) { - case 0: - r2 = 0; - r3 = 0; - break; - case 1: - case 2: - case 3: - case 7: - break; - case 4: - r2 = 1; - r3 = 0; - break; - case 5: - r2 = 0; - r3 = 1; - break; - case 6: - r2 = 2; - r3 = 1; - break; + case 0: + r2 = 0; + r3 = 0; + break; + case 1: + case 2: + case 3: + case 7: + break; + case 4: + r2 = 1; + r3 = 0; + break; + case 5: + r2 = 0; + r3 = 1; + break; + case 6: + r2 = 2; + r3 = 1; + break; } sub_8113414(&gSaveBlock2Ptr->linkBattleRecords, r3, r2); } @@ -2702,18 +2702,18 @@ static void sub_8113414(struct LinkBattleRecords * a0, u8 a1, u8 a2) { switch (a2) { - case 0: - StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); - break; - case 1: - StringCopy(gStringVar1, gUnknown_84178D0); // LT. SURGE - break; - case 2: - StringCopy(gStringVar1, gUnknown_84178DA); // KOGA - break; - default: - StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); - break; + case 0: + StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); + break; + case 1: + StringCopy(gStringVar1, gUnknown_84178D0); // LT. SURGE + break; + case 2: + StringCopy(gStringVar1, gUnknown_84178DA); // KOGA + break; + default: + StringCopy(gStringVar1, gSaveBlock1Ptr->rivalName); + break; } } else @@ -3703,48 +3703,48 @@ static const u16 *sub_8113FBC(const u16 *a0) switch (ItemId_GetPocket(r5[0])) { - case POCKET_ITEMS: - case POCKET_POKE_BALLS: - case POCKET_BERRY_POUCH: - StringCopy(gStringVar1, ItemId_GetName(r5[0])); - if (r5[0] == ITEM_ESCAPE_ROPE) - { - sub_80C4DF8(gStringVar2, r5[2]); - StringExpandPlaceholders(gStringVar4, gUnknown_841AFA6); - } - else if (r5[1] != 0xFFFF) - { - QuestLog_AutoGetSpeciesName(r5[1], gStringVar2, 0); - StringExpandPlaceholders(gStringVar4, gUnknown_841A1E7); - } + case POCKET_ITEMS: + case POCKET_POKE_BALLS: + case POCKET_BERRY_POUCH: + StringCopy(gStringVar1, ItemId_GetName(r5[0])); + if (r5[0] == ITEM_ESCAPE_ROPE) + { + sub_80C4DF8(gStringVar2, r5[2]); + StringExpandPlaceholders(gStringVar4, gUnknown_841AFA6); + } + else if (r5[1] != 0xFFFF) + { + QuestLog_AutoGetSpeciesName(r5[1], gStringVar2, 0); + StringExpandPlaceholders(gStringVar4, gUnknown_841A1E7); + } + else + { + StringExpandPlaceholders(gStringVar4, gUnknown_841A210); + } + break; + case POCKET_KEY_ITEMS: + StringCopy(gStringVar1, ItemId_GetName(r5[0])); + StringExpandPlaceholders(gStringVar4, gUnknown_841A220); + break; + case POCKET_TM_CASE: + QuestLog_AutoGetSpeciesName(r5[1], gStringVar1, 0); + StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(r5[0])]); + if (r5[2] != 0xFFFF) + { + StringCopy(gStringVar3, gMoveNames[r5[2]]); + if (r5[0] > ITEM_TM50) + StringExpandPlaceholders(gStringVar4, gUnknown_841A965); else - { - StringExpandPlaceholders(gStringVar4, gUnknown_841A210); - } - break; - case POCKET_KEY_ITEMS: - StringCopy(gStringVar1, ItemId_GetName(r5[0])); - StringExpandPlaceholders(gStringVar4, gUnknown_841A220); - break; - case POCKET_TM_CASE: - QuestLog_AutoGetSpeciesName(r5[1], gStringVar1, 0); - StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(r5[0])]); - if (r5[2] != 0xFFFF) - { - StringCopy(gStringVar3, gMoveNames[r5[2]]); - if (r5[0] > ITEM_TM50) - StringExpandPlaceholders(gStringVar4, gUnknown_841A965); - else - StringExpandPlaceholders(gStringVar4, gUnknown_841A277); - } + StringExpandPlaceholders(gStringVar4, gUnknown_841A277); + } + else + { + if (r5[0] > ITEM_TM50) + StringExpandPlaceholders(gStringVar4, gUnknown_841A938); else - { - if (r5[0] > ITEM_TM50) - StringExpandPlaceholders(gStringVar4, gUnknown_841A938); - else - StringExpandPlaceholders(gStringVar4, gUnknown_841A255); - } - break; + StringExpandPlaceholders(gStringVar4, gUnknown_841A255); + } + break; } return r5 + 3; } @@ -4442,11 +4442,11 @@ static bool8 sub_8114FBC(u16 a0) { switch (a0) { - case 0x96: - case 0x8F ... 0x92: - case 0xF9 ... 0xFA: - case 0x19A: - return TRUE; + case 0x96: + case 0x8F ... 0x92: + case 0xF9 ... 0xFA: + case 0x19A: + return TRUE; } return FALSE; } @@ -4495,22 +4495,22 @@ static const u16 *sub_81150CC(const u16 *a0) switch (gUnknown_203B044.unk_2) { - case 0: - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gSaveBlock1Ptr->rivalName); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A2E1); - break; - case 1: - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock1Ptr->rivalName); - QuestLog_AutoGetSpeciesName(a0[2], NULL, 1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gSaveBlock2Ptr->playerName); - QuestLog_AutoGetSpeciesName(a0[3], NULL, 3); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A312); - break; - case 2: - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_8456AD8[r5[0]]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A349); - break; + case 0: + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gSaveBlock1Ptr->rivalName); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A2E1); + break; + case 1: + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock1Ptr->rivalName); + QuestLog_AutoGetSpeciesName(a0[2], NULL, 1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gSaveBlock2Ptr->playerName); + QuestLog_AutoGetSpeciesName(a0[3], NULL, 3); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A312); + break; + case 2: + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_8456AD8[r5[0]]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_841A349); + break; } return (const u16 *)(r5 + 2); } diff --git a/src/scrcmd.c b/src/scrcmd.c index 2a6aff709..b54e08faa 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1835,7 +1835,7 @@ bool8 ScrCmd_showmoneybox(struct ScriptContext *ctx) u8 y = ScriptReadByte(ctx); u8 ignore = ScriptReadByte(ctx); - if (!ignore && sub_81119D4(sub_809D6D4) != TRUE) + if (!ignore && QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) != TRUE) DrawMoneyBox(GetMoney(&gSaveBlock1Ptr->money), x, y); return FALSE; } @@ -1865,7 +1865,7 @@ bool8 ScrCmd_showcoinsbox(struct ScriptContext *ctx) u8 x = ScriptReadByte(ctx); u8 y = ScriptReadByte(ctx); - if (sub_81119D4(sub_809D6D4) != TRUE) + if (QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) != TRUE) ShowCoinsWindow(GetCoins(), x, y); return FALSE; } diff --git a/src/script_menu.c b/src/script_menu.c index d375ece08..4bc7bfec9 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -1,7 +1,6 @@ #include "global.h" #include "palette.h" #include "text.h" -#include "list_menu.h" #include "menu.h" #include "task.h" #include "sound.h" @@ -11,7 +10,12 @@ #include "new_menu_helpers.h" #include "event_data.h" #include "script.h" +#include "strings.h" +#include "string_util.h" +#include "field_effect.h" +#include "event_scripts.h" #include "constants/songs.h" +#include "constants/species.h" struct MultichoiceListStruct { @@ -27,6 +31,9 @@ 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_809CFDC(u8 taskId); +void sub_809D070(void); +bool8 sub_809D404(void); void sub_809D6B0(u8 windowId); u8 CreateWindowFromRect(u8 left, u8 top, u8 width, u8 height); @@ -34,21 +41,27 @@ extern const u8 *const gUnknown_83E072C[]; extern const u8 *const gUnknown_83E0738[]; extern const u8 *const gUnknown_83E0748[]; extern const struct MultichoiceListStruct gUnknown_83E04B0[]; +extern const struct SpriteSheet sMuseumKabutopsSprSheets[]; +extern const u16 sMuseumKabutopsSprPalette[]; +extern const struct SpriteSheet sMuseumAerodactylSprSheets[]; +extern const u16 sMuseumAerodactylSprPalette[]; +extern const struct SpriteTemplate sMuseumFossilSprTemplate; +extern const u8 *const gUnknown_83E17E0[]; u16 sub_809C954(const u8 *str) { return (GetStringWidth(1, str, 0) + 7) / 8; } -u8 sub_809C974(const struct ListMenuItem * items, u8 count) +u8 sub_809C974(const struct MenuAction * items, u8 count) { u16 i; - u8 width = sub_809C954(items[0].label); + u8 width = sub_809C954(items[0].text); u8 tmp; for (i = 1; i < count; i++) { - tmp = sub_809C954(items[i].label); + tmp = sub_809C954(items[i].text); if (width < tmp) width = tmp; } @@ -84,7 +97,7 @@ void sub_809CA64(u8 left, u8 top, u8 mcId, u8 ignoreBpress, u8 initPos) u8 windowId; const struct MenuAction * list; - if ((ignoreBpress & 2) || sub_81119D4(sub_809D6D4) != TRUE) + if ((ignoreBpress & 2) || QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) != TRUE) { ignoreBpress &= 1; count = gUnknown_83E04B0[mcId].count; @@ -218,7 +231,7 @@ bool8 ScriptMenu_YesNo(u8 unused, u8 stuff) if (FuncIsActiveTask(task_yes_no_maybe) == TRUE) return FALSE; gSpecialVar_Result = 255; - if (!sub_81119D4(sub_809D6D4)) + if (!QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4)) { DisplayYesNoMenuDefaultYes(); CreateTask(task_yes_no_maybe, 80); @@ -261,3 +274,406 @@ void task_yes_no_maybe(u8 taskId) EnableBothScriptContexts(); } } + +bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount) +{ + const struct MenuAction * list; + u8 count; + u8 width; + u8 rowCount; + u8 taskId; + if (FuncIsActiveTask(sub_809CFDC) == TRUE) + return FALSE; + gSpecialVar_Result = 255; + if (QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) != TRUE) + { + list = gUnknown_83E04B0[multichoiceId].list; + count = gUnknown_83E04B0[multichoiceId].count; + width = sub_809C974(list, count) + 1; + rowCount = count / columnCount; + taskId = CreateTask(sub_809CFDC, 80); + gTasks[taskId].data[4] = a4; + gTasks[taskId].data[6] = CreateWindowFromRect(left, top, width * columnCount, rowCount * 2); + SetStdWindowBorderStyle(gTasks[taskId].data[6], FALSE); + MultichoiceGrid_PrintItems(gTasks[taskId].data[6], 1, width * 8, 16, columnCount, rowCount, list); + MultichoiceGrid_InitCursor(gTasks[taskId].data[6], 1, 0, 1, width * 8, columnCount, rowCount, 0); + ScheduleBgCopyTilemapToVram(0); + } + return TRUE; +} + +void sub_809CFDC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + s8 input = Menu_ProcessInputGridLayout(); + 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(); +} + +bool8 ScrSpecial_CreatePCMenu(void) +{ + if (FuncIsActiveTask(sub_809CC98) == TRUE) + return FALSE; + gSpecialVar_Result = 255; + sub_809D070(); + return TRUE; +} + +void sub_809D070(void) +{ + u8 cursorWidth = GetMenuCursorDimensionByFont(2, 0); + u8 height = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); + u8 windowWidth; + u8 nitems; + u8 windowId; + switch (sub_809C954(gUnknown_8417BB6)) + { + default: + if (FlagGet(FLAG_SYS_POKEDEX_GET)) + windowWidth = 14; + else + windowWidth = 13; + break; + case 9: + case 10: + windowWidth = 14; + break; + } + if (FlagGet(FLAG_SYS_GAME_CLEAR)) + { + nitems = 5; + windowId = CreateWindowFromRect(0, 0, windowWidth, 10); + SetStdWindowBorderStyle(windowId, FALSE); + AddTextPrinterParameterized(windowId, 2, gUnknown_8417BD3, cursorWidth, 34, 0xFF, NULL); + AddTextPrinterParameterized(windowId, 2, gUnknown_8417BBE, cursorWidth, 50, 0xFF, NULL); + AddTextPrinterParameterized(windowId, 2, gUnknown_8417BCB, cursorWidth, 66, 0xFF, NULL); + } + else + { + if (FlagGet(FLAG_SYS_POKEDEX_GET)) + nitems = 4; + else + nitems = 3; + windowId = CreateWindowFromRect(0, 0, windowWidth, nitems * 2); + SetStdWindowBorderStyle(windowId, FALSE); + if (FlagGet(FLAG_SYS_POKEDEX_GET)) + AddTextPrinterParameterized(windowId, 2, gUnknown_8417BD3, cursorWidth, 34, 0xFF, NULL); + AddTextPrinterParameterized(windowId, 2, gUnknown_8417BCB, cursorWidth, 2 + 16 * (nitems - 1), 0xFF, NULL); + } + if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC)) + AddTextPrinterParameterized(windowId, 2, gUnknown_8417BAC, cursorWidth, 2 , 0xFF, NULL); + else + AddTextPrinterParameterized(windowId, 2, gUnknown_8417B9F, cursorWidth, 2 , 0xFF, NULL); + StringExpandPlaceholders(gStringVar4, gUnknown_8417BB6); + Menu_PrintFormatIntlPlayerName(windowId, gStringVar4, cursorWidth, 18); + Menu_InitCursor(windowId, 2, 0, 2, 16, nitems, 0); + sub_809CC18(FALSE, nitems, windowId, 0xFF); + ScheduleBgCopyTilemapToVram(0); +} + +void ScriptMenu_DisplayPCStartupPrompt(void) +{ + sub_80F7768(0, TRUE); + AddTextPrinterParameterized2(0, 2, gUnknown_81A508A, 0, NULL, 2, 1, 3); +} + +void sub_809D288(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[0]++; + break; + case 1: + break; + case 2: + sub_8083A5C(&gSprites[task->data[2]], task->data[2]); + task->data[0]++; + break; + case 3: + sub_809D6B0(task->data[5]); + DestroyTask(taskId); + break; + } +} + +bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y) +{ + u8 spriteId; + u8 taskId; + if (QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) == TRUE) + return TRUE; + if (FindTaskIdByFunc(sub_809D288) != 0xFF) + return FALSE; + spriteId = sub_8083970(species, 8 * x + 40, 8 * y + 40, FALSE); + taskId = CreateTask(sub_809D288, 80); + gTasks[taskId].data[5] = CreateWindowFromRect(x, y, 8, 8); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = species; + gTasks[taskId].data[2] = spriteId; + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].oam.priority = 0; + SetStdWindowBorderStyle(gTasks[taskId].data[5], TRUE); + ScheduleBgCopyTilemapToVram(0); + return TRUE; +} + +bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void) +{ + u8 taskId = FindTaskIdByFunc(sub_809D288); + if (taskId == 0xFF) + return NULL; + gTasks[taskId].data[0]++; + return sub_809D404; +} + +bool8 sub_809D404(void) +{ + if (FindTaskIdByFunc(sub_809D288) == 0xFF) + return TRUE; + else + return FALSE; +} + +void sub_809D424(void) +{ + u8 taskId = FindTaskIdByFunc(sub_809D288); + struct Task * task; + if (taskId != 0xFF) + { + task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + case 1: + case 2: + sub_8083A5C(&gSprites[task->data[2]], task->data[2]); + sub_809D6B0(task->data[5]); + DestroyTask(taskId); + break; + case 3: + sub_809D6B0(task->data[5]); + DestroyTask(taskId); + break; + } + } +} + +void sub_809D494(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + task->data[0]++; + break; + case 1: + break; + case 2: + DestroySprite(&gSprites[task->data[2]]); + FreeSpriteTilesByTag(7000); + task->data[0]++; + break; + case 3: + sub_809D6B0(task->data[5]); + DestroyTask(taskId); + break; + } +} + +bool8 Special_OpenMuseumFossilPic(void) +{ + u8 spriteId; + u8 taskId; + if (QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) == TRUE) + return TRUE; + if (FindTaskIdByFunc(sub_809D494) != 0xFF) + return FALSE; + if (gSpecialVar_0x8004 == SPECIES_KABUTOPS) + { + LoadSpriteSheets(sMuseumKabutopsSprSheets); + LoadPalette(sMuseumKabutopsSprPalette, 0x1D0, 0x20); + } + else if (gSpecialVar_0x8004 == SPECIES_AERODACTYL) + { + LoadSpriteSheets(sMuseumAerodactylSprSheets); + LoadPalette(sMuseumAerodactylSprPalette, 0x1D0, 0x20); + } + else + { + return FALSE; + } + spriteId = CreateSprite(&sMuseumFossilSprTemplate, gSpecialVar_0x8005 * 8 + 40, gSpecialVar_0x8006 * 8 + 40, 0); + gSprites[spriteId].oam.paletteNum = 13; + taskId = CreateTask(sub_809D494, 80); + gTasks[taskId].data[5] = CreateWindowFromRect(gSpecialVar_0x8005, gSpecialVar_0x8006, 8, 8); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[2] = spriteId; + SetStdWindowBorderStyle(gTasks[taskId].data[5], TRUE); + ScheduleBgCopyTilemapToVram(0); + return TRUE; +} + +bool8 Special_CloseMuseumFossilPic(void) +{ + u8 taskId = FindTaskIdByFunc(sub_809D494); + if (taskId == 0xFF) + return FALSE; + gTasks[taskId].data[0]++; + return TRUE; +} + +u8 CreateWindowFromRect(u8 left, u8 top, u8 width, u8 height) +{ + struct WindowTemplate template = SetWindowTemplateFields(0, left + 1, top + 1, width, height, 15, 0x038); + u8 windowId = AddWindow(&template); + PutWindowTilemap(windowId); + return windowId; +} + +void sub_809D6B0(u8 windowId) +{ + ClearWindowTilemap(windowId); + ClearStdWindowAndFrameToTransparent(windowId, TRUE); + RemoveWindow(windowId); +} + +void sub_809D6D4(void) +{ + u8 taskId; + s16 *data; + ScriptContext1_SetupScript(EventScript_1A7AE0); + taskId = FindTaskIdByFunc(sub_809D288); + if (taskId != 0xFF) + { + data = gTasks[taskId].data; + if (data[0] < 2) + sub_8083A5C(&gSprites[data[2]], data[2]); + } + taskId = FindTaskIdByFunc(sub_809D494); + if (taskId != 0xFF) + { + data = gTasks[taskId].data; + if (data[0] < 2) + { + DestroySprite(&gSprites[data[2]]); + FreeSpriteTilesByTag(7000); + } + } +} + +void sub_809D764(void) +{ + u8 r4; + u8 top; + u8 nitems; + u8 cursorWidth; + u8 fontHeight; + u8 windowId; + u8 i; + gSpecialVar_Result = 255; + if (QuestLog_ScheduleRoutineIfNotInPlaybackMode(sub_809D6D4) != TRUE) + { + if (gSpecialVar_0x8005 == 1) + { + if (gSpecialVar_0x8004 < 5) + r4 = 5; + else + r4 = 4; + nitems = 5; + top = 2; + } + else + { + r4 = 0; + nitems = 6; + top = 0; + } + cursorWidth = GetMenuCursorDimensionByFont(2, 0); + fontHeight = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); + windowId = CreateWindowFromRect(17, top, 11, nitems * 2); + SetStdWindowBorderStyle(windowId, FALSE); + for (i = 0; i < nitems - 2; i++) + { + if (r4 != gSpecialVar_0x8004) + AddTextPrinterParameterized(windowId, 2, gUnknown_83E17E0[r4], cursorWidth, i * 16 + 2, 0xFF, NULL); + else + i--; + r4++; + if (r4 == 8) + r4 = 0; + } + AddTextPrinterParameterized(windowId, 2, gUnknown_8417DED, cursorWidth, i * 16 + 2, 0xFF, NULL); + i++; + AddTextPrinterParameterized(windowId, 2, gOtherText_Exit, cursorWidth, i * 16 + 2, 0xFF, NULL); + Menu_InitCursor(windowId, 2, 0, 2, 16, nitems, 0); + sub_809CC18(FALSE, nitems, windowId, 0xFF); + ScheduleBgCopyTilemapToVram(0); + } +} + +u16 sub_809D8C0(void) +{ + if (gSpecialVar_Result == 127) + return 127; + if (gSpecialVar_0x8005 == 1) + { + if (gSpecialVar_Result == 3) + { + return 254; + } + else if (gSpecialVar_Result == 4) + { + return 127; + } + else if (gSpecialVar_Result == 0) + { + if (gSpecialVar_0x8004 > 4) + return 4; + else + return 5; + } + else if (gSpecialVar_Result == 1) + { + if (gSpecialVar_0x8004 > 5) + return 5; + else + return 6; + } + else if (gSpecialVar_Result == 2) + { + if (gSpecialVar_0x8004 > 6) + return 6; + else + return 7; + } + } + else + { + if (gSpecialVar_Result == 4) + return 254; + else if (gSpecialVar_Result == 5) + return 127; + else if (gSpecialVar_Result >= gSpecialVar_0x8004) + return gSpecialVar_Result + 1; + else + return gSpecialVar_Result; + } + return 0; +} |