From fb9174c0d3ddd1b7544670257e38c85bbb612adf Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sun, 30 Jan 2022 00:35:09 +0100 Subject: [PATCH] Decompile most of PullableMushroom --- .../pullableMushroom/sub_0808ABC4.inc | 155 +++ .../pullableMushroom/sub_0808ACEC.inc | 75 ++ .../pullableMushroom/sub_0808B0BC.inc | 85 ++ .../pullableMushroom/sub_0808B168.inc | 68 + asm/object/pullableMushroom.s | 1132 ----------------- assets/assets.json | 501 +------- data/const/object/pullableMushroom.s | 47 - linker.ld | 32 +- src/object/bigIceBlock.c | 2 +- src/object/blockPushed.c | 12 +- src/object/pullableMushroom.c | 316 +++++ 11 files changed, 727 insertions(+), 1698 deletions(-) create mode 100644 asm/non_matching/pullableMushroom/sub_0808ABC4.inc create mode 100644 asm/non_matching/pullableMushroom/sub_0808ACEC.inc create mode 100644 asm/non_matching/pullableMushroom/sub_0808B0BC.inc create mode 100644 asm/non_matching/pullableMushroom/sub_0808B168.inc delete mode 100644 asm/object/pullableMushroom.s delete mode 100644 data/const/object/pullableMushroom.s create mode 100644 src/object/pullableMushroom.c diff --git a/asm/non_matching/pullableMushroom/sub_0808ABC4.inc b/asm/non_matching/pullableMushroom/sub_0808ABC4.inc new file mode 100644 index 00000000..254d7866 --- /dev/null +++ b/asm/non_matching/pullableMushroom/sub_0808ABC4.inc @@ -0,0 +1,155 @@ + .syntax unified + push {r4, r5, lr} + adds r4, r0, #0 + ldr r0, [r4, #0x50] + ldrh r1, [r0, #0xc] + ldr r0, _0808AC38 @ =0x00000201 + cmp r1, r0 + bne _0808ABD6 + bl DeleteThisEntity +_0808ABD6: + ldr r0, [r4, #0x54] + ldr r1, [r4, #0x50] + bl sub_0808B1F0 + adds r2, r0, #0 + cmp r2, #7 + bhi _0808ABE6 + movs r2, #0 +_0808ABE6: + ldrb r3, [r4, #0x14] + lsls r1, r3, #2 + ldr r0, _0808AC3C @ =gUnk_081211CC + adds r5, r1, r0 + cmp r2, #0x1f + bhi _0808AC5A + cmp r2, #0 + beq _0808ABF8 + subs r2, #6 +_0808ABF8: + ldrh r0, [r5] + str r0, [r4, #0x70] + ldr r1, [r4, #0x50] + movs r0, #2 + ldrsb r0, [r5, r0] + ldrh r3, [r1, #0x2e] + adds r0, r0, r3 + strh r0, [r4, #0x2e] + movs r0, #3 + ldrsb r0, [r5, r0] + ldrh r1, [r1, #0x32] + adds r0, r0, r1 + strh r0, [r4, #0x32] + ldrb r1, [r4, #0x14] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0808AC40 + lsls r1, r2, #4 + movs r0, #0x80 + lsls r0, r0, #2 + subs r0, r0, r1 + str r0, [r4, #0x74] + lsls r0, r2, #3 + movs r1, #0x90 + lsls r1, r1, #1 + adds r0, r0, r1 + str r0, [r4, #0x78] + movs r0, #0xf + strb r0, [r4, #0x1e] + b _0808ACDE + .align 2, 0 +_0808AC38: .4byte 0x00000201 +_0808AC3C: .4byte gUnk_081211CC +_0808AC40: + lsls r1, r2, #4 + movs r0, #0x80 + lsls r0, r0, #2 + subs r0, r0, r1 + str r0, [r4, #0x78] + lsls r0, r2, #3 + movs r3, #0x90 + lsls r3, r3, #1 + adds r0, r0, r3 + str r0, [r4, #0x74] + movs r0, #0x14 + strb r0, [r4, #0x1e] + b _0808ACDE +_0808AC5A: + movs r0, #1 + ands r3, r0 + cmp r3, #0 + beq _0808AC9E + adds r1, r2, #0 + subs r1, #0x20 + lsls r1, r1, #2 + adds r0, #0xff + subs r0, r0, r1 + str r0, [r4, #0x74] + lsls r0, r2, #3 + movs r1, #0xa0 + lsls r1, r1, #1 + adds r0, r0, r1 + str r0, [r4, #0x78] + movs r0, #0x10 + strb r0, [r4, #0x1e] + ldrb r1, [r4, #0x14] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0808AC92 + ldr r0, [r4, #0x50] + lsrs r1, r2, #1 + ldrh r0, [r0, #0x2e] + subs r0, r0, r1 + strh r0, [r4, #0x2e] + b _0808ACDE +_0808AC92: + ldr r1, [r4, #0x50] + lsrs r0, r2, #1 + ldrh r1, [r1, #0x2e] + adds r0, r0, r1 + strh r0, [r4, #0x2e] + b _0808ACDE +_0808AC9E: + adds r1, r2, #0 + subs r1, #0x20 + lsls r1, r1, #2 + movs r0, #0x80 + lsls r0, r0, #1 + subs r0, r0, r1 + str r0, [r4, #0x78] + lsls r0, r2, #3 + movs r3, #0xa0 + lsls r3, r3, #1 + adds r0, r0, r3 + str r0, [r4, #0x74] + movs r0, #0x15 + strb r0, [r4, #0x1e] + ldrb r1, [r4, #0x14] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0808ACCE + ldr r0, [r4, #0x50] + lsrs r1, r2, #1 + ldrh r0, [r0, #0x32] + adds r1, r1, r0 + b _0808ACD6 +_0808ACCE: + ldr r0, [r4, #0x50] + lsrs r2, r2, #1 + ldrh r1, [r0, #0x32] + subs r1, r1, r2 +_0808ACD6: + movs r0, #3 + ldrsb r0, [r5, r0] + adds r0, r0, r1 + strh r0, [r4, #0x32] +_0808ACDE: + ldr r1, [r4, #0x74] + ldr r2, [r4, #0x78] + ldr r3, [r4, #0x70] + adds r0, r4, #0 + bl sub_0805EC9C + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/pullableMushroom/sub_0808ACEC.inc b/asm/non_matching/pullableMushroom/sub_0808ACEC.inc new file mode 100644 index 00000000..aed579ab --- /dev/null +++ b/asm/non_matching/pullableMushroom/sub_0808ACEC.inc @@ -0,0 +1,75 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + adds r0, #0x58 + ldrb r0, [r0] + cmp r0, #0 + beq _0808AD00 + adds r0, r4, #0 + movs r1, #0 + bl InitializeAnimation +_0808AD00: + adds r0, r4, #0 + adds r0, #0x41 + ldrb r1, [r0] + movs r0, #0x7f + ands r0, r1 + subs r0, #4 + cmp r0, #0x12 + bhi _0808AD92 + lsls r0, r0, #2 + ldr r1, _0808AD1C @ =_0808AD20 + adds r0, r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0808AD1C: .4byte _0808AD20 +_0808AD20: @ jump table + .4byte _0808AD6C @ case 0 + .4byte _0808AD6C @ case 1 + .4byte _0808AD6C @ case 2 + .4byte _0808AD92 @ case 3 + .4byte _0808AD6C @ case 4 + .4byte _0808AD6C @ case 5 + .4byte _0808AD6C @ case 6 + .4byte _0808AD6C @ case 7 + .4byte _0808AD6C @ case 8 + .4byte _0808AD6C @ case 9 + .4byte _0808AD92 @ case 10 + .4byte _0808AD92 @ case 11 + .4byte _0808AD6C @ case 12 + .4byte _0808AD6C @ case 13 + .4byte _0808AD6C @ case 14 + .4byte _0808AD88 @ case 15 + .4byte _0808AD6C @ case 16 + .4byte _0808AD92 @ case 17 + .4byte _0808AD6C @ case 18 +_0808AD6C: + ldrb r1, [r4, #0x10] + movs r0, #0x7f + ands r0, r1 + strb r0, [r4, #0x10] + adds r0, r4, #0 + adds r0, #0x3e + ldrb r0, [r0] + bl sub_0806F5A4 + strb r0, [r4, #0x14] + movs r0, #2 + strb r0, [r4, #0xd] + strb r0, [r4, #0xe] + b _0808AD9E +_0808AD88: + movs r1, #0 + movs r0, #3 + strb r0, [r4, #0xc] + strb r1, [r4, #0xd] + b _0808AD9E +_0808AD92: + movs r0, #0 + strb r0, [r4, #0xf] + strb r0, [r4, #0xe] + adds r0, r4, #0 + bl sub_08078930 +_0808AD9E: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/pullableMushroom/sub_0808B0BC.inc b/asm/non_matching/pullableMushroom/sub_0808B0BC.inc new file mode 100644 index 00000000..11b0d898 --- /dev/null +++ b/asm/non_matching/pullableMushroom/sub_0808B0BC.inc @@ -0,0 +1,85 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + sub sp, #0x88 + adds r5, r0, #0 + ldr r1, [r5, #0x50] + bl sub_0808B1F0 + adds r7, r0, #0 + ldrb r0, [r5, #0xa] + cmp r0, #0 + beq _0808B0D6 + cmp r0, #1 + beq _0808B0DE + b _0808B162 +_0808B0D6: + adds r0, r5, #0 + bl GetNextFrame + b _0808B162 +_0808B0DE: + ldr r6, _0808B148 @ =gPlayerEntity + ldrb r0, [r6, #0x14] + movs r1, #0xe + ands r1, r0 + ldr r0, _0808B14C @ =gUnk_08126EE4 + adds r1, r1, r0 + mov r2, sp + movs r0, #0 + ldrsb r0, [r1, r0] + ldrh r3, [r6, #0x2e] + adds r0, r0, r3 + strh r0, [r2, #0x2e] + movs r0, #1 + ldrsb r0, [r1, r0] + ldrh r1, [r6, #0x32] + adds r0, r0, r1 + strh r0, [r2, #0x32] + mov r0, sp + adds r1, r5, #0 + movs r2, #7 + movs r3, #7 + bl sub_0800419C + cmp r0, #0 + beq _0808B154 + ldrb r0, [r6, #0xc] + cmp r0, #1 + bne _0808B162 + ldr r4, _0808B150 @ =gPlayerState + adds r0, r4, #0 + adds r0, #0x26 + ldrb r0, [r0] + cmp r0, #0 + bne _0808B162 + movs r0, #0x1b + strb r0, [r4, #0xc] + adds r0, r4, #0 + adds r0, #0x38 + strb r7, [r0] + ldrb r0, [r5, #0x15] + movs r1, #0x10 + eors r0, r1 + adds r1, r4, #0 + adds r1, #0x39 + strb r0, [r1] + ldr r0, [r5, #0x50] + adds r1, r6, #0 + bl sub_0808B1F0 + adds r1, r4, #0 + adds r1, #0x3a + strb r0, [r1] + b _0808B162 + .align 2, 0 +_0808B148: .4byte gPlayerEntity +_0808B14C: .4byte gUnk_08126EE4 +_0808B150: .4byte gPlayerState +_0808B154: + movs r0, #0x40 + strh r0, [r5, #0x24] + cmp r7, #0x3f + bhi _0808B162 + adds r0, r5, #0 + bl LinearMoveUpdate +_0808B162: + add sp, #0x88 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/pullableMushroom/sub_0808B168.inc b/asm/non_matching/pullableMushroom/sub_0808B168.inc new file mode 100644 index 00000000..81551053 --- /dev/null +++ b/asm/non_matching/pullableMushroom/sub_0808B168.inc @@ -0,0 +1,68 @@ + .syntax unified + push {r4, r5, lr} + adds r3, r0, #0 + cmp r1, #0 + beq _0808B188 + ldrb r0, [r3, #0x14] + movs r1, #2 + eors r1, r0 + lsls r1, r1, #1 + ldr r0, _0808B184 @ =gUnk_081211F4 + adds r2, r1, r0 + adds r1, r2, #1 + ldr r4, [r3, #0x50] + adds r5, r4, #0 + b _0808B1CE + .align 2, 0 +_0808B184: .4byte gUnk_081211F4 +_0808B188: + ldrb r1, [r3, #0x14] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0808B1B8 + ldr r5, _0808B1AC @ =gPlayerEntity + ldr r4, [r3, #0x50] + ldrb r1, [r3, #0x14] + lsls r2, r1, #1 + ldr r0, _0808B1B0 @ =gUnk_081211FC + adds r2, r2, r0 + movs r0, #2 + eors r1, r0 + lsls r1, r1, #1 + ldr r0, _0808B1B4 @ =gUnk_081211F5 + adds r1, r1, r0 + b _0808B1CE + .align 2, 0 +_0808B1AC: .4byte gPlayerEntity +_0808B1B0: .4byte gUnk_081211FC +_0808B1B4: .4byte gUnk_081211F4+1 +_0808B1B8: + ldr r5, [r3, #0x50] + ldr r4, _0808B1E4 @ =gPlayerEntity + movs r0, #2 + eors r0, r1 + lsls r0, r0, #1 + ldr r1, _0808B1E8 @ =gUnk_081211F4 + adds r2, r0, r1 + ldrb r0, [r3, #0x14] + lsls r0, r0, #1 + ldr r1, _0808B1EC @ =gUnk_081211FD + adds r1, r0, r1 +_0808B1CE: + movs r0, #0 + ldrsb r0, [r2, r0] + ldrh r5, [r5, #0x2e] + adds r0, r0, r5 + strh r0, [r3, #0x2e] + movs r0, #0 + ldrsb r0, [r1, r0] + ldrh r4, [r4, #0x32] + adds r0, r0, r4 + strh r0, [r3, #0x32] + pop {r4, r5, pc} + .align 2, 0 +_0808B1E4: .4byte gPlayerEntity +_0808B1E8: .4byte gUnk_081211F4 +_0808B1EC: .4byte gUnk_081211FC+1 + .syntax divided diff --git a/asm/object/pullableMushroom.s b/asm/object/pullableMushroom.s deleted file mode 100644 index b5eb0457..00000000 --- a/asm/object/pullableMushroom.s +++ /dev/null @@ -1,1132 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start PullableMushroom -PullableMushroom: @ 0x0808A9FC - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0808AA18 @ =gUnk_081211A4 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r4, #0x41 - movs r0, #0 - strb r0, [r4] - pop {r4, pc} - .align 2, 0 -_0808AA18: .4byte gUnk_081211A4 - - thumb_func_start sub_0808AA1C -sub_0808AA1C: @ 0x0808AA1C - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - movs r4, #0 - movs r6, #1 - strb r6, [r5, #0xc] - bl AreaIsDungeon - cmp r0, #0 - bne _0808AA36 - adds r0, r5, #0 - movs r1, #0 - bl ChangeObjPalette -_0808AA36: - ldrb r0, [r5, #0xa] - cmp r0, #1 - beq _0808AACC - cmp r0, #1 - bgt _0808AA46 - cmp r0, #0 - beq _0808AA4C - b _0808AB5E -_0808AA46: - cmp r0, #2 - beq _0808AB20 - b _0808AB5E -_0808AA4C: - adds r2, r5, #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] - ldr r0, _0808AAC0 @ =gUnk_080FD224 - str r0, [r5, #0x48] - strb r6, [r5, #0x16] - ldr r0, _0808AAC4 @ =0x00004022 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _0808AAC8 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r7, #0x32 - ldrsh r2, [r5, r7] - ldrh r3, [r3, #8] - subs r2, r2, r3 - asrs r2, r2, #4 - ands r2, r4 - lsls r2, r2, #6 - orrs r1, r2 - adds r2, r5, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - adds r0, r5, #0 - adds r0, #0x45 - strb r6, [r0] - adds r1, r5, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #3 - movs r0, #0x6e - strb r0, [r1] - subs r1, #4 - movs r0, #0xe - strb r0, [r1] - strb r6, [r5, #0x1c] - ldrb r0, [r5, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - adds r1, r5, #0 - adds r1, #0x63 - movs r0, #4 - strb r0, [r1] - b _0808AB5E - .align 2, 0 -_0808AAC0: .4byte gUnk_080FD224 -_0808AAC4: .4byte 0x00004022 -_0808AAC8: .4byte gRoomControls -_0808AACC: - adds r2, r5, #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] - ldrb r0, [r5, #0xb] - cmp r0, #0 - beq _0808AB10 - ldr r0, _0808AB1C @ =gUnk_080FD224 - str r0, [r5, #0x48] - ldrb r0, [r5, #0x10] - movs r1, #0x80 - orrs r0, r1 - strb r0, [r5, #0x10] - adds r0, r5, #0 - adds r0, #0x45 - strb r6, [r0] - adds r1, r5, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #3 - movs r0, #0x6e - strb r0, [r1] - subs r1, #4 - movs r0, #4 - strb r0, [r1] - strb r6, [r5, #0x1c] - movs r0, #3 - strb r0, [r5, #0xc] -_0808AB10: - ldrb r1, [r5, #0x14] - adds r1, #9 - adds r0, r5, #0 - bl InitializeAnimation - b _0808AB5E - .align 2, 0 -_0808AB1C: .4byte gUnk_080FD224 -_0808AB20: - adds r2, r5, #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, [r5, #0x19] - movs r1, #3 - orrs r0, r1 - strb r0, [r5, #0x19] - ldrb r1, [r5, #0x14] - adds r0, r6, #0 - ands r0, r1 - cmp r0, #0 - beq _0808AB52 - movs r0, #0x80 - lsls r0, r0, #2 - str r0, [r5, #0x74] - movs r0, #0x80 - lsls r0, r0, #1 - str r0, [r5, #0x78] - b _0808AB5E -_0808AB52: - movs r0, #0x80 - lsls r0, r0, #2 - str r0, [r5, #0x78] - movs r0, #0x80 - lsls r0, r0, #1 - str r0, [r5, #0x74] -_0808AB5E: - adds r0, r5, #0 - bl sub_0808AB68 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0808AB68 -sub_0808AB68: @ 0x0808AB68 - push {lr} - ldr r2, _0808AB7C @ =gUnk_081211B4 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808AB7C: .4byte gUnk_081211B4 - - thumb_func_start sub_0808AB80 -sub_0808AB80: @ 0x0808AB80 - push {lr} - ldr r2, _0808AB94 @ =gUnk_081211C0 - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808AB94: .4byte gUnk_081211C0 - - thumb_func_start sub_0808AB98 -sub_0808AB98: @ 0x0808AB98 - push {lr} - adds r3, r0, #0 - ldr r2, [r3, #0x50] - ldrh r1, [r2, #0xc] - ldr r0, _0808ABB0 @ =0x00000201 - cmp r1, r0 - bne _0808ABB4 - movs r0, #0 - str r0, [r2, #0x54] - bl DeleteThisEntity - b _0808ABC2 - .align 2, 0 -_0808ABB0: .4byte 0x00000201 -_0808ABB4: - ldrb r0, [r2, #0xc] - cmp r0, #2 - bne _0808ABC2 - adds r0, r3, #0 - movs r1, #0 - bl sub_0808B168 -_0808ABC2: - pop {pc} - - thumb_func_start sub_0808ABC4 -sub_0808ABC4: @ 0x0808ABC4 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x50] - ldrh r1, [r0, #0xc] - ldr r0, _0808AC38 @ =0x00000201 - cmp r1, r0 - bne _0808ABD6 - bl DeleteThisEntity -_0808ABD6: - ldr r0, [r4, #0x54] - ldr r1, [r4, #0x50] - bl sub_0808B1F0 - adds r2, r0, #0 - cmp r2, #7 - bhi _0808ABE6 - movs r2, #0 -_0808ABE6: - ldrb r3, [r4, #0x14] - lsls r1, r3, #2 - ldr r0, _0808AC3C @ =gUnk_081211CC - adds r5, r1, r0 - cmp r2, #0x1f - bhi _0808AC5A - cmp r2, #0 - beq _0808ABF8 - subs r2, #6 -_0808ABF8: - ldrh r0, [r5] - str r0, [r4, #0x70] - ldr r1, [r4, #0x50] - movs r0, #2 - ldrsb r0, [r5, r0] - ldrh r3, [r1, #0x2e] - adds r0, r0, r3 - strh r0, [r4, #0x2e] - movs r0, #3 - ldrsb r0, [r5, r0] - ldrh r1, [r1, #0x32] - adds r0, r0, r1 - strh r0, [r4, #0x32] - ldrb r1, [r4, #0x14] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0808AC40 - lsls r1, r2, #4 - movs r0, #0x80 - lsls r0, r0, #2 - subs r0, r0, r1 - str r0, [r4, #0x74] - lsls r0, r2, #3 - movs r1, #0x90 - lsls r1, r1, #1 - adds r0, r0, r1 - str r0, [r4, #0x78] - movs r0, #0xf - strb r0, [r4, #0x1e] - b _0808ACDE - .align 2, 0 -_0808AC38: .4byte 0x00000201 -_0808AC3C: .4byte gUnk_081211CC -_0808AC40: - lsls r1, r2, #4 - movs r0, #0x80 - lsls r0, r0, #2 - subs r0, r0, r1 - str r0, [r4, #0x78] - lsls r0, r2, #3 - movs r3, #0x90 - lsls r3, r3, #1 - adds r0, r0, r3 - str r0, [r4, #0x74] - movs r0, #0x14 - strb r0, [r4, #0x1e] - b _0808ACDE -_0808AC5A: - movs r0, #1 - ands r3, r0 - cmp r3, #0 - beq _0808AC9E - adds r1, r2, #0 - subs r1, #0x20 - lsls r1, r1, #2 - adds r0, #0xff - subs r0, r0, r1 - str r0, [r4, #0x74] - lsls r0, r2, #3 - movs r1, #0xa0 - lsls r1, r1, #1 - adds r0, r0, r1 - str r0, [r4, #0x78] - movs r0, #0x10 - strb r0, [r4, #0x1e] - ldrb r1, [r4, #0x14] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0808AC92 - ldr r0, [r4, #0x50] - lsrs r1, r2, #1 - ldrh r0, [r0, #0x2e] - subs r0, r0, r1 - strh r0, [r4, #0x2e] - b _0808ACDE -_0808AC92: - ldr r1, [r4, #0x50] - lsrs r0, r2, #1 - ldrh r1, [r1, #0x2e] - adds r0, r0, r1 - strh r0, [r4, #0x2e] - b _0808ACDE -_0808AC9E: - adds r1, r2, #0 - subs r1, #0x20 - lsls r1, r1, #2 - movs r0, #0x80 - lsls r0, r0, #1 - subs r0, r0, r1 - str r0, [r4, #0x78] - lsls r0, r2, #3 - movs r3, #0xa0 - lsls r3, r3, #1 - adds r0, r0, r3 - str r0, [r4, #0x74] - movs r0, #0x15 - strb r0, [r4, #0x1e] - ldrb r1, [r4, #0x14] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0808ACCE - ldr r0, [r4, #0x50] - lsrs r1, r2, #1 - ldrh r0, [r0, #0x32] - adds r1, r1, r0 - b _0808ACD6 -_0808ACCE: - ldr r0, [r4, #0x50] - lsrs r2, r2, #1 - ldrh r1, [r0, #0x32] - subs r1, r1, r2 -_0808ACD6: - movs r0, #3 - ldrsb r0, [r5, r0] - adds r0, r0, r1 - strh r0, [r4, #0x32] -_0808ACDE: - ldr r1, [r4, #0x74] - ldr r2, [r4, #0x78] - ldr r3, [r4, #0x70] - adds r0, r4, #0 - bl sub_0805EC9C - pop {r4, r5, pc} - - thumb_func_start sub_0808ACEC -sub_0808ACEC: @ 0x0808ACEC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x58 - ldrb r0, [r0] - cmp r0, #0 - beq _0808AD00 - adds r0, r4, #0 - movs r1, #0 - bl InitializeAnimation -_0808AD00: - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - subs r0, #4 - cmp r0, #0x12 - bhi _0808AD92 - lsls r0, r0, #2 - ldr r1, _0808AD1C @ =_0808AD20 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0808AD1C: .4byte _0808AD20 -_0808AD20: @ jump table - .4byte _0808AD6C @ case 0 - .4byte _0808AD6C @ case 1 - .4byte _0808AD6C @ case 2 - .4byte _0808AD92 @ case 3 - .4byte _0808AD6C @ case 4 - .4byte _0808AD6C @ case 5 - .4byte _0808AD6C @ case 6 - .4byte _0808AD6C @ case 7 - .4byte _0808AD6C @ case 8 - .4byte _0808AD6C @ case 9 - .4byte _0808AD92 @ case 10 - .4byte _0808AD92 @ case 11 - .4byte _0808AD6C @ case 12 - .4byte _0808AD6C @ case 13 - .4byte _0808AD6C @ case 14 - .4byte _0808AD88 @ case 15 - .4byte _0808AD6C @ case 16 - .4byte _0808AD92 @ case 17 - .4byte _0808AD6C @ case 18 -_0808AD6C: - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - adds r0, #0x3e - ldrb r0, [r0] - bl sub_0806F5A4 - strb r0, [r4, #0x14] - movs r0, #2 - strb r0, [r4, #0xd] - strb r0, [r4, #0xe] - b _0808AD9E -_0808AD88: - movs r1, #0 - movs r0, #3 - strb r0, [r4, #0xc] - strb r1, [r4, #0xd] - b _0808AD9E -_0808AD92: - movs r0, #0 - strb r0, [r4, #0xf] - strb r0, [r4, #0xe] - adds r0, r4, #0 - bl sub_08078930 -_0808AD9E: - pop {r4, pc} - - thumb_func_start sub_0808ADA0 -sub_0808ADA0: @ 0x0808ADA0 - push {r4, lr} - adds r4, r0, #0 - ldr r1, [r4, #0x54] - bl sub_0808B1F0 - cmp r0, #7 - bls _0808ADB4 - ldr r1, [r4, #0x54] - cmp r1, #0 - bne _0808ADE2 -_0808ADB4: - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - movs r2, #2 - movs r0, #2 - strb r0, [r4, #0xe] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - ldrb r0, [r4, #0x14] - eors r0, r2 - strb r0, [r4, #0x14] - 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] - b _0808ADEE -_0808ADE2: - movs r0, #0x80 - lsls r0, r0, #3 - strh r0, [r1, #0x24] - ldr r0, [r4, #0x54] - bl LinearMoveUpdate -_0808ADEE: - pop {r4, pc} - - thumb_func_start sub_0808ADF0 -sub_0808ADF0: @ 0x0808ADF0 - push {r4, lr} - adds r4, r0, #0 - ldrb r2, [r4, #0x14] - adds r1, r2, #0 - adds r1, #0xd - adds r0, #0x58 - ldrb r0, [r0] - cmp r1, r0 - bne _0808AE26 - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808AE1E - movs r0, #0 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - b _0808AE80 -_0808AE1E: - adds r0, r4, #0 - bl GetNextFrame - b _0808AE80 -_0808AE26: - adds r1, r2, #1 - cmp r1, r0 - beq _0808AE54 - adds r0, r4, #0 - bl InitializeAnimation - ldrb r0, [r4, #0x14] - cmp r0, #3 - bne _0808AE42 - ldrb r1, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r1 - b _0808AE48 -_0808AE42: - ldrb r0, [r4, #0x18] - movs r1, #0x40 - orrs r0, r1 -_0808AE48: - strb r0, [r4, #0x18] - movs r0, #0x97 - lsls r0, r0, #1 - bl SoundReq - b _0808AE80 -_0808AE54: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808AE80 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0xff - bne _0808AE80 - ldrb r1, [r4, #0x14] - adds r1, #0xd - adds r0, r4, #0 - bl InitializeAnimation -_0808AE80: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_0808AE84 -sub_0808AE84: @ 0x0808AE84 - push {lr} - adds r2, r0, #0 - ldr r0, _0808AEA8 @ =gPlayerState - ldrb r0, [r0, #5] - cmp r0, #0 - bne _0808AE94 - movs r0, #6 - strb r0, [r2, #0xd] -_0808AE94: - ldr r0, _0808AEAC @ =gUnk_081211DC - ldrb r1, [r2, #0xd] - subs r1, #5 - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808AEA8: .4byte gPlayerState -_0808AEAC: .4byte gUnk_081211DC - - thumb_func_start sub_0808AEB0 -sub_0808AEB0: @ 0x0808AEB0 - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0808AF68 - ldr r1, [r4, #0x54] - adds r0, r4, #0 - bl sub_0808B1F0 - adds r6, r0, #0 - ldr r5, _0808AF10 @ =gPlayerState - adds r2, r5, #0 - adds r2, #0x90 - ldr r1, _0808AF14 @ =gUnk_081211E4 - ldrb r0, [r4, #0x14] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r1, [r2] - ldrh r0, [r0] - ands r0, r1 - cmp r0, #0 - beq _0808AF20 - adds r0, r4, #0 - bl GetNextFrame - cmp r6, #0x3f - bhi _0808AF08 - ldr r0, _0808AF18 @ =gPlayerEntity - ldrb r2, [r4, #0x15] - movs r1, #0x40 - bl sub_080044AE - ldr r0, [r4, #0x7c] - subs r0, #1 - str r0, [r4, #0x7c] - movs r1, #1 - rsbs r1, r1, #0 - cmp r0, r1 - bne _0808AF08 - movs r0, #4 - str r0, [r4, #0x7c] - ldr r0, _0808AF1C @ =0x0000012F - bl SoundReq -_0808AF08: - movs r0, #1 - strb r0, [r4, #0xf] - b _0808AFD0 - .align 2, 0 -_0808AF10: .4byte gPlayerState -_0808AF14: .4byte gUnk_081211E4 -_0808AF18: .4byte gPlayerEntity -_0808AF1C: .4byte 0x0000012F -_0808AF20: - ldrb r0, [r4, #0xf] - cmp r0, #0 - beq _0808AFD0 - ldr r2, _0808AF64 @ =gPlayerEntity - ldrb r0, [r2, #0xc] - cmp r0, #1 - bne _0808AFD0 - adds r0, r5, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _0808AFD0 - movs r0, #0x1b - strb r0, [r5, #0xc] - adds r0, r5, #0 - adds r0, #0x38 - strb r6, [r0] - ldrb r0, [r4, #0x15] - movs r1, #0x10 - eors r0, r1 - adds r1, r5, #0 - adds r1, #0x39 - strb r0, [r1] - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_0808B1F0 - adds r1, r5, #0 - adds r1, #0x3a - strb r0, [r1] - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - b _0808AFD0 - .align 2, 0 -_0808AF64: .4byte gPlayerEntity -_0808AF68: - movs r6, #1 - strb r6, [r4, #0xe] - str r6, [r4, #0x7c] - ldr r5, _0808AFC8 @ =gPlayerEntity - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - movs r1, #2 - eors r0, r1 - strb r0, [r4, #0x14] - lsls r0, r0, #3 - strb r0, [r4, #0x15] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r0, [r5, #0x18] - movs r1, #0x40 - ands r1, r0 - ldrb r2, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x14] - adds r1, #5 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - movs r1, #0 - bl sub_0808B21C - cmp r0, #0 - beq _0808AFB6 - ldr r0, [r4, #0x54] - movs r1, #0 - bl sub_0808B168 -_0808AFB6: - ldrb r1, [r4, #0x14] - adds r0, r6, #0 - ands r0, r1 - cmp r0, #0 - beq _0808AFCC - ldrh r0, [r4, #0x32] - strh r0, [r5, #0x32] - b _0808AFD0 - .align 2, 0 -_0808AFC8: .4byte gPlayerEntity -_0808AFCC: - ldrh r0, [r4, #0x2e] - strh r0, [r5, #0x2e] -_0808AFD0: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0808AFD4 -sub_0808AFD4: @ 0x0808AFD4 - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - strb r1, [r0, #0xd] - ldr r2, [r0, #0x54] - ldrb r0, [r0, #0x15] - movs r1, #0x10 - eors r0, r1 - strb r0, [r2, #0x15] - movs r0, #0x98 - lsls r0, r0, #1 - bl SoundReq - pop {pc} - - thumb_func_start sub_0808AFF0 -sub_0808AFF0: @ 0x0808AFF0 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _0808B054 @ =gUnk_081211EC - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - ldr r0, _0808B058 @ =gPlayerState - ldrb r1, [r0, #0x1c] - movs r0, #0xf - ands r0, r1 - cmp r0, #1 - bne _0808B01E - adds r0, r4, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0x13 - beq _0808B050 -_0808B01E: - ldrb r5, [r4, #0xa] - cmp r5, #1 - bne _0808B050 - ldr r0, [r4, #0x50] - strb r5, [r0, #0xc] - ldr r0, [r4, #0x50] - strb r5, [r0, #0xd] - ldr r2, [r4, #0x50] - ldrb r0, [r2, #0x15] - movs r1, #0x10 - eors r0, r1 - strb r0, [r4, #0x15] - ldrb r3, [r2, #0x10] - movs r1, #0x7f - adds r0, r1, #0 - ands r0, r3 - strb r0, [r2, #0x10] - ldrb r0, [r4, #0x10] - ands r1, r0 - strb r1, [r4, #0x10] - strb r5, [r4, #0xc] - movs r0, #0x98 - lsls r0, r0, #1 - bl SoundReq -_0808B050: - pop {r4, r5, pc} - .align 2, 0 -_0808B054: .4byte gUnk_081211EC -_0808B058: .4byte gPlayerState - - thumb_func_start sub_0808B05C -sub_0808B05C: @ 0x0808B05C - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0808B0AE - ldr r2, _0808B0B8 @ =gPlayerEntity - ldrb r0, [r2, #0x14] - lsrs r0, r0, #1 - movs r1, #2 - eors r0, r1 - strb r0, [r4, #0x14] - lsls r0, r0, #3 - strb r0, [r4, #0x15] - ldrb r0, [r2, #0x18] - movs r1, #0x40 - ands r1, r0 - ldrb r2, [r4, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - ldrb r1, [r4, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r4, #0x10] - ldrb r1, [r4, #0x14] - adds r1, #5 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - movs r1, #1 - bl sub_0808B21C - cmp r0, #0 - beq _0808B0AE - ldr r0, [r4, #0x54] - movs r1, #1 - bl sub_0808B168 -_0808B0AE: - ldrb r0, [r4, #0xd] - adds r0, #1 - strb r0, [r4, #0xd] - pop {r4, pc} - .align 2, 0 -_0808B0B8: .4byte gPlayerEntity - - thumb_func_start sub_0808B0BC -sub_0808B0BC: @ 0x0808B0BC - push {r4, r5, r6, r7, lr} - sub sp, #0x88 - adds r5, r0, #0 - ldr r1, [r5, #0x50] - bl sub_0808B1F0 - adds r7, r0, #0 - ldrb r0, [r5, #0xa] - cmp r0, #0 - beq _0808B0D6 - cmp r0, #1 - beq _0808B0DE - b _0808B162 -_0808B0D6: - adds r0, r5, #0 - bl GetNextFrame - b _0808B162 -_0808B0DE: - ldr r6, _0808B148 @ =gPlayerEntity - ldrb r0, [r6, #0x14] - movs r1, #0xe - ands r1, r0 - ldr r0, _0808B14C @ =gUnk_08126EE4 - adds r1, r1, r0 - mov r2, sp - movs r0, #0 - ldrsb r0, [r1, r0] - ldrh r3, [r6, #0x2e] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - movs r0, #1 - ldrsb r0, [r1, r0] - ldrh r1, [r6, #0x32] - adds r0, r0, r1 - strh r0, [r2, #0x32] - mov r0, sp - adds r1, r5, #0 - movs r2, #7 - movs r3, #7 - bl sub_0800419C - cmp r0, #0 - beq _0808B154 - ldrb r0, [r6, #0xc] - cmp r0, #1 - bne _0808B162 - ldr r4, _0808B150 @ =gPlayerState - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _0808B162 - movs r0, #0x1b - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x38 - strb r7, [r0] - ldrb r0, [r5, #0x15] - movs r1, #0x10 - eors r0, r1 - adds r1, r4, #0 - adds r1, #0x39 - strb r0, [r1] - ldr r0, [r5, #0x50] - adds r1, r6, #0 - bl sub_0808B1F0 - adds r1, r4, #0 - adds r1, #0x3a - strb r0, [r1] - b _0808B162 - .align 2, 0 -_0808B148: .4byte gPlayerEntity -_0808B14C: .4byte gUnk_08126EE4 -_0808B150: .4byte gPlayerState -_0808B154: - movs r0, #0x40 - strh r0, [r5, #0x24] - cmp r7, #0x3f - bhi _0808B162 - adds r0, r5, #0 - bl LinearMoveUpdate -_0808B162: - add sp, #0x88 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0808B168 -sub_0808B168: @ 0x0808B168 - push {r4, r5, lr} - adds r3, r0, #0 - cmp r1, #0 - beq _0808B188 - ldrb r0, [r3, #0x14] - movs r1, #2 - eors r1, r0 - lsls r1, r1, #1 - ldr r0, _0808B184 @ =gUnk_081211F4 - adds r2, r1, r0 - adds r1, r2, #1 - ldr r4, [r3, #0x50] - adds r5, r4, #0 - b _0808B1CE - .align 2, 0 -_0808B184: .4byte gUnk_081211F4 -_0808B188: - ldrb r1, [r3, #0x14] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0808B1B8 - ldr r5, _0808B1AC @ =gPlayerEntity - ldr r4, [r3, #0x50] - ldrb r1, [r3, #0x14] - lsls r2, r1, #1 - ldr r0, _0808B1B0 @ =gUnk_081211FC - adds r2, r2, r0 - movs r0, #2 - eors r1, r0 - lsls r1, r1, #1 - ldr r0, _0808B1B4 @ =gUnk_081211F5 - adds r1, r1, r0 - b _0808B1CE - .align 2, 0 -_0808B1AC: .4byte gPlayerEntity -_0808B1B0: .4byte gUnk_081211FC -_0808B1B4: .4byte gUnk_081211F5 -_0808B1B8: - ldr r5, [r3, #0x50] - ldr r4, _0808B1E4 @ =gPlayerEntity - movs r0, #2 - eors r0, r1 - lsls r0, r0, #1 - ldr r1, _0808B1E8 @ =gUnk_081211F4 - adds r2, r0, r1 - ldrb r0, [r3, #0x14] - lsls r0, r0, #1 - ldr r1, _0808B1EC @ =gUnk_081211FD - adds r1, r0, r1 -_0808B1CE: - movs r0, #0 - ldrsb r0, [r2, r0] - ldrh r5, [r5, #0x2e] - adds r0, r0, r5 - strh r0, [r3, #0x2e] - movs r0, #0 - ldrsb r0, [r1, r0] - ldrh r4, [r4, #0x32] - adds r0, r0, r4 - strh r0, [r3, #0x32] - pop {r4, r5, pc} - .align 2, 0 -_0808B1E4: .4byte gPlayerEntity -_0808B1E8: .4byte gUnk_081211F4 -_0808B1EC: .4byte gUnk_081211FD - - thumb_func_start sub_0808B1F0 -sub_0808B1F0: @ 0x0808B1F0 - push {lr} - adds r2, r0, #0 - adds r3, r1, #0 - ldrb r1, [r2, #0x14] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0808B20A - movs r0, #0x2e - ldrsh r1, [r2, r0] - movs r2, #0x2e - ldrsh r0, [r3, r2] - b _0808B212 -_0808B20A: - movs r0, #0x32 - ldrsh r1, [r2, r0] - movs r2, #0x32 - ldrsh r0, [r3, r2] -_0808B212: - subs r0, r1, r0 - cmp r0, #0 - bge _0808B21A - rsbs r0, r0, #0 -_0808B21A: - pop {pc} - - thumb_func_start sub_0808B21C -sub_0808B21C: @ 0x0808B21C - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r2, r4, #0 - adds r2, #0x29 - ldrb r0, [r2] - movs r1, #8 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #6 - orrs r1, r0 - strb r1, [r2] - adds r0, r4, #0 - movs r1, #0x32 - movs r2, #1 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - str r1, [r4, #0x54] - cmp r1, #0 - beq _0808B26E - ldrb r0, [r4, #0x14] - strb r0, [r1, #0x14] - ldr r1, [r4, #0x54] - ldrb r0, [r4, #0x15] - strb r0, [r1, #0x15] - ldr r3, [r4, #0x54] - ldrb r0, [r4, #0x18] - movs r1, #0x40 - ands r1, r0 - ldrb r2, [r3, #0x18] - movs r0, #0x41 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x18] - ldr r0, [r4, #0x54] - str r4, [r0, #0x50] - ldr r0, [r4, #0x54] - strb r5, [r0, #0xb] -_0808B26E: - adds r0, r4, #0 - movs r1, #0x32 - movs r2, #2 - movs r3, #0 - bl CreateObjectWithParent - adds r1, r0, #0 - str r1, [r4, #0x50] - cmp r1, #0 - bne _0808B286 - movs r0, #0 - b _0808B292 -_0808B286: - ldrb r0, [r4, #0x14] - strb r0, [r1, #0x14] - ldr r1, [r4, #0x50] - ldr r0, [r4, #0x54] - str r0, [r1, #0x54] - movs r0, #1 -_0808B292: - pop {r4, r5, pc} diff --git a/assets/assets.json b/assets/assets.json index 76ffe1f1..2d3b74ae 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -26175,81 +26175,6 @@ "size": 5, "type": "animation" }, - { - "path": "octorokBoss/gUnk_080CF070.bin", - "start": 847984, - "size": 8 - }, - { - "path": "octorokBoss/gUnk_080CF08C.bin", - "start": 848012, - "size": 32 - }, - { - "path": "octorokBoss/gUnk_080CF0D8.bin", - "start": 848088, - "size": 4 - }, - { - "path": "octorokBoss/gUnk_080CF0DC.bin", - "start": 848092, - "size": 4 - }, - { - "path": "octorokBoss/gUnk_080CF10C.bin", - "start": 848140, - "size": 4 - }, - { - "path": "octorokBoss/gUnk_080CF110.bin", - "start": 848144, - "size": 4 - }, - { - "path": "octorokBoss/gUnk_080CF114.bin", - "start": 848148, - "size": 5 - }, - { - "path": "octorokBoss/gUnk_080CF119.bin", - "start": 848153, - "size": 5 - }, - { - "path": "octorokBoss/gUnk_080CF11E.bin", - "start": 848158, - "size": 6 - }, - { - "path": "octorokBoss/gUnk_080CF134.bin", - "start": 848180, - "size": 4 - }, - { - "path": "octorokBoss/gUnk_080CF138.bin", - "start": 848184, - "size": 4 - }, - { - "path": "octorokBoss/gUnk_080CF13C.bin", - "start": 848188, - "size": 3 - }, - { - "path": "octorokBoss/gUnk_080CF13F.bin", - "start": 848191, - "size": 3 - }, - { - "path": "octorokBoss/gUnk_080CF142.bin", - "start": 848194, - "size": 5 - }, - { - "path": "octorokBoss/gUnk_080CF147.bin", - "start": 848199, - "size": 5 - }, { "path": "flyingPot/gUnk_080CF290.bin", "start": 848528, @@ -26375,16 +26300,6 @@ "size": 20, "type": "animation" }, - { - "path": "octorokGolden/gUnk_080CF490.bin", - "start": 849040, - "size": 8 - }, - { - "path": "octorokGolden/gUnk_080CF498.bin", - "start": 849048, - "size": 8 - }, { "path": "animations/gSpriteAnimations_CloudPiranha_0.bin", "start": 849200, @@ -27175,26 +27090,6 @@ "size": 21, "type": "animation" }, - { - "path": "bowMoblin/gUnk_080CFFA4.bin", - "start": 851876, - "size": 8 - }, - { - "path": "bowMoblin/gUnk_080CFFAC.bin", - "start": 851884, - "size": 16 - }, - { - "path": "bowMoblin/gUnk_080CFFBC.bin", - "start": 851900, - "size": 8 - }, - { - "path": "bowMoblin/gUnk_080CFFC4.bin", - "start": 851908, - "size": 8 - }, { "path": "animations/gSpriteAnimations_Lakitu_0.bin", "start": 852316, @@ -27771,16 +27666,6 @@ "size": 13, "type": "animation" }, - { - "path": "ballChainSoldier/gUnk_080D0728.bin", - "start": 853800, - "size": 8 - }, - { - "path": "ballChainSoldier/gUnk_080D0730.bin", - "start": 853808, - "size": 8 - }, { "path": "animations/gSpriteAnimations_BallChainSoldier_3.bin", "start": 853816, @@ -30859,70 +30744,6 @@ "start": 1034656, "size": 16 }, - { - "path": "data_080FC8A4/sCutsceneData.bin", - "start": 1034784, - "size": 80 - }, - { - "path": "data_080FC8A4/gUnk_080FCA84.bin", - "start": 1034884, - "size": 8 - }, - { - "path": "data_080FC8A4/gUnk_080FCA8C.bin", - "start": 1034892, - "size": 24 - }, - { - "path": "data_080FC8A4/gUnk_080FCAA4.bin", - "start": 1034916, - "size": 36 - }, - { - "path": "data_080FC8A4/gUnk_080FCB38.bin", - "start": 1035064, - "size": 42 - }, - { - "path": "data_080FC8A4/gUnk_080FCB62_JP.bin", - "variants": [ - "JP" - ], - "starts": { - "JP": 1034258 - }, - "size": 50 - }, - { - "path": "data_080FC8A4/gUnk_080FCB62_1_DEMO_JP.bin", - "variants": [ - "DEMO_JP" - ], - "starts": { - "DEMO_JP": 1033030 - }, - "size": 50 - }, - { - "path": "data_080FC8A4/gUnk_080FCB62_2_EU.bin", - "variants": [ - "EU" - ], - "starts": { - "EU": 1032358 - }, - "size": 50 - }, - { - "path": "data_080FC8A4/gUnk_080FCB62_3_USA-DEMO_USA.bin", - "variants": [ - "USA", - "DEMO_USA" - ], - "start": 1035106, - "size": 50 - }, { "path": "data_080FC8A4/gUnk_080FCB94.bin", "start": 1035156, @@ -42132,71 +41953,6 @@ "start": 1161680, "size": 8 }, - { - "path": "data_0811B9E0/gUnk_0811BABC.bin", - "start": 1161916, - "size": 8 - }, - { - "path": "data_0811B9E0/gUnk_0811BAC4.bin", - "start": 1161924, - "size": 16 - }, - { - "path": "data_0811B9E0/gUnk_0811BAF0.bin", - "start": 1161968, - "size": 60 - }, - { - "path": "data_0811B9E0/gUnk_0811BBBC.bin", - "start": 1162172, - "size": 6 - }, - { - "path": "data_0811B9E0/gUnk_0811BBC2.bin", - "start": 1162178, - "size": 6 - }, - { - "path": "data_0811B9E0/gUnk_0811BBC8.bin", - "start": 1162184, - "size": 6 - }, - { - "path": "data_0811B9E0/gUnk_0811BBCE.bin", - "start": 1162190, - "size": 6 - }, - { - "path": "data_0811B9E0/gUnk_0811BBEC.bin", - "start": 1162220, - "size": 12 - }, - { - "path": "data_0811B9E0/gUnk_0811BC28.bin", - "start": 1162280, - "size": 8 - }, - { - "path": "data_0811B9E0/gUnk_0811BC30.bin", - "start": 1162288, - "size": 8 - }, - { - "path": "data_0811B9E0/gUnk_0811BC38.bin", - "start": 1162296, - "size": 8 - }, - { - "path": "data_0811B9E0/gUnk_0811BC40.bin", - "start": 1162304, - "size": 8 - }, - { - "path": "data_0811B9E0/gUnk_0811BC80.bin", - "start": 1162368, - "size": 8 - }, { "path": "itemBomb/gUnk_0811BDAC.bin", "start": 1162668, @@ -42429,21 +42185,6 @@ "DEMO_JP": -2192 } }, - { - "path": "data_0811E750/gUnk_0811E750.bin", - "start": 1173328, - "size": 8 - }, - { - "path": "data_0811E750/gUnk_0811E758.bin", - "start": 1173336, - "size": 8 - }, - { - "path": "data_0811E750/gUnk_0811E760.bin", - "start": 1173344, - "size": 8 - }, { "path": "data_0811E750/gUnk_0811E7BC.bin", "start": 1173436, @@ -42951,26 +42692,6 @@ "start": 1175948, "size": 4 }, - { - "path": "blockPushed/gUnk_0811F62C.bin", - "start": 1177132, - "size": 8 - }, - { - "path": "blockPushed/gUnk_0811F634.bin", - "start": 1177140, - "size": 8 - }, - { - "path": "blockPushed/gUnk_0811F63C.bin", - "start": 1177148, - "size": 8 - }, - { - "path": "blockPushed/gUnk_0811F644.bin", - "start": 1177156, - "size": 8 - }, { "path": "animations/gSpriteAnimations_Object9_0.bin", "start": 1177440, @@ -43951,41 +43672,6 @@ "size": 17, "type": "animation" }, - { - "path": "animations/gSpriteAnimations_PressurePlate_0.bin", - "start": 1182705, - "size": 4, - "type": "animation" - }, - { - "path": "animations/gSpriteAnimations_PressurePlate_1.bin", - "start": 1182709, - "size": 4, - "type": "animation" - }, - { - "path": "animations/gSpriteAnimations_PressurePlate_2.bin", - "start": 1182713, - "size": 4, - "type": "animation" - }, - { - "path": "animations/gSpriteAnimations_PressurePlate_3.bin", - "start": 1182717, - "size": 4, - "type": "animation" - }, - { - "path": "animations/gSpriteAnimations_PressurePlate_4.bin", - "start": 1182721, - "size": 7, - "type": "animation" - }, - { - "path": "PressurePlate/gUnk_08120BEC.bin", - "start": 1182700, - "size": 5 - }, { "path": "animations/gSpriteAnimations_BigBarrel_0.bin", "start": 1182822, @@ -44038,42 +43724,12 @@ "start": 1182814, "size": 8 }, - { - "path": "barrelInside/gUnk_08120C80.bin", - "start": 1182848, - "size": 18 - }, - { - "path": "barrelInside/gUnk_08120C92.bin", - "start": 1182866, - "size": 6 - }, { "path": "animations/gSpriteAnimations_PushableStatue_0.bin", "start": 1183110, "size": 6, "type": "animation" }, - { - "path": "pushableStatue/gUnk_08120CB4.bin", - "start": 1182900, - "size": 8 - }, - { - "path": "pushableStatue/gUnk_08120CBC.bin", - "start": 1182908, - "size": 16 - }, - { - "path": "pushableStatue/gUnk_08120CCC.bin", - "start": 1182924, - "size": 160 - }, - { - "path": "pushableStatue/gUnk_08120D6C.bin", - "start": 1183084, - "size": 26 - }, { "path": "animations/gSpriteAnimations_AmbientClouds_0.bin", "start": 1183136, @@ -44238,16 +43894,6 @@ "size": 4, "type": "animation" }, - { - "path": "pushableRock/gUnk_08121088.bin", - "start": 1183880, - "size": 8 - }, - { - "path": "hittableLever/gUnk_08121180.bin", - "start": 1184128, - "size": 8 - }, { "path": "object30/gUnk_08121194.bin", "start": 1184148, @@ -44331,36 +43977,6 @@ "size": 4, "type": "animation" }, - { - "path": "pullableMushroom/gUnk_081211CC.bin", - "start": 1184204, - "size": 16 - }, - { - "path": "pullableMushroom/gUnk_081211E4.bin", - "start": 1184228, - "size": 8 - }, - { - "path": "pullableMushroom/gUnk_081211F4.bin", - "start": 1184244, - "size": 1 - }, - { - "path": "pullableMushroom/gUnk_081211F5.bin", - "start": 1184245, - "size": 7 - }, - { - "path": "pullableMushroom/gUnk_081211FC.bin", - "start": 1184252, - "size": 1 - }, - { - "path": "pullableMushroom/gUnk_081211FD.bin", - "start": 1184253, - "size": 7 - }, { "path": "animations/gSpriteAnimations_Bollard_0.bin", "start": 1184532, @@ -44756,16 +44372,6 @@ "start": 1187507, "size": 5 }, - { - "path": "pushableFurniture/gUnk_08121EE4.bin", - "start": 1187556, - "size": 12 - }, - { - "path": "pushableFurniture/gUnk_08121EF0.bin", - "start": 1187568, - "size": 8 - }, { "path": "furniture/gUnk_08122128.bin", "start": 1188136, @@ -44811,11 +44417,6 @@ "start": 1188360, "size": 16 }, - { - "path": "furniture/gUnk_08122244.bin", - "start": 1188420, - "size": 16 - }, { "path": "furniture/gUnk_08121EF8.bin", "start": 1187576, @@ -45011,21 +44612,6 @@ "size": 4, "type": "animation" }, - { - "path": "pullableLever/gUnk_081222A8.bin", - "start": 1188520, - "size": 8 - }, - { - "path": "pullableLever/gUnk_081222B8.bin", - "start": 1188536, - "size": 8 - }, - { - "path": "pullableLever/gUnk_081222C0.bin", - "start": 1188544, - "size": 4 - }, { "path": "minecart/gUnk_081223E8.bin", "start": 1188840, @@ -45896,16 +45482,6 @@ "start": 1192608, "size": 4 }, - { - "path": "pushableGrave/gUnk_081232C0.bin", - "start": 1192640, - "size": 30 - }, - { - "path": "pushableGrave/gUnk_081232DE.bin", - "start": 1192670, - "size": 6 - }, { "path": "stoneTablet/gUnk_081232EC.bin", "start": 1192684, @@ -45976,11 +45552,6 @@ "start": 1192988, "size": 6 }, - { - "path": "steam/gUnk_08123484.bin", - "start": 1193092, - "size": 16 - }, { "path": "animations/gSpriteAnimations_PushableLever_0.bin", "start": 1193140, @@ -45993,21 +45564,6 @@ "size": 23, "type": "animation" }, - { - "path": "pushableLever/gUnk_081234A0.bin", - "start": 1193120, - "size": 4 - }, - { - "path": "pushableLever/gUnk_081234A4.bin", - "start": 1193124, - "size": 8 - }, - { - "path": "pushableLever/gUnk_081234AC.bin", - "start": 1193132, - "size": 8 - }, { "path": "macroShoes/gUnk_081234F4.bin", "start": 1193204, @@ -46109,21 +45665,6 @@ "size": 23, "type": "animation" }, - { - "path": "bigPushableLever/gUnk_081236E8.bin", - "start": 1193704, - "size": 4 - }, - { - "path": "bigPushableLever/gUnk_081236EC.bin", - "start": 1193708, - "size": 8 - }, - { - "path": "bigPushableLever/gUnk_081236F4.bin", - "start": 1193716, - "size": 8 - }, { "path": "animations/gSpriteAnimations_SmallIceBlock_0.bin", "start": 1193834, @@ -46148,16 +45689,6 @@ "size": 22, "type": "animation" }, - { - "path": "smallIceBlock/gUnk_08123748.bin", - "start": 1193800, - "size": 8 - }, - { - "path": "smallIceBlock/gUnk_08123750.bin", - "start": 1193808, - "size": 26 - }, { "path": "animations/gSpriteAnimations_BigIceBlock_0.bin", "start": 1193914, @@ -46188,11 +45719,6 @@ "size": 22, "type": "animation" }, - { - "path": "bigIceBlock/gUnk_081237B0.bin", - "start": 1193904, - "size": 10 - }, { "path": "animations/gSpriteAnimations_Object86_0.bin", "start": 1193996, @@ -46205,21 +45731,6 @@ "size": 20, "type": "animation" }, - { - "path": "object87/gUnk_0812384C.bin", - "start": 1194060, - "size": 64 - }, - { - "path": "object87/gUnk_0812388C.bin", - "start": 1194124, - "size": 20 - }, - { - "path": "object87/gUnk_081238A0.bin", - "start": 1194144, - "size": 992 - }, { "path": "animations/gSpriteAnimations_MacroBook_0.bin", "start": 1195192, @@ -48333,16 +47844,6 @@ "start": 1253604, "size": 12 }, - { - "path": "data_081320FC/_DEMO_JP.bin", - "variants": [ - "DEMO_JP" - ], - "starts": { - "DEMO_JP": 1251376 - }, - "size": 1280 - }, { "offsets": { "DEMO_JP": -988 @@ -52221,4 +51722,4 @@ }, "size": 129 } -] +] \ No newline at end of file diff --git a/data/const/object/pullableMushroom.s b/data/const/object/pullableMushroom.s deleted file mode 100644 index f5544b83..00000000 --- a/data/const/object/pullableMushroom.s +++ /dev/null @@ -1,47 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081211A4:: @ 081211A4 - .4byte sub_0808AA1C - .4byte sub_0808AB68 - .4byte sub_0808AE84 - .4byte sub_0808AFF0 - -gUnk_081211B4:: @ 081211B4 - .4byte sub_0808AB80 - .4byte sub_0808AB98 - .4byte sub_0808ABC4 - -gUnk_081211C0:: @ 081211C0 - .4byte sub_0808ACEC - .4byte sub_0808ADA0 - .4byte sub_0808ADF0 - -gUnk_081211CC:: @ 081211CC - .incbin "pullableMushroom/gUnk_081211CC.bin" - -gUnk_081211DC:: @ 081211DC - .4byte sub_0808AEB0 - .4byte sub_0808AFD4 - -gUnk_081211E4:: @ 081211E4 - .incbin "pullableMushroom/gUnk_081211E4.bin" - -gUnk_081211EC:: @ 081211EC - .4byte sub_0808B05C - .4byte sub_0808B0BC - -gUnk_081211F4:: @ 081211F4 - .incbin "pullableMushroom/gUnk_081211F4.bin" - -gUnk_081211F5:: @ 081211F5 - .incbin "pullableMushroom/gUnk_081211F5.bin" - -gUnk_081211FC:: @ 081211FC - .incbin "pullableMushroom/gUnk_081211FC.bin" - -gUnk_081211FD:: @ 081211FD - .incbin "pullableMushroom/gUnk_081211FD.bin" diff --git a/linker.ld b/linker.ld index 096c61df..3f47c516 100644 --- a/linker.ld +++ b/linker.ld @@ -650,7 +650,7 @@ SECTIONS { asm/object/minishEmoticon.o(.text); src/object/pot.o(.text); asm/object/ezloCap.o(.text); - asm/object/blockPushed.o(.text); + src/object/blockPushed.o(.text); src/object/lockedDoor.o(.text); asm/object/object9.o(.text); src/object/objectA.o(.text); @@ -683,18 +683,18 @@ SECTIONS { src/object/pressurePlate.o(.text); asm/object/bigBarrel.o(.text); src/object/barrelInside.o(.text); - asm/object/pushableStatue.o(.text); + src/object/pushableStatue.o(.text); asm/object/object28.o(.text); asm/object/ambientClouds.o(.text); src/object/object2A.o(.text); asm/object/object2B.o(.text); asm/object/beanstalk.o(.text); src/object/smoke.o(.text); - asm/object/pushableRock.o(.text); + src/object/pushableRock.o(.text); src/object/hittableLever.o(.text); asm/object/object30.o(.text); src/object/frozenFlower.o(.text); - asm/object/pullableMushroom.o(.text); + src/object/pullableMushroom.o(.text); asm/object/bollard.o(.text); src/object/warpPoint.o(.text); asm/object/object35.o(.text); @@ -723,7 +723,7 @@ SECTIONS { src/object/object49.o(.text); src/object/backgroundCloud.o(.text); asm/object/object4B.o(.text); - asm/object/pushableFurniture.o(.text); + src/object/pushableFurniture.o(.text); src/object/furniture.o(.text); src/object/minishSizedEntrance.o(.text); src/object/archway.o(.text); @@ -761,7 +761,7 @@ SECTIONS { src/object/mineralWaterSource.o(.text); src/object/minishSizedArchway.o(.text); asm/object/object70.o(.text); - asm/object/pushableGrave.o(.text); + src/object/pushableGrave.o(.text); asm/object/stoneTablet.o(.text); src/object/lilypadSmall.o(.text); asm/object/object74.o(.text); @@ -778,8 +778,8 @@ SECTIONS { asm/object/object81.o(.text); src/object/bigVortex.o(.text); src/object/bigPushableLever.o(.text); - asm/object/smallIceBlock.o(.text); - asm/object/bigIceBlock.o(.text); + src/object/smallIceBlock.o(.text); + src/object/bigIceBlock.o(.text); src/object/object86.o(.text); src/object/octorokBossObject.o(.text); asm/object/macroBook.o(.text); @@ -1366,7 +1366,7 @@ SECTIONS { data/animations/object/pot.o(.rodata); data/const/object/ezloCap.o(.rodata); data/animations/object/ezloCap.o(.rodata); - data/const/object/blockPushed.o(.rodata); + src/object/blockPushed.o(.rodata); src/object/lockedDoor.o(.rodata); data/const/object/object9.o(.rodata); data/animations/object/object9.o(.rodata); @@ -1407,7 +1407,7 @@ SECTIONS { data/const/object/bigBarrel.o(.rodata); data/animations/object/bigBarrel.o(.rodata); src/object/barrelInside.o(.rodata); - data/const/object/pushableStatue.o(.rodata); + src/object/pushableStatue.o(.rodata); data/animations/object/pushableStatue.o(.rodata); data/const/object/ambientClouds.o(.rodata); data/animations/object/ambientClouds.o(.rodata); @@ -1416,12 +1416,12 @@ SECTIONS { data/const/object/beanstalk.o(.rodata); data/animations/object/beanstalk.o(.rodata); data/const/object/smoke.o(.rodata); - data/const/object/pushableRock.o(.rodata); + src/object/pushableRock.o(.rodata); data/animations/object/pushableRock.o(.rodata); src/object/hittableLever.o(.rodata); data/const/object/object30.o(.rodata); data/const/object/object31.o(.rodata); - data/const/object/pullableMushroom.o(.rodata); + src/object/pullableMushroom.o(.rodata); data/animations/object/pullableMushroom.o(.rodata); data/const/object/bollard.o(.rodata); data/animations/object/bollard.o(.rodata); @@ -1459,7 +1459,7 @@ SECTIONS { data/const/object/object49.o(.rodata); data/const/object/backgroundCloud.o(.rodata); data/const/object/object4B.o(.rodata); - data/const/object/pushableFurniture.o(.rodata); + src/object/pushableFurniture.o(.rodata); data/const/object/furniture.o(.rodata); data/animations/object/furniture.o(.rodata); src/object/furniture.o(.rodata); @@ -1503,7 +1503,7 @@ SECTIONS { data/const/object/objectOnPillar.o(.rodata); data/const/object/mineralWaterSource.o(.rodata); data/const/object/object70.o(.rodata); - data/const/object/pushableGrave.o(.rodata); + src/object/pushableGrave.o(.rodata); data/const/object/stoneTablet.o(.rodata); data/const/object/lilypadSmall.o(.rodata); data/const/object/object74.o(.rodata); @@ -1525,9 +1525,9 @@ SECTIONS { data/animations/object/bigVortex.o(.rodata); src/object/bigPushableLever.o(.rodata); data/animations/object/bigPushableLever.o(.rodata); - data/const/object/smallIceBlock.o(.rodata); + src/object/smallIceBlock.o(.rodata); data/animations/object/smallIceBlock.o(.rodata); - data/const/object/bigIceBlock.o(.rodata); + src/object/bigIceBlock.o(.rodata); data/animations/object/bigIceBlock.o(.rodata); data/const/object/object86.o(.rodata); data/animations/object/object86.o(.rodata); diff --git a/src/object/bigIceBlock.c b/src/object/bigIceBlock.c index 40ec7c0d..dc9539bb 100644 --- a/src/object/bigIceBlock.c +++ b/src/object/bigIceBlock.c @@ -328,4 +328,4 @@ void (*const BigIceBlock_Actions[])(BigIceBlockEntity*) = { }; const u16 gUnk_081237B0[] = { 256, 266, 275, 284, 293, -}; \ No newline at end of file +}; diff --git a/src/object/blockPushed.c b/src/object/blockPushed.c index 0d0e09be..f79a0ae0 100644 --- a/src/object/blockPushed.c +++ b/src/object/blockPushed.c @@ -164,10 +164,18 @@ void sub_080832D8(u32 param_1, BlockPushedEntity* this) { } } -void (*const gUnk_0811F624[])(BlockPushedEntity*) = {sub_08082EB4, sub_08083094, }; +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, }; +const Hitbox* const gUnk_0811F64C[] = { + &gUnk_0811F62C, + &gUnk_0811F634, + &gUnk_0811F63C, + &gUnk_0811F644, +}; diff --git a/src/object/pullableMushroom.c b/src/object/pullableMushroom.c new file mode 100644 index 00000000..9a878236 --- /dev/null +++ b/src/object/pullableMushroom.c @@ -0,0 +1,316 @@ +/** + * @file pullableMushroom.c + * @ingroup Objects + * + * @brief Pullable Mushroom object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" +#include "game.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[0x8]; + /*0x70*/ u32 unk_70; + /*0x74*/ u32 unk_74; + /*0x78*/ u32 unk_78; + /*0x7c*/ u32 unk_7c; +} PullableMushroomEntity; + +extern const Hitbox gUnk_080FD224; +extern const u8 gUnk_08126EE4[]; + +extern void (*const gUnk_081211A4[])(PullableMushroomEntity*); +extern void (*const gUnk_081211B4[])(PullableMushroomEntity*); +extern void (*const gUnk_081211C0[])(PullableMushroomEntity*); +extern const u16 gUnk_081211CC[]; +extern void (*const gUnk_081211DC[])(PullableMushroomEntity*); +extern const u16 gUnk_081211E4[]; +extern void (*const gUnk_081211EC[])(PullableMushroomEntity*); +extern const u8 gUnk_081211F4[]; +extern const u8 gUnk_081211FC[]; + +void sub_0808AB68(PullableMushroomEntity*); +void sub_0808B168(PullableMushroomEntity*, u32); +u32 sub_0808B1F0(PullableMushroomEntity*, Entity*); +bool32 sub_0808B21C(PullableMushroomEntity*, u32); + +void PullableMushroom(PullableMushroomEntity* this) { + gUnk_081211A4[super->action](this); + super->bitfield = 0; +} + +void sub_0808AA1C(PullableMushroomEntity* this) { + super->action = 1; + if (AreaIsDungeon() == 0) { + ChangeObjPalette(super, 0); + } + switch (super->type) { + case 0: + super->spritePriority.b0 = 4; + super->hitbox = (Hitbox*)&gUnk_080FD224; + super->field_0x16 = 1; + SetTile(0x4022, COORD_TO_TILE(super), super->collisionLayer); + super->health = 1; + super->field_0x3c = 7; + super->hitType = 0x6e; + super->flags2 = 0x0e; + super->field_0x1c = 1; + super->flags |= 0x80; + super->spriteOffsetY = 4; + break; + case 1: + super->spritePriority.b0 = 4; + if (super->type2 != 0) { + super->hitbox = (Hitbox*)&gUnk_080FD224; + super->flags |= 0x80; + super->health = 1; + super->field_0x3c = 7; + super->hitType = 0x6e; + super->flags2 = 4; + super->field_0x1c = 1; + super->action = 3; + } + InitializeAnimation(super, super->animationState + 9); + break; + case 2: + super->spritePriority.b0 = 5; + super->spriteRendering.b0 = 3; + if ((super->animationState & 1)) { + this->unk_74 = 0x200; + this->unk_78 = 0x100; + } else { + this->unk_78 = 0x200; + this->unk_74 = 0x100; + } + break; + } + sub_0808AB68(this); +} + +void sub_0808AB68(PullableMushroomEntity* this) { + gUnk_081211B4[super->type](this); +} + +void sub_0808AB80(PullableMushroomEntity* this) { + gUnk_081211C0[super->subAction](this); +} + +void sub_0808AB98(PullableMushroomEntity* this) { + if (*(u16*)&super->parent->action == 0x201) { + super->parent->child = NULL; + DeleteThisEntity(); + } else if (super->parent->action == 2) { + sub_0808B168(this, 0); + } +} + +ASM_FUNC("asm/non_matching/pullableMushroom/sub_0808ABC4.inc", void sub_0808ABC4(PullableMushroomEntity* this)) + +ASM_FUNC("asm/non_matching/pullableMushroom/sub_0808ACEC.inc", void sub_0808ACEC(PullableMushroomEntity* this)) + +void sub_0808ADA0(PullableMushroomEntity* this) { + if ((sub_0808B1F0(this, super->child) < 8) || (super->child == NULL)) { + super->subAction += 1; + super->actionDelay = 2; + super->flags |= 0x80; + super->animationState ^= 2; + super->spritePriority.b0 = 4; + } else { + super->child->speed = 0x400; + LinearMoveUpdate(super->child); + } +} + +void sub_0808ADF0(PullableMushroomEntity* this) { + if (super->animationState + 0xd == super->animIndex) { + if ((super->frame & 0x80) != 0) { + super->subAction = 0; + super->flags |= 0x80; + } else { + GetNextFrame(super); + } + } else { + if (super->animationState + 1 != super->animIndex) { + InitializeAnimation(super, super->animationState + 1); + if (super->animationState == 3) { + super->spriteSettings.flipX = 0; + } else { + super->spriteSettings.flipX = 1; + } + SoundReq(SFX_12E); + } else { + GetNextFrame(super); + if (((super->frame & 0x80) != 0) && (--super->actionDelay == 0xff)) { + InitializeAnimation(super, super->animationState + 0xd); + } + } + } +} + +void sub_0808AE84(PullableMushroomEntity* this) { + if (gPlayerState.heldObject == 0) { + super->subAction = 6; + } + gUnk_081211DC[super->subAction - 5](this); +} + +void sub_0808AEB0(PullableMushroomEntity* this) { + u32 uVar1; + if (super->actionDelay != 0) { + uVar1 = sub_0808B1F0(this, super->child); + if ((gPlayerState.field_0x90 & gUnk_081211E4[super->animationState]) != 0) { + GetNextFrame(super); + if (uVar1 < 0x40) { + sub_080044AE(&gPlayerEntity, 0x40, super->direction); + if (--this->unk_7c == 0xffffffff) { + this->unk_7c = 4; + SoundReq(SFX_12F); + } + } + super->field_0xf = 1; + + } else { + if (((super->field_0xf != 0) && (gPlayerEntity.action == 1)) && (gPlayerState.swim_state == 0)) { + gPlayerState.queued_action = 0x1b; + gPlayerState.field_0x38 = uVar1; + gPlayerState.field_0x39 = super->direction ^ 0x10; + gPlayerState.field_0x3a = sub_0808B1F0(this, &gPlayerEntity); + super->subAction++; + } + } + } else { + super->actionDelay = 1; + this->unk_7c = 1; + super->animationState = gPlayerEntity.animationState >> 1 ^ 2; + super->direction = (super->animationState << 3); + super->flags &= 0x7f; + super->spriteSettings.flipX = gPlayerEntity.spriteSettings.flipX; + InitializeAnimation(super, super->animationState + 5); + if (sub_0808B21C(this, 0)) { + sub_0808B168((PullableMushroomEntity*)super->child, 0); + } + if ((super->animationState & 1) != 0) { + gPlayerEntity.y.HALF.HI = super->y.HALF.HI; + } else { + gPlayerEntity.x.HALF.HI = super->x.HALF.HI; + } + } +} + +void sub_0808AFD4(PullableMushroomEntity* this) { + super->action = 1; + super->subAction = 1; + (super->child)->direction = super->direction ^ 0x10; + SoundReq(SFX_130); +} + +void sub_0808AFF0(PullableMushroomEntity* this) { + gUnk_081211EC[super->subAction](this); + if ((((gPlayerState.field_0x1c & 0xf) != 1) || ((super->bitfield & 0x7f) != 0x13)) && (super->type == 1)) { + (super->parent)->action = 1; + (super->parent)->subAction = 1; + super->direction = super->parent->direction ^ 0x10; + super->parent->flags &= 0x7f; + super->flags &= 0x7f; + super->action = 1; + SoundReq(SFX_130); + } +} + +void sub_0808B05C(PullableMushroomEntity* this) { + if (super->type == 0) { + super->animationState = gPlayerEntity.animationState >> 1 ^ 2; + super->direction = super->animationState << 3; + super->spriteSettings.flipX = gPlayerEntity.spriteSettings.flipX; + super->flags &= 0x7f; + InitializeAnimation(super, super->animationState + 5); + if (sub_0808B21C(this, 1)) { + sub_0808B168((PullableMushroomEntity*)super->child, 1); + } + } + super->subAction++; +} + +ASM_FUNC("asm/non_matching/pullableMushroom/sub_0808B0BC.inc", void sub_0808B0BC(PullableMushroomEntity* this)) + +ASM_FUNC("asm/non_matching/pullableMushroom/sub_0808B168.inc", + void sub_0808B168(PullableMushroomEntity* this, u32 param_2)) + +u32 sub_0808B1F0(PullableMushroomEntity* this, Entity* other) { + s32 sVar1; + s32 sVar2; + u32 uVar3; + + if ((super->animationState & 1) != 0) { + sVar1 = super->x.HALF.HI; + sVar2 = other->x.HALF.HI; + } else { + sVar1 = super->y.HALF.HI; + sVar2 = other->y.HALF.HI; + } + uVar3 = (s32)sVar1 - (s32)sVar2; + if ((s32)uVar3 < 0) { + uVar3 = -uVar3; + } + return uVar3; +} + +bool32 sub_0808B21C(PullableMushroomEntity* this, u32 param_2) { + Entity* obj; + + super->spritePriority.b0 = 6; + obj = CreateObjectWithParent(super, PULLABLE_MUSHROOM, 1, 0); + super->child = obj; + if (obj != NULL) { + obj->animationState = super->animationState; + (super->child)->direction = super->direction; + super->child->spriteSettings.flipX = super->spriteSettings.flipX; + (super->child)->parent = super; + (super->child)->type2 = (u8)param_2; + } + obj = CreateObjectWithParent(super, PULLABLE_MUSHROOM, 2, 0); + super->parent = obj; + if (obj != NULL) { + obj->animationState = super->animationState; + (super->parent)->child = super->child; + return TRUE; + } + return FALSE; +} + +void (*const gUnk_081211A4[])(PullableMushroomEntity*) = { + sub_0808AA1C, + sub_0808AB68, + sub_0808AE84, + sub_0808AFF0, +}; +void (*const gUnk_081211B4[])(PullableMushroomEntity*) = { + sub_0808AB80, + sub_0808AB98, + sub_0808ABC4, +}; +void (*const gUnk_081211C0[])(PullableMushroomEntity*) = { + sub_0808ACEC, + sub_0808ADA0, + sub_0808ADF0, +}; +const u16 gUnk_081211CC[] = { 32768, 64000, 0, 64517, 0, 0, 32768, 64763 }; +void (*const gUnk_081211DC[])(PullableMushroomEntity*) = { + sub_0808AEB0, + sub_0808AFD4, +}; +const u16 gUnk_081211E4[] = { 1024, 256, 2048, 512 }; +void (*const gUnk_081211EC[])(PullableMushroomEntity*) = { + sub_0808B05C, + sub_0808B0BC, +}; +const u8 gUnk_081211F4[] = { + 0, 8, 248, 252, 0, 248, 8, 252, +}; +const u8 gUnk_081211FC[] = { + 0, 3, 248, 252, 0, 244, 8, 252, +};