diff options
-rw-r--r-- | asm/decoration.s | 847 | ||||
-rw-r--r-- | include/decoration.h | 69 | ||||
-rw-r--r-- | include/menu.h | 6 | ||||
-rw-r--r-- | include/script.h | 1 | ||||
-rw-r--r-- | include/task.h | 12 | ||||
-rw-r--r-- | ld_script.txt | 3 | ||||
-rw-r--r-- | src/decoration.c | 267 |
7 files changed, 373 insertions, 832 deletions
diff --git a/asm/decoration.s b/asm/decoration.s index 221c749c5..59fb0f923 100644 --- a/asm/decoration.s +++ b/asm/decoration.s @@ -6,788 +6,7 @@ .text - thumb_func_start sub_80FE1DC -sub_80FE1DC: @ 80FE1DC - push {lr} - sub sp, 0x8 - bl sub_80FE2B4 - movs r0, 0 - movs r1, 0 - movs r2, 0xA - movs r3, 0x9 - bl MenuDrawTextWindow - ldr r3, _080FE218 @ =gUnknown_083EC604 - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0x4 - bl PrintMenuItems - ldr r0, _080FE21C @ =gUnknown_020388D4 - ldrb r0, [r0] - str r0, [sp] - movs r0, 0x9 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0x4 - bl InitMenu - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_080FE218: .4byte gUnknown_083EC604 -_080FE21C: .4byte gUnknown_020388D4 - thumb_func_end sub_80FE1DC - - thumb_func_start sub_80FE220 -sub_80FE220: @ 80FE220 - push {lr} - ldr r1, _080FE238 @ =gUnknown_020388D4 - movs r0, 0 - strb r0, [r1] - bl ScriptContext2_Enable - bl sub_80FE1DC - bl sub_80FE394 - pop {r0} - bx r0 - .align 2, 0 -_080FE238: .4byte gUnknown_020388D4 - thumb_func_end sub_80FE220 - - thumb_func_start DecorationPC -DecorationPC: @ 80FE23C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_80FE220 - ldr r1, _080FE25C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080FE260 @ =Task_DecorationPCProcessMenuInput - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FE25C: .4byte gTasks -_080FE260: .4byte Task_DecorationPCProcessMenuInput - thumb_func_end DecorationPC - - thumb_func_start Task_SecretBasePC_Decoration -Task_SecretBasePC_Decoration: @ 80FE264 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DecorationPC - ldr r1, _080FE284 @ =0x0201f000 - ldr r0, _080FE288 @ =gSaveBlock1 + 0x1A1A - str r0, [r1] - adds r0, 0x10 - str r0, [r1, 0x4] - movs r2, 0 - movs r0, 0x10 - strb r0, [r1, 0x8] - strb r2, [r1, 0x9] - pop {r0} - bx r0 - .align 2, 0 -_080FE284: .4byte 0x0201f000 -_080FE288: .4byte gSaveBlock1 + 0x1A1A - thumb_func_end Task_SecretBasePC_Decoration - - thumb_func_start DoPlayerPCDecoration -DoPlayerPCDecoration: @ 80FE28C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DecorationPC - ldr r1, _080FE2AC @ =0x0201f000 - ldr r0, _080FE2B0 @ =gSaveBlock1 + 0x2688 - str r0, [r1] - adds r0, 0xC - str r0, [r1, 0x4] - movs r0, 0xC - strb r0, [r1, 0x8] - movs r0, 0x1 - strb r0, [r1, 0x9] - pop {r0} - bx r0 - .align 2, 0 -_080FE2AC: .4byte 0x0201f000 -_080FE2B0: .4byte gSaveBlock1 + 0x2688 - thumb_func_end DoPlayerPCDecoration - - thumb_func_start sub_80FE2B4 -sub_80FE2B4: @ 80FE2B4 - push {lr} - sub sp, 0x8 - ldr r1, _080FE2E8 @ =gUnknown_083EC654 - mov r0, sp - movs r2, 0x6 - bl memcpy - add r0, sp, 0x4 - movs r1, 0xDF - movs r2, 0x2 - bl LoadPalette - mov r0, sp - adds r0, 0x2 - movs r1, 0xD1 - movs r2, 0x2 - bl LoadPalette - mov r0, sp - movs r1, 0xD8 - movs r2, 0x2 - bl LoadPalette - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_080FE2E8: .4byte gUnknown_083EC654 - thumb_func_end sub_80FE2B4 - - thumb_func_start Task_DecorationPCProcessMenuInput -Task_DecorationPCProcessMenuInput: @ 80FE2EC - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - adds r7, r6, 0 - ldr r0, _080FE368 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r5, 0x80 - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - bne _080FE38C - ldr r4, _080FE36C @ =gMain - ldrh r1, [r4, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080FE324 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - bl MoveMenuCursor - ldr r1, _080FE370 @ =gUnknown_020388D4 - strb r0, [r1] - bl sub_80FE394 -_080FE324: - ldrh r1, [r4, 0x2E] - adds r0, r5, 0 - ands r0, r1 - cmp r0, 0 - beq _080FE342 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl MoveMenuCursor - ldr r1, _080FE370 @ =gUnknown_020388D4 - strb r0, [r1] - bl sub_80FE394 -_080FE342: - ldrh r1, [r4, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080FE378 - movs r0, 0x5 - bl PlaySE - ldr r1, _080FE374 @ =gUnknown_083EC604 - ldr r0, _080FE370 @ =gUnknown_020388D4 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - adds r0, r6, 0 - bl _call_via_r1 - b _080FE38C - .align 2, 0 -_080FE368: .4byte gPaletteFade -_080FE36C: .4byte gMain -_080FE370: .4byte gUnknown_020388D4 -_080FE374: .4byte gUnknown_083EC604 -_080FE378: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080FE38C - movs r0, 0x5 - bl PlaySE - adds r0, r7, 0 - bl gpu_pal_decompress_alloc_tag_and_upload -_080FE38C: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end Task_DecorationPCProcessMenuInput - - thumb_func_start sub_80FE394 -sub_80FE394: @ 80FE394 - push {lr} - movs r0, 0x2 - movs r1, 0xF - movs r2, 0x1B - movs r3, 0x12 - bl MenuFillWindowRectWithBlankTile - ldr r1, _080FE3BC @ =gUnknown_083EC624 - ldr r0, _080FE3C0 @ =gUnknown_020388D4 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x2 - movs r2, 0xF - bl MenuPrint - pop {r0} - bx r0 - .align 2, 0 -_080FE3BC: .4byte gUnknown_083EC624 -_080FE3C0: .4byte gUnknown_020388D4 - thumb_func_end sub_80FE394 - - thumb_func_start gpu_pal_decompress_alloc_tag_and_upload -gpu_pal_decompress_alloc_tag_and_upload: @ 80FE3C4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8072DEC - movs r0, 0 - movs r1, 0 - movs r2, 0xA - movs r3, 0x9 - bl MenuZeroFillWindowRect - movs r0, 0x2 - movs r1, 0xF - movs r2, 0x1B - movs r3, 0x12 - bl MenuFillWindowRectWithBlankTile - movs r0, 0x6 - bl FreeSpritePaletteByTag - ldr r0, _080FE404 @ =0x0201f000 - ldrb r0, [r0, 0x9] - cmp r0, 0 - bne _080FE40C - ldr r0, _080FE408 @ =gUnknown_0815F399 - bl ScriptContext1_SetupScript - adds r0, r4, 0 - bl DestroyTask - b _080FE412 - .align 2, 0 -_080FE404: .4byte 0x0201f000 -_080FE408: .4byte gUnknown_0815F399 -_080FE40C: - adds r0, r4, 0 - bl ReshowPlayerPC -_080FE412: - pop {r4} - pop {r0} - bx r0 - thumb_func_end gpu_pal_decompress_alloc_tag_and_upload - - thumb_func_start sub_80FE418 -sub_80FE418: @ 80FE418 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_80FE5AC - pop {r0} - bx r0 - thumb_func_end sub_80FE418 - - thumb_func_start sub_80FE428 -sub_80FE428: @ 80FE428 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080FE464 @ =gUnknown_020388D4 - ldrb r0, [r0] - str r0, [sp] - movs r0, 0x9 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0x4 - bl InitMenu - bl sub_80FE394 - ldr r1, _080FE468 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080FE46C @ =Task_DecorationPCProcessMenuInput - str r1, [r0] - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FE464: .4byte gUnknown_020388D4 -_080FE468: .4byte gTasks -_080FE46C: .4byte Task_DecorationPCProcessMenuInput - thumb_func_end sub_80FE428 - - thumb_func_start sub_80FE470 -sub_80FE470: @ 80FE470 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r4, r0, 0 - mov r8, r1 - mov r9, r2 - adds r5, r3, 0 - lsls r4, 24 - lsrs r4, 24 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - mov r0, r9 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - lsls r5, 24 - lsrs r5, 24 - bl sub_8072CBC - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldr r7, _080FE51C @ =gStringVar4 - movs r0, 0xFC - strb r0, [r7] - movs r0, 0x5 - mov r10, r0 - strb r0, [r7, 0x1] - strb r5, [r7, 0x2] - adds r7, 0x3 - ldr r1, _080FE520 @ =gUnknown_083EC5E4 - lsls r0, r4, 2 - adds r0, r1 - ldr r1, [r0] - adds r0, r7, 0 - bl StringCopy - adds r7, r0, 0 - adds r0, r4, 0 - bl sub_8134194 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r7, 0 - movs r2, 0x56 - movs r3, 0x1 - bl sub_8072C14 - adds r7, r0, 0 - movs r0, 0xBA - strb r0, [r7] - adds r7, 0x1 - ldr r0, _080FE524 @ =gDecorationInventories - lsls r4, 3 - adds r4, r0 - ldrb r1, [r4, 0x4] - adds r0, r7, 0 - movs r2, 0x68 - movs r3, 0x1 - bl sub_8072C14 - adds r7, r0, 0 - movs r0, 0xFC - strb r0, [r7] - mov r0, r10 - strb r0, [r7, 0x1] - strb r6, [r7, 0x2] - movs r0, 0xFF - strb r0, [r7, 0x3] - ldr r0, _080FE51C @ =gStringVar4 - mov r1, r8 - mov r2, r9 - bl MenuPrint - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080FE51C: .4byte gStringVar4 -_080FE520: .4byte gUnknown_083EC5E4 -_080FE524: .4byte gDecorationInventories - thumb_func_end sub_80FE470 - - thumb_func_start sub_80FE528 -sub_80FE528: @ 80FE528 - push {r4,r5,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - movs r1, 0 - movs r2, 0xE - movs r3, 0x13 - bl MenuDrawTextWindow - movs r5, 0 - ldr r1, _080FE574 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r4, r0, r1 -_080FE548: - ldr r0, _080FE578 @ =0x0201f000 - ldrb r0, [r0, 0x9] - cmp r0, 0x1 - bne _080FE57C - movs r1, 0x1E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080FE57C - cmp r5, 0x6 - beq _080FE57C - cmp r5, 0x7 - beq _080FE57C - lsls r2, r5, 1 - adds r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - movs r1, 0x1 - movs r3, 0xD - bl sub_80FE470 - b _080FE58E - .align 2, 0 -_080FE574: .4byte gTasks -_080FE578: .4byte 0x0201f000 -_080FE57C: - lsls r2, r5, 1 - adds r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - movs r1, 0x1 - movs r3, 0xFF - bl sub_80FE470 -_080FE58E: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x7 - bls _080FE548 - ldr r0, _080FE5A8 @ =gUnknownText_Exit - movs r1, 0x1 - movs r2, 0x11 - bl MenuPrint - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080FE5A8: .4byte gUnknownText_Exit - thumb_func_end sub_80FE528 - - thumb_func_start sub_80FE5AC -sub_80FE5AC: @ 80FE5AC - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl sub_8072DEC - movs r0, 0 - movs r1, 0 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - adds r0, r4, 0 - bl sub_80FE528 - ldr r0, _080FE5F8 @ =gUnknown_020388F6 - ldrb r0, [r0] - str r0, [sp] - movs r0, 0xD - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0x9 - bl InitMenu - ldr r1, _080FE5FC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080FE600 @ =sub_80FE604 - str r1, [r0] - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FE5F8: .4byte gUnknown_020388F6 -_080FE5FC: .4byte gTasks -_080FE600: .4byte sub_80FE604 - thumb_func_end sub_80FE5AC - - thumb_func_start sub_80FE604 -sub_80FE604: @ 80FE604 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r4, r5, 0 - ldr r0, _080FE638 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r3, 0x80 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080FE61C - b _080FE720 -_080FE61C: - ldr r2, _080FE63C @ =gMain - ldrh r1, [r2, 0x30] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _080FE640 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - negs r0, r0 - bl MoveMenuCursor - b _080FE720 - .align 2, 0 -_080FE638: .4byte gPaletteFade -_080FE63C: .4byte gMain -_080FE640: - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080FE656 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl MoveMenuCursor - b _080FE720 -_080FE656: - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080FE70C - movs r0, 0x5 - bl PlaySE - bl GetMenuCursorPos - ldr r4, _080FE6C0 @ =gUnknown_020388F6 - strb r0, [r4] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - beq _080FE704 - ldrb r0, [r4] - bl sub_8134194 - ldr r1, _080FE6C4 @ =gUnknown_020388D5 - strb r0, [r1] - lsls r0, 24 - cmp r0, 0 - beq _080FE6DC - ldrb r0, [r4] - bl sub_8134104 - ldr r2, _080FE6C8 @ =gUnknown_020388D0 - ldr r1, _080FE6CC @ =gDecorationInventories - ldrb r0, [r4] - lsls r0, 3 - adds r0, r1 - ldr r0, [r0] - str r0, [r2] - adds r0, r5, 0 - bl sub_80FEF50 - bl sub_80F944C - ldr r0, _080FE6D0 @ =gUnknown_020388F7 - movs r1, 0x8 - bl sub_80F9480 - bl LoadScrollIndicatorPalette - ldr r1, _080FE6D4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r0, r1 - ldr r1, _080FE6D8 @ =sub_80FE868 - str r1, [r0] - b _080FE720 - .align 2, 0 -_080FE6C0: .4byte gUnknown_020388F6 -_080FE6C4: .4byte gUnknown_020388D5 -_080FE6C8: .4byte gUnknown_020388D0 -_080FE6CC: .4byte gDecorationInventories -_080FE6D0: .4byte gUnknown_020388F7 -_080FE6D4: .4byte gTasks -_080FE6D8: .4byte sub_80FE868 -_080FE6DC: - bl sub_8072DEC - movs r0, 0 - movs r1, 0 - movs r2, 0xE - movs r3, 0x13 - bl MenuZeroFillWindowRect - ldr r1, _080FE6FC @ =gSecretBaseText_NoDecors - ldr r2, _080FE700 @ =sub_80FE418 - adds r0, r5, 0 - movs r3, 0 - bl DisplayItemMessageOnField - b _080FE720 - .align 2, 0 -_080FE6FC: .4byte gSecretBaseText_NoDecors -_080FE700: .4byte sub_80FE418 -_080FE704: - adds r0, r5, 0 - bl sub_80FE728 - b _080FE720 -_080FE70C: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080FE720 - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_80FE728 -_080FE720: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80FE604 - - thumb_func_start sub_80FE728 -sub_80FE728: @ 80FE728 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080FE748 @ =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - movs r1, 0x1E - ldrsh r0, [r0, r1] - cmp r0, 0x3 - beq _080FE74C - adds r0, r2, 0 - bl sub_80FE758 - b _080FE752 - .align 2, 0 -_080FE748: .4byte gTasks -_080FE74C: - adds r0, r2, 0 - bl sub_8109DAC -_080FE752: - pop {r0} - bx r0 - thumb_func_end sub_80FE728 - - thumb_func_start sub_80FE758 -sub_80FE758: @ 80FE758 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8072DEC - movs r0, 0 - movs r1, 0 - movs r2, 0xE - movs r3, 0x13 - bl MenuZeroFillWindowRect - ldr r1, _080FE794 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r5, r0, r1 - movs r1, 0x1E - ldrsh r0, [r5, r1] - cmp r0, 0x2 - beq _080FE79C - bl sub_80FE1DC - bl MenuDisplayMessageBox - bl sub_80FE394 - ldr r0, _080FE798 @ =Task_DecorationPCProcessMenuInput - str r0, [r5] - b _080FE7A2 - .align 2, 0 -_080FE794: .4byte gTasks -_080FE798: .4byte Task_DecorationPCProcessMenuInput -_080FE79C: - adds r0, r4, 0 - bl sub_80B3068 -_080FE7A2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80FE758 - - thumb_func_start sub_80FE7A8 -sub_80FE7A8: @ 80FE7A8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080FE7CC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r3, 0 - movs r2, 0x3 - strh r2, [r1, 0x1E] - ldr r1, _080FE7D0 @ =gUnknown_020388F6 - strb r3, [r1] - bl sub_80FE5AC - pop {r0} - bx r0 - .align 2, 0 -_080FE7CC: .4byte gTasks -_080FE7D0: .4byte gUnknown_020388F6 - thumb_func_end sub_80FE7A8 - - thumb_func_start sub_80FE7D4 -sub_80FE7D4: @ 80FE7D4 - push {lr} - lsls r1, 24 - ldr r2, _080FE7E8 @ =gUnknown_083EC5E4 - lsrs r1, 22 - adds r1, r2 - ldr r1, [r1] - bl StringCopy - pop {r0} - bx r0 - .align 2, 0 -_080FE7E8: .4byte gUnknown_083EC5E4 - thumb_func_end sub_80FE7D4 - - .section .text_80FE868 - - thumb_func_start sub_80FE868 -sub_80FE868: @ 80FE868 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_80FE7EC - ldr r1, _080FE88C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080FE890 @ =sub_80FE948 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080FE88C: .4byte gTasks -_080FE890: .4byte sub_80FE948 - thumb_func_end sub_80FE868 +.equiv ewram_1f000, 0x0201f000 thumb_func_start sub_80FE894 sub_80FE894: @ 80FE894 @@ -1147,7 +366,7 @@ _080FEB68: bne _080FEB7A b _080FEC70 _080FEB7A: - ldr r0, _080FEBC4 @ =0x0201f000 + ldr r0, _080FEBC4 @ =ewram_1f000 ldrb r5, [r0, 0x9] cmp r5, 0x1 bne _080FEBDC @@ -1182,7 +401,7 @@ _080FEB7A: b _080FEBF8 .align 2, 0 _080FEBC0: .4byte gUnknown_020388D0 -_080FEBC4: .4byte 0x0201f000 +_080FEBC4: .4byte ewram_1f000 _080FEBC8: .4byte gUnknown_020388F6 _080FEBCC: .4byte gTasks _080FEBD0: .4byte gDecorations + 0x1 @@ -2471,7 +1690,7 @@ _080FF57A: sub_80FF58C: @ 80FF58C push {lr} movs r1, 0 - ldr r0, _080FF5A8 @ =0x0201f000 + ldr r0, _080FF5A8 @ =ewram_1f000 ldrb r2, [r0, 0x8] cmp r1, r2 bcs _080FF5B6 @@ -2484,7 +1703,7 @@ _080FF59A: movs r0, 0x1 b _080FF5B8 .align 2, 0 -_080FF5A8: .4byte 0x0201f000 +_080FF5A8: .4byte ewram_1f000 _080FF5AC: adds r0, r1, 0x1 lsls r0, 16 @@ -2503,7 +1722,7 @@ sub_80FF5BC: @ 80FF5BC push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 - ldr r0, _080FF5E4 @ =0x0201f000 + ldr r0, _080FF5E4 @ =ewram_1f000 ldrb r0, [r0, 0x9] cmp r0, 0x1 bne _080FF5F0 @@ -2518,7 +1737,7 @@ sub_80FF5BC: @ 80FF5BC ldr r1, _080FF5EC @ =gSecretBaseText_DecorCantPlace b _080FF66E .align 2, 0 -_080FF5E4: .4byte 0x0201f000 +_080FF5E4: .4byte ewram_1f000 _080FF5E8: .4byte gUnknown_020388F6 _080FF5EC: .4byte gSecretBaseText_DecorCantPlace _080FF5F0: @@ -2552,7 +1771,7 @@ _080FF62C: bl sub_80FEF74 bl sub_80FED1C ldr r0, _080FF654 @ =gStringVar1 - ldr r4, _080FF658 @ =0x0201f000 + ldr r4, _080FF658 @ =ewram_1f000 ldrb r1, [r4, 0x8] movs r2, 0x1 movs r3, 0x2 @@ -2566,7 +1785,7 @@ _080FF62C: b _080FF66C .align 2, 0 _080FF654: .4byte gStringVar1 -_080FF658: .4byte 0x0201f000 +_080FF658: .4byte ewram_1f000 _080FF65C: .4byte gStringVar4 _080FF660: .4byte gSecretBaseText_NoMoreDecor _080FF664: @@ -3967,7 +3186,7 @@ sub_8100174: @ 8100174 lsls r0, 24 lsrs r6, r0, 24 movs r3, 0 - ldr r0, _081001B0 @ =0x0201f000 + ldr r0, _081001B0 @ =ewram_1f000 ldrb r1, [r0, 0x8] adds r5, r0, 0 cmp r3, r1 @@ -3995,7 +3214,7 @@ _0810019A: bne _081001F0 b _08100210 .align 2, 0 -_081001B0: .4byte 0x0201f000 +_081001B0: .4byte ewram_1f000 _081001B4: .4byte gUnknown_020388D6 _081001B8: ldr r0, _081001E4 @ =gUnknown_020388F5 @@ -5186,7 +4405,7 @@ _08100A5C: .4byte sub_80FE428 sub_8100A60: @ 8100A60 lsls r0, 24 lsrs r0, 24 - ldr r3, _08100A78 @ =0x0201f000 + ldr r3, _08100A78 @ =ewram_1f000 ldr r1, [r3] adds r1, r0 movs r2, 0 @@ -5196,7 +4415,7 @@ sub_8100A60: @ 8100A60 strb r2, [r1] bx lr .align 2, 0 -_08100A78: .4byte 0x0201f000 +_08100A78: .4byte ewram_1f000 thumb_func_end sub_8100A60 thumb_func_start sub_8100A7C @@ -5230,7 +4449,7 @@ _08100AAC: _08100AB4: .4byte gSpecialVar_0x8006 _08100AB8: ldr r3, _08100B10 @ =gDecorations - ldr r2, _08100B14 @ =0x0201f000 + ldr r2, _08100B14 @ =ewram_1f000 ldr r1, _08100B18 @ =gUnknown_020391B4 ldrh r0, [r4] lsls r0, 3 @@ -5276,7 +4495,7 @@ _08100B0A: bx r0 .align 2, 0 _08100B10: .4byte gDecorations -_08100B14: .4byte 0x0201f000 +_08100B14: .4byte ewram_1f000 _08100B18: .4byte gUnknown_020391B4 _08100B1C: .4byte gMapHeader thumb_func_end sub_8100A7C @@ -5338,7 +4557,7 @@ _08100B7C: ldr r0, _08100BE0 @ =gUnknown_020391B4 adds r4, r3, r0 ldrb r1, [r4] - ldr r2, _08100BE4 @ =0x0201f000 + ldr r2, _08100BE4 @ =ewram_1f000 ldr r0, [r2] adds r0, r1 ldrb r6, [r0] @@ -5346,7 +4565,7 @@ _08100B7C: ldr r5, _08100BE8 @ =gDecorations adds r0, r5 ldrb r2, [r0, 0x11] - ldr r5, _08100BE4 @ =0x0201f000 + ldr r5, _08100BE4 @ =ewram_1f000 ldr r0, [r5, 0x4] adds r0, r1 ldrb r0, [r0] @@ -5385,7 +4604,7 @@ _08100BD0: b _08100C4E .align 2, 0 _08100BE0: .4byte gUnknown_020391B4 -_08100BE4: .4byte 0x0201f000 +_08100BE4: .4byte ewram_1f000 _08100BE8: .4byte gDecorations _08100BEC: movs r4, 0 @@ -5559,7 +4778,7 @@ sub_8100D38: @ 8100D38 lsls r0, 24 lsrs r3, r0, 24 movs r2, 0 - ldr r0, _08100D68 @ =0x0201f000 + ldr r0, _08100D68 @ =ewram_1f000 adds r4, r0, 0 ldrb r0, [r4, 0x8] cmp r2, r0 @@ -5580,7 +4799,7 @@ _08100D56: movs r0, 0x1 b _08100D7E .align 2, 0 -_08100D68: .4byte 0x0201f000 +_08100D68: .4byte ewram_1f000 _08100D6C: .4byte gTasks _08100D70: adds r0, r2, 0x1 @@ -6194,7 +5413,7 @@ sub_8101200: @ 8101200 lsls r0, 24 lsrs r0, 24 mov r8, r0 - ldr r2, _08101290 @ =0x0201f000 + ldr r2, _08101290 @ =ewram_1f000 ldr r0, [r2, 0x4] adds r0, r1 ldrb r0, [r0] @@ -6243,7 +5462,7 @@ _0810125A: b _08101296 .align 2, 0 _0810128C: .4byte gTasks -_08101290: .4byte 0x0201f000 +_08101290: .4byte ewram_1f000 _08101294: movs r0, 0 _08101296: @@ -6260,7 +5479,7 @@ sub_81012A0: @ 81012A0 mov r7, r9 mov r6, r8 push {r6,r7} - ldr r2, _0810130C @ =0x0201f000 + ldr r2, _0810130C @ =ewram_1f000 ldr r3, _08101310 @ =gUnknown_020391B4 ldr r0, _08101314 @ =gUnknown_02039234 ldrb r0, [r0] @@ -6310,7 +5529,7 @@ _081012CA: strh r1, [r0, 0x4] b _08101332 .align 2, 0 -_0810130C: .4byte 0x0201f000 +_0810130C: .4byte ewram_1f000 _08101310: .4byte gUnknown_020391B4 _08101314: .4byte gUnknown_02039234 _08101318: .4byte gSaveBlock1 @@ -6380,7 +5599,7 @@ _0810139C: lsls r0, 16 lsrs r6, r0, 16 _081013A2: - ldr r0, _081013B4 @ =0x0201f000 + ldr r0, _081013B4 @ =ewram_1f000 ldrb r1, [r0, 0x8] cmp r6, r1 bcc _0810134A @@ -6390,7 +5609,7 @@ _081013AC: pop {r1} bx r1 .align 2, 0 -_081013B4: .4byte 0x0201f000 +_081013B4: .4byte ewram_1f000 thumb_func_end sub_8101340 thumb_func_start sub_81013B8 @@ -6414,7 +5633,7 @@ sub_81013B8: @ 81013B8 lsrs r3, 24 mov r8, r3 movs r4, 0 - ldr r7, _08101450 @ =0x0201f000 + ldr r7, _08101450 @ =ewram_1f000 ldrb r0, [r7, 0x8] cmp r4, r0 bcs _0810143E @@ -6473,7 +5692,7 @@ _0810143E: pop {r0} bx r0 .align 2, 0 -_08101450: .4byte 0x0201f000 +_08101450: .4byte ewram_1f000 _08101454: .4byte gUnknown_02039234 _08101458: .4byte gDecorations _0810145C: .4byte gUnknown_020391B4 @@ -6494,7 +5713,7 @@ sub_8101460: @ 8101460 cmp r0, 0x1 beq _08101504 movs r5, 0 - ldr r0, _081014BC @ =0x0201f000 + ldr r0, _081014BC @ =ewram_1f000 ldrb r1, [r0, 0x8] cmp r5, r1 bcs _081014D2 @@ -6524,13 +5743,13 @@ _08101486: b _081014D2 .align 2, 0 _081014B8: .4byte gUnknown_02039234 -_081014BC: .4byte 0x0201f000 +_081014BC: .4byte ewram_1f000 _081014C0: .4byte gUnknown_020391B4 _081014C4: adds r0, r5, 0x1 lsls r0, 24 lsrs r5, r0, 24 - ldr r0, _0810150C @ =0x0201f000 + ldr r0, _0810150C @ =ewram_1f000 ldrb r1, [r0, 0x8] cmp r5, r1 bcc _08101486 @@ -6539,7 +5758,7 @@ _081014D2: ldrb r0, [r0] cmp r0, 0 beq _08101504 - ldr r0, _0810150C @ =0x0201f000 + ldr r0, _0810150C @ =ewram_1f000 ldr r2, _08101514 @ =gUnknown_020391B4 ldrb r1, [r2] ldr r0, [r0, 0x4] @@ -6564,7 +5783,7 @@ _08101504: pop {r0} bx r0 .align 2, 0 -_0810150C: .4byte 0x0201f000 +_0810150C: .4byte ewram_1f000 _08101510: .4byte gUnknown_02039234 _08101514: .4byte gUnknown_020391B4 thumb_func_end sub_8101460 diff --git a/include/decoration.h b/include/decoration.h index d041a8007..663fd5183 100644 --- a/include/decoration.h +++ b/include/decoration.h @@ -1,6 +1,17 @@ #ifndef GUARD_DECORATION_H #define GUARD_DECORATION_H +enum { + DECOCAT_DESK, + DECOCAT_CHAIR, + DECOCAT_PLANT, + DECOCAT_ORNAMENT, + DECOCAT_MAT, + DECOCAT_POSTER, + DECOCAT_DOLL, + DECOCAT_CUSHION +}; + struct Decoration { /*0x00*/ u8 id; @@ -13,7 +24,65 @@ struct Decoration /*0x1c*/ u16 *tiles; }; +struct DecoPCPointers +{ + /* 0x00 */ u8 *items; + /* 0x04 */ u8 *pos; + /* 0x08 */ u8 size; + /* 0x09 */ u8 isPlayerRoom; +}; + +struct DecorationInventory +{ + u8 *items; + u8 size; +}; + +extern u8 ewram[]; +#define ewram_1f000 (*(struct DecoPCPointers *)(ewram + 0x1f000)) + extern struct Decoration gDecorations[0x77]; extern void sub_80FF394(u16 unkr0, u16 unkr1, u16 unkr2); +extern Script gUnknown_0815F399; +extern u8 *gUnknown_020388D0; +extern u8 gUnknown_020388D4; +extern u8 gUnknown_020388D5; +extern u8 gUnknown_020388F2; +extern u8 gUnknown_020388F3; +extern u8 gUnknown_020388F4; +extern u8 gUnknown_020388F6; + +extern const u16 gUnknown_083EC654[3]; +extern const struct DecorationInventory gDecorationInventories[]; +extern const u8 *gUnknown_083EC5E4[]; +extern const u8 *gUnknown_083EC624[]; +extern u8 *gUnknown_020388F7[]; +extern const struct MenuAction2 gUnknown_083EC604[]; + +extern void sub_80B3068(u8); // src/shop +extern u8 sub_8134194(u8); // src/decoration_inventory +extern void sub_8134104(u8); // src/decoration_inventory +extern void sub_80F944C(void); // src/menu_helpers +extern void sub_80F9480(u8 *[], u8); // src/menu_helpers +extern void LoadScrollIndicatorPalette(void); // src/menu_helpers +extern void DisplayItemMessageOnField(u8, const u8 *, TaskFunc, u16); // src/menu_helpers +extern void ReshowPlayerPC(u8); // src/player_pc + +void sub_80FE2B4(void); +void Task_DecorationPCProcessMenuInput(u8); +void sub_80FE394(void); +void gpu_pal_decompress_alloc_tag_and_upload(u8); +void sub_80FE5AC(u8); +void sub_80FE604(u8); +void sub_80FE728(u8); +void sub_80FE758(u8); +void sub_80FE868(u8); +void sub_80FE948(u8); +void sub_80FEC94(u8); +void sub_80FECB8(u8); +void sub_80FECE0(u8); +void sub_80FEF50(u8); +void sub_8109DAC(u8); + #endif // GUARD_DECORATION_H diff --git a/include/menu.h b/include/menu.h index cb5efa448..7fce7ef1a 100644 --- a/include/menu.h +++ b/include/menu.h @@ -9,6 +9,12 @@ struct MenuAction u8 (*func)(); }; +struct MenuAction2 +{ + const u8 *text; + u8 (*func)(u8); +}; + void CloseMenu(void); void AppendToList(u8 *list, u8 *pindex, u32 value); void InitMenuWindow(const struct WindowConfig *); diff --git a/include/script.h b/include/script.h index a4c7dd575..5e13e8e74 100644 --- a/include/script.h +++ b/include/script.h @@ -4,6 +4,7 @@ struct ScriptContext; typedef bool8 (*ScrCmdFunc)(struct ScriptContext *); +typedef u8 Script[]; struct ScriptContext { diff --git a/include/task.h b/include/task.h index d2b2302cf..6c6efdf4f 100644 --- a/include/task.h +++ b/include/task.h @@ -5,12 +5,12 @@ typedef void (*TaskFunc)(u8 taskId); struct Task { - TaskFunc func; - bool8 isActive; - u8 prev; - u8 next; - u8 priority; - s16 data[16]; + /*0x00*/ TaskFunc func; + /*0x04*/ bool8 isActive; + /*0x05*/ u8 prev; + /*0x06*/ u8 next; + /*0x07*/ u8 priority; + /*0x08*/ s16 data[16]; }; extern struct Task gTasks[]; diff --git a/ld_script.txt b/ld_script.txt index cae32faa2..fa1b3a2e9 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -201,9 +201,8 @@ SECTIONS { src/heal_location.o(.text); asm/region_map.o(.text); asm/cute_sketch.o(.text); - asm/decoration.o(.text); src/decoration.o(.text); - asm/decoration.o(.text_80FE868); + asm/decoration.o(.text); asm/slot_machine.o(.text); src/slot_machine.o(.text); asm/slot_machine.o(.text_8104D30) diff --git a/src/decoration.c b/src/decoration.c index 279a7568b..0898e7a4b 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1,23 +1,264 @@ #include "global.h" #include "asm.h" +#include "sound.h" +#include "songs.h" +#include "string_util.h" #include "menu.h" +#include "strings.h" +#include "script.h" +#include "palette.h" +#include "decoration.h" -extern u8 gUnknown_020388F2; -extern u8 gUnknown_020388F3; -extern u8 gUnknown_020388F4; -extern u8 gUnknown_020388F6; -extern u8 gUnknown_020388D5; +void sub_80FE1DC(void) +{ + sub_80FE2B4(); + MenuDrawTextWindow(0, 0, 10, 9); + PrintMenuItems(1, 1, 4, (const struct MenuAction *)gUnknown_083EC604); + InitMenu(0, 1, 1, 4, gUnknown_020388D4, 9); +} + +void sub_80FE220(void) +{ + gUnknown_020388D4 = 0; + ScriptContext2_Enable(); + sub_80FE1DC(); + sub_80FE394(); +} + +void DecorationPC(u8 taskId) +{ + sub_80FE220(); + gTasks[taskId].func = Task_DecorationPCProcessMenuInput; +} + +void Task_SecretBasePC_Decoration(u8 taskId) +{ + DecorationPC(taskId); + ewram_1f000.items = gSaveBlock1.secretBases[0].decorations; + ewram_1f000.pos = gSaveBlock1.secretBases[0].decorationPos; + ewram_1f000.size = sizeof gSaveBlock1.secretBases[0].decorations; + ewram_1f000.isPlayerRoom = 0; +} + +void DoPlayerPCDecoration(u8 taskId) +{ + DecorationPC(taskId); + ewram_1f000.items = gSaveBlock1.playerRoomDecor; + ewram_1f000.pos = gSaveBlock1.playerRoomDecorPos; + ewram_1f000.size = sizeof gSaveBlock1.playerRoomDecor; + ewram_1f000.isPlayerRoom = 1; +} + +void sub_80FE2B4(void) +{ + u16 palettes[3]; + memcpy(palettes, gUnknown_083EC654, sizeof gUnknown_083EC654); + LoadPalette(&palettes[2], 0xdf, 2); + LoadPalette(&palettes[1], 0xd1, 2); + LoadPalette(&palettes[0], 0xd8, 2); +} + +void Task_DecorationPCProcessMenuInput(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + gUnknown_020388D4 = MoveMenuCursor(-1); + sub_80FE394(); + } + if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + gUnknown_020388D4 = MoveMenuCursor(1); + sub_80FE394(); + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_083EC604[gUnknown_020388D4].func(taskId); + } else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gpu_pal_decompress_alloc_tag_and_upload(taskId); + } + } +} + +void sub_80FE394(void) +{ + MenuFillWindowRectWithBlankTile(2, 15, 27, 18); + MenuPrint(gUnknown_083EC624[gUnknown_020388D4], 2, 15); +} + +void gpu_pal_decompress_alloc_tag_and_upload(u8 taskId) +{ + sub_8072DEC(); + MenuZeroFillWindowRect(0, 0, 10, 9); + MenuFillWindowRectWithBlankTile(2, 15, 27, 18); + FreeSpritePaletteByTag(6); + if (ewram_1f000.isPlayerRoom == 0) + { + ScriptContext1_SetupScript(gUnknown_0815F399); + DestroyTask(taskId); + } else + { + ReshowPlayerPC(taskId); + } +} + +void sub_80FE418(u8 taskId) +{ + sub_80FE5AC(taskId); +} + +void sub_80FE428(u8 taskId) +{ + InitMenu(0, 1, 1, 4, gUnknown_020388D4, 9); + sub_80FE394(); + gTasks[taskId].func = Task_DecorationPCProcessMenuInput; +} + +void sub_80FE470(u8 decoCat, u8 a1, u8 a2, u8 palIdx) +{ + u8 *strptr; + u8 v0; + v0 = sub_8072CBC(); + // PALETTE {palIdx} + strptr = gStringVar4; + strptr[0] = EXT_CTRL_CODE_BEGIN; + strptr[1] = 5; + strptr[2] = palIdx; + strptr += 3; + strptr = StringCopy(strptr, gUnknown_083EC5E4[decoCat]); + strptr = sub_8072C14(strptr, sub_8134194(decoCat), 0x56, 1); + *strptr++ = 0xba; + strptr = sub_8072C14(strptr, gDecorationInventories[decoCat].size, 0x68, 1); + strptr[0] = EXT_CTRL_CODE_BEGIN; + strptr[1] = 5; + strptr[2] = v0; + strptr[3] = EOS; + MenuPrint(gStringVar4, a1, a2); +} -void sub_80FEC94(u8 arg0); -void sub_80FECB8(u8 arg0); -void sub_80FECE0(u8 arg0); +void sub_80FE528(u8 taskId) +{ + u8 decoCat; + MenuDrawTextWindow(0, 0, 14, 19); + for (decoCat=0; decoCat<8; decoCat++) + { + if (ewram_1f000.isPlayerRoom == 1 && gTasks[taskId].data[11] == 0 && decoCat != DECOCAT_DOLL && decoCat != DECOCAT_CUSHION) + { + sub_80FE470(decoCat, 1, 2 * decoCat + 1, 13); + } else + { + sub_80FE470(decoCat, 1, 2 * decoCat + 1, 255); + } + } + MenuPrint(gUnknownText_Exit, 1, 17); +} -void sub_80FE7EC(u8 arg0) +void sub_80FE5AC(u8 taskId) { sub_8072DEC(); MenuZeroFillWindowRect(0, 0, 29, 19); + sub_80FE528(taskId); + InitMenu(0, 1, 1, 9, gUnknown_020388F6, 13); + gTasks[taskId].func = sub_80FE604; +} - sub_80FEC94(arg0); +void sub_80FE604(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + MoveMenuCursor(1); + } else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_020388F6 = GetMenuCursorPos(); + if (gUnknown_020388F6 != 8) + { + gUnknown_020388D5 = sub_8134194(gUnknown_020388F6); + if (gUnknown_020388D5) + { + sub_8134104(gUnknown_020388F6); + gUnknown_020388D0 = gDecorationInventories[gUnknown_020388F6].items; + sub_80FEF50(taskId); + sub_80F944C(); + sub_80F9480(gUnknown_020388F7, 8); + LoadScrollIndicatorPalette(); + gTasks[taskId].func = sub_80FE868; + } else + { + sub_8072DEC(); + MenuZeroFillWindowRect(0, 0, 14, 19); + DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecors, sub_80FE418, 0); + } + } else + { + sub_80FE728(taskId); + } + } else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_80FE728(taskId); + } + } +} + +void sub_80FE728(u8 taskId) +{ + if (gTasks[taskId].data[11] != 3) + { + sub_80FE758(taskId); + } else + { + sub_8109DAC(taskId); + } +} + +void sub_80FE758(u8 taskId) +{ + sub_8072DEC(); + MenuZeroFillWindowRect(0, 0, 14, 19); + if (gTasks[taskId].data[11] != 2) + { + sub_80FE1DC(); + MenuDisplayMessageBox(); + sub_80FE394(); + gTasks[taskId].func = Task_DecorationPCProcessMenuInput; + } else + { + sub_80B3068(taskId); + } +} + +void sub_80FE7A8(u8 taskId) +{ + gTasks[taskId].data[11] = 3; + gUnknown_020388F6 = 0; + sub_80FE5AC(taskId); +} + +void sub_80FE7D4(u8 *dest, u8 decClass) +{ + StringCopy(dest, gUnknown_083EC5E4[decClass]); +} + +void sub_80FE7EC(u8 taskId) +{ + sub_8072DEC(); + MenuZeroFillWindowRect(0, 0, 29, 19); + + sub_80FEC94(taskId); sub_80FECB8(gUnknown_020388F6); MenuDrawTextWindow(15, 12, 29, 19); @@ -25,3 +266,9 @@ void sub_80FE7EC(u8 arg0) sub_80FECE0(gUnknown_020388F2 + gUnknown_020388F4); InitMenu(0, 1, 2, gUnknown_020388F3 + 1, gUnknown_020388F2, 13); } + +void sub_80FE868(u8 taskId) +{ + sub_80FE7EC(taskId); + gTasks[taskId].func = sub_80FE948; +} |