From c7c6c6010c058dc4191daaf5fde446451f88484d Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 24 Jan 2022 18:41:48 +0100 Subject: [PATCH] Decompile PushableLever --- asm/enemy/armos.s | 2 +- asm/enemy/eyegore.s | 8 +- asm/enemy/flyingPot.s | 4 +- asm/enemy/spinyBeetle.s | 4 +- asm/enemy/wizzrobeWind.s | 4 +- .../playerItem12/sub_080701F8.inc | 2 +- .../playerItem12/sub_080703BC.inc | 2 +- asm/object/bigPushableLever.s | 10 +- asm/object/bollard.s | 2 +- asm/object/bossDoor.s | 12 +- asm/object/gentariCurtains.s | 4 +- asm/object/minecartDoor.s | 2 +- asm/object/object11.s | 2 +- asm/object/object35.s | 2 +- asm/object/objectOnPillar.s | 2 +- asm/object/pushableFurniture.s | 24 +-- asm/object/pushableGrave.s | 18 +-- asm/object/pushableLever.s | 6 +- asm/object/pushableRock.s | 2 +- asm/object/pushableStatue.s | 2 +- asm/object/smallIceBlock.s | 2 +- asm/veneer.s | 4 +- include/functions.h | 1 + include/object.h | 2 +- linker.ld | 4 +- src/enemy/businessScrub.c | 3 +- src/enemy/doorMimic.c | 3 +- src/enemy/fallingBoulder.c | 3 +- src/enemy/flyingSkull.c | 5 +- src/object/button.c | 5 +- src/object/furniture.c | 3 +- src/object/lockedDoor.c | 3 +- src/object/mask.c | 5 +- src/object/metalDoor.c | 7 +- src/object/pot.c | 5 +- src/object/pushableLever.c | 148 ++++++++++++++++++ src/player.c | 3 +- 37 files changed, 229 insertions(+), 91 deletions(-) create mode 100644 src/object/pushableLever.c diff --git a/asm/enemy/armos.s b/asm/enemy/armos.s index 51aea16b..efabea78 100644 --- a/asm/enemy/armos.s +++ b/asm/enemy/armos.s @@ -887,7 +887,7 @@ sub_080307EC: @ 0x080307EC adds r6, #0x38 ldrb r1, [r6] adds r0, r4, #0 - bl sub_080001DA + bl GetTileIndex adds r5, #0x78 strh r0, [r5] ldr r0, _08030830 @ =0x00004022 diff --git a/asm/enemy/eyegore.s b/asm/enemy/eyegore.s index 14833af2..0b05ba79 100644 --- a/asm/enemy/eyegore.s +++ b/asm/enemy/eyegore.s @@ -687,14 +687,14 @@ sub_08030F00: @ 0x08030F00 adds r6, #0x38 ldrb r1, [r6] adds r0, r4, #0 - bl sub_080001DA + bl GetTileIndex adds r1, r5, #0 adds r1, #0x80 strh r0, [r1] adds r0, r4, #1 mov sl, r0 ldrb r1, [r6] - bl sub_080001DA + bl GetTileIndex adds r1, r5, #0 adds r1, #0x82 strh r0, [r1] @@ -703,7 +703,7 @@ sub_08030F00: @ 0x08030F00 mov sb, r3 ldrb r1, [r6] mov r0, sb - bl sub_080001DA + bl GetTileIndex adds r1, r5, #0 adds r1, #0x84 strh r0, [r1] @@ -711,7 +711,7 @@ sub_08030F00: @ 0x08030F00 adds r0, r0, r4 mov r8, r0 ldrb r1, [r6] - bl sub_080001DA + bl GetTileIndex adds r1, r5, #0 adds r1, #0x86 strh r0, [r1] diff --git a/asm/enemy/flyingPot.s b/asm/enemy/flyingPot.s index 1dfba1a3..ef57afcb 100644 --- a/asm/enemy/flyingPot.s +++ b/asm/enemy/flyingPot.s @@ -286,7 +286,7 @@ sub_08037220: @ 0x08037220 adds r6, #0x38 ldrb r1, [r6] adds r0, r4, #0 - bl sub_080001DA + bl GetTileIndex adds r1, r5, #0 adds r1, #0x74 strh r0, [r1] @@ -542,7 +542,7 @@ sub_08037418: @ 0x08037418 adds r6, #0x38 ldrb r1, [r6] adds r0, r4, #0 - bl sub_080001DA + bl GetTileIndex ldr r1, _08037468 @ =0x00004067 cmp r0, r1 bne _08037460 diff --git a/asm/enemy/spinyBeetle.s b/asm/enemy/spinyBeetle.s index eab4f1c8..1938f48e 100644 --- a/asm/enemy/spinyBeetle.s +++ b/asm/enemy/spinyBeetle.s @@ -191,7 +191,7 @@ sub_08033890: @ 0x08033890 adds r5, r6, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x76 strh r0, [r1] @@ -583,7 +583,7 @@ _08033BB2: ldrh r0, [r5] ldr r2, [sp, #8] ldrb r1, [r2] - bl sub_080001DA + bl GetTileIndex mov r3, sl strh r0, [r3] lsls r0, r0, #0x10 diff --git a/asm/enemy/wizzrobeWind.s b/asm/enemy/wizzrobeWind.s index 696bf972..271db275 100644 --- a/asm/enemy/wizzrobeWind.s +++ b/asm/enemy/wizzrobeWind.s @@ -551,7 +551,7 @@ sub_0802F888: @ 0x0802F888 adds r6, r4, #0 adds r6, #0x38 ldrb r1, [r6] - bl sub_080001DA + bl GetTileIndex adds r4, #0x86 strh r0, [r4] ldr r0, _0802F8E0 @ =0x00004071 @@ -643,7 +643,7 @@ _0802F920: mov r2, r8 ldrb r1, [r2] adds r0, r4, #0 - bl sub_080001DA + bl GetTileIndex ldr r1, _0802F9C4 @ =0x00004071 cmp r0, r1 beq _0802F9A2 diff --git a/asm/non_matching/playerItem12/sub_080701F8.inc b/asm/non_matching/playerItem12/sub_080701F8.inc index 1f1bd2bc..80f1a9ff 100644 --- a/asm/non_matching/playerItem12/sub_080701F8.inc +++ b/asm/non_matching/playerItem12/sub_080701F8.inc @@ -141,7 +141,7 @@ _08070280: adds r4, r5, #0 adds r4, #0x38 ldrb r1, [r4] - bl sub_080001DA + bl GetTileIndex str r0, [r5, #0x7c] adds r0, r5, #0 movs r1, #0x14 diff --git a/asm/non_matching/playerItem12/sub_080703BC.inc b/asm/non_matching/playerItem12/sub_080703BC.inc index 88818bf1..1ff8bf23 100644 --- a/asm/non_matching/playerItem12/sub_080703BC.inc +++ b/asm/non_matching/playerItem12/sub_080703BC.inc @@ -21,7 +21,7 @@ adds r1, r4, #0 adds r1, #0x38 ldrb r1, [r1] - bl sub_080001DA + bl GetTileIndex adds r1, r0, #0 ldr r0, _08070408 @ =0x00004021 cmp r1, r0 diff --git a/asm/object/bigPushableLever.s b/asm/object/bigPushableLever.s index e24791fd..6bf1711e 100644 --- a/asm/object/bigPushableLever.s +++ b/asm/object/bigPushableLever.s @@ -176,13 +176,13 @@ sub_08098FE0: @ 0x08098FE0 adds r4, r6, #0 adds r4, #0x38 ldrb r1, [r4] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x74 strh r0, [r1] ldrh r0, [r7] ldrb r1, [r4] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x76 strh r0, [r1] @@ -233,13 +233,13 @@ _0809906C: adds r4, r6, #0 adds r4, #0x38 ldrb r1, [r4] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x74 strh r0, [r1] ldrh r0, [r7] ldrb r1, [r4] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x76 strh r0, [r1] @@ -271,7 +271,7 @@ sub_080990EC: @ 0x080990EC adds r5, r4, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex ldr r1, _0809911C @ =0x00004059 cmp r0, r1 bne _08099140 diff --git a/asm/object/bollard.s b/asm/object/bollard.s index 811c7f67..f603aa02 100644 --- a/asm/object/bollard.s +++ b/asm/object/bollard.s @@ -190,7 +190,7 @@ sub_0808B3AC: @ 0x0808B3AC adds r5, r6, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x72 strh r0, [r1] diff --git a/asm/object/bossDoor.s b/asm/object/bossDoor.s index 0f95c9f3..8e1ea6b8 100644 --- a/asm/object/bossDoor.s +++ b/asm/object/bossDoor.s @@ -432,20 +432,20 @@ _0808C510: adds r5, r4, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x78 strh r0, [r1] ldrh r0, [r6] ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x7a strh r0, [r1] ldrh r0, [r6] adds r0, #1 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x7c strh r0, [r1] @@ -475,20 +475,20 @@ _0808C570: adds r5, r4, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x78 strh r0, [r1] ldrh r0, [r6] ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x7a strh r0, [r1] ldrh r0, [r6] adds r0, #0x40 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x7c strh r0, [r1] diff --git a/asm/object/gentariCurtains.s b/asm/object/gentariCurtains.s index 5b249efb..2af6d699 100644 --- a/asm/object/gentariCurtains.s +++ b/asm/object/gentariCurtains.s @@ -103,13 +103,13 @@ _0809207A: strh r2, [r7] ldrh r0, [r5] movs r1, #1 - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x74 strh r0, [r1] ldrh r0, [r7] movs r1, #1 - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x76 strh r0, [r1] diff --git a/asm/object/minecartDoor.s b/asm/object/minecartDoor.s index 2d5b9d39..18a8853f 100644 --- a/asm/object/minecartDoor.s +++ b/asm/object/minecartDoor.s @@ -84,7 +84,7 @@ _08096B12: adds r6, r4, #0 adds r6, #0x38 ldrb r1, [r6] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x74 strh r0, [r1] diff --git a/asm/object/object11.s b/asm/object/object11.s index 9974cab4..596eb9dd 100644 --- a/asm/object/object11.s +++ b/asm/object/object11.s @@ -113,7 +113,7 @@ _08084D7E: lsls r1, r1, #6 orrs r0, r1 ldrb r1, [r6] - bl sub_080001DA + bl GetTileIndex adds r1, r7, #0 adds r1, #0x70 strh r0, [r1] diff --git a/asm/object/object35.s b/asm/object/object35.s index 2b270948..30a7fbfc 100644 --- a/asm/object/object35.s +++ b/asm/object/object35.s @@ -163,7 +163,7 @@ sub_0808B934: @ 0x0808B934 adds r6, r4, #0 adds r6, #0x38 ldrb r1, [r6] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x74 strh r0, [r1] diff --git a/asm/object/objectOnPillar.s b/asm/object/objectOnPillar.s index 7b0fe216..72b706fa 100644 --- a/asm/object/objectOnPillar.s +++ b/asm/object/objectOnPillar.s @@ -425,7 +425,7 @@ sub_080970F4: @ 0x080970F4 adds r5, r6, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x70 strh r0, [r1] diff --git a/asm/object/pushableFurniture.s b/asm/object/pushableFurniture.s index 4cfdc962..a1eeabe4 100644 --- a/asm/object/pushableFurniture.s +++ b/asm/object/pushableFurniture.s @@ -291,7 +291,7 @@ sub_0808FB68: @ 0x0808FB68 adds r1, r4, #0 adds r1, #0x38 ldrb r1, [r1] - bl sub_080001DA + bl GetTileIndex adds r1, r0, #0 ldr r0, _0808FBAC @ =0x00004031 cmp r1, r0 @@ -324,7 +324,7 @@ _0808FBB0: adds r1, r4, #0 adds r1, #0x38 ldrb r1, [r1] - bl sub_080001DA + bl GetTileIndex adds r1, r0, #0 ldr r0, _0808FBF8 @ =0x00004031 cmp r1, r0 @@ -364,7 +364,7 @@ sub_0808FBFC: @ 0x0808FBFC adds r1, r4, #0 adds r1, #0x38 ldrb r1, [r1] - bl sub_080001DA + bl GetTileIndex adds r1, r0, #0 ldr r0, _0808FC38 @ =0x0000404A cmp r1, r0 @@ -612,7 +612,7 @@ _0808FDB6: adds r1, r4, #0 adds r1, #0x38 ldrb r1, [r1] - bl sub_080001DA + bl GetTileIndex pop {r4, r5, pc} .align 2, 0 _0808FDE0: .4byte 0x0000010F @@ -630,7 +630,7 @@ sub_0808FDE8: @ 0x0808FDE8 adds r4, r0, #0 adds r0, r5, #0 movs r1, #1 - bl sub_080001DA + bl GetTileIndex ldr r6, _0808FE28 @ =0x0000402E cmp r0, r6 bne _0808FE30 @@ -684,7 +684,7 @@ _0808FE58: adds r4, r0, #0 adds r0, r5, #0 movs r1, #1 - bl sub_080001DA + bl GetTileIndex ldr r6, _0808FE98 @ =0x0000402F cmp r0, r6 bne _0808FEA0 @@ -851,7 +851,7 @@ _0808FF9C: strh r7, [r0] ldrh r0, [r0] movs r1, #1 - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x74 strh r0, [r1] @@ -872,7 +872,7 @@ _0808FFC0: strh r7, [r0] ldrh r0, [r0] movs r1, #1 - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x74 strh r0, [r1] @@ -893,7 +893,7 @@ _0808FFC0: strh r0, [r5] ldrh r0, [r5] movs r1, #1 - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x76 strh r0, [r1] @@ -918,7 +918,7 @@ _0809002C: strh r7, [r0] ldrh r0, [r0] movs r1, #1 - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x76 strh r0, [r1] @@ -939,7 +939,7 @@ _0809002C: strh r0, [r4] ldrh r0, [r4] movs r1, #1 - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x74 strh r0, [r1] @@ -974,7 +974,7 @@ sub_08090094: @ 0x08090094 adds r4, r0, #0 adds r0, r7, #0 movs r1, #1 - bl sub_080001DA + bl GetTileIndex adds r3, r0, #0 movs r0, #0x80 lsls r0, r0, #7 diff --git a/asm/object/pushableGrave.s b/asm/object/pushableGrave.s index 4950b2fe..7f763ea2 100644 --- a/asm/object/pushableGrave.s +++ b/asm/object/pushableGrave.s @@ -64,60 +64,60 @@ sub_080975A0: @ 0x080975A0 adds r7, r4, #0 adds r7, #0x38 ldrb r1, [r7] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x6a strh r0, [r1] adds r0, r5, #0 subs r0, #0x40 ldrb r1, [r7] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x6c strh r0, [r1] adds r0, r5, #0 subs r0, #0x3f ldrb r1, [r7] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x6e strh r0, [r1] subs r0, r5, #1 ldrb r1, [r7] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x70 strh r0, [r1] ldrb r1, [r7] adds r0, r5, #0 - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x72 strh r0, [r1] adds r0, r5, #1 ldrb r1, [r7] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x74 strh r0, [r1] adds r0, r5, #0 adds r0, #0x3f ldrb r1, [r7] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x76 strh r0, [r1] adds r0, r5, #0 adds r0, #0x40 ldrb r1, [r7] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x78 strh r0, [r1] adds r0, r5, #0 adds r0, #0x41 ldrb r1, [r7] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x7a strh r0, [r1] diff --git a/asm/object/pushableLever.s b/asm/object/pushableLever.s index a3c4e401..c427d578 100644 --- a/asm/object/pushableLever.s +++ b/asm/object/pushableLever.s @@ -168,7 +168,7 @@ sub_08098354: @ 0x08098354 adds r5, r6, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x72 strh r0, [r1] @@ -210,7 +210,7 @@ _080983BC: adds r5, r6, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x72 strh r0, [r1] @@ -237,7 +237,7 @@ sub_08098418: @ 0x08098418 adds r5, r4, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex ldr r1, _08098448 @ =0x00004054 cmp r0, r1 bne _0809846C diff --git a/asm/object/pushableRock.s b/asm/object/pushableRock.s index d5aa685a..8ee626ff 100644 --- a/asm/object/pushableRock.s +++ b/asm/object/pushableRock.s @@ -212,7 +212,7 @@ sub_0808A644: @ 0x0808A644 adds r6, r4, #0 adds r6, #0x38 ldrb r1, [r6] - bl sub_080001DA + bl GetTileIndex adds r1, r4, #0 adds r1, #0x70 strh r0, [r1] diff --git a/asm/object/pushableStatue.s b/asm/object/pushableStatue.s index 4a775bf4..4a83e3bf 100644 --- a/asm/object/pushableStatue.s +++ b/asm/object/pushableStatue.s @@ -360,7 +360,7 @@ sub_08089454: @ 0x08089454 adds r4, r5, #0 adds r4, #0x38 ldrb r1, [r4] - bl sub_080001DA + bl GetTileIndex adds r1, r5, #0 adds r1, #0x80 strh r0, [r1] diff --git a/asm/object/smallIceBlock.s b/asm/object/smallIceBlock.s index c0f3887b..71c8cbec 100644 --- a/asm/object/smallIceBlock.s +++ b/asm/object/smallIceBlock.s @@ -388,7 +388,7 @@ sub_08099468: @ 0x08099468 adds r5, r6, #0 adds r5, #0x38 ldrb r1, [r5] - bl sub_080001DA + bl GetTileIndex adds r1, r6, #0 adds r1, #0x6c strh r0, [r1] diff --git a/asm/veneer.s b/asm/veneer.s index d265b16f..80f63869 100644 --- a/asm/veneer.s +++ b/asm/veneer.s @@ -186,8 +186,8 @@ sub_080001D0: @ 0x080001D0 strb r0, [r3, r1] bx lr - non_word_aligned_thumb_func_start sub_080001DA -sub_080001DA: @ 0x080001DA + non_word_aligned_thumb_func_start GetTileIndex +GetTileIndex: @ 0x080001DA lsls r1, r1, #3 ldr r2, _08000224 @ =gUnk_08000228 ldr r1, [r2, r1] diff --git a/include/functions.h b/include/functions.h index 07f6a0e9..825ce23e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -160,4 +160,5 @@ extern void sub_08079BD8(Entity*); extern void sub_080AEFB4(Entity*); extern void UnloadOBJPalette(Entity*); void sub_080322E8(Entity*); +extern u32 GetTileIndex(u32, u32); #endif diff --git a/include/object.h b/include/object.h index 53338ef3..35906b66 100644 --- a/include/object.h +++ b/include/object.h @@ -349,7 +349,7 @@ void Bell(Entity*); void MacroDecoration(Entity*); void Object79(Entity*); void Steam(Entity*); -void PushableLever(Entity*); +void PushableLever(); void MacroShoes(Entity*); void ObjectOnSpinyBeetle(Entity*); void Object7E(Entity*); diff --git a/linker.ld b/linker.ld index 6f202bbc..22dad93c 100644 --- a/linker.ld +++ b/linker.ld @@ -769,7 +769,7 @@ SECTIONS { asm/object/macroDecorations.o(.text); asm/object/object79.o(.text); src/object/steam.o(.text); - asm/object/pushableLever.o(.text); + src/object/pushableLever.o(.text); asm/object/macroShoes.o(.text); asm/object/objectOnSpinyBeetle.o(.text); src/object/object7E.o(.text); @@ -1511,7 +1511,7 @@ SECTIONS { data/const/object/object79.o(.rodata); data/animations/object/object79.o(.rodata); src/object/steam.o(.rodata); - data/const/object/pushableLever.o(.rodata); + src/object/pushableLever.o(.rodata); data/animations/object/pushableLever.o(.rodata); data/const/object/macroShoes.o(.rodata); data/const/object/objectOnSpinyBeetle.o(.rodata); diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c index eb1bb1e1..5a4bb18a 100644 --- a/src/enemy/businessScrub.c +++ b/src/enemy/businessScrub.c @@ -18,7 +18,6 @@ bool32 sub_0802915C(Entity*); bool32 sub_080291DC(Entity*); void sub_0802922C(Entity*); void sub_08028E9C(Entity*); -u32 sub_080001DA(u32, u32); void sub_08028FFC(Entity*); void sub_0802925C(Entity*); void sub_080290E0(Entity*, u32); @@ -90,7 +89,7 @@ void sub_08028994(Entity* this) { } else { this->actionDelay = 0; this->field_0x76.HWORD = COORD_TO_TILE(this); - this->field_0x74.HWORD = sub_080001DA(this->field_0x76.HWORD, this->collisionLayer); + this->field_0x74.HWORD = GetTileIndex(this->field_0x76.HWORD, this->collisionLayer); this->hurtType = 0x41; sub_08028FFC(this); } diff --git a/src/enemy/doorMimic.c b/src/enemy/doorMimic.c index bcb1e1af..f1187330 100644 --- a/src/enemy/doorMimic.c +++ b/src/enemy/doorMimic.c @@ -9,7 +9,6 @@ #include "enemy.h" #include "functions.h" -extern s16 sub_080001DA(u32, u32); // ? extern void sub_08049CF4(Entity*); void sub_080221C0(Entity*); @@ -118,7 +117,7 @@ void sub_08022198(Entity* this) { void sub_080221C0(Entity* this) { u32 tile = COORD_TO_TILE(this) + gUnk_080B4488[this->type2]; this->field_0x7c.HALF.HI = tile; - this->field_0x7c.HALF.LO = sub_080001DA(tile, this->collisionLayer); + this->field_0x7c.HALF.LO = GetTileIndex(tile, this->collisionLayer); SetTile(gUnk_080CB79C[this->type2], tile, this->collisionLayer); } diff --git a/src/enemy/fallingBoulder.c b/src/enemy/fallingBoulder.c index a9dfc7d6..3e81632d 100644 --- a/src/enemy/fallingBoulder.c +++ b/src/enemy/fallingBoulder.c @@ -137,14 +137,13 @@ void nullsub_148(Entity* this) { /* ... */ } -extern u32 sub_080001DA(u32, u32); void sub_0802C4B0(Entity* this) { u32 offset; u32 index; u32 rand; - switch (sub_080001DA(this->field_0x7c.HALF_U.HI, this->collisionLayer)) { + switch (GetTileIndex(this->field_0x7c.HALF_U.HI, this->collisionLayer)) { case 0x1ab ... 0x1af: offset = 8; break; diff --git a/src/enemy/flyingSkull.c b/src/enemy/flyingSkull.c index b7ce400a..adf57523 100644 --- a/src/enemy/flyingSkull.c +++ b/src/enemy/flyingSkull.c @@ -21,7 +21,6 @@ void (*const gUnk_080CFBD4[])(FlyingSkullEntity*); const s8 gUnk_080CFBE4[4]; extern s32 sub_080012DC(Entity*); -extern u32 sub_080001DA(u32, u32); extern void sub_08078930(Entity*); void sub_0803A100(FlyingSkullEntity* this); @@ -118,7 +117,7 @@ void sub_08039D74(FlyingSkullEntity* this) { super->y.HALF.HI += 3; tmp = COORD_TO_TILE(super); - this->unk_0x74 = sub_080001DA(tmp, super->collisionLayer); + this->unk_0x74 = GetTileIndex(tmp, super->collisionLayer); SetTile(0x4060, tmp, super->collisionLayer); InitializeAnimation(super, 0); } @@ -246,7 +245,7 @@ void sub_0803A0E0(FlyingSkullEntity* this) { void sub_0803A100(FlyingSkullEntity* this) { u32 tile = COORD_TO_TILE(super); - if (sub_080001DA(tile, super->collisionLayer) == 0x4067) { + if (GetTileIndex(tile, super->collisionLayer) == 0x4067) { SetTile(this->unk_0x74, tile, super->collisionLayer); DeleteThisEntity(); } diff --git a/src/object/button.c b/src/object/button.c index 316f7608..3cc892d5 100644 --- a/src/object/button.c +++ b/src/object/button.c @@ -101,7 +101,6 @@ void sub_08081C98(Entity* this) { } Entity* sub_08081D74(Entity*); -u32 sub_080001DA(u32, u32); u32 sub_08081CB0(Entity* this) { u16 tmp; @@ -114,7 +113,7 @@ u32 sub_08081CB0(Entity* this) { } else { tmp = GetTileType(this->field_0x74.HWORD, this->collisionLayer); if (tmp != 0x77 && tmp != 0x79 && tmp != 0x4035) { - this->field_0x70.HALF.LO = sub_080001DA(this->field_0x74.HWORD, this->collisionLayer); + this->field_0x70.HALF.LO = GetTileIndex(this->field_0x74.HWORD, this->collisionLayer); return 1; } } @@ -129,7 +128,7 @@ u32 sub_08081D28(Entity* this) { if (this->field_0x70.HALF_U.LO == 0xFFFF) { return 0; } - if (sub_080001DA(this->field_0x74.HWORD, this->collisionLayer) != this->field_0x70.HALF_U.LO) { + if (GetTileIndex(this->field_0x74.HWORD, this->collisionLayer) != this->field_0x70.HALF_U.LO) { return 0; } } diff --git a/src/object/furniture.c b/src/object/furniture.c index 05e7f7ca..5683156c 100644 --- a/src/object/furniture.c +++ b/src/object/furniture.c @@ -5,7 +5,6 @@ #include "object.h" extern void sub_080001D0(u32, u32, u32); -extern u32 sub_080001DA(u32, u32); enum { FURNITURE_INIT, @@ -374,7 +373,7 @@ static void sub_08090B6C(FurnitureEntity* this) { } static void sub_08090CDC(u32 id, u32 pos, u32 layer) { - u16 cur = sub_080001DA(pos, layer); + u16 cur = GetTileIndex(pos, layer); u32 next = cur; u32 id2; diff --git a/src/object/lockedDoor.c b/src/object/lockedDoor.c index 5ebe073f..ddd18056 100644 --- a/src/object/lockedDoor.c +++ b/src/object/lockedDoor.c @@ -37,7 +37,6 @@ void LockedDoor(Entity* this) { extern Hitbox gHitbox_2; -extern u32 sub_080001DA(u32, u32); extern void sub_08078850(Entity*, u32, u32, u32); typedef struct PACKED { @@ -102,7 +101,7 @@ void sub_08083338(Entity* this) { this->spritePriority.b0 = 5; this->frame = this->type & 0xF; this->field_0x76.HWORD = TILE(this->x.HALF.HI, this->y.HALF.HI); - this->field_0x74.HWORD = sub_080001DA(this->field_0x76.HWORD, this->collisionLayer); + this->field_0x74.HWORD = GetTileIndex(this->field_0x76.HWORD, this->collisionLayer); switch (this->type2) { case 0: if (!CheckFlags(this->field_0x86.HWORD)) { diff --git a/src/object/mask.c b/src/object/mask.c index 384c59f4..5d94288f 100644 --- a/src/object/mask.c +++ b/src/object/mask.c @@ -4,7 +4,6 @@ extern void (*MaskActionFuncs[])(Entity*); extern void sub_08000148(u16, u16, u32); -extern s16 sub_080001DA(u16, u32); extern void sub_0805457C(Entity*, s32); @@ -48,8 +47,8 @@ void sub_080929A4(Entity* this) { this->frameIndex = this->type2 & 0x3f; - this->field_0x7c.HALF.HI = COORD_TO_TILE(this); - this->field_0x7c.HALF.LO = sub_080001DA(this->field_0x7c.HALF.HI, 1); + this->field_0x7c.HALF_U.HI = COORD_TO_TILE(this); + this->field_0x7c.HALF_U.LO = GetTileIndex(this->field_0x7c.HALF_U.HI, 1); this->field_0x7a.HWORD = sub_080002E0((u16)this->field_0x7c.HALF.HI, 1); diff --git a/src/object/metalDoor.c b/src/object/metalDoor.c index ed89d276..b3998104 100644 --- a/src/object/metalDoor.c +++ b/src/object/metalDoor.c @@ -10,7 +10,6 @@ extern u32 sub_08083734(Entity*, u32); extern void sub_080A080C(Entity*); extern void sub_080A0870(Entity*); -extern u32 sub_080001DA(u32, u32); extern void (*const gUnk_0812493C[])(Entity*); @@ -93,9 +92,9 @@ void sub_080A07F0(Entity* this) { } void sub_080A080C(Entity* this) { - this->field_0x76.HWORD = sub_080001DA(this->field_0x74.HWORD - 1, this->collisionLayer); - this->field_0x78.HWORD = sub_080001DA(this->field_0x74.HWORD, this->collisionLayer); - this->field_0x7a.HWORD = sub_080001DA(this->field_0x74.HWORD + 1, this->collisionLayer); + this->field_0x76.HWORD = GetTileIndex(this->field_0x74.HWORD - 1, this->collisionLayer); + this->field_0x78.HWORD = GetTileIndex(this->field_0x74.HWORD, this->collisionLayer); + this->field_0x7a.HWORD = GetTileIndex(this->field_0x74.HWORD + 1, this->collisionLayer); SetTile(0x4022, this->field_0x74.HWORD - 1, this->collisionLayer); SetTile(0x4022, this->field_0x74.HWORD, this->collisionLayer); SetTile(0x4022, this->field_0x74.HWORD + 1, this->collisionLayer); diff --git a/src/object/pot.c b/src/object/pot.c index cde45bc6..67b77328 100644 --- a/src/object/pot.c +++ b/src/object/pot.c @@ -18,7 +18,6 @@ extern void (*const gUnk_0811F0C4[])(Entity*); extern Hitbox gHitbox_18; // TODO: should be const extern Hitbox gUnk_080FD340; // TODO: should be const -extern u32 sub_080001DA(u32, u32); extern void sub_08078930(Entity*); extern void sub_08016A6C(Entity*); @@ -47,7 +46,7 @@ void sub_0808222C(Entity* this) { ResolveCollisionLayer(this); } - this->field_0x70.HALF.LO = sub_080001DA(COORD_TO_TILE(this), this->collisionLayer); + this->field_0x70.HALF.LO = GetTileIndex(COORD_TO_TILE(this), this->collisionLayer); if ((u16)this->field_0x70.HALF.LO == 0x4000) { DeleteThisEntity(); } @@ -188,7 +187,7 @@ void sub_08082614(Entity* this) { this->speed <<= 1; } - this->field_0x70.HALF.LO = sub_080001DA(COORD_TO_TILE(this), this->collisionLayer); + this->field_0x70.HALF.LO = GetTileIndex(COORD_TO_TILE(this), this->collisionLayer); tileType = GetTileTypeByEntity(this); switch (tileType) { case 0x71: diff --git a/src/object/pushableLever.c b/src/object/pushableLever.c new file mode 100644 index 00000000..503ec5b5 --- /dev/null +++ b/src/object/pushableLever.c @@ -0,0 +1,148 @@ +/** + * @file pushableLever.c + * @ingroup Objects + * + * @brief Pushable Lever object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[8]; + /*0x70*/ u16 tilePosition; + /*0x72*/ u16 tileIndex; + /*0x74*/ u16 timer; + /*0x76*/ u8 unk_76[16]; + /*0x86*/ u16 pushedFlag; +} PushableLeverEntity; + +enum PushableLeverAction { + INIT, + IDLE, + PUSHING +}; + +extern void (*const PushableLever_Actions[])(PushableLeverEntity*); +extern const u16 PushableLever_Tiles[]; +extern const u8 PushableLever_InitialOffsets[]; +extern const u8 PushableLever_PushedOffsets[]; + +void PushableLever_SetIdle(PushableLeverEntity*); +bool32 PushableLever_ShouldStartPushing(PushableLeverEntity* this); +void PushableLever_SetTiles(PushableLeverEntity*); +void PushableLever_CalculateSpriteOffsets(PushableLeverEntity*); + +#define TILE_INITIAL 0x4053 +#define TILE_PUSHED 0x4052 + +void PushableLever(PushableLeverEntity* this) { + PushableLever_Actions[super->action](this); +} + +void PushableLever_Init(PushableLeverEntity* this) { + super->spritePriority.b0 = 5; + PushableLever_SetIdle(this); +} + +void PushableLever_Idle(PushableLeverEntity* this) { + if (PushableLever_ShouldStartPushing(this)) { + super->action = PUSHING; + super->spriteOffsetX = 0; + super->spriteOffsetY = 0; + SetTile(this->tileIndex, this->tilePosition, super->collisionLayer); + EnqueueSFX(SFX_16A); + RequestPriorityDuration(super, 0x1e); + if (sub_08079F8C()) { + gPlayerState.pushedObject = 0x90; + gPlayerState.queued_action = 5; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = gPlayerEntity.animationState << 2; + } + } +} + +void PushableLever_Pushing(PushableLeverEntity* this) { + GetNextFrame(super); + if ((super->frame & 0x80) != 0) { + if (super->type2 == 0) { + SetFlag(this->pushedFlag); + } else { + ClearFlag(this->pushedFlag); + } + PushableLever_SetIdle(this); + } +} + +void PushableLever_SetIdle(PushableLeverEntity* this) { + super->action = IDLE; + this->timer = 0x3c; + PushableLever_SetTiles(this); +} + +void PushableLever_SetTiles(PushableLeverEntity* this) { + if (CheckFlags(this->pushedFlag) == FALSE) { + super->type2 = 0; + this->tilePosition = COORD_TO_TILE_OFFSET(super, 0, 0x10); + this->tileIndex = GetTileIndex(this->tilePosition, super->collisionLayer); + SetTile(TILE_INITIAL, this->tilePosition, super->collisionLayer); + InitializeAnimation(super, 1); + } else { + super->type2 = 1; + this->tilePosition = COORD_TO_TILE_OFFSET(super, 0x10, 0); + this->tileIndex = GetTileIndex(this->tilePosition, super->collisionLayer); + SetTile(TILE_PUSHED, this->tilePosition, super->collisionLayer); + InitializeAnimation(super, 0); + } +} + +bool32 PushableLever_ShouldStartPushing(PushableLeverEntity* this) { + if (GetTileIndex(this->tilePosition, super->collisionLayer) == 0x4054) { + if (--this->timer == 0) { + return TRUE; + } + PushableLever_CalculateSpriteOffsets(this); + SetTile(PushableLever_Tiles[super->type2], this->tilePosition, super->collisionLayer); + } else { + this->timer = 0x3c; + super->spriteOffsetX = 0; + super->spriteOffsetY = 0; + } + return FALSE; +} + +void PushableLever_CalculateSpriteOffsets(PushableLeverEntity* this) { + const u8* offsets; + if (super->type2 == 0) { + offsets = PushableLever_InitialOffsets; + } else { + offsets = PushableLever_PushedOffsets; + } + offsets = &offsets[(this->timer / 4) & 6]; + super->spriteOffsetX = offsets[0]; + super->spriteOffsetY = offsets[1]; + if ((this->timer & 3) == 0) { + EnqueueSFX(SFX_104); + } +} + +void (*const PushableLever_Actions[])(PushableLeverEntity*) = { + PushableLever_Init, + PushableLever_Idle, + PushableLever_Pushing, +}; +const u16 PushableLever_Tiles[] = { + TILE_INITIAL, + TILE_PUSHED, +}; +const u8 PushableLever_InitialOffsets[] = { + 0, 0, 0, 0, 255, 0, 0, 0, +}; +const u8 PushableLever_PushedOffsets[] = { + 0, 0, 0, 0, 0, 255, 0, 0, +}; \ No newline at end of file diff --git a/src/player.c b/src/player.c index 09e83b77..f1bb7fd4 100644 --- a/src/player.c +++ b/src/player.c @@ -281,7 +281,6 @@ extern u32 sub_080797C4(void); extern void sub_0800892E(Entity*); extern void sub_08078F24(void); extern void sub_0807B068(Entity*); -extern u32 sub_080001DA(u32, u32); extern u32 sub_0807A2F8(u32); extern u32 sub_0806F730(Entity*); extern u32 sub_08007DD6(u32, const u16*); @@ -2155,7 +2154,7 @@ static void PlayerInHoleInit(Entity* this) { gPlayerState.animation = 0x950; } else { gPlayerState.animation = 0x61c; - if (sub_080001DA(COORD_TO_TILE(this), this->collisionLayer) == 0x4020) { + if (GetTileIndex(COORD_TO_TILE(this), this->collisionLayer) == 0x4020) { this->actionDelay = 1; } }