From c22b1c266b0645904b4d6c1ece22a2ad5f1db0d2 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 30 Jan 2022 00:14:39 +0100 Subject: [PATCH] Decompile PushableFurniture --- asm/object/pushableFurniture.s | 1605 ------------------------- data/const/object/pushableFurniture.s | 16 - src/object/pushableFurniture.c | 401 ++++++ 3 files changed, 401 insertions(+), 1621 deletions(-) delete mode 100644 asm/object/pushableFurniture.s delete mode 100644 data/const/object/pushableFurniture.s create mode 100644 src/object/pushableFurniture.c diff --git a/asm/object/pushableFurniture.s b/asm/object/pushableFurniture.s deleted file mode 100644 index a1eeabe4..00000000 --- a/asm/object/pushableFurniture.s +++ /dev/null @@ -1,1605 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start PushableFurniture -PushableFurniture: @ 0x0808F968 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0808F98C @ =gUnk_08121ED8 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _0808F988 - adds r0, r4, #0 - bl sub_08090514 -_0808F988: - pop {r4, pc} - .align 2, 0 -_0808F98C: .4byte gUnk_08121ED8 - - thumb_func_start sub_0808F990 -sub_0808F990: @ 0x0808F990 - push {r4, r5, r6, lr} - adds r4, r0, #0 - movs r2, #1 - strb r2, [r4, #0xc] - movs r3, #0 - movs r0, #0x80 - strh r0, [r4, #0x24] - ldrb r0, [r4, #0xe] - strb r0, [r4, #0xf] - strb r3, [r4, #0xe] - ldrb r1, [r4, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r4, #0x11] - adds r0, r4, #0 - adds r0, #0x81 - strb r3, [r0] - adds r0, #2 - strb r3, [r0] - ldrb r1, [r4, #0x19] - movs r0, #0x3f - ands r0, r1 - movs r1, #0x80 - orrs r0, r1 - strb r0, [r4, #0x19] - ldrb r0, [r4, #0xa] - cmp r0, #1 - bne _0808F9E8 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r2] - adds r0, r4, #0 - adds r0, #0x80 - strb r3, [r0] - b _0808FA1C -_0808F9E8: - adds r0, r4, #0 - adds r0, #0x80 - strb r2, [r0] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #5 - orrs r0, r1 - strb r0, [r2] - ldrb r0, [r4, #0xa] - cmp r0, #2 - beq _0808FA0A - cmp r0, #4 - bne _0808FA1C -_0808FA0A: - ldrh r0, [r4, #0x32] - adds r0, #2 - strh r0, [r4, #0x32] - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xfe - strb r0, [r1] - strb r3, [r4, #0xd] - strb r3, [r4, #0x1e] -_0808FA1C: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0808FAC4 - movs r6, #0 - cmp r0, #0x80 - beq _0808FA84 - ldrh r1, [r4, #0xa] - ldr r0, _0808FA38 @ =0x00000101 - cmp r1, r0 - bne _0808FA3C - movs r0, #0xf - ldrsb r0, [r4, r0] - ldrh r1, [r4, #0x32] - b _0808FA42 - .align 2, 0 -_0808FA38: .4byte 0x00000101 -_0808FA3C: - movs r0, #0xf - ldrsb r0, [r4, r0] - ldrh r1, [r4, #0x2e] -_0808FA42: - adds r0, r0, r1 - adds r1, r4, #0 - adds r1, #0x7e - strh r0, [r1] - adds r5, r1, #0 - ldr r3, [r4, #0x50] - cmp r3, #0 - bne _0808FA5E - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - b _0808FA7C -_0808FA5E: - adds r2, r4, #0 - adds r2, #0x82 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808FA76 - ldrb r0, [r3, #0xc] - cmp r0, #2 - bne _0808FAA2 - adds r6, #1 - b _0808FAA2 -_0808FA76: - ldrb r0, [r2] - bl CheckLocalFlag -_0808FA7C: - cmp r0, #0 - beq _0808FAA2 - adds r6, #1 - b _0808FAA2 -_0808FA84: - movs r6, #1 - ldrh r1, [r4, #0xa] - ldr r0, _0808FA94 @ =0x00000101 - cmp r1, r0 - bne _0808FA98 - ldrh r1, [r4, #0x32] - b _0808FA9A - .align 2, 0 -_0808FA94: .4byte 0x00000101 -_0808FA98: - ldrh r1, [r4, #0x2e] -_0808FA9A: - adds r0, r4, #0 - adds r0, #0x7e - strh r1, [r0] - adds r5, r0, #0 -_0808FAA2: - cmp r6, #0 - beq _0808FAC4 - adds r1, r4, #0 - adds r1, #0x81 - movs r0, #1 - strb r0, [r1] - ldrh r1, [r4, #0xa] - ldr r0, _0808FABC @ =0x00000101 - cmp r1, r0 - bne _0808FAC0 - ldrh r0, [r5] - strh r0, [r4, #0x32] - b _0808FAC4 - .align 2, 0 -_0808FABC: .4byte 0x00000101 -_0808FAC0: - ldrh r0, [r5] - strh r0, [r4, #0x2e] -_0808FAC4: - adds r0, r4, #0 - bl sub_0808FF50 - pop {r4, r5, r6, pc} - - thumb_func_start sub_0808FACC -sub_0808FACC: @ 0x0808FACC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x81 - ldrb r0, [r0] - cmp r0, #0 - bne _0808FAF2 - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0808FAEA - adds r0, r4, #0 - bl sub_0808FBFC - b _0808FB0A -_0808FAEA: - adds r0, r4, #0 - bl sub_0808FB68 - b _0808FB0A -_0808FAF2: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0808FB0A - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0808FB0A - movs r0, #0x86 - lsls r0, r0, #1 - bl EnqueueSFX -_0808FB0A: - ldrb r0, [r4, #0xa] - cmp r0, #2 - beq _0808FB14 - cmp r0, #4 - bne _0808FB64 -_0808FB14: - ldrb r1, [r4, #0xd] - cmp r1, #1 - beq _0808FB3E - cmp r1, #1 - bgt _0808FB24 - cmp r1, #0 - beq _0808FB2A - b _0808FB64 -_0808FB24: - cmp r1, #2 - beq _0808FB5E - b _0808FB64 -_0808FB2A: - adds r0, r4, #0 - bl sub_0808FECC - cmp r0, #0 - beq _0808FB64 - movs r0, #1 - strb r0, [r4, #0xd] - movs r0, #0xc - strb r0, [r4, #0xe] - b _0808FB64 -_0808FB3E: - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0808FB64 - strb r1, [r4, #0x1e] - movs r0, #2 - strb r0, [r4, #0xd] - movs r0, #0x80 - bl EnqueueSFX - adds r0, r4, #0 - bl sub_0808FF20 - b _0808FB64 -_0808FB5E: - adds r0, r4, #0 - bl nullsub_1 -_0808FB64: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808FB68 -sub_0808FB68: @ 0x0808FB68 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x70 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileIndex - adds r1, r0, #0 - ldr r0, _0808FBAC @ =0x00004031 - cmp r1, r0 - bhi _0808FBB0 - subs r0, #1 - cmp r1, r0 - blo _0808FBB0 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r1, #0 - subs r0, #0x30 - movs r1, #1 - ands r0, r1 - lsls r0, r0, #4 - movs r1, #8 - orrs r0, r1 - strb r0, [r4, #0x15] - movs r0, #1 - bl SetPlayerControl - adds r0, r4, #0 - movs r1, #0 - bl sub_0808FD44 - b _0808FBF6 - .align 2, 0 -_0808FBAC: .4byte 0x00004031 -_0808FBB0: - adds r0, r4, #0 - adds r0, #0x72 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileIndex - adds r1, r0, #0 - ldr r0, _0808FBF8 @ =0x00004031 - cmp r1, r0 - bhi _0808FBF0 - subs r0, #1 - cmp r1, r0 - blo _0808FBF0 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r1, #0 - subs r0, #0x30 - movs r1, #1 - ands r0, r1 - lsls r0, r0, #4 - movs r1, #8 - orrs r0, r1 - strb r0, [r4, #0x15] - movs r0, #1 - bl SetPlayerControl - adds r0, r4, #0 - movs r1, #1 - bl sub_0808FD44 -_0808FBF0: - adds r0, r4, #0 - bl sub_0808FDE8 -_0808FBF6: - pop {r4, pc} - .align 2, 0 -_0808FBF8: .4byte 0x00004031 - - thumb_func_start sub_0808FBFC -sub_0808FBFC: @ 0x0808FBFC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x7c - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileIndex - adds r1, r0, #0 - ldr r0, _0808FC38 @ =0x0000404A - cmp r1, r0 - beq _0808FC34 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r1, #0 - subs r0, #0x4b - movs r1, #3 - ands r0, r1 - lsls r0, r0, #3 - strb r0, [r4, #0x15] - movs r0, #1 - bl SetPlayerControl - adds r0, r4, #0 - movs r1, #0 - bl sub_0808FD44 -_0808FC34: - pop {r4, pc} - .align 2, 0 -_0808FC38: .4byte 0x0000404A - - thumb_func_start sub_0808FC3C -sub_0808FC3C: @ 0x0808FC3C - push {r4, lr} - adds r4, r0, #0 - bl sub_0800445C - adds r0, r4, #0 - bl sub_0808FC5C - cmp r0, #0 - beq _0808FC58 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0 - bl SetPlayerControl -_0808FC58: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808FC5C -sub_0808FC5C: @ 0x0808FC5C - push {r4, r5, lr} - adds r4, r0, #0 - bl LinearMoveUpdate - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - bne _0808FD40 - ldrb r1, [r4, #0xa] - cmp r1, #2 - beq _0808FC7C - cmp r1, #4 - bne _0808FC84 -_0808FC7C: - adds r1, r4, #0 - adds r1, #0x63 - movs r0, #0xfe - b _0808FC88 -_0808FC84: - adds r1, r4, #0 - adds r1, #0x63 -_0808FC88: - strb r0, [r1] - adds r0, r4, #0 - bl sub_080002D0 - cmp r0, #0 - bne _0808FD40 - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0808FD30 - movs r2, #0 - ldrh r1, [r4, #0xa] - ldr r0, _0808FCB4 @ =0x00000101 - cmp r1, r0 - bne _0808FCB8 - movs r1, #0x32 - ldrsh r0, [r4, r1] - adds r1, r4, #0 - adds r1, #0x7e - ldrh r1, [r1] - cmp r0, r1 - bne _0808FCC8 - b _0808FCCC - .align 2, 0 -_0808FCB4: .4byte 0x00000101 -_0808FCB8: - movs r1, #0x2e - ldrsh r0, [r4, r1] - adds r1, r4, #0 - adds r1, #0x7e - ldrh r1, [r1] - cmp r0, r1 - bne _0808FCC8 - movs r2, #1 -_0808FCC8: - cmp r2, #0 - beq _0808FD30 -_0808FCCC: - adds r0, r4, #0 - adds r0, #0x81 - movs r5, #1 - strb r5, [r0] - ldr r3, [r4, #0x50] - cmp r3, #0 - bne _0808FCE4 - adds r0, #5 - ldrh r0, [r0] - bl SetFlag - b _0808FD0C -_0808FCE4: - adds r2, r4, #0 - adds r2, #0x82 - ldrb r1, [r2] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808FD06 - adds r0, r3, #0 - adds r0, #0x28 - subs r2, #8 - adds r1, r5, #0 - ldrh r2, [r2] - lsls r1, r2 - ldrb r2, [r0] - orrs r1, r2 - strb r1, [r0] - b _0808FD0C -_0808FD06: - ldrb r0, [r2] - bl SetLocalFlag -_0808FD0C: - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - bne _0808FD1A - movs r0, #4 - b _0808FD1C -_0808FD1A: - movs r0, #0x18 -_0808FD1C: - strb r0, [r4, #0xe] - ldr r0, _0808FD3C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0808FD30 - ldrb r0, [r4, #0xe] - adds r0, #0x10 - strb r0, [r4, #0xe] -_0808FD30: - adds r0, r4, #0 - bl sub_0808FF50 - movs r0, #1 - b _0808FD42 - .align 2, 0 -_0808FD3C: .4byte gPlayerState -_0808FD40: - movs r0, #0 -_0808FD42: - pop {r4, r5, pc} - - thumb_func_start sub_0808FD44 -sub_0808FD44: @ 0x0808FD44 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #1 - bne _0808FD8E - adds r0, r4, #0 - adds r0, #0x83 - ldrb r0, [r0] - cmp r0, #0 - beq _0808FD62 - adds r0, r4, #0 - bl sub_08090498 -_0808FD62: - cmp r5, #0 - beq _0808FD6C - adds r0, r4, #0 - adds r0, #0x72 - b _0808FD70 -_0808FD6C: - adds r0, r4, #0 - adds r0, #0x70 -_0808FD70: - ldrh r5, [r0] - ldr r0, _0808FD84 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808FD88 - movs r0, #0x40 - strh r0, [r4, #0x24] - b _0808FDB2 - .align 2, 0 -_0808FD84: .4byte gPlayerState -_0808FD88: - strh r1, [r4, #0x24] - movs r0, #0x10 - b _0808FDB4 -_0808FD8E: - adds r0, r4, #0 - adds r0, #0x7c - ldrh r5, [r0] - ldr r0, _0808FDAC @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808FDB0 - movs r1, #0x40 - movs r0, #0x40 - strh r0, [r4, #0x24] - strb r1, [r4, #0xe] - b _0808FDB6 - .align 2, 0 -_0808FDAC: .4byte gPlayerState -_0808FDB0: - strh r1, [r4, #0x24] -_0808FDB2: - movs r0, #0x20 -_0808FDB4: - strb r0, [r4, #0xe] -_0808FDB6: - ldr r0, _0808FDE0 @ =0x0000010F - bl EnqueueSFX - adds r0, r4, #0 - bl sub_08090254 - ldr r1, _0808FDE4 @ =gUnk_080B4488 - ldrb r0, [r4, #0x15] - lsrs r0, r0, #3 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r1, #0 - ldrsh r0, [r0, r1] - adds r0, r5, r0 - adds r1, r4, #0 - adds r1, #0x38 - ldrb r1, [r1] - bl GetTileIndex - pop {r4, r5, pc} - .align 2, 0 -_0808FDE0: .4byte 0x0000010F -_0808FDE4: .4byte gUnk_080B4488 - - thumb_func_start sub_0808FDE8 -sub_0808FDE8: @ 0x0808FDE8 - push {r4, r5, r6, r7, lr} - adds r7, r0, #0 - adds r0, #0x70 - ldrh r5, [r0] - subs r0, r5, #1 - movs r1, #1 - bl sub_080002E0 - adds r4, r0, #0 - adds r0, r5, #0 - movs r1, #1 - bl GetTileIndex - ldr r6, _0808FE28 @ =0x0000402E - cmp r0, r6 - bne _0808FE30 - movs r0, #0xf0 - ands r0, r4 - cmp r0, #0 - beq _0808FE14 - cmp r0, #0x50 - bne _0808FE1C -_0808FE14: - movs r0, #5 - ands r0, r4 - cmp r0, #0 - bne _0808FE58 -_0808FE1C: - ldr r0, _0808FE2C @ =0x0000402C - adds r1, r5, #0 - movs r2, #1 - bl SetTile - b _0808FE58 - .align 2, 0 -_0808FE28: .4byte 0x0000402E -_0808FE2C: .4byte 0x0000402C -_0808FE30: - adds r0, r5, #0 - movs r1, #1 - bl sub_080002E0 - cmp r0, #5 - bne _0808FE58 - movs r1, #0xf0 - ands r1, r4 - cmp r1, #0 - beq _0808FE48 - cmp r1, #0x50 - bne _0808FE58 -_0808FE48: - ands r4, r0 - cmp r4, #0 - beq _0808FE58 - adds r0, r6, #0 - adds r1, r5, #0 - movs r2, #1 - bl SetTile -_0808FE58: - adds r0, r7, #0 - adds r0, #0x72 - ldrh r5, [r0] - adds r0, r5, #1 - movs r1, #1 - bl sub_080002E0 - adds r4, r0, #0 - adds r0, r5, #0 - movs r1, #1 - bl GetTileIndex - ldr r6, _0808FE98 @ =0x0000402F - cmp r0, r6 - bne _0808FEA0 - movs r0, #0xf0 - ands r0, r4 - cmp r0, #0 - beq _0808FE82 - cmp r0, #0x50 - bne _0808FE8A -_0808FE82: - movs r0, #0xa - ands r0, r4 - cmp r0, #0 - bne _0808FEC8 -_0808FE8A: - ldr r0, _0808FE9C @ =0x0000402D - adds r1, r5, #0 - movs r2, #1 - bl SetTile - b _0808FEC8 - .align 2, 0 -_0808FE98: .4byte 0x0000402F -_0808FE9C: .4byte 0x0000402D -_0808FEA0: - adds r0, r5, #0 - movs r1, #1 - bl sub_080002E0 - cmp r0, #0xa - bne _0808FEC8 - movs r1, #0xf0 - ands r1, r4 - cmp r1, #0 - beq _0808FEB8 - cmp r1, #0x50 - bne _0808FEC8 -_0808FEB8: - ands r4, r0 - cmp r4, #0 - beq _0808FEC8 - adds r0, r6, #0 - adds r1, r5, #0 - movs r2, #1 - bl SetTile -_0808FEC8: - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0808FECC -sub_0808FECC: @ 0x0808FECC - push {r4, r5, lr} - adds r2, r0, #0 - movs r4, #1 - ldr r0, _0808FF18 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _0808FF10 - ldr r3, _0808FF1C @ =gPlayerEntity - ldrb r0, [r3, #0xc] - cmp r0, #6 - bne _0808FF10 - ldrb r0, [r3, #0x14] - cmp r0, #0 - bne _0808FF10 - movs r1, #0x32 - ldrsh r0, [r3, r1] - movs r5, #0x32 - ldrsh r1, [r2, r5] - subs r0, r0, r1 - cmp r0, #0x13 - bgt _0808FF10 - movs r0, #0x2e - ldrsh r2, [r2, r0] - adds r0, r2, #0 - adds r0, #0xc - movs r5, #0x2e - ldrsh r1, [r3, r5] - cmp r0, r1 - ble _0808FF10 - subs r0, #0x18 - cmp r0, r1 - blt _0808FF12 -_0808FF10: - movs r4, #0 -_0808FF12: - adds r0, r4, #0 - pop {r4, r5, pc} - .align 2, 0 -_0808FF18: .4byte gPlayerState -_0808FF1C: .4byte gPlayerEntity - - thumb_func_start sub_0808FF20 -sub_0808FF20: @ 0x0808FF20 - push {r4, lr} - adds r4, r0, #0 - ldrb r1, [r4, #0xb] - cmp r1, #0 - beq _0808FF4A - cmp r1, #0 - blt _0808FF4A - cmp r1, #2 - bgt _0808FF4A - subs r1, #1 - movs r0, #0x63 - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _0808FF4A - str r4, [r1, #0x50] - adds r0, r4, #0 - bl CopyPosition -_0808FF4A: - pop {r4, pc} - - thumb_func_start nullsub_1 -nullsub_1: @ 0x0808FF4C - bx lr - .align 2, 0 - - thumb_func_start sub_0808FF50 -sub_0808FF50: @ 0x0808FF50 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r6, r0, #0 - movs r0, #0x2e - ldrsh r1, [r6, r0] - ldr r2, _0808FF98 @ =gRoomControls - ldrh r0, [r2, #6] - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r4, #0x32 - ldrsh r0, [r6, r4] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r2, r6, #0 - adds r2, #0x7c - strh r1, [r2] - ldrh r0, [r6, #0x2e] - movs r1, #0xf - ands r1, r0 - ldrh r7, [r2] - adds r0, r6, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #0 - beq _0808FF9C - cmp r0, #1 - beq _0808FFC0 - b _0809008A - .align 2, 0 -_0808FF98: .4byte gRoomControls -_0808FF9C: - adds r0, r6, #0 - adds r0, #0x70 - strh r7, [r0] - ldrh r0, [r0] - movs r1, #1 - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x74 - strh r0, [r1] - ldr r0, _0808FFBC @ =0x0000404A - adds r1, r7, #0 - movs r2, #1 - bl SetTile - b _0809008A - .align 2, 0 -_0808FFBC: .4byte 0x0000404A -_0808FFC0: - movs r0, #8 - ands r1, r0 - cmp r1, #0 - beq _0809002C - adds r0, r6, #0 - adds r0, #0x70 - strh r7, [r0] - ldrh r0, [r0] - movs r1, #1 - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x74 - strh r0, [r1] - ldr r4, _08090028 @ =gUnk_08121EE4 - movs r0, #0x81 - adds r0, r0, r6 - mov r8, r0 - ldrb r0, [r0] - lsls r0, r0, #1 - adds r0, r0, r4 - ldrh r0, [r0] - adds r1, r7, #0 - movs r2, #1 - bl SetTile - adds r0, r7, #1 - adds r5, r6, #0 - adds r5, #0x72 - strh r0, [r5] - ldrh r0, [r5] - movs r1, #1 - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x76 - strh r0, [r1] - mov r1, r8 - ldrb r0, [r1] - adds r0, #4 - lsls r0, r0, #1 - adds r0, r0, r4 - ldrh r1, [r0] - ldrh r2, [r5] - adds r0, r6, #0 - bl sub_08090094 - adds r0, r6, #0 - movs r1, #1 - bl sub_0809028C - b _0809008A - .align 2, 0 -_08090028: .4byte gUnk_08121EE4 -_0809002C: - adds r0, r6, #0 - adds r0, #0x72 - strh r7, [r0] - ldrh r0, [r0] - movs r1, #1 - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x76 - strh r0, [r1] - ldr r5, _08090090 @ =gUnk_08121EE4 - movs r4, #0x81 - adds r4, r4, r6 - mov r8, r4 - ldrb r0, [r4] - lsls r0, r0, #1 - adds r0, r0, r5 - ldrh r0, [r0] - adds r1, r7, #0 - movs r2, #1 - bl SetTile - subs r0, r7, #1 - adds r4, r6, #0 - adds r4, #0x70 - strh r0, [r4] - ldrh r0, [r4] - movs r1, #1 - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x74 - strh r0, [r1] - mov r1, r8 - ldrb r0, [r1] - adds r0, #2 - lsls r0, r0, #1 - adds r0, r0, r5 - ldrh r1, [r0] - ldrh r2, [r4] - adds r0, r6, #0 - bl sub_08090094 - adds r0, r6, #0 - movs r1, #0 - bl sub_0809028C -_0809008A: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08090090: .4byte gUnk_08121EE4 - - thumb_func_start sub_08090094 -sub_08090094: @ 0x08090094 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - adds r5, r1, #0 - adds r7, r2, #0 - adds r0, r7, #0 - movs r1, #1 - bl sub_080002E0 - adds r4, r0, #0 - adds r0, r7, #0 - movs r1, #1 - bl GetTileIndex - adds r3, r0, #0 - movs r0, #0x80 - lsls r0, r0, #7 - ands r0, r3 - cmp r0, #0 - bne _0809012C - adds r3, r5, #0 - ldr r1, _080900D0 @ =0xFFFFBFDC - adds r0, r3, r1 - cmp r0, #0xb - bhi _0809011A - lsls r0, r0, #2 - ldr r1, _080900D4 @ =_080900D8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080900D0: .4byte 0xFFFFBFDC -_080900D4: .4byte _080900D8 -_080900D8: @ jump table - .4byte _08090114 @ case 0 - .4byte _08090108 @ case 1 - .4byte _0809011A @ case 2 - .4byte _0809011A @ case 3 - .4byte _0809011A @ case 4 - .4byte _0809011A @ case 5 - .4byte _0809011A @ case 6 - .4byte _0809011A @ case 7 - .4byte _08090114 @ case 8 - .4byte _0809010E @ case 9 - .4byte _08090114 @ case 10 - .4byte _0809010E @ case 11 -_08090108: - cmp r4, #5 - bne _0809011A - b _08090118 -_0809010E: - cmp r4, #5 - bne _0809011A - b _08090118 -_08090114: - cmp r4, #0xa - bne _0809011A -_08090118: - ldr r3, _08090128 @ =0x00004022 -_0809011A: - adds r0, r3, #0 - adds r1, r7, #0 - movs r2, #1 - bl SetTile - b _08090242 - .align 2, 0 -_08090128: .4byte 0x00004022 -_0809012C: - ldr r1, _08090140 @ =0xFFFFBFDE - adds r0, r3, r1 - cmp r0, #0xd - bls _08090136 - b _08090242 -_08090136: - lsls r0, r0, #2 - ldr r1, _08090144 @ =_08090148 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08090140: .4byte 0xFFFFBFDE -_08090144: .4byte _08090148 -_08090148: @ jump table - .4byte _08090242 @ case 0 - .4byte _08090242 @ case 1 - .4byte _080901EC @ case 2 - .4byte _08090180 @ case 3 - .4byte _08090242 @ case 4 - .4byte _08090242 @ case 5 - .4byte _08090242 @ case 6 - .4byte _08090242 @ case 7 - .4byte _08090242 @ case 8 - .4byte _08090242 @ case 9 - .4byte _08090210 @ case 10 - .4byte _080901B4 @ case 11 - .4byte _08090210 @ case 12 - .4byte _080901B4 @ case 13 -_08090180: - ldr r0, _080901A8 @ =0x00004024 - cmp r5, r0 - bne _08090194 - ldr r3, _080901AC @ =0x00004022 - adds r2, r6, #0 - adds r2, #0x83 - ldrb r1, [r2] - movs r0, #0x10 - orrs r0, r1 - strb r0, [r2] -_08090194: - ldr r0, _080901B0 @ =0x0000402C - cmp r5, r0 - bne _08090238 - ldr r3, _080901AC @ =0x00004022 - adds r2, r6, #0 - adds r2, #0x83 - ldrb r1, [r2] - movs r0, #0x10 - b _08090234 - .align 2, 0 -_080901A8: .4byte 0x00004024 -_080901AC: .4byte 0x00004022 -_080901B0: .4byte 0x0000402C -_080901B4: - ldr r0, _080901DC @ =0x0000402C - cmp r5, r0 - bne _080901C8 - ldr r3, _080901E0 @ =0x0000402B - adds r2, r6, #0 - adds r2, #0x83 - ldrb r1, [r2] - movs r0, #0x10 - orrs r0, r1 - strb r0, [r2] -_080901C8: - ldr r0, _080901E4 @ =0x00004024 - cmp r5, r0 - bne _08090238 - ldr r3, _080901E8 @ =0x00004022 - adds r2, r6, #0 - adds r2, #0x83 - ldrb r1, [r2] - movs r0, #0x10 - b _08090234 - .align 2, 0 -_080901DC: .4byte 0x0000402C -_080901E0: .4byte 0x0000402B -_080901E4: .4byte 0x00004024 -_080901E8: .4byte 0x00004022 -_080901EC: - ldr r0, _08090204 @ =0x00004025 - cmp r5, r0 - bne _08090200 - ldr r3, _08090208 @ =0x00004022 - adds r2, r6, #0 - adds r2, #0x83 - ldrb r1, [r2] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r2] -_08090200: - ldr r0, _0809020C @ =0x0000402D - b _08090226 - .align 2, 0 -_08090204: .4byte 0x00004025 -_08090208: .4byte 0x00004022 -_0809020C: .4byte 0x0000402D -_08090210: - ldr r0, _08090244 @ =0x0000402D - cmp r5, r0 - bne _08090224 - ldr r3, _08090248 @ =0x0000402B - adds r2, r6, #0 - adds r2, #0x83 - ldrb r1, [r2] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r2] -_08090224: - ldr r0, _0809024C @ =0x00004025 -_08090226: - cmp r5, r0 - bne _08090238 - ldr r3, _08090250 @ =0x00004022 - adds r2, r6, #0 - adds r2, #0x83 - ldrb r1, [r2] - movs r0, #0x20 -_08090234: - orrs r0, r1 - strb r0, [r2] -_08090238: - adds r0, r3, #0 - adds r1, r7, #0 - movs r2, #1 - bl SetTile -_08090242: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08090244: .4byte 0x0000402D -_08090248: .4byte 0x0000402B -_0809024C: .4byte 0x00004025 -_08090250: .4byte 0x00004022 - - thumb_func_start sub_08090254 -sub_08090254: @ 0x08090254 - push {r4, r5, lr} - adds r4, r0, #0 - adds r0, #0x74 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x70 - ldrh r1, [r1] - adds r5, r4, #0 - adds r5, #0x38 - ldrb r2, [r5] - bl sub_0807B9B8 - adds r0, r4, #0 - adds r0, #0x80 - ldrb r0, [r0] - cmp r0, #1 - bne _08090288 - adds r0, r4, #0 - adds r0, #0x76 - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x72 - ldrh r1, [r1] - ldrb r2, [r5] - bl sub_0807B9B8 -_08090288: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0809028C -sub_0809028C: @ 0x0809028C - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - adds r6, r0, #0 - adds r4, r6, #0 - adds r4, #0x83 - ldrb r0, [r4] - movs r2, #0x30 - ands r2, r0 - movs r0, #0 - mov sb, r0 - strb r2, [r4] - adds r0, r6, #0 - adds r0, #0x70 - ldrh r5, [r0] - adds r7, r5, #0 - subs r7, #0x80 - adds r0, #2 - ldrh r3, [r0] - movs r0, #0x80 - rsbs r0, r0, #0 - adds r0, r0, r3 - mov r8, r0 - cmp r1, #1 - bne _0809039A - movs r0, #0x20 - ands r0, r2 - cmp r0, #0 - beq _080902D4 - adds r1, r3, #0 - subs r1, #0x7f - movs r0, #0 - bl sub_08090480 - b _080902FE -_080902D4: - mov r0, r8 - movs r1, #2 - bl GetTileType - adds r1, r0, #0 - ldr r0, _080902EC @ =0x00000301 - cmp r1, r0 - beq _080902F0 - adds r0, #7 - cmp r1, r0 - beq _080902F6 - b _080902FE - .align 2, 0 -_080902EC: .4byte 0x00000301 -_080902F0: - ldrb r0, [r4] - movs r1, #8 - b _080902FA -_080902F6: - ldrb r0, [r4] - movs r1, #2 -_080902FA: - orrs r0, r1 - strb r0, [r4] -_080902FE: - adds r2, r6, #0 - adds r2, #0x83 - ldrb r1, [r2] - movs r0, #0x2a - ands r0, r1 - adds r4, r2, #0 - cmp r0, #0 - beq _0809031E - movs r0, #0 - adds r1, r7, #0 - bl sub_08090480 - movs r0, #0 - mov r1, r8 - bl sub_08090480 -_0809031E: - ldrb r1, [r4] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - beq _0809034E - subs r4, r7, #1 - adds r0, r4, #0 - movs r1, #1 - bl GetTileType - movs r1, #0xc0 - lsls r1, r1, #2 - cmp r0, r1 - bne _0809033C - b _08090478 -_0809033C: - movs r0, #0 - adds r1, r4, #0 - bl sub_08090480 - subs r1, r7, #2 - movs r0, #2 - bl sub_08090480 - b _08090478 -_0809034E: - subs r0, r7, #1 - movs r1, #2 - bl GetTileType - adds r1, r0, #0 - movs r0, #0xc0 - lsls r0, r0, #2 - cmp r1, r0 - beq _08090368 - adds r0, #8 - cmp r1, r0 - beq _0809036E - b _08090376 -_08090368: - ldrb r1, [r4] - movs r0, #4 - b _08090372 -_0809036E: - ldrb r1, [r4] - movs r0, #1 -_08090372: - orrs r0, r1 - strb r0, [r4] -_08090376: - ldrb r1, [r4] - movs r0, #0x15 - ands r0, r1 - cmp r0, #0 - beq _08090478 - movs r0, #0x2a - ands r0, r1 - cmp r0, #0 - bne _08090478 - movs r0, #0 - adds r1, r7, #0 - bl sub_08090480 - movs r0, #1 - mov r1, r8 - bl sub_08090480 - b _08090478 -_0809039A: - movs r0, #0x10 - ands r0, r2 - cmp r0, #0 - beq _080903AE - adds r1, r5, #0 - subs r1, #0x81 - movs r0, #0 - bl sub_08090480 - b _080903DA -_080903AE: - adds r0, r7, #0 - movs r1, #2 - bl GetTileType - adds r1, r0, #0 - ldr r0, _080903C8 @ =0x00000302 - cmp r1, r0 - beq _080903CC - adds r0, #4 - cmp r1, r0 - beq _080903D2 - b _080903DA - .align 2, 0 -_080903C8: .4byte 0x00000302 -_080903CC: - ldrb r0, [r4] - movs r1, #4 - b _080903D6 -_080903D2: - ldrb r0, [r4] - movs r1, #1 -_080903D6: - orrs r0, r1 - strb r0, [r4] -_080903DA: - adds r2, r6, #0 - adds r2, #0x83 - ldrb r1, [r2] - movs r0, #0x15 - ands r0, r1 - adds r4, r2, #0 - cmp r0, #0 - beq _080903FA - movs r0, #0 - adds r1, r7, #0 - bl sub_08090480 - movs r0, #0 - mov r1, r8 - bl sub_08090480 -_080903FA: - ldrb r1, [r4] - movs r0, #0x20 - ands r0, r1 - cmp r0, #0 - beq _0809042C - mov r4, r8 - adds r4, #1 - adds r0, r4, #0 - movs r1, #1 - bl GetTileType - movs r1, #0xc0 - lsls r1, r1, #2 - cmp r0, r1 - beq _08090478 - movs r0, #0 - adds r1, r4, #0 - bl sub_08090480 - mov r1, r8 - adds r1, #2 - movs r0, #1 - bl sub_08090480 - b _08090478 -_0809042C: - mov r0, r8 - adds r0, #1 - movs r1, #2 - bl GetTileType - adds r1, r0, #0 - movs r0, #0xc0 - lsls r0, r0, #2 - cmp r1, r0 - beq _08090448 - adds r0, #6 - cmp r1, r0 - beq _0809044E - b _08090456 -_08090448: - ldrb r1, [r4] - movs r0, #8 - b _08090452 -_0809044E: - ldrb r1, [r4] - movs r0, #2 -_08090452: - orrs r0, r1 - strb r0, [r4] -_08090456: - ldrb r1, [r4] - movs r0, #0x2a - ands r0, r1 - cmp r0, #0 - beq _08090478 - movs r0, #0x15 - ands r0, r1 - cmp r0, #0 - bne _08090478 - movs r0, #2 - adds r1, r7, #0 - bl sub_08090480 - movs r0, #0 - mov r1, r8 - bl sub_08090480 -_08090478: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08090480 -sub_08090480: @ 0x08090480 - push {lr} - ldr r2, _08090494 @ =gUnk_08121EF0 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - movs r2, #1 - bl SetTile - pop {pc} - .align 2, 0 -_08090494: .4byte gUnk_08121EF0 - - thumb_func_start sub_08090498 -sub_08090498: @ 0x08090498 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x70 - ldrh r0, [r0] - adds r4, r0, #0 - subs r4, #0x80 - adds r0, r4, #0 - movs r1, #1 - bl sub_0807BA8C - adds r0, r5, #0 - adds r0, #0x83 - ldrb r1, [r0] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _080904D2 - adds r0, r4, #0 - movs r1, #2 - bl GetTileType - ldr r1, _08090510 @ =0x00000306 - cmp r0, r1 - bne _080904D2 - movs r0, #0x62 - adds r1, r4, #0 - movs r2, #1 - bl sub_08000148 -_080904D2: - adds r0, r5, #0 - adds r0, #0x72 - ldrh r0, [r0] - adds r4, r0, #0 - subs r4, #0x80 - adds r0, r4, #0 - movs r1, #1 - bl sub_0807BA8C - adds r0, r5, #0 - adds r0, #0x83 - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0809050C - adds r0, r4, #0 - movs r1, #2 - bl GetTileType - movs r1, #0xc2 - lsls r1, r1, #2 - cmp r0, r1 - bne _0809050C - movs r0, #0x63 - adds r1, r4, #0 - movs r2, #1 - bl sub_08000148 -_0809050C: - pop {r4, r5, pc} - .align 2, 0 -_08090510: .4byte 0x00000306 - - thumb_func_start sub_08090514 -sub_08090514: @ 0x08090514 - push {lr} - adds r2, r0, #0 - ldr r0, [r2, #0x50] - cmp r0, #0 - beq _0809059E - ldrb r0, [r0, #0xd] - cmp r0, #1 - beq _08090552 - cmp r0, #1 - bgt _0809052E - cmp r0, #0 - beq _08090538 - b _0809059E -_0809052E: - cmp r0, #2 - beq _08090568 - cmp r0, #3 - beq _08090582 - b _0809059E -_08090538: - ldrb r1, [r2, #0x19] - movs r0, #0x3f - ands r0, r1 - movs r1, #0x80 - orrs r0, r1 - strb r0, [r2, #0x19] - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - b _0809059A -_08090552: - ldrb r0, [r2, #0x19] - movs r1, #0xc0 - orrs r0, r1 - strb r0, [r2, #0x19] - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #4 - b _0809059A -_08090568: - ldrb r1, [r2, #0x19] - movs r0, #0x3f - ands r0, r1 - movs r1, #0x80 - orrs r0, r1 - strb r0, [r2, #0x19] - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #5 - b _0809059A -_08090582: - ldrb r1, [r2, #0x19] - movs r0, #0x3f - ands r0, r1 - movs r1, #0x80 - orrs r0, r1 - strb r0, [r2, #0x19] - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #3 -_0809059A: - orrs r0, r1 - strb r0, [r2] -_0809059E: - pop {pc} diff --git a/data/const/object/pushableFurniture.s b/data/const/object/pushableFurniture.s deleted file mode 100644 index 3a4c4a30..00000000 --- a/data/const/object/pushableFurniture.s +++ /dev/null @@ -1,16 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08121ED8:: @ 08121ED8 - .4byte sub_0808F990 - .4byte sub_0808FACC - .4byte sub_0808FC3C - -gUnk_08121EE4:: @ 08121EE4 - .incbin "pushableFurniture/gUnk_08121EE4.bin" - -gUnk_08121EF0:: @ 08121EF0 - .incbin "pushableFurniture/gUnk_08121EF0.bin" diff --git a/src/object/pushableFurniture.c b/src/object/pushableFurniture.c new file mode 100644 index 00000000..01bf646f --- /dev/null +++ b/src/object/pushableFurniture.c @@ -0,0 +1,401 @@ +/** + * @file pushableFurniture.c + * @ingroup Objects + * + * @brief Pushable Furniture object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[0x8]; + /*0x70*/ u16 unk_70; + /*0x72*/ u16 unk_72; + /*0x74*/ u16 unk_74; + /*0x76*/ u16 unk_76; + /*0x78*/ u8 unk_78[0x2]; + /*0x7a*/ u16 unk_7a; + /*0x7c*/ u16 unk_7c; + /*0x7e*/ u16 unk_7e; + /*0x80*/ u8 unk_80; + /*0x81*/ u8 unk_81; + /*0x82*/ u8 unk_82; + /*0x83*/ u8 unk_83; + /*0x84*/ u8 unk_84[0x2]; + /*0x86*/ u16 unk_86; +} PushableFurnitureEntity; + +extern const s16 gUnk_080B4488[]; + +extern void (*const PushableFurniture_Actions[])(PushableFurnitureEntity*); +extern const u16 gUnk_08121EE4[]; +extern const u16 gUnk_08121EF0[]; + +void sub_08090514(PushableFurnitureEntity*); +void sub_0808FF50(PushableFurnitureEntity*); +void sub_0808FBFC(PushableFurnitureEntity*); +void sub_0808FB68(PushableFurnitureEntity*); +bool32 sub_0808FECC(PushableFurnitureEntity*); +void sub_0808FF20(PushableFurnitureEntity*); +void nullsub_1(PushableFurnitureEntity*); +void sub_0808FD44(PushableFurnitureEntity*, u32); +void sub_0808FDE8(PushableFurnitureEntity*); +bool32 sub_0808FC5C(PushableFurnitureEntity*); +void sub_08090498(PushableFurnitureEntity*); +void sub_08090254(PushableFurnitureEntity*); +void sub_08090094(PushableFurnitureEntity*, u32, u32); +void sub_0809028C(PushableFurnitureEntity*, u32); +void sub_08090480(u32, u32); + +void PushableFurniture(PushableFurnitureEntity* this) { + PushableFurniture_Actions[super->action](this); + if (super->action != 0) { + sub_08090514(this); + } +} + +ASM_FUNC("asm/non_matching/pushableFurniture/sub_0808F990.inc", void sub_0808F990(PushableFurnitureEntity* this)) + +void PushableFurniture_Action1(PushableFurnitureEntity* this) { + if (this->unk_81 == 0) { + if (this->unk_80 == 0) { + sub_0808FBFC(this); + } else { + sub_0808FB68(this); + } + } else { + if (super->actionDelay != 0 && --super->actionDelay == 0) { + EnqueueSFX(SFX_BUTTON_PRESS); + } + } + switch (super->type) { + case 2: + case 4: + switch (super->subAction) { + case 0: + if (sub_0808FECC(this)) { + super->subAction = 1; + super->actionDelay = 0xc; + } + break; + case 1: + if (--super->actionDelay == 0) { + super->frameIndex = 1; + super->subAction = 2; + EnqueueSFX(SFX_80); + sub_0808FF20(this); + } + break; + case 2: + nullsub_1(this); + break; + } + } +} + +void sub_0808FB68(PushableFurnitureEntity* this) { + u32 tileIndex = GetTileIndex(this->unk_70, super->collisionLayer); + switch (tileIndex) { + case 0x4030: + case 0x4031: + super->action = 2; + super->direction = (((tileIndex - 0x30) & 1) << 4) | 8; + SetPlayerControl(CONTROL_1); + sub_0808FD44(this, 0); + break; + default: + tileIndex = GetTileIndex(this->unk_72, super->collisionLayer); + switch (tileIndex) { + case 0x4030: + case 0x4031: + super->action = 2; + super->direction = (((tileIndex - 0x30) & 1) << 4) | 8; + SetPlayerControl(CONTROL_1); + sub_0808FD44(this, 1); + break; + } + sub_0808FDE8(this); + break; + } +} + +void sub_0808FBFC(PushableFurnitureEntity* this) { + u32 tileIndex = GetTileIndex(this->unk_7c, super->collisionLayer); + if (tileIndex != 0x404a) { + super->action = 2; + super->direction = ((tileIndex - 0x4bU) & 3) << 3; + SetPlayerControl(CONTROL_1); + sub_0808FD44(this, 0); + } +} + +void PushableFurniture_Action2(PushableFurnitureEntity* this) { + sub_0800445C(super); + if (sub_0808FC5C(this)) { + super->action = 1; + SetPlayerControl(CONTROL_ENABLED); + } +} + +bool32 sub_0808FC5C(PushableFurnitureEntity* this) { + bool32 bVar2; + u8* puVar5; + + LinearMoveUpdate(super); + if (--super->actionDelay == 0) { + if ((super->type == 2) || (super->type == 4)) { + super->spriteOffsetY = 0xfe; + } else { + super->spriteOffsetY = 0; + } + if (sub_080002D0(super)) { + return 0; + } + if (super->field_0xf == 0) { + sub_0808FF50(this); + return TRUE; + } + bVar2 = FALSE; + if (*(u16*)&super->type == 0x101) { + if (super->y.HALF.HI != this->unk_7e) + goto _0808FCC8; + } else { + if (super->x.HALF.HI == this->unk_7e) { + bVar2 = TRUE; + } + _0808FCC8: + if (!bVar2) { + sub_0808FF50(this); + return TRUE; + } + } + this->unk_81 = 1; + if (super->parent == NULL) { + SetFlag((u32)this->unk_86); + } else { + if ((this->unk_82 & 0x80) != 0) { + puVar5 = super->parent->spriteAnimation + 2; + *puVar5 = (1 << (this->unk_7a)) | *puVar5; + } else { + SetLocalFlag((u32)this->unk_82); + } + } + if (this->unk_80 == 0) { + super->actionDelay = 4; + } else { + super->actionDelay = 0x18; + } + if ((gPlayerState.flags & 0x80) == 0) { + super->actionDelay += 0x10; + } + sub_0808FF50(this); + return TRUE; + } else { + return FALSE; + } +} + +void sub_0808FD44(PushableFurnitureEntity* this, u32 param_2) { + u32 tmp; + + if (this->unk_80 == 1) { + if (this->unk_83 != 0) { + sub_08090498(this); + } + if (param_2 != 0) { + tmp = this->unk_72; + } else { + tmp = this->unk_70; + } + if ((gPlayerState.flags & 0x80) != 0) { + super->speed = 0x40; + super->actionDelay = 0x20; + } else { + super->speed = 0x80; + super->actionDelay = 0x10; + } + } else { + tmp = this->unk_7c; + if ((gPlayerState.flags & 0x80) != 0) { + super->speed = 0x40; + super->actionDelay = 0x40; + } else { + super->speed = 0x80; + super->actionDelay = 0x20; + } + } + EnqueueSFX(SFX_10F); + sub_08090254(this); + GetTileIndex(tmp + gUnk_080B4488[super->direction >> 3], super->collisionLayer); +} + +void sub_0808FDE8(PushableFurnitureEntity* this) { + u32 uVar1; + s32 iVar2; + u32 uVar3; + + uVar3 = (u32)this->unk_70; + uVar1 = sub_080002E0(uVar3 - 1, 1); + iVar2 = GetTileIndex(uVar3, 1); + if (iVar2 == 0x402e) { + if ((((uVar1 & 0xf0) != 0) && ((uVar1 & 0xf0) != 0x50)) || ((uVar1 & 5) == 0)) { + SetTile(0x402c, uVar3, 1); + } + } else { + iVar2 = sub_080002E0(uVar3, 1); + if ((iVar2 == 5) && ((((uVar1 & 0xf0) == 0 || ((uVar1 & 0xf0) == 0x50)) && ((uVar1 & 5) != 0)))) { + SetTile(0x402e, uVar3, 1); + } + } + uVar3 = (u32)this->unk_72; + uVar1 = sub_080002E0(uVar3 + 1, 1); + iVar2 = GetTileIndex(uVar3, 1); + if (iVar2 == 0x402f) { + if ((((uVar1 & 0xf0) != 0) && ((uVar1 & 0xf0) != 0x50)) || ((uVar1 & 10) == 0)) { + SetTile(0x402d, uVar3, 1); + } + } else { + iVar2 = sub_080002E0(uVar3, 1); + if (((iVar2 == 10) && (((uVar1 & 0xf0) == 0 || ((uVar1 & 0xf0) == 0x50)))) && ((uVar1 & 10) != 0)) { + SetTile(0x402f, uVar3, 1); + } + } +} + +bool32 sub_0808FECC(PushableFurnitureEntity* this) { + bool32 result = TRUE; + + if (!((gPlayerState.flags & 0x80) == 0 && (gPlayerEntity.action == 6) && (gPlayerEntity.animationState == 0) && + (gPlayerEntity.y.HALF.HI - super->y.HALF.HI < 0x14) && (super->x.HALF.HI + 0xc > gPlayerEntity.x.HALF.HI) && + (super->x.HALF.HI - 12 < gPlayerEntity.x.HALF.HI))) { + result = FALSE; + } + return result; +} + +void sub_0808FF20(PushableFurnitureEntity* this) { + Entity* obj; + switch (super->type2) { + case 0: + break; + case 1: + case 2: + obj = CreateObject(OBJECT_63, super->type2 - 1, 0); + if (obj != NULL) { + obj->parent = super; + CopyPosition(super, obj); + } + break; + } +} + +void nullsub_1(PushableFurnitureEntity* this) { +} + +void sub_0808FF50(PushableFurnitureEntity* this) { + u32 tmp; + u32 position; + u32 tmp2; + this->unk_7c = COORD_TO_TILE(super); + tmp2 = super->x.HALF.HI & 0xf; + tmp = this->unk_7c; + position = tmp; + switch (this->unk_80) { + case 0: + this->unk_70 = tmp; + this->unk_74 = GetTileIndex(this->unk_70, 1); + SetTile(0x404a, tmp, 1); + break; + case 1: + if ((tmp2 & 8) != 0) { + this->unk_70 = this->unk_7c; + this->unk_74 = GetTileIndex(this->unk_70, 1); + SetTile(gUnk_08121EE4[this->unk_81], position, 1); + this->unk_72 = tmp + 1; + this->unk_76 = GetTileIndex(this->unk_72, 1); + sub_08090094(this, gUnk_08121EE4[this->unk_81 + 4], this->unk_72); + sub_0809028C(this, 1); + } else { + this->unk_72 = this->unk_7c; + this->unk_76 = GetTileIndex(this->unk_72, 1); + SetTile(gUnk_08121EE4[this->unk_81], position, 1); + this->unk_70 = tmp - 1; + this->unk_74 = GetTileIndex(this->unk_70, 1); + sub_08090094(this, gUnk_08121EE4[this->unk_81 + 2], this->unk_70); + sub_0809028C(this, 0); + } + break; + } +} + +ASM_FUNC("asm/non_matching/pushableFurniture/sub_08090094.inc", + void sub_08090094(PushableFurnitureEntity* this, u32 param_2, u32 param_3)) + +void sub_08090254(PushableFurnitureEntity* this) { + sub_0807B9B8(this->unk_74, this->unk_70, super->collisionLayer); + if (this->unk_80 == 1) { + sub_0807B9B8(this->unk_76, this->unk_72, super->collisionLayer); + } +} + +ASM_FUNC("asm/non_matching/pushableFurniture/sub_0809028C.inc", + void sub_0809028C(PushableFurnitureEntity* this, u32 param_2)) + +void sub_08090480(u32 param_1, u32 param_2) { + SetTile(gUnk_08121EF0[param_1], param_2, 1); +} + +void sub_08090498(PushableFurnitureEntity* this) { + u32 tmp = this->unk_70 - 0x80; + sub_0807BA8C(tmp, 1); + if (((this->unk_83 & 1) != 0) && (GetTileType(tmp, 2) == 0x306)) { + sub_08000148(0x62, tmp, 1); + } + tmp = this->unk_72 - 0x80; + sub_0807BA8C(tmp, 1); + if (((this->unk_83 & 2) != 0) && (GetTileType(tmp, 2) == 0x308)) { + sub_08000148(99, tmp, 1); + } +} + +void sub_08090514(PushableFurnitureEntity* this) { + if (super->parent != NULL) { + switch (super->parent->subAction) { + case 0: + super->spriteRendering.b3 = 2; + super->spritePriority.b0 = 4; + break; + case 1: + super->spriteRendering.b3 = 3; + super->spritePriority.b0 = 4; + break; + case 2: + super->spriteRendering.b3 = 2; + super->spritePriority.b0 = 5; + break; + case 3: + super->spriteRendering.b3 = 2; + super->spritePriority.b0 = 3; + break; + } + } +} + +void (*const PushableFurniture_Actions[])(PushableFurnitureEntity*) = { + sub_0808F990, + PushableFurniture_Action1, + PushableFurniture_Action2, +}; +const u16 gUnk_08121EE4[] = { + 0x402b, 0x4022, 0x402c, 0x4024, 0x402d, 0x4025, +}; +const u16 gUnk_08121EF0[] = { + 0x4026, + 0x4065, + 0x4066, + 0, +};