From 96a2c5bbfef3a2eb8f9b3dc834a228825c93929d Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 30 Jan 2022 00:25:53 +0100 Subject: [PATCH] Decompile BlockPushed --- asm/non_matching/ShowNPCDialogue.inc | 216 ------- asm/non_matching/manager1/sub_080573AC.inc | 77 --- .../pushableFurniture/sub_0808F990.inc | 170 ++++++ .../pushableFurniture/sub_08090094.inc | 201 +++++++ .../pushableFurniture/sub_0809028C.inc | 256 +++++++++ .../pushableStatue/sub_080896B0.inc | 91 +++ asm/object/blockPushed.s | 542 ------------------ data/const/object/blockPushed.s | 27 - src/manager/manager12.c | 1 - src/object/blockPushed.c | 173 ++++++ src/object/jailBars.c | 2 +- src/object/mask.c | 6 +- src/object/object49.c | 1 - src/object/octorokBossObject.c | 2 - 14 files changed, 893 insertions(+), 872 deletions(-) delete mode 100644 asm/non_matching/ShowNPCDialogue.inc delete mode 100644 asm/non_matching/manager1/sub_080573AC.inc create mode 100644 asm/non_matching/pushableFurniture/sub_0808F990.inc create mode 100644 asm/non_matching/pushableFurniture/sub_08090094.inc create mode 100644 asm/non_matching/pushableFurniture/sub_0809028C.inc create mode 100644 asm/non_matching/pushableStatue/sub_080896B0.inc delete mode 100644 asm/object/blockPushed.s delete mode 100644 data/const/object/blockPushed.s create mode 100644 src/object/blockPushed.c diff --git a/asm/non_matching/ShowNPCDialogue.inc b/asm/non_matching/ShowNPCDialogue.inc deleted file mode 100644 index 6db4a7c9..00000000 --- a/asm/non_matching/ShowNPCDialogue.inc +++ /dev/null @@ -1,216 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r6, r1, #0 - ldrh r1, [r6, #2] - asrs r7, r1, #4 - movs r0, #1 - ands r7, r0 - movs r0, #0xf - ands r1, r0 - cmp r1, #6 - bls _0806F1C8 - b _0806F332 -_0806F1C8: - lsls r0, r1, #2 - ldr r1, _0806F1D4 @ =_0806F1D8 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806F1D4: .4byte _0806F1D8 -_0806F1D8: @ jump table - .4byte _0806F332 @ case 0 - .4byte _0806F342 @ case 1 - .4byte _0806F1F4 @ case 2 - .4byte _0806F24E @ case 3 - .4byte _0806F2BA @ case 4 - .4byte _0806F324 @ case 5 - .4byte _0806F336 @ case 6 -_0806F1F4: - ldr r4, [r6] - asrs r1, r4, #0xc - movs r0, #0xf - ands r1, r0 - ldr r0, _0806F210 @ =0x00000FFF - ands r4, r0 - movs r5, #0 - cmp r1, #1 - beq _0806F22A - cmp r1, #1 - bgt _0806F214 - cmp r1, #0 - beq _0806F21A - b _0806F248 - .align 2, 0 -_0806F210: .4byte 0x00000FFF -_0806F214: - cmp r1, #2 - beq _0806F23A - b _0806F248 -_0806F21A: - adds r0, r4, #0 - bl CheckRoomFlag - adds r5, r0, #0 -_0806F222: - adds r0, r4, #0 - bl SetRoomFlag - b _0806F248 -_0806F22A: - adds r0, r4, #0 - bl CheckLocalFlag - adds r5, r0, #0 -_0806F232: - adds r0, r4, #0 - bl SetLocalFlag - b _0806F248 -_0806F23A: - adds r0, r4, #0 - bl CheckGlobalFlag - adds r5, r0, #0 - adds r0, r4, #0 - bl SetGlobalFlag -_0806F248: - cmp r5, #0 - beq _0806F342 - b _0806F34C -_0806F24E: - ldr r4, [r6] - asrs r1, r4, #0xc - movs r0, #0xf - ands r1, r0 - ldr r0, _0806F26C @ =0x00000FFF - ands r4, r0 - movs r5, #0 - cmp r1, #1 - beq _0806F28A - cmp r1, #1 - bgt _0806F270 - cmp r1, #0 - beq _0806F276 - b _0806F248 - .align 2, 0 -_0806F26C: .4byte 0x00000FFF -_0806F270: - cmp r1, #2 - beq _0806F29E - b _0806F248 -_0806F276: - adds r0, r4, #0 - bl CheckRoomFlag - adds r5, r0, #0 - cmp r5, #0 - beq _0806F222 - adds r0, r4, #0 - bl ClearRoomFlag - b _0806F248 -_0806F28A: - adds r0, r4, #0 - bl CheckLocalFlag - adds r5, r0, #0 - cmp r5, #0 - beq _0806F232 - adds r0, r4, #0 - bl ClearLocalFlag - b _0806F248 -_0806F29E: - adds r0, r4, #0 - bl CheckGlobalFlag - adds r5, r0, #0 - cmp r5, #0 - bne _0806F2B2 - adds r0, r4, #0 - bl SetGlobalFlag - b _0806F248 -_0806F2B2: - adds r0, r4, #0 - bl ClearGlobalFlag - b _0806F248 -_0806F2BA: - ldr r4, [r6] - asrs r1, r4, #0xc - movs r0, #0xf - ands r1, r0 - ldr r0, _0806F2D8 @ =0x00000FFF - ands r4, r0 - movs r5, #0 - cmp r1, #4 - bhi _0806F248 - lsls r0, r1, #2 - ldr r1, _0806F2DC @ =_0806F2E0 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806F2D8: .4byte 0x00000FFF -_0806F2DC: .4byte _0806F2E0 -_0806F2E0: @ jump table - .4byte _0806F2F4 @ case 0 - .4byte _0806F2FC @ case 1 - .4byte _0806F304 @ case 2 - .4byte _0806F30C @ case 3 - .4byte _0806F314 @ case 4 -_0806F2F4: - adds r0, r4, #0 - bl CheckRoomFlag - b _0806F320 -_0806F2FC: - adds r0, r4, #0 - bl CheckLocalFlag - b _0806F320 -_0806F304: - adds r0, r4, #0 - bl CheckGlobalFlag - b _0806F320 -_0806F30C: - adds r0, r4, #0 - bl CheckKinstoneFused - b _0806F320 -_0806F314: - adds r0, r4, #0 - bl GetInventoryValue - cmp r0, #0 - beq _0806F320 - movs r0, #1 -_0806F320: - adds r5, r0, #0 - b _0806F248 -_0806F324: - ldr r1, [r6, #4] - cmp r1, #0 - beq _0806F332 - mov r0, r8 - bl _call_via_r1 - b _0806F35E -_0806F332: - movs r0, #0 - b _0806F34E -_0806F336: - ldr r0, _0806F348 @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0806F34C -_0806F342: - ldrh r0, [r6, #6] - b _0806F34E - .align 2, 0 -_0806F348: .4byte gPlayerState -_0806F34C: - ldrh r0, [r6, #4] -_0806F34E: - cmp r7, #0 - beq _0806F35A - mov r1, r8 - bl MessageNoOverlap - b _0806F35E -_0806F35A: - bl MessageFromTarget -_0806F35E: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .syntax divided diff --git a/asm/non_matching/manager1/sub_080573AC.inc b/asm/non_matching/manager1/sub_080573AC.inc deleted file mode 100644 index fe845fce..00000000 --- a/asm/non_matching/manager1/sub_080573AC.inc +++ /dev/null @@ -1,77 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldr r2, _08057434 @ =gRoomControls - ldr r0, [r2, #0x28] - ldr r1, _08057438 @ =0xFFFFE000 - adds r0, r0, r1 - str r0, [r2, #0x28] - ldr r0, [r2, #0x2c] - ldr r1, _0805743C @ =0xFFFFF000 - adds r0, r0, r1 - str r0, [r2, #0x2c] - ldr r5, _08057440 @ =gScreen - movs r1, #0xa - ldrsh r0, [r2, r1] - ldrh r1, [r2, #6] - subs r0, r0, r1 - asrs r0, r0, #1 - ldrh r1, [r2, #0x2a] - adds r0, r0, r1 - strh r0, [r5, #0x2e] - movs r1, #0xc - ldrsh r0, [r2, r1] - ldrh r1, [r2, #8] - subs r0, r0, r1 - asrs r0, r0, #1 - ldrh r2, [r2, #0x2e] - adds r0, r0, r2 - strh r0, [r5, #0x30] - ldr r2, _08057444 @ =gSineTable - ldr r4, _08057448 @ =gRoomTransition - ldr r1, [r4] - ldrb r0, [r4] - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r2 - movs r2, #0 - ldrsh r0, [r0, r2] - asrs r0, r0, #5 - adds r0, #0x10 - bl sub_0805732C - adds r0, r6, #0 - adds r0, #0x22 - ldrb r0, [r0] - cmp r0, #0 - bne _08057430 - ldr r0, [r4] - movs r1, #0x1f - ands r0, r1 - cmp r0, #0 - bne _08057430 - adds r2, r6, #0 - adds r2, #0x24 - ldrb r0, [r2] - adds r0, #1 - movs r1, #7 - ands r0, r1 - strb r0, [r2] - ldr r1, _0805744C @ =gUnk_08107C30 - ldrb r0, [r2] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r0] - adds r0, r5, #0 - adds r0, #0x68 - strh r1, [r0] -_08057430: - pop {r4, r5, r6, pc} - .align 2, 0 -_08057434: .4byte gRoomControls -_08057438: .4byte 0xFFFFE000 -_0805743C: .4byte 0xFFFFF000 -_08057440: .4byte gScreen -_08057444: .4byte gSineTable -_08057448: .4byte gRoomTransition -_0805744C: .4byte gUnk_08107C30 - .syntax divided diff --git a/asm/non_matching/pushableFurniture/sub_0808F990.inc b/asm/non_matching/pushableFurniture/sub_0808F990.inc new file mode 100644 index 00000000..11bf33cd --- /dev/null +++ b/asm/non_matching/pushableFurniture/sub_0808F990.inc @@ -0,0 +1,170 @@ + .syntax unified + 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} + .syntax divided diff --git a/asm/non_matching/pushableFurniture/sub_08090094.inc b/asm/non_matching/pushableFurniture/sub_08090094.inc new file mode 100644 index 00000000..268ef34a --- /dev/null +++ b/asm/non_matching/pushableFurniture/sub_08090094.inc @@ -0,0 +1,201 @@ + .syntax unified + 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 + .syntax divided diff --git a/asm/non_matching/pushableFurniture/sub_0809028C.inc b/asm/non_matching/pushableFurniture/sub_0809028C.inc new file mode 100644 index 00000000..00af45a0 --- /dev/null +++ b/asm/non_matching/pushableFurniture/sub_0809028C.inc @@ -0,0 +1,256 @@ + .syntax unified + 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} + .syntax divided diff --git a/asm/non_matching/pushableStatue/sub_080896B0.inc b/asm/non_matching/pushableStatue/sub_080896B0.inc new file mode 100644 index 00000000..68c951e2 --- /dev/null +++ b/asm/non_matching/pushableStatue/sub_080896B0.inc @@ -0,0 +1,91 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + ldr r0, _08089750 @ =gPlayerState + ldrb r1, [r0, #5] + movs r0, #0x1f + ands r0, r1 + cmp r0, #0x12 + bne _08089768 + ldr r6, _08089754 @ =gPlayerEntity + adds r0, r6, #0 + adds r0, #0x5a + ldrb r1, [r0] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _08089768 + ldrb r3, [r6, #0x14] + movs r2, #6 + ands r2, r3 + lsls r2, r2, #1 + ldr r0, _08089758 @ =gUnk_080B4468 + adds r2, r2, r0 + ldr r0, _0808975C @ =gUnk_080B4488 + lsrs r3, r3, #1 + lsls r3, r3, #1 + adds r3, r3, r0 + movs r0, #0x2e + ldrsh r1, [r6, r0] + movs r4, #0 + ldrsh r0, [r2, r4] + adds r1, r1, r0 + ldr r5, _08089760 @ =gRoomControls + ldrh r0, [r5, #6] + subs r1, r1, r0 + asrs r1, r1, #4 + movs r4, #0x3f + ands r1, r4 + movs r7, #0x32 + ldrsh r0, [r6, r7] + movs r7, #2 + ldrsh r2, [r2, r7] + adds r0, r0, r2 + ldrh r2, [r5, #8] + subs r0, r0, r2 + asrs r0, r0, #4 + ands r0, r4 + lsls r0, r0, #6 + orrs r1, r0 + movs r0, #0 + ldrsh r7, [r3, r0] + subs r1, r1, r7 + lsls r4, r1, #0x10 + lsrs r0, r4, #0x10 + adds r5, r6, #0 + adds r5, #0x38 + ldrb r1, [r5] + bl sub_080002C8 + adds r1, r0, #0 + subs r0, #0x26 + cmp r0, #1 + bls _08089768 + cmp r1, #0x29 + beq _08089768 + ldrb r0, [r5] + bl GetLayerByIndex + asrs r1, r4, #0x10 + ldr r2, _08089764 @ =0x00002004 + adds r0, r0, r2 + adds r2, r0, r1 + ldrb r2, [r2] + subs r1, r1, r7 + adds r0, r0, r1 + ldrb r0, [r0] + cmp r2, #0 + bne _08089768 + cmp r0, #0 + bne _08089768 + movs r0, #1 + b _0808976A + .align 2, 0 +_08089750: .4byte gPlayerState +_08089754: .4byte gPlayerEntity +_08089758: .4byte gUnk_080B4468 +_0808975C: .4byte gUnk_080B4488 +_08089760: .4byte gRoomControls +_08089764: .4byte 0x00002004 +_08089768: + movs r0, #0 +_0808976A: + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/object/blockPushed.s b/asm/object/blockPushed.s deleted file mode 100644 index 1ff53891..00000000 --- a/asm/object/blockPushed.s +++ /dev/null @@ -1,542 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start BlockPushed -BlockPushed: @ 0x08082E9C - push {lr} - ldr r2, _08082EB0 @ =gUnk_0811F624 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08082EB0: .4byte gUnk_0811F624 - - thumb_func_start sub_08082EB4 -sub_08082EB4: @ 0x08082EB4 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r0, _08082EE0 @ =gRoomControls - ldrb r1, [r0, #4] - adds r6, r0, #0 - cmp r1, #0x11 - bne _08082EF6 - adds r0, r4, #0 - bl sub_080AE068 - ldr r1, _08082EE4 @ =0x000001C1 - adds r0, r4, #0 - bl LoadFixedGFX - cmp r0, #0 - bne _08082EE8 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] - b _0808308E - .align 2, 0 -_08082EE0: .4byte gRoomControls -_08082EE4: .4byte 0x000001C1 -_08082EE8: - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r4, #0x18] -_08082EF6: - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x20 - strb r0, [r4, #0xe] - movs r0, #0x80 - strh r0, [r4, #0x24] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #0x88 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - movs r1, #0x2e - ldrsh r0, [r4, r1] - ldrh r1, [r6, #6] - subs r0, r0, r1 - asrs r5, r0, #4 - movs r2, #0x3f - ands r5, r2 - movs r1, #0x32 - ldrsh r0, [r4, r1] - ldrh r1, [r6, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r5, r0 - ldrb r1, [r4, #0xa] - lsls r1, r1, #3 - ldrh r0, [r4, #0x2e] - adds r0, r1, r0 - strh r0, [r4, #0x2e] - ldrh r0, [r4, #0x32] - adds r1, r1, r0 - strh r1, [r4, #0x32] - ldr r1, _08082F6C @ =gUnk_0811F64C - ldrb r0, [r4, #0xa] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - str r0, [r4, #0x48] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r5, #0 - bl GetTileType - str r0, [r4, #0x68] - ldrb r0, [r4, #0xa] - cmp r0, #1 - beq _08082F7A - cmp r0, #1 - bgt _08082F70 - cmp r0, #0 - beq _08082F76 - b _08082FF0 - .align 2, 0 -_08082F6C: .4byte gUnk_0811F64C -_08082F70: - cmp r0, #2 - beq _08082F9A - b _08082FF0 -_08082F76: - adds r0, r5, #0 - b _08082FE8 -_08082F7A: - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #1 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x40 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x41 - b _08082FE8 -_08082F9A: - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #1 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #2 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x40 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x41 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x42 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x80 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x81 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x82 -_08082FE8: - adds r1, r4, #0 - bl sub_080832D8 - b _08083088 -_08082FF0: - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #1 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #2 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #3 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x40 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x41 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x42 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x43 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x80 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x81 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x82 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0x83 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0xc0 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0xc1 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0xc2 - adds r1, r4, #0 - bl sub_080832D8 - adds r0, r5, #0 - adds r0, #0xc3 - adds r1, r4, #0 - bl sub_080832D8 -_08083088: - ldr r0, _08083090 @ =0x0000010F - bl EnqueueSFX -_0808308E: - pop {r4, r5, r6, pc} - .align 2, 0 -_08083090: .4byte 0x0000010F - - thumb_func_start sub_08083094 -sub_08083094: @ 0x08083094 - push {r4, lr} - adds r4, r0, #0 - bl LinearMoveUpdate - adds r0, r4, #0 - bl sub_0800445C - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080830B4 - adds r0, r4, #0 - bl sub_080830B8 -_080830B4: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080830B8 -sub_080830B8: @ 0x080830B8 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov sb, r0 - ldrb r5, [r0, #0xa] - lsls r4, r5, #3 - movs r1, #0x2e - ldrsh r0, [r0, r1] - subs r0, r0, r4 - ldr r3, _080830FC @ =gRoomControls - ldrh r1, [r3, #6] - subs r0, r0, r1 - asrs r7, r0, #4 - movs r2, #0x3f - ands r7, r2 - mov r6, sb - movs r1, #0x32 - ldrsh r0, [r6, r1] - subs r0, r0, r4 - ldrh r1, [r3, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r7, r0 - cmp r5, #1 - beq _08083128 - cmp r5, #1 - bgt _08083100 - cmp r5, #0 - beq _08083106 - b _080831EC - .align 2, 0 -_080830FC: .4byte gRoomControls -_08083100: - cmp r5, #2 - beq _08083160 - b _080831EC -_08083106: - mov r0, sb - bl sub_0800442E - cmp r0, #0 - beq _08083112 - b _080832C0 -_08083112: - ldr r0, _08083124 @ =0x00000365 - mov r1, sb - adds r1, #0x38 - ldrb r2, [r1] - adds r1, r7, #0 - bl sub_0807B7D8 - b _080832BA - .align 2, 0 -_08083124: .4byte 0x00000365 -_08083128: - mov r2, sb - ldr r0, [r2, #0x68] - mov r4, sb - adds r4, #0x38 - ldrb r2, [r4] - adds r1, r7, #0 - bl sub_0807B7D8 - ldr r0, _08083158 @ =0x0000036F - adds r1, r7, #1 - ldrb r2, [r4] - bl sub_0807B7D8 - movs r0, #0xdc - lsls r0, r0, #2 - adds r1, r7, #0 - adds r1, #0x40 - ldrb r2, [r4] - bl sub_0807B7D8 - ldr r0, _0808315C @ =0x00000371 - adds r1, r7, #0 - adds r1, #0x41 - b _080831CA - .align 2, 0 -_08083158: .4byte 0x0000036F -_0808315C: .4byte 0x00000371 -_08083160: - mov r6, sb - ldr r0, [r6, #0x68] - mov r4, sb - adds r4, #0x38 - ldrb r2, [r4] - adds r1, r7, #0 - bl sub_0807B7D8 - ldr r0, _080831D4 @ =0x00000372 - adds r1, r7, #1 - ldrb r2, [r4] - bl sub_0807B7D8 - ldr r0, _080831D8 @ =0x0000036F - adds r1, r7, #2 - ldrb r2, [r4] - bl sub_0807B7D8 - movs r0, #0xdd - lsls r0, r0, #2 - adds r1, r7, #0 - adds r1, #0x40 - ldrb r2, [r4] - bl sub_0807B7D8 - ldr r0, _080831DC @ =0x00000376 - adds r1, r7, #0 - adds r1, #0x41 - ldrb r2, [r4] - bl sub_0807B7D8 - ldr r0, _080831E0 @ =0x00000375 - adds r1, r7, #0 - adds r1, #0x42 - ldrb r2, [r4] - bl sub_0807B7D8 - movs r0, #0xdc - lsls r0, r0, #2 - adds r1, r7, #0 - adds r1, #0x80 - ldrb r2, [r4] - bl sub_0807B7D8 - ldr r0, _080831E4 @ =0x00000373 - adds r1, r7, #0 - adds r1, #0x81 - ldrb r2, [r4] - bl sub_0807B7D8 - ldr r0, _080831E8 @ =0x00000371 - adds r1, r7, #0 - adds r1, #0x82 -_080831CA: - ldrb r2, [r4] - bl sub_0807B7D8 - b _080832BA - .align 2, 0 -_080831D4: .4byte 0x00000372 -_080831D8: .4byte 0x0000036F -_080831DC: .4byte 0x00000376 -_080831E0: .4byte 0x00000375 -_080831E4: .4byte 0x00000373 -_080831E8: .4byte 0x00000371 -_080831EC: - mov r1, sb - ldr r0, [r1, #0x68] - mov r4, sb - adds r4, #0x38 - ldrb r2, [r4] - adds r1, r7, #0 - bl sub_0807B7D8 - ldr r5, _080832C8 @ =0x00000372 - adds r1, r7, #1 - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_0807B7D8 - adds r1, r7, #2 - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_0807B7D8 - ldr r0, _080832CC @ =0x0000036F - adds r1, r7, #3 - ldrb r2, [r4] - bl sub_0807B7D8 - movs r2, #0xdd - lsls r2, r2, #2 - mov r8, r2 - adds r1, r7, #0 - adds r1, #0x40 - ldrb r2, [r4] - mov r0, r8 - bl sub_0807B7D8 - adds r5, #4 - adds r1, r7, #0 - adds r1, #0x41 - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_0807B7D8 - adds r1, r7, #0 - adds r1, #0x42 - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_0807B7D8 - ldr r6, _080832D0 @ =0x00000375 - adds r1, r7, #0 - adds r1, #0x43 - ldrb r2, [r4] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r7, #0 - adds r1, #0x80 - ldrb r2, [r4] - mov r0, r8 - bl sub_0807B7D8 - adds r1, r7, #0 - adds r1, #0x81 - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_0807B7D8 - adds r1, r7, #0 - adds r1, #0x82 - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_0807B7D8 - adds r1, r7, #0 - adds r1, #0x83 - ldrb r2, [r4] - adds r0, r6, #0 - bl sub_0807B7D8 - movs r0, #0xdc - lsls r0, r0, #2 - adds r1, r7, #0 - adds r1, #0xc0 - ldrb r2, [r4] - bl sub_0807B7D8 - subs r5, #3 - adds r1, r7, #0 - adds r1, #0xc1 - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_0807B7D8 - adds r1, r7, #0 - adds r1, #0xc2 - ldrb r2, [r4] - adds r0, r5, #0 - bl sub_0807B7D8 - ldr r0, _080832D4 @ =0x00000371 - adds r1, r7, #0 - adds r1, #0xc3 - ldrb r2, [r4] - bl sub_0807B7D8 -_080832BA: - mov r0, sb - bl DeleteEntity -_080832C0: - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080832C8: .4byte 0x00000372 -_080832CC: .4byte 0x0000036F -_080832D0: .4byte 0x00000375 -_080832D4: .4byte 0x00000371 - - thumb_func_start sub_080832D8 -sub_080832D8: @ 0x080832D8 - push {lr} - adds r3, r0, #0 - adds r2, r1, #0 - adds r2, #0x38 - ldrb r0, [r2] - cmp r0, #2 - beq _080832FC - ldrb r1, [r1, #0x15] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _080832F6 - ldrb r2, [r2] - movs r0, #0x21 - b _0808330A -_080832F6: - ldrb r2, [r2] - movs r0, #0x20 - b _0808330A -_080832FC: - ldrb r1, [r1, #0x15] - movs r0, #8 - ands r0, r1 - cmp r0, #0 - beq _08083312 - ldrb r2, [r2] - movs r0, #0x2f -_0808330A: - adds r1, r3, #0 - bl sub_0807B7D8 - b _0808331C -_08083312: - ldrb r2, [r2] - movs r0, #0x2e - adds r1, r3, #0 - bl sub_0807B7D8 -_0808331C: - pop {pc} - .align 2, 0 diff --git a/data/const/object/blockPushed.s b/data/const/object/blockPushed.s deleted file mode 100644 index e0f47781..00000000 --- a/data/const/object/blockPushed.s +++ /dev/null @@ -1,27 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_0811F624:: @ 0811F624 - .4byte sub_08082EB4 - .4byte sub_08083094 - -gUnk_0811F62C:: @ 0811F62C - .incbin "blockPushed/gUnk_0811F62C.bin" - -gUnk_0811F634:: @ 0811F634 - .incbin "blockPushed/gUnk_0811F634.bin" - -gUnk_0811F63C:: @ 0811F63C - .incbin "blockPushed/gUnk_0811F63C.bin" - -gUnk_0811F644:: @ 0811F644 - .incbin "blockPushed/gUnk_0811F644.bin" - -gUnk_0811F64C:: @ 0811F64C - .4byte gUnk_0811F62C - .4byte gUnk_0811F634 - .4byte gUnk_0811F63C - .4byte gUnk_0811F644 diff --git a/src/manager/manager12.c b/src/manager/manager12.c index 24b2e630..9bc1eb23 100644 --- a/src/manager/manager12.c +++ b/src/manager/manager12.c @@ -28,7 +28,6 @@ void sub_08059B18(void); bool32 sub_08059C8C(Manager12*, u32, u8*, u16*); -extern void sub_0807B9B8(s32, s32, s32); extern u32 gUnk_086E8460; typedef struct { diff --git a/src/object/blockPushed.c b/src/object/blockPushed.c new file mode 100644 index 00000000..0d0e09be --- /dev/null +++ b/src/object/blockPushed.c @@ -0,0 +1,173 @@ +/** + * @file blockPushed.c + * @ingroup Objects + * + * @brief Block Pushed object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u32 unk_68; +} BlockPushedEntity; + +extern void (*const gUnk_0811F624[])(BlockPushedEntity*); +extern const Hitbox* const gUnk_0811F64C[]; + +void sub_080832D8(u32, BlockPushedEntity*); +void sub_080830B8(BlockPushedEntity*); + +void BlockPushed(BlockPushedEntity* this) { + gUnk_0811F624[super->action](this); +} + +void sub_08082EB4(BlockPushedEntity* this) { + u16 tmp; + u32 pos; + + if (gRoomControls.area == 0x11) { + sub_080AE068(super); + if (LoadFixedGFX(super, 0x1c1) == 0) { + super->spriteSettings.draw = 0; + return; + } + super->spriteSettings.draw = 1; + } + super->action = 1; + super->actionDelay = 0x20; + super->speed = 0x80; + super->spritePriority.b0 = 6; + pos = COORD_TO_TILE(super); + tmp = super->type * 8; + super->x.HALF.HI += tmp; + super->y.HALF.HI += tmp; + super->hitbox = (Hitbox*)gUnk_0811F64C[super->type]; + this->unk_68 = GetTileType(pos, (u32)super->collisionLayer); + switch (super->type) { + case 0: + sub_080832D8(pos, this); + break; + case 1: + sub_080832D8(pos, this); + sub_080832D8(pos + 1, this); + sub_080832D8(pos + 0x40, this); + sub_080832D8(pos + 0x41, this); + break; + case 2: + sub_080832D8(pos, this); + sub_080832D8(pos + 1, this); + sub_080832D8(pos + 2, this); + sub_080832D8(pos + 0x40, this); + sub_080832D8(pos + 0x41, this); + sub_080832D8(pos + 0x42, this); + sub_080832D8(pos + 0x80, this); + sub_080832D8(pos + 0x81, this); + sub_080832D8(pos + 0x82, this); + break; + default: + sub_080832D8(pos, this); + sub_080832D8(pos + 1, this); + sub_080832D8(pos + 2, this); + sub_080832D8(pos + 3, this); + sub_080832D8(pos + 0x40, this); + sub_080832D8(pos + 0x41, this); + sub_080832D8(pos + 0x42, this); + sub_080832D8(pos + 0x43, this); + sub_080832D8(pos + 0x80, this); + sub_080832D8(pos + 0x81, this); + sub_080832D8(pos + 0x82, this); + sub_080832D8(pos + 0x83, this); + sub_080832D8(pos + 0xc0, this); + sub_080832D8(pos + 0xc1, this); + sub_080832D8(pos + 0xc2, this); + sub_080832D8(pos + 0xc3, this); + break; + } + EnqueueSFX(SFX_10F); +} + +void sub_08083094(BlockPushedEntity* this) { + LinearMoveUpdate(super); + sub_0800445C(super); + if (--super->actionDelay == 0) { + sub_080830B8(this); + } +} + +void sub_080830B8(BlockPushedEntity* this) { + s32 offset = super->type * 8; + u32 pos = COORD_TO_TILE_OFFSET(super, offset, offset); + + switch (super->type) { + case 0: + if (sub_0800442E(super)) { + return; + } + sub_0807B7D8(0x365, pos, super->collisionLayer); + break; + case 1: + sub_0807B7D8(this->unk_68, pos, super->collisionLayer); + sub_0807B7D8(0x36f, pos + 1, super->collisionLayer); + sub_0807B7D8(0x370, pos + 0x40, super->collisionLayer); + sub_0807B7D8(0x371, pos + 0x41, super->collisionLayer); + break; + case 2: + sub_0807B7D8(this->unk_68, pos, super->collisionLayer); + sub_0807B7D8(0x372, pos + 1, super->collisionLayer); + sub_0807B7D8(0x36f, pos + 2, super->collisionLayer); + sub_0807B7D8(0x374, pos + 0x40, super->collisionLayer); + sub_0807B7D8(0x376, pos + 0x41, super->collisionLayer); + sub_0807B7D8(0x375, pos + 0x42, super->collisionLayer); + sub_0807B7D8(0x370, pos + 0x80, super->collisionLayer); + sub_0807B7D8(0x373, pos + 0x81, super->collisionLayer); + sub_0807B7D8(0x371, pos + 0x82, super->collisionLayer); + break; + default: + sub_0807B7D8(this->unk_68, pos, super->collisionLayer); + sub_0807B7D8(0x372, pos + 1, super->collisionLayer); + sub_0807B7D8(0x372, pos + 2, super->collisionLayer); + sub_0807B7D8(0x36f, pos + 3, super->collisionLayer); + sub_0807B7D8(0x374, pos + 0x40, super->collisionLayer); + sub_0807B7D8(0x376, pos + 0x41, super->collisionLayer); + sub_0807B7D8(0x376, pos + 0x42, super->collisionLayer); + sub_0807B7D8(0x375, pos + 0x43, super->collisionLayer); + sub_0807B7D8(0x374, pos + 0x80, super->collisionLayer); + sub_0807B7D8(0x376, pos + 0x81, super->collisionLayer); + sub_0807B7D8(0x376, pos + 0x82, super->collisionLayer); + sub_0807B7D8(0x375, pos + 0x83, super->collisionLayer); + sub_0807B7D8(0x370, pos + 0xc0, super->collisionLayer); + sub_0807B7D8(0x373, pos + 0xc1, super->collisionLayer); + sub_0807B7D8(0x373, pos + 0xc2, super->collisionLayer); + sub_0807B7D8(0x371, pos + 0xc3, super->collisionLayer); + break; + } + DeleteEntity(super); +} + +void sub_080832D8(u32 param_1, BlockPushedEntity* this) { + if (super->collisionLayer != 2) { + if ((super->direction & 8) != 0) { + sub_0807B7D8(0x21, param_1, super->collisionLayer); + } else { + sub_0807B7D8(0x20, param_1, super->collisionLayer); + } + } else { + if ((super->direction & 8) != 0) { + sub_0807B7D8(0x2f, param_1, super->collisionLayer); + } else { + sub_0807B7D8(0x2e, param_1, super->collisionLayer); + } + } +} + +void (*const gUnk_0811F624[])(BlockPushedEntity*) = {sub_08082EB4, sub_08083094, }; +const Hitbox gUnk_0811F62C = { 0, 0, { 0, 0, 0, 0 }, 5, 4 }; +const Hitbox gUnk_0811F634 = { 0, 0, { 0, 0, 0, 0 }, 13, 12 }; +const Hitbox gUnk_0811F63C = { 0, 0, { 0, 0, 0, 0 }, 21, 20 }; +const Hitbox gUnk_0811F644 = { 0, 0, { 0, 0, 0, 0 }, 29, 28 }; + +const Hitbox* const gUnk_0811F64C[] = {&gUnk_0811F62C, &gUnk_0811F634, &gUnk_0811F63C, &gUnk_0811F644, }; diff --git a/src/object/jailBars.c b/src/object/jailBars.c index 84b44b61..7a36f0e2 100644 --- a/src/object/jailBars.c +++ b/src/object/jailBars.c @@ -3,9 +3,9 @@ #include "flags.h" #include "room.h" #include "sound.h" +#include "functions.h" extern void sub_080A0960(Entity*, u32); -extern void sub_0801AF18(u8*, u32, u32); extern void (*const gUnk_08124950[])(Entity*); extern u8 gUnk_08124960; diff --git a/src/object/mask.c b/src/object/mask.c index 596cb3a7..1cb59357 100644 --- a/src/object/mask.c +++ b/src/object/mask.c @@ -3,10 +3,6 @@ extern void (*MaskActionFuncs[])(Entity*); -extern void sub_08000148(u16, u16, u32); - -extern void sub_0805457C(Entity*, s32); - void Mask(Entity* this) { MaskActionFuncs[this->action](this); } @@ -79,7 +75,7 @@ void sub_08092A94(Entity* this) { // Presumably, make the mask fall SetTile(this->field_0x7c.HALF_U.LO, this->field_0x7c.HALF_U.HI, 1); - sub_08000148(this->field_0x7a.HWORD, this->field_0x7c.HALF.HI, 1); + sub_08000148(this->field_0x7a.HWORD, (u16)this->field_0x7c.HALF.HI, 1); this->action = 2; diff --git a/src/object/object49.c b/src/object/object49.c index c65b41bf..aaecd05b 100644 --- a/src/object/object49.c +++ b/src/object/object49.c @@ -5,7 +5,6 @@ static void sub_0808F2B0(Entity*); void sub_0808F14C(Entity*); void sub_0808F244(Entity*); -extern void sub_0806FCF4(Entity*, u32, u32, u32); extern void sub_0808F5EC(Entity*); extern void (*const gUnk_08121E5C[])(Entity*); diff --git a/src/object/octorokBossObject.c b/src/object/octorokBossObject.c index cd527a72..ef2f279a 100644 --- a/src/object/octorokBossObject.c +++ b/src/object/octorokBossObject.c @@ -2,8 +2,6 @@ #include "object.h" #include "game.h" -extern void sub_0807B9B8(s32, s32, s32); - extern void (*const OctorokBossObject_Actions[])(Entity*); extern const u16 gUnk_0812384C[]; extern const u16 gUnk_0812388C[];