diff --git a/asm/code_080526F8.s b/asm/code_080526F8.s deleted file mode 100644 index 9a00adcf..00000000 --- a/asm/code_080526F8.s +++ /dev/null @@ -1,1712 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start CutsceneMain_Init -CutsceneMain_Init: @ 0x08053590 - push {lr} - ldr r1, _080535A4 @ =gUnk_080FCBB4 - ldr r0, _080535A8 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080535A4: .4byte gUnk_080FCBB4 -_080535A8: .4byte gMenu - - thumb_func_start sub_080535AC -sub_080535AC: @ 0x080535AC - push {lr} - ldr r2, _080535DC @ =gMenu - movs r1, #1 - strb r1, [r2, #6] - movs r0, #0x78 - strh r0, [r2, #8] - ldr r0, _080535E0 @ =gUnk_02032EC0 - strb r1, [r0, #6] - ldr r0, _080535E4 @ =gUpdateVisibleTiles - strb r1, [r0] - ldr r2, _080535E8 @ =gScreen - ldrh r1, [r2] - ldr r0, _080535EC @ =0x0000FEFF - ands r0, r1 - strh r0, [r2] - ldr r0, _080535F0 @ =gUnk_080FCB94 - bl LoadRoomEntityList - movs r0, #6 - movs r1, #8 - bl SetFade - pop {pc} - .align 2, 0 -_080535DC: .4byte gMenu -_080535E0: .4byte gUnk_02032EC0 -_080535E4: .4byte gUpdateVisibleTiles -_080535E8: .4byte gScreen -_080535EC: .4byte 0x0000FEFF -_080535F0: .4byte gUnk_080FCB94 - - thumb_func_start sub_080535F4 -sub_080535F4: @ 0x080535F4 - push {lr} - ldr r0, _0805360C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053608 - bl ResetSystemPriority - ldr r1, _08053610 @ =gMenu - movs r0, #2 - strb r0, [r1, #6] -_08053608: - pop {pc} - .align 2, 0 -_0805360C: .4byte gFadeControl -_08053610: .4byte gMenu - - thumb_func_start nullsub_481 -nullsub_481: @ 0x08053614 - bx lr - .align 2, 0 - - thumb_func_start sub_08053618 -sub_08053618: @ 0x08053618 - push {lr} - ldr r1, _08053630 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0805362C - bl sub_08052004 -_0805362C: - pop {pc} - .align 2, 0 -_08053630: .4byte gMenu - - thumb_func_start sub_08053634 -sub_08053634: @ 0x08053634 - push {lr} - ldr r1, _08053644 @ =gUnk_02032EC0 - movs r0, #3 - strb r0, [r1] - bl MessageInitialize - pop {pc} - .align 2, 0 -_08053644: .4byte gUnk_02032EC0 - - thumb_func_start sub_08053648 -sub_08053648: @ 0x08053648 - push {lr} - movs r0, #0x2d - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08053674 - ldr r0, _08053678 @ =gRoomControls - movs r3, #0xb4 - lsls r3, r3, #2 - adds r1, r3, #0 - ldrh r3, [r0, #6] - adds r1, r1, r3 - strh r1, [r2, #0x2e] - movs r3, #0xa4 - lsls r3, r3, #1 - adds r1, r3, #0 - ldrh r0, [r0, #8] - adds r1, r1, r0 - strh r1, [r2, #0x32] -_08053674: - pop {pc} - .align 2, 0 -_08053678: .4byte gRoomControls - - thumb_func_start sub_0805367C -sub_0805367C: @ 0x0805367C - ldr r1, _08053688 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - bx lr - .align 2, 0 -_08053688: .4byte gMenu - - thumb_func_start sub_0805368C -sub_0805368C: @ 0x0805368C - push {lr} - movs r0, #6 - movs r1, #0x5d - movs r2, #6 - bl FindEntityByID - cmp r0, #0 - beq _080536A6 - bl DeleteEntity - movs r0, #0xf0 - bl SoundReq -_080536A6: - pop {pc} - - thumb_func_start sub_080536A8 -sub_080536A8: @ 0x080536A8 - push {lr} - movs r0, #5 - movs r1, #5 - movs r2, #4 - movs r3, #0x10 - bl sub_080A71C4 - pop {pc} - - thumb_func_start sub_080536B8 -sub_080536B8: @ 0x080536B8 - push {lr} - movs r0, #5 - movs r1, #3 - movs r2, #4 - movs r3, #4 - bl sub_080A71C4 - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {pc} - .align 2, 0 - - thumb_func_start sub_080536D4 -sub_080536D4: @ 0x080536D4 - push {lr} - ldr r1, _080536E8 @ =gUnk_080FCCFC - ldr r0, _080536EC @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080536E8: .4byte gUnk_080FCCFC -_080536EC: .4byte gMenu - - thumb_func_start sub_080536F0 -sub_080536F0: @ 0x080536F0 - push {lr} - ldr r1, _08053704 @ =gUnk_080FCD38 - ldr r0, _08053708 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053704: .4byte gUnk_080FCD38 -_08053708: .4byte gMenu - - thumb_func_start sub_0805370C -sub_0805370C: @ 0x0805370C - push {lr} - ldr r1, _08053730 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - ldr r1, _08053734 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - bl sub_08051FF0 - ldr r0, _08053738 @ =gUnk_080FCC54 - bl LoadRoomEntityList - movs r0, #4 - movs r1, #0x10 - bl SetFade - pop {pc} - .align 2, 0 -_08053730: .4byte gMenu -_08053734: .4byte gUpdateVisibleTiles -_08053738: .4byte gUnk_080FCC54 - - thumb_func_start sub_0805373C -sub_0805373C: @ 0x0805373C - push {lr} - ldr r1, _08053750 @ =gUnk_080FCD40 - ldr r0, _08053754 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053750: .4byte gUnk_080FCD40 -_08053754: .4byte gMenu - - thumb_func_start sub_08053758 -sub_08053758: @ 0x08053758 - push {r4, lr} - ldr r1, _080537DC @ =gMenu - movs r2, #0 - movs r3, #1 - strb r3, [r1, #6] - movs r4, #0 - movs r0, #0x78 - strh r0, [r1, #8] - movs r0, #0x1e - strh r0, [r1, #0xa] - strb r4, [r1, #0x10] - ldr r0, _080537E0 @ =gUnk_02032EC0 - strb r3, [r0, #6] - ldr r0, _080537E4 @ =gMapBottom - str r2, [r0] - ldr r0, _080537E8 @ =gMapTop - str r2, [r0] - ldr r0, _080537EC @ =gRoomControls - str r2, [r0, #0x30] - strh r2, [r0, #0xc] - strh r2, [r0, #0xa] - bl sub_0801B170 - movs r0, #0 - bl DispReset - ldr r2, _080537F0 @ =gScreen - movs r0, #0x99 - lsls r0, r0, #6 - strh r0, [r2] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _080537F4 @ =0x00002244 - strh r0, [r1] - adds r1, #2 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - subs r1, #8 - movs r0, #0x1f - strh r0, [r1] - adds r1, #2 - movs r0, #0x3f - strh r0, [r1] - subs r1, #0xa - movs r0, #0xf0 - strh r0, [r1] - adds r1, #4 - movs r0, #0x60 - strh r0, [r1] - ldr r0, _080537F8 @ =0x00001C4E - strh r0, [r2, #0x14] - ldr r0, _080537FC @ =0x00001DC1 - strh r0, [r2, #0x20] - movs r0, #0xf - bl SoundReq - bl ResetSystemPriority - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {r4, pc} - .align 2, 0 -_080537DC: .4byte gMenu -_080537E0: .4byte gUnk_02032EC0 -_080537E4: .4byte gMapBottom -_080537E8: .4byte gMapTop -_080537EC: .4byte gRoomControls -_080537F0: .4byte gScreen -_080537F4: .4byte 0x00002244 -_080537F8: .4byte 0x00001C4E -_080537FC: .4byte 0x00001DC1 - - thumb_func_start sub_08053800 -sub_08053800: @ 0x08053800 - push {r4, r5, lr} - ldr r0, _0805387C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _0805387A - ldr r1, _08053880 @ =gMenu - ldrb r5, [r1, #0x10] - lsls r4, r5, #1 - adds r4, r4, r5 - lsls r4, r4, #2 - ldr r0, _08053884 @ =gUnk_080FCCB4 - adds r4, r4, r0 - ldrh r0, [r4, #8] - movs r2, #0 - strh r0, [r1, #8] - movs r0, #0x1e - strh r0, [r1, #0xa] - ldrb r0, [r1, #0x10] - adds r0, #1 - strb r0, [r1, #0x10] - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - strb r2, [r1, #7] - adds r0, r5, #0 - adds r0, #0x8a - bl LoadPaletteGroup - adds r0, r5, #0 - adds r0, #0x3a - bl LoadGfxGroup - ldr r0, _08053888 @ =gBG1Buffer - movs r1, #0x80 - lsls r1, r1, #4 - bl MemClear - ldr r0, _0805388C @ =0x00000F01 - adds r5, r5, r0 - ldr r1, [r4] - adds r0, r5, #0 - bl sub_0805F46C - ldr r2, _08053890 @ =gScreen - movs r0, #1 - strh r0, [r2, #0x1a] - adds r1, r2, #0 - adds r1, #0x68 - movs r0, #0x10 - strh r0, [r1] - ldrh r1, [r4, #4] - adds r0, r2, #0 - adds r0, #0x58 - strh r1, [r0] - ldrh r1, [r4, #6] - adds r0, #4 - strh r1, [r0] - ldrh r1, [r4, #0xa] - movs r0, #4 - bl SetFade -_0805387A: - pop {r4, r5, pc} - .align 2, 0 -_0805387C: .4byte gFadeControl -_08053880: .4byte gMenu -_08053884: .4byte gUnk_080FCCB4 -_08053888: .4byte gBG1Buffer -_0805388C: .4byte 0x00000F01 -_08053890: .4byte gScreen - - thumb_func_start sub_08053894 -sub_08053894: @ 0x08053894 - push {r4, lr} - ldr r0, _080538B4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080538F8 - ldr r1, _080538B8 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - ldrh r0, [r1, #0xa] - adds r4, r1, #0 - cmp r0, #0 - beq _080538BC - subs r0, #1 - strh r0, [r4, #0xa] - b _080538E4 - .align 2, 0 -_080538B4: .4byte gFadeControl -_080538B8: .4byte gMenu -_080538BC: - ldr r0, _080538FC @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _080538E4 - ldrb r1, [r4, #7] - cmp r1, #0xf - bhi _080538E4 - adds r1, #1 - strb r1, [r4, #7] - lsls r1, r1, #0x18 - ldr r3, _08053900 @ =gScreen - lsrs r2, r1, #0x10 - lsrs r1, r1, #0x19 - movs r0, #0x10 - subs r0, r0, r1 - orrs r2, r0 - adds r3, #0x68 - strh r2, [r3] -_080538E4: - ldrh r0, [r4, #8] - cmp r0, #0 - bne _080538F8 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #5 - movs r1, #8 - bl SetFade -_080538F8: - pop {r4, pc} - .align 2, 0 -_080538FC: .4byte gRoomTransition -_08053900: .4byte gScreen - - thumb_func_start sub_08053904 -sub_08053904: @ 0x08053904 - push {r4, lr} - ldr r0, _08053924 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053968 - ldr r1, _08053928 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - ldrh r0, [r1, #0xa] - adds r4, r1, #0 - cmp r0, #0 - beq _0805392C - subs r0, #1 - strh r0, [r4, #0xa] - b _08053954 - .align 2, 0 -_08053924: .4byte gFadeControl -_08053928: .4byte gMenu -_0805392C: - ldr r0, _0805396C @ =gRoomTransition - ldr r0, [r0] - movs r1, #1 - ands r0, r1 - cmp r0, #0 - bne _08053954 - ldrb r1, [r4, #7] - cmp r1, #0xf - bhi _08053954 - adds r1, #1 - strb r1, [r4, #7] - lsls r1, r1, #0x18 - ldr r3, _08053970 @ =gScreen - lsrs r2, r1, #0x10 - lsrs r1, r1, #0x19 - movs r0, #0x10 - subs r0, r0, r1 - orrs r2, r0 - adds r3, #0x68 - strh r2, [r3] -_08053954: - ldrh r0, [r4, #8] - cmp r0, #0 - bne _08053968 - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - movs r0, #5 - movs r1, #1 - bl SetFade -_08053968: - pop {r4, pc} - .align 2, 0 -_0805396C: .4byte gRoomTransition -_08053970: .4byte gScreen - - thumb_func_start sub_08053974 -sub_08053974: @ 0x08053974 - push {lr} - ldr r0, _080539AC @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080539A8 - bl InitFade - movs r0, #1 - bl DispReset - bl SetBGDefaults - bl sub_08051F78 - ldr r0, _080539B0 @ =gUnk_080FCBC4 - bl LoadRoomEntityList - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - ldr r1, _080539B4 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_080539A8: - pop {pc} - .align 2, 0 -_080539AC: .4byte gFadeControl -_080539B0: .4byte gUnk_080FCBC4 -_080539B4: .4byte gMenu - - thumb_func_start nullsub_482 -nullsub_482: @ 0x080539B8 - bx lr - .align 2, 0 - - thumb_func_start sub_080539BC -sub_080539BC: @ 0x080539BC - push {lr} - bl SetBGDefaults - bl DeleteAllEntities - movs r0, #0x22 - movs r1, #0x11 - movs r2, #0 - movs r3, #0 - bl sub_08051F9C - movs r0, #0x22 - movs r1, #0x11 - bl sub_0804B0B0 - ldr r0, _080539EC @ =gUnk_080FCC14 - bl LoadRoomEntityList - ldr r1, _080539F0 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - pop {pc} - .align 2, 0 -_080539EC: .4byte gUnk_080FCC14 -_080539F0: .4byte gMenu - - thumb_func_start sub_080539F4 -sub_080539F4: @ 0x080539F4 - push {lr} - ldr r0, _08053A14 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053A10 - movs r0, #1 - bl DispReset - ldr r0, _08053A18 @ =gMenu - ldrb r1, [r0, #6] - adds r1, #1 - strb r1, [r0, #6] - movs r1, #0x3c - strh r1, [r0, #8] -_08053A10: - pop {pc} - .align 2, 0 -_08053A14: .4byte gFadeControl -_08053A18: .4byte gMenu - - thumb_func_start sub_08053A1C -sub_08053A1C: @ 0x08053A1C - push {r4, lr} - ldr r1, _08053A50 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053A4E - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - movs r4, #8 - movs r0, #8 - strh r0, [r1, #8] - ldr r0, _08053A54 @ =0x00000F07 - bl MessageFromTarget - ldr r1, _08053A58 @ =gMessage - movs r0, #1 - strb r0, [r1, #6] - strb r4, [r1, #7] - movs r0, #4 - movs r1, #8 - bl SetFade -_08053A4E: - pop {r4, pc} - .align 2, 0 -_08053A50: .4byte gMenu -_08053A54: .4byte 0x00000F07 -_08053A58: .4byte gMessage - - thumb_func_start sub_08053A5C -sub_08053A5C: @ 0x08053A5C - push {lr} - ldr r0, _08053A88 @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08053A86 - ldr r1, _08053A8C @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053A86 - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - movs r0, #5 - movs r1, #8 - bl SetFade -_08053A86: - pop {pc} - .align 2, 0 -_08053A88: .4byte gMessage -_08053A8C: .4byte gMenu - - thumb_func_start sub_08053A90 -sub_08053A90: @ 0x08053A90 - push {lr} - ldr r0, _08053AA8 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053AA4 - ldr r1, _08053AAC @ =gUnk_02032EC0 - movs r0, #3 - strb r0, [r1] - bl SetBGDefaults -_08053AA4: - pop {pc} - .align 2, 0 -_08053AA8: .4byte gFadeControl -_08053AAC: .4byte gUnk_02032EC0 - - thumb_func_start sub_08053AB0 -sub_08053AB0: @ 0x08053AB0 - push {lr} - ldr r1, _08053AC4 @ =gUnk_080FCDD4 - ldr r0, _08053AC8 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053AC4: .4byte gUnk_080FCDD4 -_08053AC8: .4byte gMenu - - thumb_func_start sub_08053ACC -sub_08053ACC: @ 0x08053ACC - push {lr} - ldr r1, _08053AF4 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - ldr r1, _08053AF8 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - bl sub_08051FF0 - ldr r0, _08053AFC @ =gUnk_080FCD84 - bl LoadRoomEntityList - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {pc} - .align 2, 0 -_08053AF4: .4byte gMenu -_08053AF8: .4byte gUpdateVisibleTiles -_08053AFC: .4byte gUnk_080FCD84 - - thumb_func_start sub_08053B00 -sub_08053B00: @ 0x08053B00 - ldr r1, _08053B0C @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - bx lr - .align 2, 0 -_08053B0C: .4byte gMenu - - thumb_func_start sub_08053B10 -sub_08053B10: @ 0x08053B10 - push {lr} - movs r0, #1 - bl CheckRoomFlag - cmp r0, #0 - beq _08053B34 - ldr r0, _08053B38 @ =gMenu - ldrb r1, [r0, #5] - adds r1, #1 - strb r1, [r0, #5] - movs r0, #1 - bl DispReset - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #4 - bl SetFade -_08053B34: - pop {pc} - .align 2, 0 -_08053B38: .4byte gMenu - - thumb_func_start sub_08053B3C -sub_08053B3C: @ 0x08053B3C - push {r4, lr} - movs r4, #0x80 - lsls r4, r4, #1 - movs r0, #5 - movs r1, #4 - movs r2, #5 - adds r3, r4, #0 - bl sub_080A71C4 - movs r0, #5 - adds r1, r4, #0 - bl SetFade - pop {r4, pc} - - thumb_func_start sub_08053B58 -sub_08053B58: @ 0x08053B58 - push {lr} - ldr r1, _08053B6C @ =gUnk_080FCEB0 - ldr r0, _08053B70 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053B6C: .4byte gUnk_080FCEB0 -_08053B70: .4byte gMenu - - thumb_func_start sub_08053B74 -sub_08053B74: @ 0x08053B74 - push {lr} - ldr r1, _08053BA0 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - ldr r1, _08053BA4 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - ldr r0, _08053BA8 @ =gUnk_080FCDE0 - bl LoadRoomEntityList - bl ResetSystemPriority - bl ResetEntityPriority - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #5 - bl SetFade - pop {pc} - .align 2, 0 -_08053BA0: .4byte gMenu -_08053BA4: .4byte gUpdateVisibleTiles -_08053BA8: .4byte gUnk_080FCDE0 - - thumb_func_start sub_08053BAC -sub_08053BAC: @ 0x08053BAC - ldr r1, _08053BB8 @ =gMenu - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - bx lr - .align 2, 0 -_08053BB8: .4byte gMenu - - thumb_func_start sub_08053BBC -sub_08053BBC: @ 0x08053BBC - push {lr} - movs r0, #0 - bl CheckRoomFlag - cmp r0, #0 - beq _08053BE0 - ldr r0, _08053BE4 @ =gMenu - ldrb r1, [r0, #5] - adds r1, #1 - strb r1, [r0, #5] - movs r0, #1 - bl DispReset - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #4 - bl SetFade -_08053BE0: - pop {pc} - .align 2, 0 -_08053BE4: .4byte gMenu - - thumb_func_start sub_08053BE8 -sub_08053BE8: @ 0x08053BE8 - push {r4, lr} - movs r4, #0x80 - lsls r4, r4, #1 - movs r0, #5 - movs r1, #2 - movs r2, #5 - adds r3, r4, #0 - bl sub_080A71C4 - movs r0, #5 - adds r1, r4, #0 - bl SetFade - pop {r4, pc} - - thumb_func_start sub_08053C04 -sub_08053C04: @ 0x08053C04 - push {lr} - ldr r1, _08053C18 @ =gUnk_080FCEEC - ldr r0, _08053C1C @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053C18: .4byte gUnk_080FCEEC -_08053C1C: .4byte gMenu - - thumb_func_start sub_08053C20 -sub_08053C20: @ 0x08053C20 - push {lr} - ldr r1, _08053C50 @ =gMenu - movs r2, #1 - strb r2, [r1, #6] - movs r0, #0x78 - strh r0, [r1, #8] - ldr r0, _08053C54 @ =gUpdateVisibleTiles - strb r2, [r0] - bl sub_08051FF0 - movs r0, #4 - bl sub_0805B4D0 - ldr r0, _08053C58 @ =gUnk_080FCEBC - bl LoadRoomEntityList - movs r0, #4 - movs r1, #0x10 - bl SetFade - movs r0, #0x33 - bl SoundReq - pop {pc} - .align 2, 0 -_08053C50: .4byte gMenu -_08053C54: .4byte gUpdateVisibleTiles -_08053C58: .4byte gUnk_080FCEBC - - thumb_func_start nullsub_483 -nullsub_483: @ 0x08053C5C - bx lr - .align 2, 0 - - thumb_func_start sub_08053C60 -sub_08053C60: @ 0x08053C60 - push {lr} - movs r0, #5 - movs r1, #2 - bl SetFade - movs r0, #0xf4 - bl SoundReq - ldr r0, _08053C80 @ =0x80100000 - bl SoundReq - movs r0, #3 - bl SetTask - pop {pc} - .align 2, 0 -_08053C80: .4byte 0x80100000 - - thumb_func_start sub_08053C84 -sub_08053C84: @ 0x08053C84 - ldr r1, _08053C8C @ =gMenu - movs r0, #2 - strb r0, [r1, #6] - bx lr - .align 2, 0 -_08053C8C: .4byte gMenu - - thumb_func_start CutsceneMain_Exit -CutsceneMain_Exit: @ 0x08053C90 - push {lr} - ldr r1, _08053CA4 @ =gUnk_080FCEF8 - ldr r0, _08053CA8 @ =gMenu - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053CA4: .4byte gUnk_080FCEF8 -_08053CA8: .4byte gMenu - - thumb_func_start sub_08053CAC -sub_08053CAC: @ 0x08053CAC - push {lr} - ldr r1, _08053CC0 @ =gUnk_080FCFA4 - ldr r0, _08053CC4 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053CC0: .4byte gUnk_080FCFA4 -_08053CC4: .4byte gMenu - - thumb_func_start sub_08053CC8 -sub_08053CC8: @ 0x08053CC8 - push {r4, r5, r6, lr} - ldr r6, _08053D20 @ =gMenu - ldrb r4, [r6, #3] - lsls r4, r4, #4 - ldr r0, _08053D24 @ =gUnk_080FCF04 - adds r4, r4, r0 - adds r0, r4, #0 - adds r0, #8 - str r0, [r6, #0xc] - ldr r0, [r4] - bl LoadRoomEntityList - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - movs r2, #1 - bl GetRoomProperty - bl LoadRoomEntityList - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - movs r2, #2 - bl GetRoomProperty - bl LoadRoomEntityList - movs r5, #1 - strb r5, [r6, #6] - ldr r2, _08053D28 @ =gScreen - ldrh r1, [r2] - ldr r0, _08053D2C @ =0x0000FEFF - ands r0, r1 - strh r0, [r2] - ldr r0, _08053D30 @ =gUpdateVisibleTiles - strb r5, [r0] - movs r0, #4 - movs r1, #0x10 - bl SetFade - ldrb r0, [r4, #5] - cmp r0, #0x1d - bne _08053D1E - strh r5, [r6, #0xa] -_08053D1E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08053D20: .4byte gMenu -_08053D24: .4byte gUnk_080FCF04 -_08053D28: .4byte gScreen -_08053D2C: .4byte 0x0000FEFF -_08053D30: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08053D34 -sub_08053D34: @ 0x08053D34 - push {r4, lr} - ldr r1, _08053D88 @ =gMenu - ldrh r0, [r1, #0xa] - cmp r0, #0 - beq _08053D72 - movs r0, #0 - strh r0, [r1, #0xa] - movs r4, #0xd0 - lsls r4, r4, #3 - adds r0, r4, #0 - movs r1, #0x3d - bl CheckLocalFlagByBank - cmp r0, #0 - beq _08053D5C - movs r0, #0x74 - movs r1, #0xc4 - movs r2, #1 - bl SetTileType -_08053D5C: - adds r0, r4, #0 - movs r1, #0x3e - bl CheckLocalFlagByBank - cmp r0, #0 - beq _08053D72 - movs r0, #0x74 - movs r1, #0xcc - movs r2, #1 - bl SetTileType -_08053D72: - ldr r0, _08053D8C @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053D86 - ldr r1, _08053D88 @ =gMenu - movs r0, #0x78 - strh r0, [r1, #8] - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] -_08053D86: - pop {r4, pc} - .align 2, 0 -_08053D88: .4byte gMenu -_08053D8C: .4byte gFadeControl - - thumb_func_start sub_08053D90 -sub_08053D90: @ 0x08053D90 - push {lr} - ldr r1, _08053DB0 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053DAC - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - movs r0, #0x10 - bl SetFadeInverted -_08053DAC: - pop {pc} - .align 2, 0 -_08053DB0: .4byte gMenu - - thumb_func_start sub_08053DB4 -sub_08053DB4: @ 0x08053DB4 - push {r4, r5, lr} - ldr r0, _08053E20 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053E1C - ldr r5, _08053E24 @ =gMenu - ldr r4, [r5, #0xc] - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - bl sub_08052FF4 - bl sub_0807C740 - ldr r1, _08053E28 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - ldr r1, _08053E2C @ =gRoomControls - movs r0, #6 - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0xa] - adds r0, r0, r2 - strh r0, [r1, #0xa] - movs r0, #7 - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0xc] - adds r0, r0, r2 - strh r0, [r1, #0xc] - ldr r0, [r4] - bl LoadRoomEntityList - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - movs r2, #1 - bl GetRoomProperty - bl LoadRoomEntityList - ldrb r0, [r4, #4] - ldrb r1, [r4, #5] - movs r2, #2 - bl GetRoomProperty - bl LoadRoomEntityList - movs r0, #0x78 - strh r0, [r5, #8] - ldrb r0, [r5, #6] - adds r0, #1 - strb r0, [r5, #6] - movs r0, #0x10 - bl SetFadeInverted -_08053E1C: - pop {r4, r5, pc} - .align 2, 0 -_08053E20: .4byte gFadeControl -_08053E24: .4byte gMenu -_08053E28: .4byte gUpdateVisibleTiles -_08053E2C: .4byte gRoomControls - - thumb_func_start sub_08053E30 -sub_08053E30: @ 0x08053E30 - push {lr} - ldr r0, _08053E50 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053E4E - ldr r1, _08053E54 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053E4E - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] -_08053E4E: - pop {pc} - .align 2, 0 -_08053E50: .4byte gFadeControl -_08053E54: .4byte gMenu - - thumb_func_start sub_08053E58 -sub_08053E58: @ 0x08053E58 - push {lr} - ldr r1, _08053E6C @ =gUnk_080FD108 - ldr r0, _08053E70 @ =gMenu - ldrb r0, [r0, #6] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053E6C: .4byte gUnk_080FD108 -_08053E70: .4byte gMenu - - thumb_func_start sub_08053E74 -sub_08053E74: @ 0x08053E74 - push {r4, lr} - ldr r0, _08053EB0 @ =gUnk_080FCFB8 - ldr r4, _08053EB4 @ =gMenu - str r0, [r4, #0xc] - ldr r0, [r0] - bl LoadRoomEntityList - movs r0, #0x78 - strh r0, [r4, #8] - movs r0, #0x3c - strh r0, [r4, #0xa] - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] - ldr r2, _08053EB8 @ =gScreen - ldrh r1, [r2] - ldr r0, _08053EBC @ =0x0000FEFF - ands r0, r1 - strh r0, [r2] - ldr r1, _08053EC0 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - movs r0, #1 - bl SetMinPriority - movs r0, #4 - movs r1, #8 - bl SetFade - pop {r4, pc} - .align 2, 0 -_08053EB0: .4byte gUnk_080FCFB8 -_08053EB4: .4byte gMenu -_08053EB8: .4byte gScreen -_08053EBC: .4byte 0x0000FEFF -_08053EC0: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08053EC4 -sub_08053EC4: @ 0x08053EC4 - push {r4, lr} - ldr r0, _08053EF4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053EF0 - ldr r4, _08053EF8 @ =gMenu - ldrh r0, [r4, #0xa] - subs r0, #1 - strh r0, [r4, #0xa] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053EF0 - ldr r1, [r4, #0xc] - adds r0, r1, #0 - adds r0, #0xc - str r0, [r4, #0xc] - ldr r0, [r1, #4] - bl LoadRoomEntityList - ldrb r0, [r4, #6] - adds r0, #1 - strb r0, [r4, #6] -_08053EF0: - pop {r4, pc} - .align 2, 0 -_08053EF4: .4byte gFadeControl -_08053EF8: .4byte gMenu - - thumb_func_start sub_08053EFC -sub_08053EFC: @ 0x08053EFC - push {lr} - ldr r1, _08053F1C @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053F18 - ldrb r0, [r1, #6] - adds r0, #1 - strb r0, [r1, #6] - movs r0, #8 - bl SetFadeInverted -_08053F18: - pop {pc} - .align 2, 0 -_08053F1C: .4byte gMenu - - thumb_func_start sub_08053F20 -sub_08053F20: @ 0x08053F20 - push {r4, r5, lr} - ldr r0, _08053F78 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053F74 - bl DeleteAllEntities - ldr r5, _08053F7C @ =gMenu - ldr r4, [r5, #0xc] - ldrb r0, [r4, #8] - ldrb r1, [r4, #9] - bl sub_08052FF4 - bl sub_0807C740 - ldr r1, _08053F80 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - ldr r1, _08053F84 @ =gRoomControls - movs r0, #0xa - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0xa] - adds r0, r0, r2 - strh r0, [r1, #0xa] - movs r0, #0xb - ldrsb r0, [r4, r0] - ldrh r2, [r1, #0xc] - adds r0, r0, r2 - strh r0, [r1, #0xc] - ldr r0, [r4] - bl LoadRoomEntityList - movs r0, #0x78 - strh r0, [r5, #8] - movs r0, #0x3c - strh r0, [r5, #0xa] - ldrb r0, [r5, #6] - adds r0, #1 - strb r0, [r5, #6] - movs r0, #8 - bl SetFadeInverted -_08053F74: - pop {r4, r5, pc} - .align 2, 0 -_08053F78: .4byte gFadeControl -_08053F7C: .4byte gMenu -_08053F80: .4byte gUpdateVisibleTiles -_08053F84: .4byte gRoomControls - - thumb_func_start sub_08053F88 -sub_08053F88: @ 0x08053F88 - push {lr} - ldr r0, _08053FAC @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08053FAA - ldr r1, _08053FB0 @ =gMenu - ldrh r0, [r1, #8] - subs r0, #1 - strh r0, [r1, #8] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08053FAA - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] - bl ResetEntityPriority -_08053FAA: - pop {pc} - .align 2, 0 -_08053FAC: .4byte gFadeControl -_08053FB0: .4byte gMenu - - thumb_func_start CutsceneMain_Update -CutsceneMain_Update: @ 0x08053FB4 - push {lr} - ldr r1, _08053FC8 @ =gUnk_080FD138 - ldr r0, _08053FCC @ =gMenu - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08053FC8: .4byte gUnk_080FD138 -_08053FCC: .4byte gMenu - - thumb_func_start GetSaleItemConfirmMessageID -GetSaleItemConfirmMessageID: @ 0x08053FD0 - lsls r0, r0, #3 - ldr r1, _08053FDC @ =gUnk_080FD964 - adds r0, r0, r1 - ldrh r0, [r0, #4] - bx lr - .align 2, 0 -_08053FDC: .4byte gUnk_080FD964 - - thumb_func_start GetItemPrice -GetItemPrice: @ 0x08053FE0 - lsls r0, r0, #3 - ldr r1, _08053FEC @ =gUnk_080FD964 - adds r0, r0, r1 - ldrh r0, [r0] - bx lr - .align 2, 0 -_08053FEC: .4byte gUnk_080FD964 - - thumb_func_start GiveItem -GiveItem: @ 0x08053FF0 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - adds r7, r1, #0 - bl GetInventoryValue - adds r5, r0, #0 - lsls r1, r6, #3 - ldr r0, _08054010 @ =gItemMetaData - adds r4, r1, r0 - cmp r5, #0 - bne _08054014 - ldrh r0, [r4, #4] - mov r8, r0 - b _08054018 - .align 2, 0 -_08054010: .4byte gItemMetaData -_08054014: - ldrh r2, [r4, #6] - mov r8, r2 -_08054018: - adds r0, r6, #0 - bl ItemIsBottle - cmp r0, #0 - bne _08054034 - adds r0, r6, #0 - bl PutItemOnSlot - cmp r5, #0 - bne _08054034 - adds r0, r6, #0 - movs r1, #1 - bl sub_0807CAA0 -_08054034: - ldrb r0, [r4, #1] - cmp r0, #0x12 - bls _0805403C - b _0805427C -_0805403C: - lsls r0, r0, #2 - ldr r1, _08054048 @ =_0805404C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08054048: .4byte _0805404C -_0805404C: @ jump table - .4byte _0805427C @ case 0 - .4byte _08054098 @ case 1 - .4byte _080540A6 @ case 2 - .4byte _080540C0 @ case 3 - .4byte _08054104 @ case 4 - .4byte _0805414C @ case 5 - .4byte _08054154 @ case 6 - .4byte _08054194 @ case 7 - .4byte _080541B6 @ case 8 - .4byte _080541F0 @ case 9 - .4byte _08054212 @ case 10 - .4byte _080541F8 @ case 11 - .4byte _08054238 @ case 12 - .4byte _08054174 @ case 13 - .4byte _08054240 @ case 14 - .4byte _0805425C @ case 15 - .4byte _08054264 @ case 16 - .4byte _080541B0 @ case 17 - .4byte _0805417C @ case 18 -_08054098: - ldrb r0, [r4, #2] - bl ModHealth - movs r0, #0x71 - bl SoundReq - b _0805427C -_080540A6: - ldr r0, _080540BC @ =gUnk_080FD5A8 - ldrb r1, [r4, #2] - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r0, [r1] - bl ModRupees - movs r0, #0x6f - bl SoundReq - b _0805427C - .align 2, 0 -_080540BC: .4byte gUnk_080FD5A8 -_080540C0: - movs r5, #0 - movs r4, #0x1c - b _080540CA -_080540C6: - adds r4, r1, #1 - adds r5, #1 -_080540CA: - cmp r5, #3 - bls _080540D0 - b _0805427C -_080540D0: - adds r0, r4, #0 - bl GetInventoryValue - adds r1, r4, #0 - cmp r0, #0 - bne _080540C6 - adds r6, r4, #0 - ldr r0, _08054100 @ =gSave - adds r0, #0xb6 - adds r1, r5, r0 - ldrb r0, [r1] - cmp r0, #0 - bne _080540EE - movs r0, #0x20 - strb r0, [r1] -_080540EE: - adds r0, r6, #0 - movs r1, #1 - bl sub_0807CAA0 - adds r0, r6, #0 - bl PutItemOnSlot - b _0805427C - .align 2, 0 -_08054100: .4byte gSave -_08054104: - movs r5, #0 - ldr r0, _08054144 @ =gSave - adds r2, r0, #0 - adds r2, #0xb6 - ldrb r1, [r2] - adds r3, r0, #0 - cmp r1, #0x20 - beq _08054126 - adds r1, r2, #0 -_08054116: - adds r5, #1 - cmp r5, #3 - bls _0805411E - b _0805427C -_0805411E: - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, #0x20 - bne _08054116 -_08054126: - cmp r5, #3 - bls _0805412C - b _0805427C -_0805412C: - adds r0, r3, #0 - adds r0, #0xb6 - adds r0, r5, r0 - strb r6, [r0] - adds r0, r6, #0 - movs r1, #1 - bl sub_0807CAA0 - ldr r0, _08054148 @ =0x00000109 - bl SoundReq - b _0805427C - .align 2, 0 -_08054144: .4byte gSave -_08054148: .4byte 0x00000109 -_0805414C: - movs r0, #1 - bl sub_080526F8 - b _0805424E -_08054154: - ldr r1, _08054168 @ =gSave - ldr r0, _0805416C @ =gArea - ldr r2, _08054170 @ =0x0000046C - adds r1, r1, r2 - ldrb r0, [r0, #3] - adds r1, r1, r0 - ldrb r0, [r1] - ldrb r2, [r4, #2] - orrs r0, r2 - b _0805427A - .align 2, 0 -_08054168: .4byte gSave -_0805416C: .4byte gArea -_08054170: .4byte 0x0000046C -_08054174: - movs r0, #0x72 - bl sub_0801E738 - b _0805427C -_0805417C: - cmp r6, #0xb - bne _0805418A - movs r0, #0xc - movs r1, #0 - bl sub_0807CAA0 - b _080541B0 -_0805418A: - movs r0, #0xb - movs r1, #0 - bl sub_0807CAA0 - b _080541B0 -_08054194: - cmp r6, #7 - bne _080541A2 - movs r0, #8 - movs r1, #0 - bl sub_0807CAA0 - b _080541AA -_080541A2: - movs r0, #7 - movs r1, #0 - bl sub_0807CAA0 -_080541AA: - movs r0, #0x63 - bl ModBombs -_080541B0: - bl LoadItemGfx - b _0805427C -_080541B6: - cmp r5, #0 - bne _080541CA - movs r0, #7 - movs r1, #1 - bl sub_0807CAA0 - movs r0, #7 - bl PutItemOnSlot - b _080541E2 -_080541CA: - ldr r0, _080541EC @ =gSave - adds r1, r0, #0 - adds r1, #0xae - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _080541E2 - movs r0, #3 - strb r0, [r1] -_080541E2: - movs r0, #0x63 - bl ModBombs - b _0805427C - .align 2, 0 -_080541EC: .4byte gSave -_080541F0: - ldrb r0, [r4, #2] - bl ModBombs - b _0805424E -_080541F8: - movs r0, #0x66 - bl GetInventoryValue - cmp r0, #0 - bne _0805420A - movs r0, #0x66 - movs r1, #1 - bl sub_0807CAA0 -_0805420A: - movs r0, #0x63 - bl ModArrows - b _080541B0 -_08054212: - ldr r0, _08054234 @ =gSave - adds r1, r0, #0 - adds r1, #0xaf - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _0805422A - movs r0, #3 - strb r0, [r1] -_0805422A: - movs r0, #0x63 - bl ModArrows - b _0805427C - .align 2, 0 -_08054234: .4byte gSave -_08054238: - ldrb r0, [r4, #2] - bl ModArrows - b _0805424E -_08054240: - movs r0, #0x3f - movs r1, #1 - bl sub_0807CAA0 - adds r0, r7, #0 - bl sub_080542C0 -_0805424E: - ldr r0, _08054258 @ =0x00000103 - bl SoundReq - b _0805427C - .align 2, 0 -_08054258: .4byte 0x00000103 -_0805425C: - adds r0, r7, #0 - bl sub_0801E738 - b _0805427C -_08054264: - ldr r0, _08054284 @ =gSave - adds r1, r0, #0 - adds r1, #0xa8 - ldrb r0, [r1] - adds r0, #1 - strb r0, [r1] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #3 - bls _0805427C - movs r0, #3 -_0805427A: - strb r0, [r1] -_0805427C: - mov r0, r8 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08054284: .4byte gSave - - thumb_func_start sub_08054288 -sub_08054288: @ 0x08054288 - push {lr} - ldr r1, _08054298 @ =gItemMetaData - lsls r0, r0, #3 - adds r0, r0, r1 - ldrh r0, [r0, #6] - bl MessageFromTarget - pop {pc} - .align 2, 0 -_08054298: .4byte gItemMetaData - - thumb_func_start sub_0805429C -sub_0805429C: @ 0x0805429C - ldr r1, _080542A8 @ =gItemMetaData - lsls r0, r0, #3 - adds r0, r0, r1 - ldrh r0, [r0, #4] - bx lr - .align 2, 0 -_080542A8: .4byte gItemMetaData - - thumb_func_start sub_080542AC -sub_080542AC: @ 0x080542AC - ldr r1, _080542BC @ =gItemMetaData - lsls r0, r0, #3 - adds r0, r0, r1 - ldrb r1, [r0, #3] - movs r0, #1 - ands r0, r1 - bx lr - .align 2, 0 -_080542BC: .4byte gItemMetaData - - thumb_func_start sub_080542C0 -sub_080542C0: @ 0x080542C0 - push {lr} - adds r2, r0, #0 - cmp r2, #0 - bne _080542CA - movs r2, #1 -_080542CA: - ldr r1, _080542DC @ =gSave - adds r0, r1, #0 - adds r0, #0xc2 - ldrh r0, [r0] - adds r2, r2, r0 - cmp r2, #0 - bge _080542E0 - movs r2, #0 - b _080542E8 - .align 2, 0 -_080542DC: .4byte gSave -_080542E0: - ldr r3, _080542F0 @ =0x000003E7 - cmp r2, r3 - ble _080542E8 - adds r2, r3, #0 -_080542E8: - adds r0, r1, #0 - adds r0, #0xc2 - strh r2, [r0] - pop {pc} - .align 2, 0 -_080542F0: .4byte 0x000003E7 - diff --git a/asm/code_0805436C.s b/asm/code_0805436C.s deleted file mode 100644 index 631a6924..00000000 --- a/asm/code_0805436C.s +++ /dev/null @@ -1,207 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0805488C -sub_0805488C: @ 0x0805488C - push {r4, lr} - ldr r4, _080548DC @ =gUnk_02032EC0 - ldrb r1, [r4, #3] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _080548E0 @ =gUnk_080FE320 - adds r0, r0, r1 - ldr r2, _080548E4 @ =gMenu - ldrb r1, [r0] - movs r3, #0 - strb r1, [r2] - ldrb r1, [r0, #1] - strb r1, [r2, #3] - ldrb r1, [r4, #3] - strb r1, [r2, #4] - str r0, [r2, #0xc] - ldrb r0, [r2, #5] - adds r0, #1 - strb r0, [r2, #5] - strb r3, [r2, #6] - movs r0, #0x96 - lsls r0, r0, #1 - strh r0, [r2, #8] - movs r0, #0 - bl DispReset - ldrb r0, [r4, #3] - movs r1, #1 - bl sub_08054974 - bl sub_0806F364 - movs r0, #0xff - bl ClearRoomFlag - bl sub_080548E8 - pop {r4, pc} - .align 2, 0 -_080548DC: .4byte gUnk_02032EC0 -_080548E0: .4byte gUnk_080FE320 -_080548E4: .4byte gMenu - - thumb_func_start sub_080548E8 -sub_080548E8: @ 0x080548E8 - push {lr} - ldr r1, _08054918 @ =gUnk_080FE2AC - ldr r0, _0805491C @ =gMenu - ldrb r0, [r0] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl FlushSprites - bl UpdateEntities - bl DrawEntities - bl CopyOAM - bl UpdateScroll - bl UpdateBgAnim - bl UpdateScrollVram - pop {pc} - .align 2, 0 -_08054918: .4byte gUnk_080FE2AC -_0805491C: .4byte gMenu - - thumb_func_start sub_08054920 -sub_08054920: @ 0x08054920 - push {lr} - bl MessageInitialize - bl sub_0806F38C - ldr r1, _08054948 @ =gUnk_080C9CBC - ldr r0, _0805494C @ =gFuseInfo - ldrb r0, [r0, #3] - lsls r0, r0, #3 - adds r0, r0, r1 - ldrb r0, [r0, #7] - cmp r0, #0 - beq _08054954 - ldr r0, _08054950 @ =gUnk_02032EC0 - ldrb r1, [r0, #3] - movs r0, #0xa - bl MenuFadeIn - b _08054962 - .align 2, 0 -_08054948: .4byte gUnk_080C9CBC -_0805494C: .4byte gFuseInfo -_08054950: .4byte gUnk_02032EC0 -_08054954: - ldr r1, _08054964 @ =gUnk_02032EC0 - movs r0, #3 - strb r0, [r1] - movs r0, #7 - movs r1, #0x10 - bl SetFade -_08054962: - pop {pc} - .align 2, 0 -_08054964: .4byte gUnk_02032EC0 - - thumb_func_start sub_08054968 -sub_08054968: @ 0x08054968 - ldr r1, _08054970 @ =gMenu - movs r0, #2 - strb r0, [r1, #5] - bx lr - .align 2, 0 -_08054970: .4byte gMenu - - thumb_func_start sub_08054974 -sub_08054974: @ 0x08054974 - push {r4, r5, r6, lr} - adds r5, r1, #0 - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _080549B0 @ =gUnk_080FE320 - adds r6, r1, r0 - ldrb r0, [r6, #2] - ldrb r1, [r6, #3] - bl SetCurrentRoomPropertyList - ldr r4, _080549B4 @ =gRoomControls - ldrb r0, [r6, #2] - strb r0, [r4, #4] - ldrb r0, [r6, #3] - strb r0, [r4, #5] - bl LoadGfxGroups - ldrb r0, [r4, #4] - bl GetFlagBankOffset - ldr r1, _080549B8 @ =gArea - strh r0, [r1, #4] - cmp r5, #0 - beq _080549BC - ldrb r0, [r6, #2] - ldrb r1, [r6, #3] - bl LoadAuxiliaryRoom - b _080549CE - .align 2, 0 -_080549B0: .4byte gUnk_080FE320 -_080549B4: .4byte gRoomControls -_080549B8: .4byte gArea -_080549BC: - ldrb r0, [r6, #2] - ldrb r1, [r6, #3] - bl sub_08052FF4 - bl sub_0807C740 - ldr r1, _08054A00 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_080549CE: - ldr r2, _08054A04 @ =gScreen - ldrh r1, [r2] - ldr r0, _08054A08 @ =0x00001FFF - ands r0, r1 - strh r0, [r2] - ldr r1, _08054A0C @ =gRoomControls - ldrh r0, [r6, #4] - ldrh r2, [r1, #6] - adds r0, r0, r2 - strh r0, [r1, #0xa] - ldrh r0, [r6, #6] - ldrh r2, [r1, #8] - adds r0, r0, r2 - strh r0, [r1, #0xc] - ldrb r0, [r6, #2] - cmp r0, #2 - bne _080549F4 - bl TryLoadPrologueHyruleTown -_080549F4: - ldr r0, _08054A10 @ =gUnk_02032EC0 - ldrb r0, [r0, #3] - bl sub_08018710 - pop {r4, r5, r6, pc} - .align 2, 0 -_08054A00: .4byte gUpdateVisibleTiles -_08054A04: .4byte gScreen -_08054A08: .4byte 0x00001FFF -_08054A0C: .4byte gRoomControls -_08054A10: .4byte gUnk_02032EC0 - - thumb_func_start sub_08054A14 -sub_08054A14: @ 0x08054A14 - push {lr} - lsls r1, r0, #2 - adds r1, r1, r0 - lsls r1, r1, #2 - ldr r0, _08054A38 @ =gUnk_080FE320 - adds r2, r1, r0 - ldrb r0, [r2, #0x11] - cmp r0, #0xd - bhi _08054A34 - ldr r1, _08054A3C @ =gLocalFlagBanks - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - ldrh r1, [r2, #0x12] - bl SetLocalFlagByBank -_08054A34: - pop {pc} - .align 2, 0 -_08054A38: .4byte gUnk_080FE320 -_08054A3C: .4byte gLocalFlagBanks diff --git a/asm/modArrows.s b/asm/modArrows.s deleted file mode 100644 index e7f105ed..00000000 --- a/asm/modArrows.s +++ /dev/null @@ -1,40 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ModArrows -ModArrows: @ 0x08054330 - push {lr} - adds r3, r0, #0 - ldr r1, _08054354 @ =gSave - adds r0, r1, #0 - adds r0, #0xad - ldrb r0, [r0] - adds r3, r3, r0 - ldr r2, _08054358 @ =gQuiverSizes - adds r0, r1, #0 - adds r0, #0xaf - ldrb r0, [r0] - adds r0, r0, r2 - ldrb r2, [r0] - cmp r3, #0 - bge _0805435C - movs r3, #0 - b _08054362 - .align 2, 0 -_08054354: .4byte gSave -_08054358: .4byte gQuiverSizes -_0805435C: - cmp r2, r3 - bge _08054362 - adds r3, r2, #0 -_08054362: - adds r0, r1, #0 - adds r0, #0xad - strb r3, [r0] - pop {pc} - .align 2, 0 diff --git a/asm/modBombs.s b/asm/modBombs.s deleted file mode 100644 index b432a1f3..00000000 --- a/asm/modBombs.s +++ /dev/null @@ -1,40 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ModBombs -ModBombs: @ 0x080542F4 - push {lr} - adds r3, r0, #0 - ldr r1, _08054318 @ =gSave - adds r0, r1, #0 - adds r0, #0xac - ldrb r0, [r0] - adds r3, r3, r0 - ldr r2, _0805431C @ =gBombBagSizes - adds r0, r1, #0 - adds r0, #0xae - ldrb r0, [r0] - adds r0, r0, r2 - ldrb r2, [r0] - cmp r3, #0 - bge _08054320 - movs r3, #0 - b _08054326 - .align 2, 0 -_08054318: .4byte gSave -_0805431C: .4byte gBombBagSizes -_08054320: - cmp r2, r3 - bge _08054326 - adds r3, r2, #0 -_08054326: - adds r0, r1, #0 - adds r0, #0xac - strb r3, [r0] - pop {pc} - .align 2, 0 diff --git a/asm/non_matching/figurineDevice/sub_08088328.inc b/asm/non_matching/figurineDevice/sub_08088328.inc index 07949bf6..449ae275 100644 --- a/asm/non_matching/figurineDevice/sub_08088328.inc +++ b/asm/non_matching/figurineDevice/sub_08088328.inc @@ -15,7 +15,7 @@ _08087CC6: adds r0, #0x81 ldrb r0, [r0] rsbs r0, r0, #0 - bl sub_080542C0 + bl ModShells bl Random movs r1, #0x7f ands r1, r0 @@ -141,7 +141,7 @@ _08088332: adds r0, #0x81 ldrb r0, [r0] rsbs r0, r0, #0 - bl sub_080542C0 + bl ModShells bl Random movs r1, #0x7f ands r1, r0 diff --git a/asm/non_matching/game/GiveItem.inc b/asm/non_matching/game/GiveItem.inc new file mode 100644 index 00000000..303a305f --- /dev/null +++ b/asm/non_matching/game/GiveItem.inc @@ -0,0 +1,314 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + adds r6, r0, #0 + adds r7, r1, #0 + bl GetInventoryValue + adds r5, r0, #0 + lsls r1, r6, #3 + ldr r0, _08054010 @ =gItemMetaData + adds r4, r1, r0 + cmp r5, #0 + bne _08054014 + ldrh r0, [r4, #4] + mov r8, r0 + b _08054018 + .align 2, 0 +_08054010: .4byte gItemMetaData +_08054014: + ldrh r2, [r4, #6] + mov r8, r2 +_08054018: + adds r0, r6, #0 + bl ItemIsBottle + cmp r0, #0 + bne _08054034 + adds r0, r6, #0 + bl PutItemOnSlot + cmp r5, #0 + bne _08054034 + adds r0, r6, #0 + movs r1, #1 + bl SetInventoryValue +_08054034: + ldrb r0, [r4, #1] + cmp r0, #0x12 + bls _0805403C + b _0805427C +_0805403C: + lsls r0, r0, #2 + ldr r1, _08054048 @ =_0805404C + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_08054048: .4byte _0805404C +_0805404C: @ jump table + .4byte _0805427C @ case 0 + .4byte _08054098 @ case 1 + .4byte _080540A6 @ case 2 + .4byte _080540C0 @ case 3 + .4byte _08054104 @ case 4 + .4byte _0805414C @ case 5 + .4byte _08054154 @ case 6 + .4byte _08054194 @ case 7 + .4byte _080541B6 @ case 8 + .4byte _080541F0 @ case 9 + .4byte _08054212 @ case 10 + .4byte _080541F8 @ case 11 + .4byte _08054238 @ case 12 + .4byte _08054174 @ case 13 + .4byte _08054240 @ case 14 + .4byte _0805425C @ case 15 + .4byte _08054264 @ case 16 + .4byte _080541B0 @ case 17 + .4byte _0805417C @ case 18 +_08054098: + ldrb r0, [r4, #2] + bl ModHealth + movs r0, #0x71 + bl SoundReq + b _0805427C +_080540A6: + ldr r0, _080540BC @ =gUnk_080FD5A8 + ldrb r1, [r4, #2] + lsls r1, r1, #1 + adds r1, r1, r0 + ldrh r0, [r1] + bl ModRupees + movs r0, #0x6f + bl SoundReq + b _0805427C + .align 2, 0 +_080540BC: .4byte gUnk_080FD5A8 +_080540C0: + movs r5, #0 + movs r4, #0x1c + b _080540CA +_080540C6: + adds r4, r1, #1 + adds r5, #1 +_080540CA: + cmp r5, #3 + bls _080540D0 + b _0805427C +_080540D0: + adds r0, r4, #0 + bl GetInventoryValue + adds r1, r4, #0 + cmp r0, #0 + bne _080540C6 + adds r6, r4, #0 + ldr r0, _08054100 @ =gSave + adds r0, #0xb6 + adds r1, r5, r0 + ldrb r0, [r1] + cmp r0, #0 + bne _080540EE + movs r0, #0x20 + strb r0, [r1] +_080540EE: + adds r0, r6, #0 + movs r1, #1 + bl SetInventoryValue + adds r0, r6, #0 + bl PutItemOnSlot + b _0805427C + .align 2, 0 +_08054100: .4byte gSave +_08054104: + movs r5, #0 + ldr r0, _08054144 @ =gSave + adds r2, r0, #0 + adds r2, #0xb6 + ldrb r1, [r2] + adds r3, r0, #0 + cmp r1, #0x20 + beq _08054126 + adds r1, r2, #0 +_08054116: + adds r5, #1 + cmp r5, #3 + bls _0805411E + b _0805427C +_0805411E: + adds r0, r5, r1 + ldrb r0, [r0] + cmp r0, #0x20 + bne _08054116 +_08054126: + cmp r5, #3 + bls _0805412C + b _0805427C +_0805412C: + adds r0, r3, #0 + adds r0, #0xb6 + adds r0, r5, r0 + strb r6, [r0] + adds r0, r6, #0 + movs r1, #1 + bl SetInventoryValue + ldr r0, _08054148 @ =0x00000109 + bl SoundReq + b _0805427C + .align 2, 0 +_08054144: .4byte gSave +_08054148: .4byte 0x00000109 +_0805414C: + movs r0, #1 + bl sub_080526F8 + b _0805424E +_08054154: + ldr r1, _08054168 @ =gSave + ldr r0, _0805416C @ =gArea + ldr r2, _08054170 @ =0x0000046C + adds r1, r1, r2 + ldrb r0, [r0, #3] + adds r1, r1, r0 + ldrb r0, [r1] + ldrb r2, [r4, #2] + orrs r0, r2 + b _0805427A + .align 2, 0 +_08054168: .4byte gSave +_0805416C: .4byte gArea +_08054170: .4byte 0x0000046C +_08054174: + movs r0, #0x72 + bl sub_0801E738 + b _0805427C +_0805417C: + cmp r6, #0xb + bne _0805418A + movs r0, #0xc + movs r1, #0 + bl SetInventoryValue + b _080541B0 +_0805418A: + movs r0, #0xb + movs r1, #0 + bl SetInventoryValue + b _080541B0 +_08054194: + cmp r6, #7 + bne _080541A2 + movs r0, #8 + movs r1, #0 + bl SetInventoryValue + b _080541AA +_080541A2: + movs r0, #7 + movs r1, #0 + bl SetInventoryValue +_080541AA: + movs r0, #0x63 + bl ModBombs +_080541B0: + bl LoadItemGfx + b _0805427C +_080541B6: + cmp r5, #0 + bne _080541CA + movs r0, #7 + movs r1, #1 + bl SetInventoryValue + movs r0, #7 + bl PutItemOnSlot + b _080541E2 +_080541CA: + ldr r0, _080541EC @ =gSave + adds r1, r0, #0 + adds r1, #0xae + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #3 + bls _080541E2 + movs r0, #3 + strb r0, [r1] +_080541E2: + movs r0, #0x63 + bl ModBombs + b _0805427C + .align 2, 0 +_080541EC: .4byte gSave +_080541F0: + ldrb r0, [r4, #2] + bl ModBombs + b _0805424E +_080541F8: + movs r0, #0x66 + bl GetInventoryValue + cmp r0, #0 + bne _0805420A + movs r0, #0x66 + movs r1, #1 + bl SetInventoryValue +_0805420A: + movs r0, #0x63 + bl ModArrows + b _080541B0 +_08054212: + ldr r0, _08054234 @ =gSave + adds r1, r0, #0 + adds r1, #0xaf + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #3 + bls _0805422A + movs r0, #3 + strb r0, [r1] +_0805422A: + movs r0, #0x63 + bl ModArrows + b _0805427C + .align 2, 0 +_08054234: .4byte gSave +_08054238: + ldrb r0, [r4, #2] + bl ModArrows + b _0805424E +_08054240: + movs r0, #0x3f + movs r1, #1 + bl SetInventoryValue + adds r0, r7, #0 + bl ModShells +_0805424E: + ldr r0, _08054258 @ =0x00000103 + bl SoundReq + b _0805427C + .align 2, 0 +_08054258: .4byte 0x00000103 +_0805425C: + adds r0, r7, #0 + bl sub_0801E738 + b _0805427C +_08054264: + ldr r0, _08054284 @ =gSave + adds r1, r0, #0 + adds r1, #0xa8 + ldrb r0, [r1] + adds r0, #1 + strb r0, [r1] + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #3 + bls _0805427C + movs r0, #3 +_0805427A: + strb r0, [r1] +_0805427C: + mov r0, r8 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_08054284: .4byte gSave + .syntax divided diff --git a/asm/non_matching/game/sub_08053758.inc b/asm/non_matching/game/sub_08053758.inc new file mode 100644 index 00000000..b1ed9345 --- /dev/null +++ b/asm/non_matching/game/sub_08053758.inc @@ -0,0 +1,72 @@ + .syntax unified + push {r4, lr} + ldr r1, _080537DC @ =gMenu + movs r2, #0 + movs r3, #1 + strb r3, [r1, #6] + movs r4, #0 + movs r0, #0x78 + strh r0, [r1, #8] + movs r0, #0x1e + strh r0, [r1, #0xa] + strb r4, [r1, #0x10] + ldr r0, _080537E0 @ =gUnk_02032EC0 + strb r3, [r0, #6] + ldr r0, _080537E4 @ =gMapBottom + str r2, [r0] + ldr r0, _080537E8 @ =gMapTop + str r2, [r0] + ldr r0, _080537EC @ =gRoomControls + str r2, [r0, #0x30] + strh r2, [r0, #0xc] + strh r2, [r0, #0xa] + bl sub_0801B170 + movs r0, #0 + bl DispReset + ldr r2, _080537F0 @ =gScreen + movs r0, #0x99 + lsls r0, r0, #6 + strh r0, [r2] + adds r1, r2, #0 + adds r1, #0x66 + ldr r0, _080537F4 @ =0x00002244 + strh r0, [r1] + adds r1, #2 + movs r0, #0x80 + lsls r0, r0, #5 + strh r0, [r1] + subs r1, #8 + movs r0, #0x1f + strh r0, [r1] + adds r1, #2 + movs r0, #0x3f + strh r0, [r1] + subs r1, #0xa + movs r0, #0xf0 + strh r0, [r1] + adds r1, #4 + movs r0, #0x60 + strh r0, [r1] + ldr r0, _080537F8 @ =0x00001C4E + strh r0, [r2, #0x14] + ldr r0, _080537FC @ =0x00001DC1 + strh r0, [r2, #0x20] + movs r0, #0xf + bl SoundReq + bl ResetSystemPriority + movs r1, #0x80 + lsls r1, r1, #1 + movs r0, #5 + bl SetFade + pop {r4, pc} + .align 2, 0 +_080537DC: .4byte gMenu +_080537E0: .4byte gUnk_02032EC0 +_080537E4: .4byte gMapBottom +_080537E8: .4byte gMapTop +_080537EC: .4byte gRoomControls +_080537F0: .4byte gScreen +_080537F4: .4byte 0x00002244 +_080537F8: .4byte 0x00001C4E +_080537FC: .4byte 0x00001DC1 + .syntax divided diff --git a/asm/non_matching/game/sub_08053800.inc b/asm/non_matching/game/sub_08053800.inc new file mode 100644 index 00000000..3cbbb182 --- /dev/null +++ b/asm/non_matching/game/sub_08053800.inc @@ -0,0 +1,67 @@ + .syntax unified + push {r4, r5, lr} + ldr r0, _0805387C @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _0805387A + ldr r1, _08053880 @ =gMenu + ldrb r5, [r1, #0x10] + lsls r4, r5, #1 + adds r4, r4, r5 + lsls r4, r4, #2 + ldr r0, _08053884 @ =gUnk_080FCCB4 + adds r4, r4, r0 + ldrh r0, [r4, #8] + movs r2, #0 + strh r0, [r1, #8] + movs r0, #0x1e + strh r0, [r1, #0xa] + ldrb r0, [r1, #0x10] + adds r0, #1 + strb r0, [r1, #0x10] + ldrb r0, [r1, #6] + adds r0, #1 + strb r0, [r1, #6] + strb r2, [r1, #7] + adds r0, r5, #0 + adds r0, #0x8a + bl LoadPaletteGroup + adds r0, r5, #0 + adds r0, #0x3a + bl LoadGfxGroup + ldr r0, _08053888 @ =gBG1Buffer + movs r1, #0x80 + lsls r1, r1, #4 + bl MemClear + ldr r0, _0805388C @ =0x00000F01 + adds r5, r5, r0 + ldr r1, [r4] + adds r0, r5, #0 + bl sub_0805F46C + ldr r2, _08053890 @ =gScreen + movs r0, #1 + strh r0, [r2, #0x1a] + adds r1, r2, #0 + adds r1, #0x68 + movs r0, #0x10 + strh r0, [r1] + ldrh r1, [r4, #4] + adds r0, r2, #0 + adds r0, #0x58 + strh r1, [r0] + ldrh r1, [r4, #6] + adds r0, #4 + strh r1, [r0] + ldrh r1, [r4, #0xa] + movs r0, #4 + bl SetFade +_0805387A: + pop {r4, r5, pc} + .align 2, 0 +_0805387C: .4byte gFadeControl +_08053880: .4byte gMenu +_08053884: .4byte gUnk_080FCCB4 +_08053888: .4byte gBG1Buffer +_0805388C: .4byte 0x00000F01 +_08053890: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/game/sub_08053894.inc b/asm/non_matching/game/sub_08053894.inc new file mode 100644 index 00000000..bff018b4 --- /dev/null +++ b/asm/non_matching/game/sub_08053894.inc @@ -0,0 +1,57 @@ + .syntax unified + push {r4, lr} + ldr r0, _080538B4 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _080538F8 + ldr r1, _080538B8 @ =gMenu + ldrh r0, [r1, #8] + subs r0, #1 + strh r0, [r1, #8] + ldrh r0, [r1, #0xa] + adds r4, r1, #0 + cmp r0, #0 + beq _080538BC + subs r0, #1 + strh r0, [r4, #0xa] + b _080538E4 + .align 2, 0 +_080538B4: .4byte gFadeControl +_080538B8: .4byte gMenu +_080538BC: + ldr r0, _080538FC @ =gRoomTransition + ldr r0, [r0] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _080538E4 + ldrb r1, [r4, #7] + cmp r1, #0xf + bhi _080538E4 + adds r1, #1 + strb r1, [r4, #7] + lsls r1, r1, #0x18 + ldr r3, _08053900 @ =gScreen + lsrs r2, r1, #0x10 + lsrs r1, r1, #0x19 + movs r0, #0x10 + subs r0, r0, r1 + orrs r2, r0 + adds r3, #0x68 + strh r2, [r3] +_080538E4: + ldrh r0, [r4, #8] + cmp r0, #0 + bne _080538F8 + ldrb r0, [r4, #6] + adds r0, #1 + strb r0, [r4, #6] + movs r0, #5 + movs r1, #8 + bl SetFade +_080538F8: + pop {r4, pc} + .align 2, 0 +_080538FC: .4byte gRoomTransition +_08053900: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/game/sub_08053904.inc b/asm/non_matching/game/sub_08053904.inc new file mode 100644 index 00000000..7d29702e --- /dev/null +++ b/asm/non_matching/game/sub_08053904.inc @@ -0,0 +1,57 @@ + .syntax unified + push {r4, lr} + ldr r0, _08053924 @ =gFadeControl + ldrb r0, [r0] + cmp r0, #0 + bne _08053968 + ldr r1, _08053928 @ =gMenu + ldrh r0, [r1, #8] + subs r0, #1 + strh r0, [r1, #8] + ldrh r0, [r1, #0xa] + adds r4, r1, #0 + cmp r0, #0 + beq _0805392C + subs r0, #1 + strh r0, [r4, #0xa] + b _08053954 + .align 2, 0 +_08053924: .4byte gFadeControl +_08053928: .4byte gMenu +_0805392C: + ldr r0, _0805396C @ =gRoomTransition + ldr r0, [r0] + movs r1, #1 + ands r0, r1 + cmp r0, #0 + bne _08053954 + ldrb r1, [r4, #7] + cmp r1, #0xf + bhi _08053954 + adds r1, #1 + strb r1, [r4, #7] + lsls r1, r1, #0x18 + ldr r3, _08053970 @ =gScreen + lsrs r2, r1, #0x10 + lsrs r1, r1, #0x19 + movs r0, #0x10 + subs r0, r0, r1 + orrs r2, r0 + adds r3, #0x68 + strh r2, [r3] +_08053954: + ldrh r0, [r4, #8] + cmp r0, #0 + bne _08053968 + ldrb r0, [r4, #6] + adds r0, #1 + strb r0, [r4, #6] + movs r0, #5 + movs r1, #1 + bl SetFade +_08053968: + pop {r4, pc} + .align 2, 0 +_0805396C: .4byte gRoomTransition +_08053970: .4byte gScreen + .syntax divided diff --git a/asm/non_matching/game/sub_08053CC8.inc b/asm/non_matching/game/sub_08053CC8.inc new file mode 100644 index 00000000..3967ecf0 --- /dev/null +++ b/asm/non_matching/game/sub_08053CC8.inc @@ -0,0 +1,47 @@ + .syntax unified + push {r4, r5, r6, lr} + ldr r6, _08053D20 @ =gMenu + ldrb r4, [r6, #3] + lsls r4, r4, #4 + ldr r0, _08053D24 @ =gUnk_080FCF04 + adds r4, r4, r0 + adds r0, r4, #0 + adds r0, #8 + str r0, [r6, #0xc] + ldr r0, [r4] + bl LoadRoomEntityList + ldrb r0, [r4, #4] + ldrb r1, [r4, #5] + movs r2, #1 + bl GetRoomProperty + bl LoadRoomEntityList + ldrb r0, [r4, #4] + ldrb r1, [r4, #5] + movs r2, #2 + bl GetRoomProperty + bl LoadRoomEntityList + movs r5, #1 + strb r5, [r6, #6] + ldr r2, _08053D28 @ =gScreen + ldrh r1, [r2] + ldr r0, _08053D2C @ =0x0000FEFF + ands r0, r1 + strh r0, [r2] + ldr r0, _08053D30 @ =gUpdateVisibleTiles + strb r5, [r0] + movs r0, #4 + movs r1, #0x10 + bl SetFade + ldrb r0, [r4, #5] + cmp r0, #0x1d + bne _08053D1E + strh r5, [r6, #0xa] +_08053D1E: + pop {r4, r5, r6, pc} + .align 2, 0 +_08053D20: .4byte gMenu +_08053D24: .4byte gUnk_080FCF04 +_08053D28: .4byte gScreen +_08053D2C: .4byte 0x0000FEFF +_08053D30: .4byte gUpdateVisibleTiles + .syntax divided diff --git a/asm/non_matching/game/sub_0805488C.inc b/asm/non_matching/game/sub_0805488C.inc new file mode 100644 index 00000000..7b792dd4 --- /dev/null +++ b/asm/non_matching/game/sub_0805488C.inc @@ -0,0 +1,40 @@ + .syntax unified + push {r4, lr} + ldr r4, _080548DC @ =gUnk_02032EC0 + ldrb r1, [r4, #3] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #2 + ldr r1, _080548E0 @ =gUnk_080FE320 + adds r0, r0, r1 + ldr r2, _080548E4 @ =gMenu + ldrb r1, [r0] + movs r3, #0 + strb r1, [r2] + ldrb r1, [r0, #1] + strb r1, [r2, #3] + ldrb r1, [r4, #3] + strb r1, [r2, #4] + str r0, [r2, #0xc] + ldrb r0, [r2, #5] + adds r0, #1 + strb r0, [r2, #5] + strb r3, [r2, #6] + movs r0, #0x96 + lsls r0, r0, #1 + strh r0, [r2, #8] + movs r0, #0 + bl DispReset + ldrb r0, [r4, #3] + movs r1, #1 + bl sub_08054974 + bl sub_0806F364 + movs r0, #0xff + bl ClearRoomFlag + bl sub_080548E8 + pop {r4, pc} + .align 2, 0 +_080548DC: .4byte gUnk_02032EC0 +_080548E0: .4byte gUnk_080FE320 +_080548E4: .4byte gMenu + .syntax divided diff --git a/asm/non_matching/game/sub_08054920.inc b/asm/non_matching/game/sub_08054920.inc new file mode 100644 index 00000000..7b73b4e9 --- /dev/null +++ b/asm/non_matching/game/sub_08054920.inc @@ -0,0 +1,33 @@ + .syntax unified + push {lr} + bl MessageInitialize + bl sub_0806F38C + ldr r1, _08054948 @ =gUnk_080C9CBC + ldr r0, _0805494C @ =gFuseInfo + ldrb r0, [r0, #3] + lsls r0, r0, #3 + adds r0, r0, r1 + ldrb r0, [r0, #7] + cmp r0, #0 + beq _08054954 + ldr r0, _08054950 @ =gUnk_02032EC0 + ldrb r1, [r0, #3] + movs r0, #0xa + bl MenuFadeIn + b _08054962 + .align 2, 0 +_08054948: .4byte gUnk_080C9CBC +_0805494C: .4byte gFuseInfo +_08054950: .4byte gUnk_02032EC0 +_08054954: + ldr r1, _08054964 @ =gUnk_02032EC0 + movs r0, #3 + strb r0, [r1] + movs r0, #7 + movs r1, #0x10 + bl SetFade +_08054962: + pop {pc} + .align 2, 0 +_08054964: .4byte gUnk_02032EC0 + .syntax divided diff --git a/asm/non_matching/game/sub_08054974.inc b/asm/non_matching/game/sub_08054974.inc new file mode 100644 index 00000000..ca75d4cb --- /dev/null +++ b/asm/non_matching/game/sub_08054974.inc @@ -0,0 +1,70 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r5, r1, #0 + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + ldr r0, _080549B0 @ =gUnk_080FE320 + adds r6, r1, r0 + ldrb r0, [r6, #2] + ldrb r1, [r6, #3] + bl SetCurrentRoomPropertyList + ldr r4, _080549B4 @ =gRoomControls + ldrb r0, [r6, #2] + strb r0, [r4, #4] + ldrb r0, [r6, #3] + strb r0, [r4, #5] + bl LoadGfxGroups + ldrb r0, [r4, #4] + bl GetFlagBankOffset + ldr r1, _080549B8 @ =gArea + strh r0, [r1, #4] + cmp r5, #0 + beq _080549BC + ldrb r0, [r6, #2] + ldrb r1, [r6, #3] + bl LoadAuxiliaryRoom + b _080549CE + .align 2, 0 +_080549B0: .4byte gUnk_080FE320 +_080549B4: .4byte gRoomControls +_080549B8: .4byte gArea +_080549BC: + ldrb r0, [r6, #2] + ldrb r1, [r6, #3] + bl sub_08052FF4 + bl sub_0807C740 + ldr r1, _08054A00 @ =gUpdateVisibleTiles + movs r0, #1 + strb r0, [r1] +_080549CE: + ldr r2, _08054A04 @ =gScreen + ldrh r1, [r2] + ldr r0, _08054A08 @ =0x00001FFF + ands r0, r1 + strh r0, [r2] + ldr r1, _08054A0C @ =gRoomControls + ldrh r0, [r6, #4] + ldrh r2, [r1, #6] + adds r0, r0, r2 + strh r0, [r1, #0xa] + ldrh r0, [r6, #6] + ldrh r2, [r1, #8] + adds r0, r0, r2 + strh r0, [r1, #0xc] + ldrb r0, [r6, #2] + cmp r0, #2 + bne _080549F4 + bl TryLoadPrologueHyruleTown +_080549F4: + ldr r0, _08054A10 @ =gUnk_02032EC0 + ldrb r0, [r0, #3] + bl sub_08018710 + pop {r4, r5, r6, pc} + .align 2, 0 +_08054A00: .4byte gUpdateVisibleTiles +_08054A04: .4byte gScreen +_08054A08: .4byte 0x00001FFF +_08054A0C: .4byte gRoomControls +_08054A10: .4byte gUnk_02032EC0 + .syntax divided diff --git a/asm/non_matching/game/sub_08054A14.inc b/asm/non_matching/game/sub_08054A14.inc new file mode 100644 index 00000000..85c471aa --- /dev/null +++ b/asm/non_matching/game/sub_08054A14.inc @@ -0,0 +1,22 @@ + .syntax unified + push {lr} + lsls r1, r0, #2 + adds r1, r1, r0 + lsls r1, r1, #2 + ldr r0, _08054A38 @ =gUnk_080FE320 + adds r2, r1, r0 + ldrb r0, [r2, #0x11] + cmp r0, #0xd + bhi _08054A34 + ldr r1, _08054A3C @ =gLocalFlagBanks + lsls r0, r0, #1 + adds r0, r0, r1 + ldrh r0, [r0] + ldrh r1, [r2, #0x12] + bl SetLocalFlagByBank +_08054A34: + pop {pc} + .align 2, 0 +_08054A38: .4byte gUnk_080FE320 +_08054A3C: .4byte gLocalFlagBanks + .syntax divided diff --git a/linker.ld b/linker.ld index 24c3273b..a5d4247b 100644 --- a/linker.ld +++ b/linker.ld @@ -436,11 +436,6 @@ SECTIONS { src/fade.o(.text); src/fileselect.o(.text); src/game.o(.text); - asm/code_080526F8.o(.text); - asm/modBombs.o(.text); - asm/modArrows.o(.text); - src/code_0805436C.o(.text); - asm/code_0805436C.o(.text); /* game.c */ src/playerItem/playerItemLantern.o(.text); src/subtask.o(.text); src/sub_08055E08.o(.text); @@ -619,17 +614,7 @@ SECTIONS { src/item/itemGustJar.o(.text); src/item/itemMoleMitts.o(.text); src/item/itemJarEmpty.o(.text); - asm/playerUtils.o(.text); - src/respawnPlayer.o(.text); - src/code_08077B98.o(.text); - asm/code_08077B98.o(.text); - src/code_08078778.o(.text); - asm/code_08078778.o(.text); - src/sub_0807B820.o(.text); - asm/code_0807B9B8.o(.text); - src/sub_0807CA18.o(.text); - asm/getInventoryValue.o(.text); - asm/code_0807CAA0.o(.text); /* playerUtils.c */ + src/playerUtils.o(.text); src/flags.o(.text); src/save.o(.text); src/screenTilemap.o(.text); diff --git a/src/code_0805436C.c b/src/code_0805436C.c deleted file mode 100644 index 4f420dd8..00000000 --- a/src/code_0805436C.c +++ /dev/null @@ -1,403 +0,0 @@ -#include "global.h" -#include "player.h" -#include "room.h" -#include "menu.h" -#include "area.h" -#include "common.h" -#include "save.h" -#include "item.h" -#include "object.h" -#include "enemy.h" -#include "droptables.h" -#include "itemMetaData.h" - -extern u8 gUnk_0200AF13; -extern u8 gUnk_0200AF14; -extern u8 gUnk_080FE1C6[]; -/*{ -0u, -0x1u, -0x2u, -0x3u, -0x4u, -0x5u, -0x6u, -0x7u, -0x8u, -0x9u, -0x8u, -0x9u, -0xau, -0xau, -0xbu, -0xcu, -0xdu, -0xeu, -0xfu, -0x8u, -0xfu, -0x1u, -0x8u, -}; -*/ -extern void (*const gUnk_080FE2A0[])(void); - -void ForceEquipItem(u32, u32); -extern void sub_0807CAA0(u32, u32); - -/* -Returns the slot the item is equipped in. -0: A -1: B -2: Not equipped -*/ -extern u8 gUnk_080FE1DD[]; - -u32 IsItemEquipped(u32 itemID) { - u32 itemSlot; - - if (itemID == gSave.stats.itemButtons[SLOT_A]) - itemSlot = 0; - else if (itemID == gSave.stats.itemButtons[SLOT_B]) - itemSlot = 1; - else - itemSlot = 2; - return itemSlot; -} - -void PutItemOnSlot(u32 itemID) { - u32 itemSlot; - u32 itemID2 = itemID; - if (itemID2 < 0x47) { - sub_0807CAA0(0, 1); - } - if (itemID2 - 1 < 0x1f) { - itemSlot = 2; - if (gSave.stats.itemButtons[SLOT_A] == 0) { - itemSlot = 0; - } else if (gSave.stats.itemButtons[SLOT_B] == 0) { - itemSlot = 1; - } - if (itemSlot == 2) { - u32 temp = gItemMetaData[itemID2].menuSlot; - if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_A]].menuSlot) { - itemSlot = 0; - } else { - if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_B]].menuSlot) { - itemSlot = 1; - } - } - if (itemSlot == 2) { - return; - } - } - ForceEquipItem(itemID2, itemSlot); - } -} - -void ForceEquipItem(u32 itemID, u32 itemSlot) { - u32 otherItem; - u32 otherItemIndex; - u32 replacedItem; - - if ((itemID - 1 < 0x1f) && (itemSlot < 2)) { - otherItemIndex = itemSlot == 0; - replacedItem = gSave.stats.itemButtons[itemSlot]; - otherItem = gSave.stats.itemButtons[otherItemIndex]; - if (gItemMetaData[otherItem].menuSlot == gItemMetaData[itemID].menuSlot) { - otherItem = replacedItem; - } - gSave.stats.itemButtons[itemSlot] = itemID; - gSave.stats.itemButtons[otherItemIndex] = otherItem; - gUnk_0200AF00.filler0[0x13] = 0x7f; - gUnk_0200AF00.filler0[0x14] = 0x7f; - } -} - -u32 SetBottleContents(u32 itemID, u32 bottleIndex) { - if (bottleIndex > 3) { - bottleIndex = 0; - if (gSave.stats.bottles[0] != 0x20) { - do { - bottleIndex++; - if (bottleIndex > 3) { - return bottleIndex; - } - } while (gSave.stats.bottles[bottleIndex] != 0x20); - } - if (bottleIndex > 3) { - return bottleIndex; - } - } - gSave.stats.bottles[bottleIndex] = itemID; - return bottleIndex; -} - -bool32 ItemIsSword(u32 item) { - switch (item) { - case ITEM_SMITH_SWORD: - case ITEM_GREEN_SWORD: - case ITEM_RED_SWORD: - case ITEM_BLUE_SWORD: - case ITEM_FOURSWORD: - return TRUE; - default: - return FALSE; - } -} - -bool32 ItemIsShield(u32 id) { - switch (id) { - case 13: - case 14: - return 1; - default: - return 0; - } -} - -bool32 ItemIsBottle(u32 id) { - switch (id) { - case 28: - case 29: - case 30: - case 31: - return 1; - default: - return 0; - } -} - -u32 GetBottleContaining(u32 id) { - if (id == gSave.stats.bottles[0]) { - return 1; - } else if (id == gSave.stats.bottles[1]) { - return 2; - } else if (id == gSave.stats.bottles[2]) { - return 3; - } else if (id == gSave.stats.bottles[3]) { - return 4; - } else { - return 0; - } -} - -void sub_08054524(void) { - u32 bVar1; - - bVar1 = gArea.locationIndex; - if (gArea.locationIndex == 0) { - bVar1 = gRoomTransition.player_status.field_0x24[0xa]; - } - if (bVar1 > 0x16) { - bVar1 = 0; - } - - bVar1 = gUnk_080FE1C6[bVar1]; - MemCopy(&gAreaDroptables[bVar1], &gRoomVars.currentAreaDroptable, 0x20); -} - -void sub_08054564(void) { - gRoomVars.field_0x2 = 1; -} - -void sub_08054570(void) { - gRoomVars.field_0x2 = 0; -} - -extern void sub_08000F14(s16*, const s16*, const s16*, const s16*); -extern u32 sub_08000F2C(s16*, const s16*, const s16*, const s16*); -u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter); -u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) { - extern const u8 gUnk_080FE1B4[] /* = { - ITEM_NONE, ITEM_RUPEE1, ITEM_RUPEE5, ITEM_RUPEE20, ITEM_HEART, ITEM_FAIRY, - ITEM_BOMBS5, ITEM_ARROWS5, ITEM_SHELLS, ITEM_KINSTONE_GREEN, ITEM_KINSTONE_BLUE, ITEM_KINSTONE_RED, - ITEM_ENEMY_BEETLE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, - }*/; - - int r0, r1, rand, summOdds, item; - u32 r3; - const Droptable *ptr2, *ptr3, *ptr4; - Droptable droptable; - r3 = arg1; - if (gRoomVars.field_0x2 != 1) { - ptr2 = &gDroptableModifiers[DROPTABLE_NONE]; - ptr4 = NULL; - switch (r3) { - case 1 ... 12: - ptr4 = &gEnemyDroptables[r3]; - break; -#ifndef EU - case 24: - case 25: - r0 = gRoomVars.unk2; - ptr4 = &gUnk_0800191C[0]; - if (r0) { - ptr4++; - } - break; -#endif - case 16 ... 23: -#ifdef EU - case 24: -#endif - ptr2 = &gObjectDroptables[r3 - 16]; - case 15: - ptr4 = &gRoomVars.currentAreaDroptable; - break; - case 0: - default: - break; - } - if (ptr4 != 0) { - if ((r1 = gSave.stats.picolyteType) == 0) { - // nop - ptr3 = &gDroptableModifiers[DROPTABLE_NONE]; - } else { -#ifdef EU - ptr3 = &gEnemyDroptables[r1 + 9]; -#else - ptr3 = &gEnemyDroptables[r1 + 6]; -#endif - } - // vector addition, s0 = ptr4 + ptr2 + ptr3 - sub_08000F14(droptable.a, ptr4->a, ptr2->a, ptr3->a); - if (gSave.stats.health <= 8) { - droptable.s.hearts += 5; - } - if (gSave.stats.bombCount == 0) { - droptable.s.bombs += 3; - } - if (gSave.stats.arrowCount == 0) { - droptable.s.arrows += 3; - } - if (gSave.stats.rupees <= 10) { - droptable.s.rupee5 += 1; - } - ptr2 = &gDroptableModifiers[DROPTABLE_NONE]; - r0 = gSave.stats.hasAllFigurines; - ptr3 = &gDroptableModifiers[DROPTABLE_NONE]; - // don't drop shells anymore - if (r0 != 0) { - ptr2 = &gDroptableModifiers[DROPTABLE_NO_SHELLS]; - } - // don't drop kinstones anymore - if (gSave.didAllFusions != 0) { - ptr3 = &gDroptableModifiers[DROPTABLE_NO_KINSTONES]; - } - // vector addition, s0 = s0 + ptr2 + ptr3 - // resulting values are clamped to be >= 0 - // returns sum over s0 - summOdds = sub_08000F2C(droptable.a, droptable.a, ptr2->a, ptr3->a); - rand = Random(); - item = (rand >> 0x18); - item &= 0xF; - rand = rand % summOdds; - { - u32 r3; - for (r3 = 0, r1 = 0; r3 < 0x10; r3++, item = (item + 1) & 0xF) { - if ((r1 += droptable.a[item]) > rand) { - break; - } - } - } - r1 = gUnk_080FE1B4[item]; - if (r1 != ITEM_NONE) { - return CreateItemDrop(arg0, r1, 0); - } - } - } - return ITEM_NONE; -} - -u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) { - u32 adjustedParam = itemParameter; - Entity* itemEntity; - - switch (itemID) { - case ITEM_ENEMY_BEETLE: - if (!GetInventoryValue(ITEM_SMITH_SWORD)) { - return ITEM_NONE; - } - break; - case ITEM_BOMBS5: - if (!GetInventoryValue(ITEM_BOMBBAG)) { - return ITEM_NONE; - } - break; - case ITEM_ARROWS5: - if (!GetInventoryValue(ITEM_BOW)) { - return ITEM_NONE; - } - break; - case ITEM_SHELLS: { - if (!GetInventoryValue(ITEM_EARTH_ELEMENT)) { - return ITEM_NONE; - } - if (itemParameter == 0) { - adjustedParam = 1; - } - break; - } - case ITEM_KINSTONE: - case ITEM_KINSTONE_GREEN ... ITEM_KINSTONE_RED: { - u32 rand; - - if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0) { - return ITEM_NONE; - } - if (3 < gRoomVars.filler1[0]) { - return ITEM_NONE; - } - - if (itemID != ITEM_KINSTONE) { - adjustedParam = itemID - ITEM_KINSTONE_GREEN; - rand = (Random() & 0x3f); - adjustedParam = gUnk_080FE1DD[(rand + adjustedParam * 0x40)]; - if (adjustedParam == 0) { - itemID = ITEM_NONE; - } else { - itemID = ITEM_KINSTONE; - } - } - break; - } - } - if (itemID != ITEM_NONE) { - if (itemID != ITEM_ENEMY_BEETLE) { - itemEntity = CreateObject(GROUND_ITEM, itemID, adjustedParam); - if (itemEntity != NULL) { - if (arg0 == &gPlayerEntity) { - itemEntity->actionDelay = 1; - } else { - itemEntity->actionDelay = 0; - } - if (arg0->kind == OBJECT) { - if (arg0->id == 99) { - arg0->child = itemEntity; - } else if (arg0->id == 0x1e) { - itemEntity->direction = arg0->animationState << 3 | 0x80; - itemEntity->speed = 0xc0; - itemEntity->zVelocity = Q_16_16(1.5); - } - } - CopyPosition(arg0, itemEntity); - } - } else { - itemEntity = CreateEnemy(BEETLE, 0); - if (itemEntity != NULL) { - itemEntity->x.HALF.HI = arg0->x.HALF.HI; - itemEntity->y.HALF.HI = arg0->y.HALF.HI; - itemEntity->collisionLayer = arg0->collisionLayer; - UpdateSpriteForCollisionLayer(itemEntity); - } - } - } - return itemID; -} - -void Subtask_WorldEvent(void) { -#if !(defined(DEMO_USA) || defined(DEMO_JP)) - gUnk_080FE2A0[gMenu.menuType](); -#endif -} diff --git a/src/game.c b/src/game.c index 80431631..ec3fa368 100644 --- a/src/game.c +++ b/src/game.c @@ -6,24 +6,30 @@ */ #include "global.h" -#include "asm.h" -#include "sound.h" -#include "screen.h" -#include "entity.h" -#include "player.h" -#include "room.h" -#include "main.h" -#include "flags.h" -#include "save.h" -#include "common.h" -#include "fileselect.h" -#include "menu.h" -#include "functions.h" #include "area.h" -#include "message.h" +#include "asm.h" +#include "common.h" +#include "droptables.h" +#include "enemy.h" +#include "entity.h" +#include "fileselect.h" +#include "flags.h" +#include "functions.h" #include "game.h" #include "item.h" +#include "itemMetaData.h" +#include "main.h" +#include "menu.h" +#include "message.h" +#include "object.h" +#include "player.h" +#include "room.h" +#include "save.h" +#include "screen.h" +#include "sound.h" #include "subtask.h" +#include "itemMetaData.h" +#include "player.h" // Game task @@ -197,6 +203,68 @@ typedef struct { } CutsceneData; static const CutsceneData sCutsceneData[]; +extern u8 gUnk_0200AF13; +extern u8 gUnk_0200AF14; +extern u8 gUnk_080FE1C6[]; +extern void (*const gUnk_080FE2AC[])(void); + +/** @see Item */ +void ForceEquipItem(u32, u32); +extern void SetInventoryValue(u32, u32); + +extern u8 gUnk_080FE1DD[]; + +extern void (*const gUnk_080FE2A0[])(void); + +extern void (*const gUnk_080FCBB4[])(void); + +extern const EntityData gUnk_080FCB94[]; + +void sub_08052004(void); + +extern void (*const gUnk_080FCCFC[])(void); + +extern void (*const gUnk_080FCD38[])(void); + +extern const EntityData gUnk_080FCC54[]; + +void sub_08051FF0(void); + +extern void (*const gUnk_080FCD40[])(void); + +extern const EntityData gUnk_080FCBC4[]; +void sub_08051F78(void); + +extern const EntityData gUnk_080FCC14[]; + +extern void DeleteAllEntities(void); + +extern void (*const gUnk_080FCDD4[])(void); + +extern const EntityData gUnk_080FCD84[]; + +extern void (*const gUnk_080FCEB0[])(void); + +extern const EntityData gUnk_080FCDE0[]; + +extern void (*const gUnk_080FCEEC[])(void); + +extern const EntityData gUnk_080FCEBC[]; + +extern void (*const gUnk_080FCEF8[])(void); + +extern void (*const gUnk_080FCFA4[])(void); + +extern void* GetRoomProperty(u32, u32, u32); + +extern void (*const gUnk_080FD108[])(void); + +extern const EntityData* gUnk_080FCFB8[]; + +extern void (*const gUnk_080FD138[])(void); + +extern const u16 gUnk_080FD964[]; + void GameTask(void) { static GameState* const sStates[] = { GameTask_Transition, @@ -586,7 +654,7 @@ static void AuxCutscene_Exit(void) { } } -void sub_08051F78(u32 a1, u32 a2, u32 a3, u32 a4) { +void sub_08051F78(void) { u32 idx = gUnk_02032EC0.field_0x3; const CutsceneData* p = &sCutsceneData[idx]; sub_08051F9C(p->area, p->room, p->x, p->y); @@ -931,24 +999,24 @@ static void InitializePlayer(void) { pl->z.HALF.HI = -0xc0; break; case PL_SPAWN_STEP_IN: - gPlayerState.field_0x34[4] = 16; + gPlayerState.field_0x38 = 16; pl->direction = Direction8FromAnimationState(gRoomTransition.player_status.start_anim); case PL_SPAWN_WALKING: pl->speed = 224; break; case PL_SPAWN_STAIRS_ASCEND: case PL_SPAWN_STAIRS_DESCEND: - gPlayerState.field_0x34[4] = 1; - gPlayerState.field_0x34[5] = gRoomTransition.player_status.spawn_type; + gPlayerState.field_0x38 = 1; + gPlayerState.field_0x39 = gRoomTransition.player_status.spawn_type; break; case PL_SPAWN_PARACHUTE_FORWARD: - gPlayerState.field_0x34[4] = 1; + gPlayerState.field_0x38 = 1; break; case PL_SPAWN_PARACHUTE_UP: - gPlayerState.field_0x34[4] = 3; + gPlayerState.field_0x38 = 3; break; case PL_SPAWN_FAST_TRAVEL: - gPlayerState.field_0x34[4] = 4; + gPlayerState.field_0x38 = 4; } pl->kind = PLAYER; @@ -1716,11 +1784,11 @@ static void ResetTmpFlags(void) { if (!CheckGlobalFlag(WATERBEAN_PUT)) ClearGlobalFlag(WATERBEAN_OUT); - if (!GetInventoryValue(0x40u)) + if (!GetInventoryValue(ITEM_EARTH_ELEMENT)) ClearGlobalFlag(LV1_CLEAR); - if (!GetInventoryValue(0x41u)) + if (!GetInventoryValue(ITEM_FIRE_ELEMENT)) ClearGlobalFlag(LV2_CLEAR); - if (!GetInventoryValue(0x42u)) + if (!GetInventoryValue(ITEM_WATER_ELEMENT)) ClearGlobalFlag(LV4_CLEAR); } @@ -1730,3 +1798,811 @@ static void ClearFlagArray(const u16* p) { for (i = p; i[0] != 0xFFFF; i += 2) ClearLocalFlagByBank(i[0], i[1]); } + +void CutsceneMain_Init(void) { + gUnk_080FCBB4[gMenu.overlayType](); +} + +void sub_080535AC(void) { + gMenu.overlayType = 1; + gMenu.transitionTimer = 0x78; + gUnk_02032EC0.field_0x6 = 1; + gUpdateVisibleTiles = 1; + gScreen.lcd.displayControl &= 0xfeff; + LoadRoomEntityList((EntityData*)gUnk_080FCB94); + SetFade(6, 8); +} + +void sub_080535F4(void) { + if (gFadeControl.active == 0) { + ResetSystemPriority(); + gMenu.overlayType = 2; + } +} + +void nullsub_481(void) { +} + +void sub_08053618(void) { + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + sub_08052004(); + } +} + +void sub_08053634(void) { + gUnk_02032EC0.nextToLoad = 3; + MessageInitialize(); +} + +void sub_08053648(void) { + Entity* obj = CreateObject(SMOKE, 0, 0); + if (obj != NULL) { + obj->x.HALF.HI = gRoomControls.origin_x + 0x2d0; + obj->y.HALF.HI = gRoomControls.origin_y + 0x148; + } +} + +void sub_0805367C(void) { + gMenu.overlayType++; +} + +void sub_0805368C(void) { + Entity* entity = FindEntityByID(OBJECT, HOUSE_DOOR_INT, 6); + if (entity != NULL) { + DeleteEntity(entity); + SoundReq(SFX_F0); + } +} + +void sub_080536A8(void) { + sub_080A71C4(5, 5, 4, 0x10); +} + +void sub_080536B8(void) { + sub_080A71C4(5, 3, 4, 4); + SetFade(5, 0x100); +} + +void sub_080536D4(void) { + gUnk_080FCCFC[gMenu.overlayType](); +} + +void sub_080536F0(void) { + gUnk_080FCD38[gMenu.overlayType](); +} + +void sub_0805370C(void) { + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + sub_08051FF0(); + LoadRoomEntityList((EntityData*)gUnk_080FCC54); + SetFade(4, 0x10); +} + +void sub_0805373C(void) { + gUnk_080FCD40[gMenu.overlayType](); +} + +ASM_FUNC("asm/non_matching/game/sub_08053758.inc", void sub_08053758()) + +ASM_FUNC("asm/non_matching/game/sub_08053800.inc", void sub_08053800()) + +ASM_FUNC("asm/non_matching/game/sub_08053894.inc", void sub_08053894()) + +ASM_FUNC("asm/non_matching/game/sub_08053904.inc", void sub_08053904()) + +void sub_08053974(void) { + if (gFadeControl.active == 0) { + InitFade(); + DispReset(1); + SetBGDefaults(); + sub_08051F78(); + LoadRoomEntityList((EntityData*)&gUnk_080FCBC4); + SetFade(5, 0x100); + gMenu.overlayType++; + } +} + +void nullsub_482(void) { +} + +void sub_080539BC(void) { + SetBGDefaults(); + DeleteAllEntities(); + sub_08051F9C(0x22, 0x11, 0, 0); + sub_0804B0B0(0x22, 0x11); + LoadRoomEntityList((EntityData*)&gUnk_080FCC14); + gMenu.overlayType++; +} + +void sub_080539F4(void) { + if (gFadeControl.active == 0) { + DispReset(1); + gMenu.overlayType++; + gMenu.transitionTimer = 0x3c; + } +} + +void sub_08053A1C(void) { + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + gMenu.overlayType++; + gMenu.transitionTimer = 8; + MessageFromTarget(0xf07); + gMessage.textWindowPosX = 1; + gMessage.textWindowPosY = 8; + SetFade(4, 8); + } +} + +void sub_08053A5C(void) { + if (((gMessage.doTextBox & 0x7f) == 0) && --gMenu.transitionTimer == 0) { + gMenu.overlayType++; + SetFade(5, 8); + } +} + +void sub_08053A90(void) { + if (gFadeControl.active == 0) { + gUnk_02032EC0.nextToLoad = 3; + SetBGDefaults(); + } +} + +void sub_08053AB0(void) { + gUnk_080FCDD4[gMenu.overlayType](); +} + +void sub_08053ACC(void) { + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + sub_08051FF0(); + LoadRoomEntityList((EntityData*)&gUnk_080FCD84); + SetFade(5, 0x100); +} + +void sub_08053B00(void) { + gMenu.overlayType++; +} + +void sub_08053B10(void) { + if (CheckRoomFlag(1)) { + gMenu.menuType++; + DispReset(1); + SetFade(4, 0x100); + } +} + +void sub_08053B3C(void) { + sub_080A71C4(5, 4, 5, 0x100); + SetFade(5, 0x100); +} + +void sub_08053B58(void) { + gUnk_080FCEB0[gMenu.overlayType](); +} + +void sub_08053B74(void) { + gMenu.overlayType++; + gUpdateVisibleTiles = 1; + LoadRoomEntityList((EntityData*)&gUnk_080FCDE0); + ResetSystemPriority(); + ResetEntityPriority(); + SetFade(5, 0x100); +} + +void sub_08053BAC(void) { + gMenu.overlayType++; +} + +void sub_08053BBC(void) { + if (CheckRoomFlag(0)) { + gMenu.menuType++; + DispReset(1); + SetFade(4, 0x100); + } +} + +void sub_08053BE8(void) { + sub_080A71C4(5, 2, 5, 0x100); + SetFade(5, 0x100); +} + +void sub_08053C04(void) { + gUnk_080FCEEC[gMenu.overlayType](); +} + +void sub_08053C20(void) { + gMenu.overlayType = 1; + gMenu.transitionTimer = 0x78; + gUpdateVisibleTiles = 1; + sub_08051FF0(); + sub_0805B4D0(4); + LoadRoomEntityList((EntityData*)&gUnk_080FCEBC); + SetFade(4, 0x10); + SoundReq(BGM_FIGHT_THEME2); +} + +void nullsub_483(void) { +} + +void sub_08053C60(void) { + SetFade(5, 2); + SoundReq(SFX_SUMMON); + SoundReq(SONG_STOP_BGM); + SetTask(3); +} + +void sub_08053C84(void) { + gMenu.overlayType = 2; +} + +void CutsceneMain_Exit(void) { + gUnk_080FCEF8[gMenu.field_0x3](); +} + +void sub_08053CAC(void) { + gUnk_080FCFA4[gMenu.overlayType](); +} + +ASM_FUNC("asm/non_matching/game/sub_08053CC8.inc", void sub_08053CC8()) + +void sub_08053D34(void) { + if (gMenu.field_0xa != 0) { + gMenu.field_0xa = 0; + if (CheckLocalFlagByBank(0x680, 0x3d)) { + SetTileType(0x74, 0xc4, 1); + } + if (CheckLocalFlagByBank(0x680, 0x3e)) { + SetTileType(0x74, 0xcc, 1); + } + } + if (gFadeControl.active == 0) { + gMenu.transitionTimer = 0x78; + gMenu.overlayType++; + } +} + +void sub_08053D90(void) { + gMenu.transitionTimer--; + if (gMenu.transitionTimer == 0) { + gMenu.overlayType++; + SetFadeInverted(0x10); + } +} + +void sub_08053DB4(void) { + if (gFadeControl.active == 0) { + u8* ptr = gMenu.field_0xc; + sub_08052FF4(gMenu.field_0xc[4], gMenu.field_0xc[5]); + sub_0807C740(); + gUpdateVisibleTiles = 1; + gRoomControls.scroll_x = (s8)ptr[6] + gRoomControls.scroll_x; + gRoomControls.scroll_y = (s8)ptr[7] + gRoomControls.scroll_y; + LoadRoomEntityList(*(EntityData**)ptr); + LoadRoomEntityList((EntityData*)GetRoomProperty(ptr[4], ptr[5], 1)); + LoadRoomEntityList((EntityData*)GetRoomProperty(ptr[4], ptr[5], 2)); + gMenu.transitionTimer = 0x78; + gMenu.overlayType++; + SetFadeInverted(0x10); + } +} + +void sub_08053E30(void) { + if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) { + gMenu.menuType++; + } +} + +void sub_08053E58(void) { + gUnk_080FD108[gMenu.overlayType](); +} + +void sub_08053E74(void) { + const EntityData** ptr = gUnk_080FCFB8; + gMenu.field_0xc = (u8*)ptr; + LoadRoomEntityList((EntityData*)ptr[0]); + gMenu.transitionTimer = 0x78; + gMenu.field_0xa = 0x3c; + gMenu.overlayType++; + gScreen.lcd.displayControl &= 0xfeff; + gUpdateVisibleTiles = 1; + SetMinPriority(1); + SetFade(4, 8); +} + +void sub_08053EC4(void) { + EntityData** data; + if ((gFadeControl.active == 0) && (--gMenu.field_0xa == 0)) { + data = (EntityData**)(gMenu.field_0xc + 4); + gMenu.field_0xc += 0xc; + LoadRoomEntityList(*data); + gMenu.overlayType++; + } +} + +void sub_08053EFC(void) { + if (--gMenu.transitionTimer == 0) { + gMenu.overlayType++; + SetFadeInverted(8); + } +} + +void sub_08053F20(void) { + u8* ptr; + if (gFadeControl.active == 0) { + DeleteAllEntities(); + ptr = gMenu.field_0xc; + sub_08052FF4(gMenu.field_0xc[8], gMenu.field_0xc[9]); + sub_0807C740(); + gUpdateVisibleTiles = 1; + gRoomControls.scroll_x = (s8)ptr[10] + gRoomControls.scroll_x; + gRoomControls.scroll_y = (s8)ptr[0xb] + gRoomControls.scroll_y; + LoadRoomEntityList(*(EntityData**)ptr); + gMenu.transitionTimer = 0x78; + gMenu.field_0xa = 0x3c; + gMenu.overlayType++; + SetFadeInverted(8); + } +} + +void sub_08053F88(void) { + if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) { + gMenu.menuType++; + ResetEntityPriority(); + } +} + +void CutsceneMain_Update(void) { + gUnk_080FD138[gMenu.field_0x3](); +} + +u32 GetSaleItemConfirmMessageID(u32 item) { + const u16* ptr = &gUnk_080FD964[item * 4]; + return ptr[2]; +} + +s32 GetItemPrice(u32 item) { + const u16* ptr = &gUnk_080FD964[item * 4]; + return ptr[0]; +} + +ASM_FUNC("asm/non_matching/game/GiveItem.inc", void GiveItem(u32 a, u32 b)) + +// TODO Adapt ItemMetaData struct +void sub_08054288(s32 param_1) { + const ItemMetaData* ptr1 = gItemMetaData; + u16* ptr = (u16*)&((ptr1)[param_1]); + MessageFromTarget(ptr[3]); +} + +u32 sub_0805429C(s32 param_1) { + const ItemMetaData* ptr1 = gItemMetaData; + u16* ptr = (u16*)&((ptr1)[param_1]); + return ptr[2]; +} + +u32 sub_080542AC(u32 param_1) { + const ItemMetaData* ptr1 = gItemMetaData; + u8* ptr = (u8*)&((ptr1)[param_1]); + return ptr[3] & 1; +} + +void ModShells(s32 shells) { + if (shells == 0) { + shells = 1; + } + shells += gSave.stats.shells; + if (shells < 0) { + shells = 0; + } else if (999 < shells) { + shells = 999; + } + gSave.stats.shells = shells; +} + +void ModBombs(s32 bombs) { + s32 bombCount = bombs; + s32 bagSize; + bombCount += gSave.stats.bombCount; + bagSize = gBombBagSizes[gSave.stats.bombBagType]; + if (bombCount < 0) { + bombCount = 0; + } else if (bagSize < bombCount) { + bombCount = bagSize; + } + gSave.stats.bombCount = bombCount; +} + +void ModArrows(s32 arrows) { + s32 quiverSize; + s32 arrowCount = arrows; + arrowCount += gSave.stats.arrowCount; + quiverSize = gQuiverSizes[gSave.stats.quiverType]; + if (arrowCount < 0) { + arrowCount = 0; + } else if (quiverSize < arrowCount) { + arrowCount = quiverSize; + } + gSave.stats.arrowCount = arrowCount; +} + +/** + * @brief Returns the slot the item is equipped in. + * + * 0: A + * 1: B + * 2: Not equipped + */ +u32 IsItemEquipped(u32 itemID) { + u32 itemSlot; + + if (itemID == gSave.stats.itemButtons[SLOT_A]) + itemSlot = 0; + else if (itemID == gSave.stats.itemButtons[SLOT_B]) + itemSlot = 1; + else + itemSlot = 2; + return itemSlot; +} + +void PutItemOnSlot(u32 itemID) { + u32 itemSlot; + u32 itemID2 = itemID; + if (itemID2 < 0x47) { + SetInventoryValue(0, 1); + } + if (itemID2 - 1 < 0x1f) { + itemSlot = 2; + if (gSave.stats.itemButtons[SLOT_A] == 0) { + itemSlot = 0; + } else if (gSave.stats.itemButtons[SLOT_B] == 0) { + itemSlot = 1; + } + if (itemSlot == 2) { + u32 temp = gItemMetaData[itemID2].menuSlot; + if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_A]].menuSlot) { + itemSlot = 0; + } else { + if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_B]].menuSlot) { + itemSlot = 1; + } + } + if (itemSlot == 2) { + return; + } + } + ForceEquipItem(itemID2, itemSlot); + } +} + +void ForceEquipItem(u32 itemID, u32 itemSlot) { + u32 otherItem; + u32 otherItemIndex; + u32 replacedItem; + + if ((itemID - 1 < 0x1f) && (itemSlot < 2)) { + otherItemIndex = itemSlot == 0; + replacedItem = gSave.stats.itemButtons[itemSlot]; + otherItem = gSave.stats.itemButtons[otherItemIndex]; + if (gItemMetaData[otherItem].menuSlot == gItemMetaData[itemID].menuSlot) { + otherItem = replacedItem; + } + gSave.stats.itemButtons[itemSlot] = itemID; + gSave.stats.itemButtons[otherItemIndex] = otherItem; + gUnk_0200AF00.filler0[0x13] = 0x7f; + gUnk_0200AF00.filler0[0x14] = 0x7f; + } +} + +u32 SetBottleContents(u32 itemID, u32 bottleIndex) { + if (bottleIndex > 3) { + bottleIndex = 0; + if (gSave.stats.bottles[0] != 0x20) { + do { + bottleIndex++; + if (bottleIndex > 3) { + return bottleIndex; + } + } while (gSave.stats.bottles[bottleIndex] != 0x20); + } + if (bottleIndex > 3) { + return bottleIndex; + } + } + gSave.stats.bottles[bottleIndex] = itemID; + return bottleIndex; +} + +bool32 ItemIsSword(u32 item) { + switch (item) { + case ITEM_SMITH_SWORD: + case ITEM_GREEN_SWORD: + case ITEM_RED_SWORD: + case ITEM_BLUE_SWORD: + case ITEM_FOURSWORD: + return TRUE; + default: + return FALSE; + } +} + +bool32 ItemIsShield(u32 id) { + switch (id) { + case 13: + case 14: + return 1; + default: + return 0; + } +} + +bool32 ItemIsBottle(u32 id) { + switch (id) { + case 28: + case 29: + case 30: + case 31: + return 1; + default: + return 0; + } +} + +u32 GetBottleContaining(u32 id) { + if (id == gSave.stats.bottles[0]) { + return 1; + } else if (id == gSave.stats.bottles[1]) { + return 2; + } else if (id == gSave.stats.bottles[2]) { + return 3; + } else if (id == gSave.stats.bottles[3]) { + return 4; + } else { + return 0; + } +} + +void sub_08054524(void) { + u32 bVar1; + + bVar1 = gArea.locationIndex; + if (gArea.locationIndex == 0) { + bVar1 = gRoomTransition.player_status.field_0x24[0xa]; + } + if (bVar1 > 0x16) { + bVar1 = 0; + } + + bVar1 = gUnk_080FE1C6[bVar1]; + MemCopy(&gAreaDroptables[bVar1], &gRoomVars.currentAreaDroptable, 0x20); +} + +void sub_08054564(void) { + gRoomVars.field_0x2 = 1; +} + +void sub_08054570(void) { + gRoomVars.field_0x2 = 0; +} + +extern void sub_08000F14(s16*, const s16*, const s16*, const s16*); +extern u32 sub_08000F2C(s16*, const s16*, const s16*, const s16*); +u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter); +u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) { + extern const u8 gUnk_080FE1B4[] /* = { + ITEM_NONE, ITEM_RUPEE1, ITEM_RUPEE5, ITEM_RUPEE20, ITEM_HEART, ITEM_FAIRY, + ITEM_BOMBS5, ITEM_ARROWS5, ITEM_SHELLS, ITEM_KINSTONE_GREEN, ITEM_KINSTONE_BLUE, ITEM_KINSTONE_RED, + ITEM_ENEMY_BEETLE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, + }*/; + + int r0, r1, rand, summOdds, item; + u32 r3; + const Droptable *ptr2, *ptr3, *ptr4; + Droptable droptable; + r3 = arg1; + if (gRoomVars.field_0x2 != 1) { + ptr2 = &gDroptableModifiers[DROPTABLE_NONE]; + ptr4 = NULL; + switch (r3) { + case 1 ... 12: + ptr4 = &gEnemyDroptables[r3]; + break; +#ifndef EU + case 24: + case 25: + r0 = gRoomVars.unk2; + ptr4 = &gUnk_0800191C[0]; + if (r0) { + ptr4++; + } + break; +#endif + case 16 ... 23: +#ifdef EU + case 24: +#endif + ptr2 = &gObjectDroptables[r3 - 16]; + case 15: + ptr4 = &gRoomVars.currentAreaDroptable; + break; + case 0: + default: + break; + } + if (ptr4 != 0) { + if ((r1 = gSave.stats.picolyteType) == 0) { + // nop + ptr3 = &gDroptableModifiers[DROPTABLE_NONE]; + } else { +#ifdef EU + ptr3 = &gEnemyDroptables[r1 + 9]; +#else + ptr3 = &gEnemyDroptables[r1 + 6]; +#endif + } + // vector addition, s0 = ptr4 + ptr2 + ptr3 + sub_08000F14(droptable.a, ptr4->a, ptr2->a, ptr3->a); + if (gSave.stats.health <= 8) { + droptable.s.hearts += 5; + } + if (gSave.stats.bombCount == 0) { + droptable.s.bombs += 3; + } + if (gSave.stats.arrowCount == 0) { + droptable.s.arrows += 3; + } + if (gSave.stats.rupees <= 10) { + droptable.s.rupee5 += 1; + } + ptr2 = &gDroptableModifiers[DROPTABLE_NONE]; + r0 = gSave.stats.hasAllFigurines; + ptr3 = &gDroptableModifiers[DROPTABLE_NONE]; + // don't drop shells anymore + if (r0 != 0) { + ptr2 = &gDroptableModifiers[DROPTABLE_NO_SHELLS]; + } + // don't drop kinstones anymore + if (gSave.didAllFusions != 0) { + ptr3 = &gDroptableModifiers[DROPTABLE_NO_KINSTONES]; + } + // vector addition, s0 = s0 + ptr2 + ptr3 + // resulting values are clamped to be >= 0 + // returns sum over s0 + summOdds = sub_08000F2C(droptable.a, droptable.a, ptr2->a, ptr3->a); + rand = Random(); + item = (rand >> 0x18); + item &= 0xF; + rand = rand % summOdds; + { + u32 r3; + for (r3 = 0, r1 = 0; r3 < 0x10; r3++, item = (item + 1) & 0xF) { + if ((r1 += droptable.a[item]) > rand) { + break; + } + } + } + r1 = gUnk_080FE1B4[item]; + if (r1 != ITEM_NONE) { + return CreateItemDrop(arg0, r1, 0); + } + } + } + return ITEM_NONE; +} + +u32 CreateItemDrop(Entity* arg0, u32 itemID, u32 itemParameter) { + u32 adjustedParam = itemParameter; + Entity* itemEntity; + + switch (itemID) { + case ITEM_ENEMY_BEETLE: + if (!GetInventoryValue(ITEM_SMITH_SWORD)) { + return ITEM_NONE; + } + break; + case ITEM_BOMBS5: + if (!GetInventoryValue(ITEM_BOMBBAG)) { + return ITEM_NONE; + } + break; + case ITEM_ARROWS5: + if (!GetInventoryValue(ITEM_BOW)) { + return ITEM_NONE; + } + break; + case ITEM_SHELLS: { + if (!GetInventoryValue(ITEM_EARTH_ELEMENT)) { + return ITEM_NONE; + } + if (itemParameter == 0) { + adjustedParam = 1; + } + break; + } + case ITEM_KINSTONE: + case ITEM_KINSTONE_GREEN ... ITEM_KINSTONE_RED: { + u32 rand; + + if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0) { + return ITEM_NONE; + } + if (3 < gRoomVars.filler1[0]) { + return ITEM_NONE; + } + + if (itemID != ITEM_KINSTONE) { + adjustedParam = itemID - ITEM_KINSTONE_GREEN; + rand = (Random() & 0x3f); + adjustedParam = gUnk_080FE1DD[(rand + adjustedParam * 0x40)]; + if (adjustedParam == 0) { + itemID = ITEM_NONE; + } else { + itemID = ITEM_KINSTONE; + } + } + break; + } + } + if (itemID != ITEM_NONE) { + if (itemID != ITEM_ENEMY_BEETLE) { + itemEntity = CreateObject(GROUND_ITEM, itemID, adjustedParam); + if (itemEntity != NULL) { + if (arg0 == &gPlayerEntity) { + itemEntity->actionDelay = 1; + } else { + itemEntity->actionDelay = 0; + } + if (arg0->kind == OBJECT) { + if (arg0->id == 99) { + arg0->child = itemEntity; + } else if (arg0->id == 0x1e) { + itemEntity->direction = arg0->animationState << 3 | 0x80; + itemEntity->speed = 0xc0; + itemEntity->zVelocity = Q_16_16(1.5); + } + } + CopyPosition(arg0, itemEntity); + } + } else { + itemEntity = CreateEnemy(BEETLE, 0); + if (itemEntity != NULL) { + itemEntity->x.HALF.HI = arg0->x.HALF.HI; + itemEntity->y.HALF.HI = arg0->y.HALF.HI; + itemEntity->collisionLayer = arg0->collisionLayer; + UpdateSpriteForCollisionLayer(itemEntity); + } + } + } + return itemID; +} + +void Subtask_WorldEvent(void) { +#if !(defined(DEMO_USA) || defined(DEMO_JP)) + gUnk_080FE2A0[gMenu.menuType](); +#endif +} + +ASM_FUNC("asm/non_matching/game/sub_0805488C.inc", void sub_0805488C()) + +void sub_080548E8(void) { + gUnk_080FE2AC[gMenu.field_0x0](); + FlushSprites(); + UpdateEntities(); + DrawEntities(); + CopyOAM(); + UpdateScroll(); + UpdateBgAnim(); + UpdateScrollVram(); +} + +ASM_FUNC("asm/non_matching/game/sub_08054920.inc", void sub_08054920()) + +void sub_08054968(void) { + gMenu.menuType = 2; +} + +ASM_FUNC("asm/non_matching/game/sub_08054974.inc", void sub_08054974()) + +ASM_FUNC("asm/non_matching/game/sub_08054A14.inc", void sub_08054A14()) diff --git a/src/object/figurineDevice.c b/src/object/figurineDevice.c index 7e910f59..3ae836d1 100644 --- a/src/object/figurineDevice.c +++ b/src/object/figurineDevice.c @@ -40,7 +40,7 @@ typedef struct { #endif } FigurineDeviceEntity; -extern void sub_080542C0(s32); +extern void ModShells(s32); extern u8 gUnk_020227F0; typedef struct { u32 unk_0;