diff --git a/asm/fileScreen.s b/asm/fileScreen.s deleted file mode 100755 index 699cf86a..00000000 --- a/asm/fileScreen.s +++ /dev/null @@ -1,1032 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - -.ifdef DEMO_USA - thumb_func_start HandleGameplayScreen -HandleGameplayScreen: @ 08051A28 - push {r4, lr} - ldr r1, _08051A68 @ =0x030010A0 - ldr r0, [r1, #0x00] - adds r0, #0x01 - str r0, [r1, #0x00] - ldr r1, _08051A6C @ =0x080FC55C - ldr r4, _08051A70x @ =0x03001000 - ldrb r0, [r4, #0x03] - lsls r0, r0, #0x02 - adds r0, r0, r1 - ldr r0, [r0, #0x00] - bl _call_via_r0 - ldr r0, _08051A74x @ =0x02002A40 - movs r2, #0x95 - lsls r2, r2, #0x03 - adds r1, r0, r2 - ldr r0, [r1, #0x00] - cmp r0, #0x00 - beq _08051A64 - subs r0, #0x01 - str r0, [r1, #0x00] - cmp r0, #0x00 - bne _08051A64 - movs r0, #0x07 - movs r1, #0x02 - bl DoFade - movs r0, #0x03 - strb r0, [r4, #0x03] -_08051A64: - pop {r4, pc} - .byte 0x00, 0x00 -_08051A68: .4byte gScreenTransition -_08051A6C: .4byte gUnk_080FC9D8 -_08051A70x: .4byte gMain -_08051A74x: .4byte gSave -.else - thumb_func_start HandleGameplayScreen -HandleGameplayScreen: @ 0x08051988 - push {lr} - ldr r1, _080519A4 @ =gScreenTransition - ldr r0, [r1] - adds r0, #1 - str r0, [r1] - ldr r1, _080519A8 @ =gUnk_080FC9D8 - ldr r0, _080519AC @ =gMain - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_080519A4: .4byte gScreenTransition -_080519A8: .4byte gUnk_080FC9D8 -_080519AC: .4byte gMain -.endif - - - thumb_func_start sub_080519B0 -sub_080519B0: @ 0x080519B0 - push {r4, r5, lr} - ldr r0, _08051A04 @ =gFadeControl - ldrb r5, [r0] - cmp r5, #0 - bne _08051A02 - movs r0, #1 - bl DispReset - bl InitSoundPlayingInfo - bl zMallocInit - bl sub_080A7124 - bl sub_0807059C - ldr r4, _08051A08 @ =gScreenTransition - adds r0, r4, #0 - movs r1, #0xb0 - bl MemClear - bl sub_08049CD4 - bl sub_080300AC - bl sub_0807CA18 - ldr r0, _08051A0C @ =gUnk_02002AC8 - adds r1, r4, #0 - adds r1, #0xc - movs r2, #0x20 - bl MemCopy - movs r0, #4 - strb r0, [r4, #9] - bl sub_08053518 - ldr r1, _08051A10 @ =gMain - movs r0, #1 - strb r0, [r1, #3] - strb r5, [r1, #4] -_08051A02: - pop {r4, r5, pc} - .align 2, 0 -_08051A04: .4byte gFadeControl -_08051A08: .4byte gScreenTransition -_08051A0C: .4byte gUnk_02002AC8 -_08051A10: .4byte gMain - - thumb_func_start sub_08051A14 -sub_08051A14: @ 0x08051A14 - push {lr} - movs r0, #1 - bl DispReset - ldr r1, _08051A70 @ =gFadeControl - movs r0, #1 - rsbs r0, r0, #0 - str r0, [r1, #4] - ldr r0, _08051A74 @ =gUnk_03000000 - ldr r1, _08051A78 @ =0x00000B74 - bl MemClear - ldr r0, _08051A7C @ =gUnk_02032EC0 - movs r1, #0xed - lsls r1, r1, #2 - bl MemClear - bl EraseAllEntities - bl sub_080197AC - bl sub_08080668 - bl ResetPalettes - movs r0, #1 - bl sub_0801CFA8 - bl sub_0806FD8C - ldr r2, _08051A80 @ =gRoomControls - ldr r1, _08051A84 @ =gScreenTransition - ldrb r0, [r1, #0xc] - strb r0, [r2, #4] - ldrb r0, [r1, #0xd] - strb r0, [r2, #5] - bl sub_08053320 - ldr r1, _08051A88 @ =gGFXSlots - movs r0, #1 - strb r0, [r1] - ldr r1, _08051A8C @ =gMain - movs r0, #2 - strb r0, [r1, #3] - pop {pc} - .align 2, 0 -_08051A70: .4byte gFadeControl -_08051A74: .4byte gUnk_03000000 -_08051A78: .4byte 0x00000B74 -_08051A7C: .4byte gUnk_02032EC0 -_08051A80: .4byte gRoomControls -_08051A84: .4byte gScreenTransition -_08051A88: .4byte gGFXSlots -_08051A8C: .4byte gMain - - thumb_func_start sub_08051A90 -sub_08051A90: @ 0x08051A90 - push {lr} - ldr r1, _08051AA4 @ =gUnk_080FC9E8 - ldr r0, _08051AA8 @ =gMain - ldrb r0, [r0, #4] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08051AA4: .4byte gUnk_080FC9E8 -_08051AA8: .4byte gMain - - thumb_func_start InitializeNewRoom -InitializeNewRoom: @ 0x08051AAC - push {lr} - bl SetInitializationPriority - ldr r1, _08051AE4 @ =gScreen - movs r2, #0 - movs r0, #0xba - lsls r0, r0, #5 - strh r0, [r1] - ldr r1, _08051AE8 @ =gMain - movs r0, #1 - strb r0, [r1, #4] - ldr r0, _08051AEC @ =gScreenTransition - strb r2, [r0, #8] - strb r2, [r0, #4] - strb r2, [r0, #5] - bl MessageInitialize - bl sub_08052CFC - movs r0, #0 - bl sub_0801C370 - bl InitializeEntities -.ifndef EU - bl sub_0801855C -.endif - pop {pc} - .align 2, 0 -_08051AE4: .4byte gScreen -_08051AE8: .4byte gMain -_08051AEC: .4byte gScreenTransition - - thumb_func_start sub_08051AF0 -sub_08051AF0: @ 0x08051AF0 -.ifdef EU - push {r4, lr} - bl UpdateEntities - bl sub_0805BBBC - cmp r0, #0 - bne _0805173E - bl UpdateScroll -_0805173E: - bl UpdateBgAnim - bl sub_08000108 - bl sub_0801C344 - bl UpdateManagers - bl FlushSprites - bl sub_0801C208 - bl sub_08078CB4 - bl sub_080AD9B0 - bl sub_080AD918 - ldr r0, _080517E0 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080517DC - ldr r0, _080517E4 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #0 - bne _080517DC - bl sub_08052F1C - ldr r0, _080517E8 @ =gArea - movs r1, #0x86 - lsls r1, r1, #4 - adds r3, r0, r1 - adds r1, #4 - adds r0, r0, r1 - ldr r1, [r3] - ldr r2, [r0] - cmp r1, r2 - beq _08051796 - str r2, [r3] - ldr r0, _080517EC @ =0x800B0000 - orrs r2, r0 - adds r0, r2, #0 - bl SoundReq -_08051796: - bl DeleteSleepingEntities - bl sub_0805BC04 - adds r4, r0, #0 - cmp r4, #0 - bne _080517DC - bl sub_08052C5C - bl ResetSystemPriority - bl sub_08051E04 - bl sub_080300C4 - ldr r1, _080517F0 @ =gMain - movs r0, #2 - strb r0, [r1, #4] - movs r0, #0 - bl SetPlayerControl - ldr r0, _080517F4 @ =gUnk_02034490 - strb r4, [r0] - bl sub_08053178 - bl sub_0801855C - ldr r0, _080517F8 @ =gRoomVars - ldrb r0, [r0] - cmp r0, #0 - bne _080517DC - movs r0, #0 - movs r1, #1 - bl RequestPriorityDuration -_080517DC: - pop {r4, pc} - .align 2, 0 -_080517E0: .4byte gFadeControl -_080517E4: .4byte gRoomControls -_080517E8: .4byte gArea -_080517EC: .4byte 0x800B0000 -_080517F0: .4byte gMain -_080517F4: .4byte gUnk_02034490 -_080517F8: .4byte gRoomVars - -.else - push {r4, r5, lr} - bl UpdateEntities - bl sub_0805BBBC - cmp r0, #0 - bne _08051B02 - bl UpdateScroll -_08051B02: - bl UpdateBgAnim - bl sub_08000108 - bl sub_0801C344 - bl UpdateManagers - bl FlushSprites - bl sub_0801C208 - bl sub_08078CB4 - bl sub_080AD9B0 - bl sub_080AD918 - ldr r0, _08051BB0 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08051BAE - ldr r0, _08051BB4 @ =gRoomControls - ldrh r0, [r0] - cmp r0, #0 - bne _08051BAE - bl sub_08052F1C - ldr r5, _08051BB8 @ =gArea - movs r0, #0x86 - lsls r0, r0, #4 - adds r3, r5, r0 -.ifdef EU - adds r1, 4 -.else - ldr r1, _08051BBC @ =0x00000864 -.endif - adds r0, r5, r1 - ldr r1, [r3] - ldr r2, [r0] - cmp r1, r2 - beq _08051B5A - str r2, [r3] - ldr r0, _08051BC0 @ =0x800B0000 - orrs r2, r0 - adds r0, r2, #0 - bl SoundReq -_08051B5A: - bl DeleteSleepingEntities - bl sub_0805BC04 - adds r4, r0, #0 - cmp r4, #0 - bne _08051BAE - bl sub_08052C5C - bl ResetSystemPriority - bl sub_08051E04 - bl sub_080300C4 - ldr r1, _08051BC4 @ =gMain - movs r0, #2 - strb r0, [r1, #4] - movs r0, #0 - bl SetPlayerControl - ldr r0, _08051BC8 @ =gUnk_02034490 - strb r4, [r0] -.ifdef DEMO_JP - ldr r0, _08051C30 @ =gScreenTransition - adds r0,#0x31 - ldrb r0,[r0,#0x0] - cmp r0,#0x0 - beq _08051bee - - bl sub_08053178 -_08051bee: - adds r0,r5,#0x0 - adds r0,#0x28 - ldrb r0,[r0,#0x0] - cmp r0,#0xff - beq _08051bfc - bl sub_0801855C -_08051bfc: - bl sub_08052BF8 - -.else - -.ifdef JP - bl sub_08053178 -.endif - -.ifndef EU - adds r0, r5, #0 - adds r0, #0x28 - ldrb r0, [r0] - cmp r0, #0xff - beq _08051B96 - bl sub_0801855C -.endif -_08051B96: -.ifdef EU - bl sub_08053178 @ TODO fix addresses - bl sub_08053178 -.else -.ifdef DEMO_JP - bl sub_08053178 @ TODO fix addresses - bl sub_08053178 -.else -.ifndef JP - bl sub_08052BF8 - bl sub_08053178 -.endif -.endif -.endif -.endif - ldr r0, _08051BCC @ =gRoomVars - ldrb r0, [r0] - cmp r0, #0 - bne _08051BAE - movs r0, #0 - movs r1, #1 - bl RequestPriorityDuration -_08051BAE: - pop {r4, r5, pc} - .align 2, 0 -_08051BB0: .4byte gFadeControl -_08051BB4: .4byte gRoomControls -_08051BB8: .4byte gArea -.ifndef EU -_08051BBC: .4byte 0x00000864 -.endif -_08051BC0: .4byte 0x800B0000 -_08051BC4: .4byte gMain -_08051BC8: .4byte gUnk_02034490 -.ifdef DEMO_JP -_08051C30: .4byte gScreenTransition -.endif -_08051BCC: .4byte gRoomVars -.endif - - thumb_func_start sub_08051BD0 -sub_08051BD0: @ 0x08051BD0 - push {lr} - bl sub_080705AC - cmp r0, #0 - bne _08051C9C - bl sub_0804AA84 - cmp r0, #0 - bne _08051C9C - bl sub_0805340C - ldr r0, _08051C5C @ =gMain - ldrb r0, [r0, #4] - cmp r0, #2 - bne _08051C9C - ldr r0, _08051C60 @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _08051C02 - ldr r0, _08051C64 @ =gPriorityHandler - ldrh r0, [r0, #8] - cmp r0, #0 - beq _08051C06 -_08051C02: - bl sub_08078B48 -_08051C06: - bl FlushSprites - bl UpdateEntities - bl sub_08080A40 - bl CollisionMain - bl UpdateScroll - bl UpdateBgAnim - bl sub_08000108 - bl sub_08052C3C - bl sub_0801C344 - bl UpdateManagers - bl sub_0801C208 - bl sub_08078CB4 - bl sub_080AD9B0 - bl HandleRoomExit - bl sub_08052C5C - bl sub_080528B4 - bl sub_080185F8 - bl sub_080AD918 - ldr r0, _08051C68 @ =gRoomControls - ldrh r2, [r0] - cmp r2, #1 - beq _08051C6C - cmp r2, #2 - beq _08051C88 - b _08051C9C - .align 2, 0 -_08051C5C: .4byte gMain -_08051C60: .4byte gMessage -_08051C64: .4byte gPriorityHandler -_08051C68: .4byte gRoomControls -_08051C6C: - ldr r0, _08051C80 @ =gPlayerState - movs r1, #0x17 - strb r1, [r0, #0xc] - ldr r0, _08051C84 @ =gMain - strb r2, [r0, #4] - bl SetRoomReloadPriority - bl sub_08051D98 - b _08051C9C - .align 2, 0 -_08051C80: .4byte gPlayerState -_08051C84: .4byte gMain -_08051C88: - ldr r1, _08051CA0 @ =gPlayerState - movs r0, #0x17 - strb r0, [r1, #0xc] - ldr r1, _08051CA4 @ =gMain - movs r0, #1 - strb r0, [r1, #4] - bl SetRoomReloadPriority - bl sub_08051DCC -_08051C9C: - pop {pc} - .align 2, 0 -_08051CA0: .4byte gPlayerState -_08051CA4: .4byte gMain - - thumb_func_start sub_08051CA8 -sub_08051CA8: @ 0x08051CA8 - push {lr} - bl sub_080705AC - cmp r0, #0 - bne _08051CEA - bl UpdateEntities - bl CollisionMain - bl sub_0801C344 - bl UpdateManagers - bl FlushSprites - bl sub_0801C208 - bl sub_08078CB4 - bl sub_080AD9B0 - bl HandleRoomExit - bl sub_080528B4 - bl sub_080AD918 - ldr r0, _08051CEC @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _08051CEA - bl ResetSystemPriority -_08051CEA: - pop {pc} - .align 2, 0 -_08051CEC: .4byte gFadeControl - - thumb_func_start sub_08051CF0 -sub_08051CF0: @ 0x08051CF0 - push {r4, r5, r6, lr} - bl FlushSprites - bl sub_0801C208 - bl sub_080AD9B0 - ldr r5, _08051D20 @ =gMain - movs r6, #1 - strb r6, [r5, #0xb] - bl sub_080AD918 - ldr r0, _08051D24 @ =gFadeControl - ldrb r4, [r0] - cmp r4, #0 - bne _08051D1E - movs r0, #1 - bl DispReset - strb r6, [r5, #3] - strb r4, [r5, #4] - ldr r0, _08051D28 @ =gScreenTransition - strb r6, [r0, #8] -_08051D1E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08051D20: .4byte gMain -_08051D24: .4byte gFadeControl -_08051D28: .4byte gScreenTransition - - thumb_func_start sub_08051D2C -sub_08051D2C: @ 0x08051D2C -.ifdef DEMO_USA - push {lr} - ldr r0, _08051E04 @ =0x03000FD0 - ldrb r0, [r0] - cmp r0, #0 - bne _08051E02 - bl DoSoftReset -_08051E02: - pop {pc} - .align 2, 0 -_08051E04: .4byte 0x03000FD0 -.else - push {lr} - movs r0, #7 - movs r1, #8 - bl DoFade - movs r0, #3 - bl InitScreen - pop {pc} - .align 2, 0 -.endif - - thumb_func_start InitializeEntities -InitializeEntities: @ 0x08051D40 - push {lr} - bl sub_08052EA0 - bl sub_0804AF90 - bl sub_0804AFDC - bl InitializePlayer - ldr r1, _08051D90 @ =gUnk_03004030 - movs r0, #0 - str r0, [r1] - bl sub_0807C740 - ldr r1, _08051D94 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - bl sub_0805283C - movs r0, #0 - movs r1, #0 - bl SetColor - bl LoadRoom - bl CreateZeldaFollower - bl sub_0804AFF4 - bl sub_0805329C - bl sub_08000108 - movs r0, #1 - rsbs r0, r0, #0 - bl sub_0805BB74 - bl sub_080531F8 - pop {pc} - .align 2, 0 -_08051D90: .4byte gUnk_03004030 -_08051D94: .4byte gUpdateVisibleTiles - - thumb_func_start sub_08051D98 -sub_08051D98: @ 0x08051D98 - push {lr} - bl sub_08052EA0 - ldr r1, _08051DC8 @ =gRoomVars - movs r0, #1 - strb r0, [r1] - bl sub_0805E9A8 - bl sub_0804AF90 - bl sub_0804AFDC - bl sub_0807C0DC - bl sub_0805283C - bl LoadRoom - bl sub_0804AFF4 - movs r0, #1 - bl SetPlayerControl - pop {pc} - .align 2, 0 -_08051DC8: .4byte gRoomVars - - thumb_func_start sub_08051DCC -sub_08051DCC: @ 0x08051DCC - push {r4, lr} - ldr r1, _08051DFC @ =gRoomControls - ldr r4, _08051E00 @ =gScreenTransition - ldrb r0, [r4, #0xc] - strb r0, [r1, #4] - ldrb r0, [r4, #0xd] - strb r0, [r1, #5] - bl RoomExitCallback - movs r0, #3 - strb r0, [r4, #9] - bl sub_08052CFC - bl sub_08052EA0 - bl sub_0805E9A8 - bl sub_0804AF90 - bl sub_0804AFDC - bl sub_0805283C - pop {r4, pc} - .align 2, 0 -_08051DFC: .4byte gRoomControls -_08051E00: .4byte gScreenTransition - - thumb_func_start sub_08051E04 -sub_08051E04: @ 0x08051E04 - push {lr} - bl CheckIsOverworld - cmp r0, #0 - beq _08051E60 - ldr r1, _08051E2C @ =gPlayerEntity - movs r2, #0x2e - ldrsh r0, [r1, r2] - cmp r0, #0 - bge _08051E1A - adds r0, #0xf -_08051E1A: - asrs r2, r0, #4 - movs r3, #0x32 - ldrsh r0, [r1, r3] - cmp r0, #0 - bge _08051E26 - adds r0, #0xf -_08051E26: - asrs r1, r0, #4 - ldr r3, _08051E30 @ =gUnk_08127F94 - b _08051E36 - .align 2, 0 -_08051E2C: .4byte gPlayerEntity -_08051E30: .4byte gUnk_08127F94 -_08051E34: - adds r3, #8 -_08051E36: - ldrb r0, [r3] - cmp r0, #0xff - beq _08051E60 - cmp r0, r2 - bhi _08051E34 - ldrb r0, [r3, #2] - cmp r0, r2 - blo _08051E34 - ldrb r0, [r3, #1] - cmp r0, r1 - bhi _08051E34 - ldrb r0, [r3, #3] - cmp r0, r1 - blo _08051E34 - ldr r2, _08051E64 @ =gSave - movs r1, #1 - ldrb r3, [r3, #4] - lsls r1, r3 - ldr r0, [r2, #0x40] - orrs r0, r1 - str r0, [r2, #0x40] -_08051E60: - pop {pc} - .align 2, 0 -_08051E64: .4byte gSave - - thumb_func_start sub_08051E68 -sub_08051E68: @ 0x08051E68 - push {lr} - ldr r1, _08051E7C @ =gUnk_080FCA08 - ldr r0, _08051E80 @ =gMenu - ldrb r0, [r0, #5] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {pc} - .align 2, 0 -_08051E7C: .4byte gUnk_080FCA08 -_08051E80: .4byte gMenu - - thumb_func_start sub_08051E84 -sub_08051E84: @ 0x08051E84 - push {r4, r5, r6, lr} - ldr r0, _08051EF0 @ =gUnk_02032EC0 - ldrb r4, [r0, #3] - lsls r4, r4, #3 - ldr r0, _08051EF4 @ =gUnk_080FCA20 - adds r4, r4, r0 - ldr r5, _08051EF8 @ =gRoomControls - ldrb r0, [r4] - strb r0, [r5, #4] - ldrb r0, [r4, #1] - strb r0, [r5, #5] - bl sub_08053320 - ldrb r0, [r5, #4] - bl GetFlagBankOffset - ldr r1, _08051EFC @ =gArea - movs r6, #0 - strh r0, [r1, #4] - ldrb r0, [r4] - ldrb r1, [r4, #1] - bl SetCurrentRoomPropertyList - ldrb r0, [r4] - ldrb r1, [r4, #1] - bl sub_08052FD8 - ldrh r0, [r4, #4] - ldrh r1, [r5, #6] - adds r0, r0, r1 - strh r0, [r5, #0xa] - ldrh r0, [r4, #6] - ldrh r1, [r5, #8] - adds r0, r0, r1 - strh r0, [r5, #0xc] - ldr r1, _08051F00 @ =gMenu - ldrb r0, [r4, #2] - strb r0, [r1] - ldrb r2, [r4, #3] - movs r0, #0xf - ands r0, r2 - strb r0, [r1, #3] - str r4, [r1, #0xc] - ldrb r0, [r1, #5] - adds r0, #1 - strb r0, [r1, #5] - strb r6, [r1, #6] - movs r0, #0x96 - lsls r0, r0, #1 - strh r0, [r1, #8] - bl sub_08051F04 - pop {r4, r5, r6, pc} - .align 2, 0 -_08051EF0: .4byte gUnk_02032EC0 -_08051EF4: .4byte gUnk_080FCA20 -_08051EF8: .4byte gRoomControls -_08051EFC: .4byte gArea -_08051F00: .4byte gMenu - - thumb_func_start sub_08051F04 -sub_08051F04: @ 0x08051F04 - push {lr} - ldr r1, _08051F38 @ =gUnk_080FCA14 - ldr r0, _08051F3C @ =gMenu - ldrb r0, [r0] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl FlushSprites - bl UpdateEntities - bl sub_080AD9B0 - bl sub_080AD918 - bl UpdateScroll - bl UpdateBgAnim - bl UpdateManagers - bl sub_08000108 - pop {pc} - .align 2, 0 -_08051F38: .4byte gUnk_080FCA14 -_08051F3C: .4byte gMenu - - thumb_func_start sub_08051F40 -sub_08051F40: @ 0x08051F40 - push {lr} - ldr r0, _08051F60 @ =gUnk_080FCA20 - ldr r2, _08051F64 @ =gUnk_02032EC0 - ldrb r1, [r2, #3] - lsls r1, r1, #3 - adds r1, r1, r0 - ldrb r1, [r1, #3] - movs r0, #0xf0 - ands r0, r1 - cmp r0, #0 - beq _08051F68 - lsrs r1, r1, #4 - movs r0, #2 - bl MenuFadeIn - b _08051F76 - .align 2, 0 -_08051F60: .4byte gUnk_080FCA20 -_08051F64: .4byte gUnk_02032EC0 -_08051F68: - movs r0, #3 - strb r0, [r2] - movs r0, #0x10 - bl sub_080500F4 - bl MessageInitialize -_08051F76: - pop {pc} - - thumb_func_start sub_08051F78 -sub_08051F78: @ 0x08051F78 - push {lr} - ldr r0, _08051F94 @ =gUnk_02032EC0 - ldrb r3, [r0, #3] - lsls r3, r3, #3 - ldr r0, _08051F98 @ =gUnk_080FCA20 - adds r3, r3, r0 - ldrb r0, [r3] - ldrb r1, [r3, #1] - ldrh r2, [r3, #4] - ldrh r3, [r3, #6] - bl sub_08051F9C - pop {pc} - .align 2, 0 -_08051F94: .4byte gUnk_02032EC0 -_08051F98: .4byte gUnk_080FCA20 - - thumb_func_start sub_08051F9C -sub_08051F9C: @ 0x08051F9C - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - adds r6, r2, #0 - mov r8, r3 - ldr r5, _08051FE0 @ =gScreen - ldrh r2, [r5] - movs r4, #0xc0 - lsls r4, r4, #7 - ands r4, r2 - bl sub_08052FF4 - ldr r1, _08051FE4 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, r0, r6 - movs r6, #0 - strh r0, [r1, #0xa] - ldrh r0, [r1, #8] - add r0, r8 - strh r0, [r1, #0xc] - bl sub_0807C740 - ldr r1, _08051FE8 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] - ldr r0, _08051FEC @ =gUsedPalettes - str r6, [r0] - ldrh r0, [r5] - orrs r4, r0 - strh r4, [r5] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, pc} - .align 2, 0 -_08051FE0: .4byte gScreen -_08051FE4: .4byte gRoomControls -_08051FE8: .4byte gUpdateVisibleTiles -_08051FEC: .4byte gUsedPalettes - - thumb_func_start sub_08051FF0 -sub_08051FF0: @ 0x08051FF0 - push {lr} - ldr r0, _08052000 @ =gMenu - ldr r1, [r0, #0xc] - ldrb r0, [r1] - ldrb r1, [r1, #1] - bl sub_0804B0B0 - pop {pc} - .align 2, 0 -_08052000: .4byte gMenu - - thumb_func_start sub_08052004 -sub_08052004: @ 0x08052004 - ldr r1, _0805200C @ =gMenu - movs r0, #2 - strb r0, [r1, #5] - bx lr - .align 2, 0 -_0805200C: .4byte gMenu - - thumb_func_start sub_08052010 -sub_08052010: @ 0x08052010 - push {r4, lr} - bl InitSoundPlayingInfo - bl MessageInitialize - movs r0, #1 - bl DispReset - ldr r0, _0805207C @ =gBG1Buffer - movs r4, #0x80 - lsls r4, r4, #4 - adds r1, r4, #0 - bl MemClear - ldr r0, _08052080 @ =gBG2Buffer - adds r1, r4, #0 - bl MemClear - bl sub_080A4D34 - movs r0, #0xa - bl LoadPaletteGroup - movs r0, #0 - movs r1, #0 - bl SetColor - movs r0, #4 - bl LoadGfxGroup - movs r0, #0xc0 - lsls r0, r0, #0x13 - movs r1, #0x20 - bl MemClear - ldr r0, _08052084 @ =gMenu - movs r1, #0x30 - bl MemClear - ldr r1, _08052088 @ =gScreen - ldrh r2, [r1] - movs r3, #0x80 - lsls r3, r3, #5 - adds r0, r3, #0 - orrs r0, r2 - strh r0, [r1] - ldr r0, _0805208C @ =0x00001C01 - strh r0, [r1, #0x14] - ldr r0, _08052090 @ =0x00001D05 - strh r0, [r1, #0x20] - movs r0, #1 - strh r0, [r1, #0x1a] - strh r0, [r1, #0x26] - pop {r4, pc} - .align 2, 0 -_0805207C: .4byte gBG1Buffer -_08052080: .4byte gBG2Buffer -_08052084: .4byte gMenu -_08052088: .4byte gScreen -_0805208C: .4byte 0x00001C01 -_08052090: .4byte 0x00001D05 - - thumb_func_start HandleGameOverScreen -HandleGameOverScreen: @ 0x08052094 - push {r4, lr} - ldr r1, _080520BC @ =gUnk_080FCA70 - ldr r4, _080520C0 @ =gMain - ldrb r0, [r4, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldrb r0, [r4, #3] - cmp r0, #0 - beq _080520B8 - bl FlushSprites - bl DrawGameOverText - bl sub_080AD918 -_080520B8: - pop {r4, pc} - .align 2, 0 -_080520BC: .4byte gUnk_080FCA70 -_080520C0: .4byte gMain - - thumb_func_start sub_080520C4 -sub_080520C4: @ 0x080520C4 - push {lr} - ldr r1, _080520D4 @ =gMain - strb r0, [r1, #3] - movs r0, #0 - bl sub_080A7114 - pop {pc} - .align 2, 0 -_080520D4: .4byte gMain - - thumb_func_start sub_080520D8 -sub_080520D8: @ 0x080520D8 - push {r4, lr} - ldr r4, _08052118 @ =gFadeControl - ldrb r0, [r4] - cmp r0, #0 - bne _08052114 - bl sub_08052010 - ldr r1, _0805211C @ =gMenu - movs r0, #0x50 - strb r0, [r1, #0x10] - movs r2, #0x3c - movs r0, #0x3c - strh r0, [r1, #8] - ldr r0, _08052120 @ =gSave - adds r0, #0xaa - movs r1, #0x18 - strb r1, [r0] - ldr r0, _08052124 @ =gMain - strb r2, [r0, #5] - movs r0, #0xa - bl SoundReq - movs r0, #4 - bl sub_080500F4 - ldr r0, _08052128 @ =0xFFFF0001 - str r0, [r4, #4] - movs r0, #1 - bl sub_080520C4 -_08052114: - pop {r4, pc} - .align 2, 0 -_08052118: .4byte gFadeControl -_0805211C: .4byte gMenu -_08052120: .4byte gSave -_08052124: .4byte gMain -_08052128: .4byte 0xFFFF0001 - diff --git a/include/asm.h b/include/asm.h index f250ebb1..5fe8a9e0 100644 --- a/include/asm.h +++ b/include/asm.h @@ -9,6 +9,7 @@ extern u32 GetTileTypeByEntity(struct Entity_*); extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer); extern u32 GetTileType(u32 pos, u32 layer); extern void SetTile(u32 index, u32 position, u32 layer); +extern void sub_08000108(void); extern u32 sub_080002D0(struct Entity_*); extern void LoadResourceAsync(const void*, u32, u32); extern void sub_08001242(struct Entity_*); diff --git a/include/common.h b/include/common.h index a971ed21..e46df918 100644 --- a/include/common.h +++ b/include/common.h @@ -43,6 +43,8 @@ void MemCopy(const void* src, void* dest, u32 size); */ void ReadKeyInput(void); +void zMallocInit(void); + /** * Allocate memory on heap. * diff --git a/include/main.h b/include/main.h index eda7676c..0e830bab 100644 --- a/include/main.h +++ b/include/main.h @@ -55,7 +55,8 @@ typedef struct { } Main; typedef struct { - /*0x00*/ u16 nextToLoad; + /*0x00*/ u8 nextToLoad; + /*0x01*/ u8 _1; /*0x02*/ u8 lastState; /*0x03*/ u8 field_0x3; /*0x04*/ u8 state; diff --git a/include/player.h b/include/player.h index 2a09e2e2..36fd7303 100644 --- a/include/player.h +++ b/include/player.h @@ -280,6 +280,7 @@ extern u16 gWalletSizes[]; extern PlayerState gPlayerState; extern Entity gPlayerEntity; +u32 sub_080705AC(void); void SetPlayerControl(PlayerControlMode mode); void ResetPlayer(void); void ResetPlayerVelocity(void); diff --git a/include/room.h b/include/room.h index fb2e8398..bb09730f 100644 --- a/include/room.h +++ b/include/room.h @@ -192,9 +192,13 @@ typedef enum { extern void SetTileType(u32, u32, u32); extern void InitScreenShake(u32 time, u32 magnitude); +void sub_0804AFF4(void); +void LoadRoom(void); +void SetCurrentRoomPropertyList(u32 area, u32 room); extern void* GetCurrentRoomProperty(u32); extern void LoadRoomTileEntities(); void sub_0804B3C4(void*); +void sub_0804B0B0(u32 arg0, u32 arg1); #endif diff --git a/linker.ld b/linker.ld index fc7f630c..9b1bf7e4 100644 --- a/linker.ld +++ b/linker.ld @@ -437,7 +437,6 @@ SECTIONS { src/roomInit.o(.text); src/fade.o(.text); src/fileScreen.o(.text); - asm/fileScreen.o(.text); src/game.o(.text); asm/code_080526F8.o(.text); asm/modBombs.o(.text); diff --git a/src/game.c b/src/game.c index fee68b34..9b5616e4 100644 --- a/src/game.c +++ b/src/game.c @@ -1,4 +1,5 @@ #include "global.h" +#include "asm.h" #include "sound.h" #include "screen.h" #include "entity.h" @@ -15,6 +16,8 @@ #include "message.h" #include "game.h" +extern u8 gUpdateVisibleTiles; + extern u8 gUnk_080FCA84[]; extern u8 gUnk_080FCAC8[]; extern u8 gUnk_02024090[]; @@ -30,6 +33,39 @@ extern void** gAreaTable[]; extern u8 gUnk_080FCAF8[]; extern u16 gUnk_020178E0[]; +extern void (*gUnk_080FC9D8[])(); +extern void (*gUnk_080FC9E8[])(); +extern void (*gUnk_080FCA08[])(); +extern void (*gUnk_080FCA14[])(); +extern void (*gUnk_080FCA70[])(void); + +void sub_0807CA18(void); +void sub_080300AC(void); +void sub_08049CD4(void); +void sub_0807059C(void); +void sub_080A7124(void); +void sub_0806FD8C(void); +void sub_080300C4(void); +u32 sub_0805BC04(void); +void DeleteSleepingEntities(void); +u32 sub_0805BBBC(void); +void sub_080185F8(void); +void sub_08080A40(void); +u32 sub_0804AA84(void); +void sub_08078CB4(void); +void sub_0801C344(); +u32 sub_080705AC(); +void CollisionMain(); +void sub_0805BB74(); +void CreateZeldaFollower(void); +void sub_0807C0DC(); +void sub_0805E9A8(); +void sub_0804AF90(); +void sub_0804AFDC(); +void sub_0805283C(); +void UpdateScroll(); +void UpdateBgAnim(); +void sub_08052010(); void sub_080520C4(); void CleanUpGFXSlots(); void sub_080ADE24(); @@ -48,6 +84,25 @@ void sub_0807C740(void); void sub_080197AC(void); void sub_08053390(void); +static void sub_08053518(void); +static void InitializeEntities(void); +static void sub_08053178(void); +static void sub_08052BF8(void); +static void sub_08051E04(void); +static void sub_08052F1C(void); +/* static */ void sub_08052C5C(void); +static void sub_08052C3C(void); +static void sub_0805340C(void); +static void sub_08051D98(void); +static void sub_08051DCC(void); +/* static */ u32 sub_080528B4(void); +/* static */ u32 HandleRoomExit(void); +static void sub_080531F8(void); +static void sub_0805329C(void); +static void InitializePlayer(void); +/* static */ void sub_08051F04(void); +/* static */ void sub_08051F9C(u32 a1, u32 a2, u32 a3, u32 a4); +static void DrawGameOverText(void); static u32 StairsAreValid(); static void ClearFlagArray(const u16*); static void DummyHandler(u32* a1); @@ -58,6 +113,26 @@ static void InitRoomResInfo(RoomResInfo* info, RoomHeader* hdr, u32 area, u32 ro static void sub_080532E4(void); static void sub_08053460(void); +typedef struct { + u8 _0; + u8 _1; + u8 _2; + u8 _3; + u8 _4; + u16 _6; +} struct_08127F94; +extern struct_08127F94 gUnk_08127F94[]; + +typedef struct { + u8 _0; + u8 _1; + u8 _2; + u8 _3; + u16 _4; + u16 _6; +} struct_080FCA20; +extern struct_080FCA20 gUnk_080FCA20[]; + typedef struct { u16* dest; void* gfx_dest; @@ -85,6 +160,417 @@ typedef struct { extern void CreateDialogBox(); +void HandleGameplayScreen(void) { + gScreenTransition.frameCount++; + gUnk_080FC9D8[gMain.funcIndex](); +#ifdef DEMO_USA + if (gSave.unk48C[7] != 0) { + if (--gSave.unk48C[7] == 0) { + DoFade(7, 2); + gMain.funcIndex = 3; + } + } +#endif +} + +void sub_080519B0(void) { + if (gFadeControl.active) + return; + + DispReset(1); + InitSoundPlayingInfo(); + zMallocInit(); + sub_080A7124(); + sub_0807059C(); + MemClear(&gScreenTransition, 0xB0); + sub_08049CD4(); + sub_080300AC(); + sub_0807CA18(); + MemCopy(&gSave.saved_status, &gScreenTransition.player_status, 0x20); + gScreenTransition.transitionType = 4; + sub_08053518(); + gMain.funcIndex = 1; + gMain.transition = 0; +} + +void sub_08051A14(void) { + DispReset(1); + gFadeControl.mask = 0xffffffff; + MemClear(&gUnk_03000000, 0xB74); + MemClear(&gUnk_02032EC0, 0x3B4); + EraseAllEntities(); + sub_080197AC(); + sub_08080668(); + ResetPalettes(); + sub_0801CFA8(1); + sub_0806FD8C(); + gRoomControls.areaID = gScreenTransition.player_status.area_next; + gRoomControls.roomID = gScreenTransition.player_status.room_next; + sub_08053320(); + gGFXSlots.unk0 = 1; + gMain.funcIndex = 2; +} + +void sub_08051A90(void) { + gUnk_080FC9E8[gMain.transition](); +} + +void InitializeNewRoom(void) { + SetInitializationPriority(); + gScreen.lcd.displayControl = 0x1740; + gMain.transition = 1; + gScreenTransition.transitioningOut = 0; + gScreenTransition.field_0x4[0] = 0; + gScreenTransition.field_0x4[1] = 0; + MessageInitialize(); + sub_08052CFC(); + sub_0801C370(0); + InitializeEntities(); +#ifndef EU + sub_0801855C(); +#endif +} + +void sub_08051AF0(void) { + UpdateEntities(); + if (!sub_0805BBBC()) + UpdateScroll(); + UpdateBgAnim(); + sub_08000108(); + sub_0801C344(); + UpdateManagers(); + FlushSprites(); + sub_0801C208(); + sub_08078CB4(); + sub_080AD9B0(); + sub_080AD918(); + + if (gFadeControl.active || gRoomControls.unk2 != 0) + return; + + sub_08052F1C(); + if (gArea.musicIndex != gArea.pMusicIndex) { + gArea.musicIndex = gArea.pMusicIndex; + SoundReq(gArea.pMusicIndex | 0x800B0000); + } + + DeleteSleepingEntities(); + + if (sub_0805BC04()) + return; + + sub_08052C5C(); + ResetSystemPriority(); + sub_08051E04(); + sub_080300C4(); + gMain.transition = 2; + SetPlayerControl(0); + gUnk_02034490[0] = 0; +#if defined(USA) || defined(DEMO_USA) + if (gArea.inventoryGfxIdx != 0xff) { + sub_0801855C(); + } + sub_08052BF8(); + sub_08053178(); +#elif defined(EU) + sub_08053178(); + sub_0801855C(); +#elif defined(JP) + sub_08053178(); + if (gArea.inventoryGfxIdx != 0xff) { + sub_0801855C(); + } +#elif defined(DEMO_JP) + if (gScreenTransition.field_0x2c[5]) + sub_08053178(); + if (gArea.inventoryGfxIdx != 0xff) { + sub_0801855C(); + } + sub_08052BF8(); +#endif + if (!gRoomVars.field_0x0) { + RequestPriorityDuration(NULL, 1); + } +} + +void sub_08051BD0(void) { + if (sub_080705AC() || sub_0804AA84()) { + return; + } + sub_0805340C(); + + if (gMain.transition != 2) { + return; + } + + if ((gMessage.doTextBox & 0x7f) || gPriorityHandler.priority_timer != 0) + sub_08078B48(); + + FlushSprites(); + UpdateEntities(); + sub_08080A40(); + CollisionMain(); + UpdateScroll(); + UpdateBgAnim(); + sub_08000108(); + sub_08052C3C(); + sub_0801C344(); + UpdateManagers(); + sub_0801C208(); + sub_08078CB4(); + sub_080AD9B0(); + HandleRoomExit(); + sub_08052C5C(); + sub_080528B4(); + sub_080185F8(); + sub_080AD918(); + switch (gRoomControls.unk2) { + case 1: + gPlayerState.queued_action = 0x17; + gMain.transition = 1; + SetRoomReloadPriority(); + sub_08051D98(); + break; + case 2: + gPlayerState.queued_action = 0x17; + gMain.transition = 1; + SetRoomReloadPriority(); + sub_08051DCC(); + break; + } +} + +void sub_08051CA8(void) { + if (sub_080705AC()) + return; + + UpdateEntities(); + CollisionMain(); + sub_0801C344(); + UpdateManagers(); + FlushSprites(); + sub_0801C208(); + sub_08078CB4(); + sub_080AD9B0(); + HandleRoomExit(); + sub_080528B4(); + sub_080AD918(); + if (!gFadeControl.active) + ResetSystemPriority(); +} + +void sub_08051CF0(void) { + FlushSprites(); + sub_0801C208(); + sub_080AD9B0(); + gMain.pad = 1; + sub_080AD918(); + if (!gFadeControl.active) { + DispReset(1); + gMain.funcIndex = 1; + gMain.transition = 0; + gScreenTransition.transitioningOut = 1; + } +} + +void sub_08051D2C(void) { +#ifdef DEMO_USA + if (!gFadeControl.active) + DoSoftReset(); +#else + DoFade(7, 8); + InitScreen(3); +#endif +} + +static void InitializeEntities(void) { + sub_08052EA0(); + sub_0804AF90(); + sub_0804AFDC(); + InitializePlayer(); + gUnk_03004030.unk_00 = NULL; + sub_0807C740(); + gUpdateVisibleTiles = 1; + sub_0805283C(); + SetColor(0, 0); + LoadRoom(); + CreateZeldaFollower(); + sub_0804AFF4(); + sub_0805329C(); + sub_08000108(); + sub_0805BB74(0xffffffff); + sub_080531F8(); +} + +void sub_08051D98(void) { + sub_08052EA0(); + gRoomVars.field_0x0 = 1; + sub_0805E9A8(); + sub_0804AF90(); + sub_0804AFDC(); + sub_0807C0DC(); + sub_0805283C(); + LoadRoom(); + sub_0804AFF4(); + SetPlayerControl(1); +} + +void sub_08051DCC(void) { + gRoomControls.areaID = gScreenTransition.player_status.area_next; + gRoomControls.roomID = gScreenTransition.player_status.room_next; + RoomExitCallback(); + gScreenTransition.transitionType = 3; + sub_08052CFC(); + sub_08052EA0(); + sub_0805E9A8(); + sub_0804AF90(); + sub_0804AFDC(); + sub_0805283C(); +} + +void sub_08051E04() { + if (CheckIsOverworld()) { + struct_08127F94* i; + u32 hi_x, hi_y; + s32 x, y; + + x = gPlayerEntity.x.HALF.HI; + if (x < 0) + x += 0xf; + hi_x = x >> 4; + + y = gPlayerEntity.y.HALF.HI; + if (y < 0) + y += 0xf; + hi_y = y >> 4; + + for (i = gUnk_08127F94; i->_0 != 0xFF; i++) { + if (i->_0 <= hi_x && i->_2 >= hi_x && i->_1 <= hi_y && i->_3 >= hi_y) { + gSave.windcrests |= 1 << i->_4; + break; + } + } + } +} + +void sub_08051E68() { + gUnk_080FCA08[gMenu.menuType](); +} + +void sub_08051E84() { + struct_080FCA20* p = &gUnk_080FCA20[gUnk_02032EC0.field_0x3]; + gRoomControls.areaID = p->_0; + gRoomControls.roomID = p->_1; + sub_08053320(); + gArea.localFlagOffset = GetFlagBankOffset(gRoomControls.areaID); + SetCurrentRoomPropertyList(p->_0, p->_1); + sub_08052FD8(p->_0, p->_1); + gRoomControls.roomScrollX = gRoomControls.roomOriginX + p->_4; + gRoomControls.roomScrollY = gRoomControls.roomOriginY + p->_6; + gMenu.field_0x0 = p->_2; + gMenu.field_0x3 = p->_3 & 0xf; + gMenu.field_0xc = (void*)p; + gMenu.menuType++; + gMenu.overlayType = 0; + gMenu.transitionTimer = 300; + sub_08051F04(); +} + +void sub_08051F04(void) { + gUnk_080FCA14[gMenu.field_0x0](); + FlushSprites(); + UpdateEntities(); + sub_080AD9B0(); + sub_080AD918(); + UpdateScroll(); + UpdateBgAnim(); + UpdateManagers(); + sub_08000108(); +} + +void sub_08051F40(u32 a1, u32 a2, u32 a3, u32 a4) { + u32 flag = gUnk_080FCA20[gUnk_02032EC0.field_0x3]._3; + if (flag & 0xF0) { + MenuFadeIn(2, flag >> 4); + } else { + gUnk_02032EC0.nextToLoad = 3; + sub_080500F4(0x10); + MessageInitialize(); + } +} + +void sub_08051F78(u32 a1, u32 a2, u32 a3, u32 a4) { + u32 idx = gUnk_02032EC0.field_0x3; + struct_080FCA20* p = &gUnk_080FCA20[idx]; + sub_08051F9C(p->_0, p->_1, p->_4, p->_6); +} + +void sub_08051F9C(u32 a1, u32 a2, u32 a3, u32 a4) { + u32 tmp = gScreen.lcd.displayControl & 0x6000; + sub_08052FF4(a1, a2); + gRoomControls.roomScrollX = gRoomControls.roomOriginX + a3; + gRoomControls.roomScrollY = gRoomControls.roomOriginY + a4; + sub_0807C740(); + gUpdateVisibleTiles = 1; + gUsedPalettes = 0; + gScreen.lcd.displayControl |= tmp; +} + +void sub_08051FF0() { + sub_0804B0B0(gMenu.field_0xc[0], gMenu.field_0xc[1]); +} + +void sub_08052004() { + gMenu.menuType = 2; +} + +void sub_08052010() { + InitSoundPlayingInfo(); + MessageInitialize(); + DispReset(1); + MemClear(gBG1Buffer, 0x800); + MemClear(gBG2Buffer, 0x800); + sub_080A4D34(); + LoadPaletteGroup(0xA); + SetColor(0, 0); + LoadGfxGroup(4); + MemClear((void*)0x06000000, 0x20); + MemClear(&gMenu, 0x30); + gScreen.lcd.displayControl |= 0x1000; + gScreen.bg1.control = 0x1C01; + gScreen.bg2.control = 0x1D05; + gScreen.bg1.updated = 1; + gScreen.bg2.updated = 1; +} + +void HandleGameOverScreen() { + gUnk_080FCA70[gMain.funcIndex](); + if (gMain.funcIndex != 0) { + FlushSprites(); + DrawGameOverText(); + sub_080AD918(); + } +} + +void sub_080520C4(u32 idx) { + gMain.funcIndex = idx; + sub_080A7114(0); +} + +void sub_080520D8(void) { + if (gFadeControl.active) + return; + sub_08052010(); + gMenu.focusCoords[0] = 80; + gMenu.transitionTimer = 60; + gSave.stats.health = 24; + gMain.field_0x5 = 60; + SoundReq(BGM_GAMEOVER); + sub_080500F4(4); + gFadeControl.mask = 0xFFFF0001; + sub_080520C4(1); +} + void sub_0805212C(void) { if (gFadeControl.active) return; @@ -251,7 +737,7 @@ void sub_080522F4(void) { void nullsub_107(void) { } -void DrawGameOverText(void) { +static void DrawGameOverText(void) { static const u8 sOffsets[] = { 48, 68, 88, 108, 137, 156, 174, 192, }; diff --git a/src/npc/npc5.c b/src/npc/npc5.c index 900d3e79..4a620dcd 100644 --- a/src/npc/npc5.c +++ b/src/npc/npc5.c @@ -80,6 +80,18 @@ void sub_08061AFC(Entity*); extern u16* gUnk_0810B660[8]; +void CreateZeldaFollower(void) { + Entity* npc; + if (CheckGlobalFlag(0x1c) != 0) { + npc = CreateNPC(0x2e, 0, 0); + if (npc != NULL) { + CopyPosition(&gPlayerEntity, npc); + npc->flags |= 0x20; + npc->animationState = GetAnimationState(npc); + } + } +} + // UNUSED zelda follower, probably because it was too resource heavy void NPC5(Entity* this) { gUnk_0810AC1C[this->type](this); diff --git a/src/npc/postman.c b/src/npc/postman.c index f72ec6d3..1f958c09 100644 --- a/src/npc/postman.c +++ b/src/npc/postman.c @@ -205,15 +205,3 @@ void Postman_Fusion(Entity* this) { UpdateAnimationSingleFrame(this); } } - -void CreateZeldaFollower(void) { - Entity* npc; - if (CheckGlobalFlag(0x1c) != 0) { - npc = CreateNPC(0x2e, 0, 0); - if (npc != NULL) { - CopyPosition(&gPlayerEntity, npc); - npc->flags |= 0x20; - npc->animationState = GetAnimationState(npc); - } - } -} diff --git a/src/player.c b/src/player.c index 61cafe8c..ff9826fb 100644 --- a/src/player.c +++ b/src/player.c @@ -256,6 +256,7 @@ void SurfaceAction_Water(Entity*); void SurfaceAction_Ladder(Entity*); void SurfaceAction_AutoLadder(Entity*); +extern void sub_080A4D88(void); extern void RespawnPlayer(); extern void sub_080797EC(); extern void UpdatePlayerMovement(); @@ -319,6 +320,26 @@ extern u16 script_BedAtSimons; extern Entity* gPlayerClones[]; extern ScriptExecutionContext gPlayerScriptExecutionContext; +NONMATCH("asm/non_matching/playerItemPacciCane/sub_080705AC.inc", u32 sub_080705AC(void)) { + if (!((gInput.newKeys & START_BUTTON) == 0 || gFadeControl.active || gUnk_02034490[0] || + (gMessage.doTextBox & 0x7F) || gSave.stats.health == 0 || !gSave.fillerD0[34] || + gPlayerState.controlMode != 0 || gPriorityHandler.priority_timer != 0)) { + u32 tmp = gPlayerState.framestate ? gPlayerState.framestate : gPlayerState.framestate_last; + switch (tmp) { + case PL_STATE_DIE: + case PL_STATE_TALKEZLO: + case PL_STATE_ITEMGET: + case PL_STATE_DROWN: + case PL_STATE_STAIRS: + return 0; + } + sub_080A4D88(); + return 1; + } + return 0; +} +END_NONMATCH + void DoPlayerAction(Entity* this) { static void (*const sPlayerActions[])(Entity*) = { [PLAYER_INIT] = PlayerInit, diff --git a/src/playerItem/playerItemPacciCane.c b/src/playerItem/playerItemPacciCane.c index 471f180e..580d65a5 100644 --- a/src/playerItem/playerItemPacciCane.c +++ b/src/playerItem/playerItemPacciCane.c @@ -8,7 +8,6 @@ extern void (*const gUnk_0811B9D8[])(Entity*); void sub_080704FC(Entity*); -extern void sub_080A4D88(void); extern u8 gUnk_02034490[0x18]; @@ -29,22 +28,3 @@ ASM_FUNC("asm/non_matching/playerItemPacciCane/sub_080704FC.inc", void sub_08070 void sub_0807059C() { MemClear(gUnk_02034490, sizeof(gUnk_02034490)); } - -NONMATCH("asm/non_matching/playerItemPacciCane/sub_080705AC.inc", u32 sub_080705AC(void)) { - if (!((gInput.newKeys & 8) == 0 || gFadeControl.active || gUnk_02034490[0] || (gMessage.doTextBox & 0x7F) != 0 || - !gSave.stats.health || !gSave.fillerD0[34] || gPlayerState.controlMode || gPriorityHandler.priority_timer)) { - u32 tmp = gPlayerState.framestate ? gPlayerState.framestate : gPlayerState.framestate_last; - switch (tmp) { - case 18: - case 19: - case 21: - case 22: - case 28: - return 0; - } - sub_080A4D88(); - return 1; - } - return 0; -} -END_NONMATCH