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 1/4] 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; } } From b7abbfd9272d001f1425cc84f7aaedaaf5d22414 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 24 Jan 2022 21:33:30 +0100 Subject: [PATCH 2/4] Decompile PullableLever --- include/functions.h | 3 + include/object.h | 2 +- linker.ld | 4 +- src/enemy/fallingBoulder.c | 1 - src/object/pullableLever.c | 286 +++++++++++++++++++++++++++++++++++++ src/object/pushableLever.c | 4 +- src/projectile/spiderWeb.c | 4 - 7 files changed, 294 insertions(+), 10 deletions(-) create mode 100644 src/object/pullableLever.c diff --git a/include/functions.h b/include/functions.h index 825ce23e..02149d4d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -161,4 +161,7 @@ extern void sub_080AEFB4(Entity*); extern void UnloadOBJPalette(Entity*); void sub_080322E8(Entity*); extern u32 GetTileIndex(u32, u32); +extern void sub_0806FBB4(Entity*); +extern u32 sub_080002D4(s32, s32, u32); +extern void sub_08078930(Entity*); #endif diff --git a/include/object.h b/include/object.h index 35906b66..38a3176a 100644 --- a/include/object.h +++ b/include/object.h @@ -310,7 +310,7 @@ void GiantRock(Entity*); void GiantRock2(Entity*); void Object52(Entity*); void Object53(Entity*); -void PullableLever(Entity*); +void PullableLever(); void Minecart(Entity*); void ThoughtBubble(Entity*); void HiddenLadderDown(Entity*); diff --git a/linker.ld b/linker.ld index 22dad93c..ec0f1d98 100644 --- a/linker.ld +++ b/linker.ld @@ -731,7 +731,7 @@ SECTIONS { asm/object/giantRock2.o(.text); asm/object/object52.o(.text); asm/object/object53.o(.text); - asm/object/pullableLever.o(.text); + src/object/pullableLever.o(.text); src/object/minecart.o(.text); asm/object/minecart.o(.text); src/object/thoughtBubble.o(.text); @@ -1465,7 +1465,7 @@ SECTIONS { data/animations/object/minishSizedEntrance.o(.rodata); data/const/object/giantRock2.o(.rodata); data/const/object/object53.o(.rodata); - data/const/object/pullableLever.o(.rodata); + src/object/pullableLever.o(.rodata); data/animations/object/pullableLever.o(.rodata); data/const/object/minecart.o(.rodata); data/animations/object/minecart.o(.rodata); diff --git a/src/enemy/fallingBoulder.c b/src/enemy/fallingBoulder.c index 3e81632d..aa54cb6e 100644 --- a/src/enemy/fallingBoulder.c +++ b/src/enemy/fallingBoulder.c @@ -137,7 +137,6 @@ void nullsub_148(Entity* this) { /* ... */ } - void sub_0802C4B0(Entity* this) { u32 offset; u32 index; diff --git a/src/object/pullableLever.c b/src/object/pullableLever.c new file mode 100644 index 00000000..3e122953 --- /dev/null +++ b/src/object/pullableLever.c @@ -0,0 +1,286 @@ +/** + * @file pullableLever.c + * @ingroup Objects + * + * @brief Pullable Lever object + */ + +#define NENT_DEPRECATED +#include "global.h" +#include "object.h" +#include "functions.h" +#include "sound.h" + +typedef struct { + /*0x00*/ Entity base; + /*0x68*/ u8 unk_68[8]; + /*0x70*/ u16 pullLength; + /*0x72*/ u16 leverPart; // lever part number? [0,1,2] + /*0x74*/ u8 actionDelay; + /*0x75*/ u8 unk_75; + /*0x76*/ u16 necessaryPullLength; + /*0x78*/ u8 unk_78[6]; + /*0x7e*/ u8 unk_7e; + /*0x7f*/ u8 unk_7f; + /*0x80*/ u16 initialX; + /*0x82*/ u16 initialY; + /*0x84*/ u8 unk_84[2]; + /*0x86*/ u16 pulledFlag; +} PullableLeverEntity; + +enum PullableLeverPart { HANDLE, MIDDLE, SOCKET }; + +extern void sub_080044AE(Entity*, u32, u32); + +extern u16 gUnk_02021F00[]; +extern Hitbox gUnk_080FD270; +extern Hitbox gUnk_080FD278; + +extern void (*const PullableLever_HandleActions[])(PullableLeverEntity*); +extern void (*const PullableLever_MiddleActions[])(PullableLeverEntity*); +extern const s8 PullableLever_InitialOffsets[]; +extern void (*const PullableLever_HandleSubActions[])(PullableLeverEntity*); +extern const s8 gUnk_081222B8[]; +extern const u8 gUnk_081222C0[]; + +void sub_08091504(PullableLeverEntity*); +void PullableLever_UpdateLength(PullableLeverEntity*); +void sub_0809153C(PullableLeverEntity*); + +void PullableLever(PullableLeverEntity* this) { + switch (this->leverPart) { + case HANDLE: + PullableLever_HandleActions[super->action](this); + sub_0800445C(super); + gUnk_02021F00[this->actionDelay] = this->pullLength; + break; + case MIDDLE: + PullableLever_MiddleActions[super->action](this); + break; + case SOCKET: + if (super->action == 0) { + sub_08091504(this); + } + break; + } +} + +void PullableLever_HandleInit(PullableLeverEntity* this) { + if (gEntCount < 0x46) { + PullableLeverEntity* entity1 = (PullableLeverEntity*)CreateObject(PULLABLE_LEVER, super->type, super->type2); + PullableLeverEntity* entity2 = (PullableLeverEntity*)CreateObject(PULLABLE_LEVER, super->type, super->type2); + (entity1->base).parent = super; + (entity2->base).parent = super; + entity1->leverPart = 1; + entity2->leverPart = 2; + CopyPosition(super, &entity2->base); + super->action = 1; + super->spriteSettings.draw = 1; + super->speed = 0x60; + if ((super->type2 & 1)) { + super->hitbox = &gUnk_080FD278; + } else { + super->hitbox = &gUnk_080FD270; + } + super->field_0x16 = 1; + super->x.HALF.HI += PullableLever_InitialOffsets[super->type2 * 2]; + this->initialX = super->x.HALF.HI; + super->y.HALF.HI += PullableLever_InitialOffsets[super->type2 * 2 + 1]; + this->initialY = super->y.HALF.HI; + CopyPosition(super, &entity1->base); + this->necessaryPullLength = this->unk_7e; + this->actionDelay = super->actionDelay; + InitializeAnimation(super, super->type2); + } +} + +void PullableLever_HandleAction1(PullableLeverEntity* this) { + sub_08078930(super); + if (this->pullLength != 0) { + super->direction = super->type2 << 3; + LinearMoveUpdate(super); + PullableLever_UpdateLength(this); + } +} + +void PullableLever_HandleAction2(PullableLeverEntity* this) { + sub_0806FBB4(super); + PullableLever_HandleSubActions[super->subAction - 5](this); +} + +void PullableLever_HandleSubAction0(PullableLeverEntity* this) { + u16 y; + u16 x; + Entity* player = &gPlayerEntity; + + if (this->unk_75 == 0) { + if (-player->animationState + super->type2 * 2 == 0) { + x = gUnk_081222B8[super->type2 * 2] + super->x.HALF_U.HI; + y = gUnk_081222B8[super->type2 * 2 + 1] + super->y.HALF_U.HI; + if (0x10 < sub_080002D4(x, y, player->collisionLayer) - 0xf) { + player->x.HALF.HI = x; + player->y.HALF.HI = y; + } + } + this->unk_75 = 1; + super->field_0xf = 2; + } + if (player->animationState >> 1 == super->type2) { + if (gPlayerState.framestate == 0x1a) { + if (gPlayerState.heldObject & 2) { + if (gPlayerEntity.frame & 2) { + sub_0809153C(this); + if (this->unk_75 == 1) { + this->unk_75 = 2; + EnqueueSFX(SFX_19E); + } + } + } + } + } +} + +void PullableLever_HandleSubAction1(PullableLeverEntity* this) { + super->action = 1; + this->unk_75 = 0; +} + +void PullableLever_MiddleInit(PullableLeverEntity* this) { + super->action = 1; + super->spritePriority.b0 = 5; + InitializeAnimation(super, super->parent->type2 + 8); + UpdateSpriteForCollisionLayer(super); +} + +void PullableLever_MiddleAction1(PullableLeverEntity* this) { + u16 tmp; + PullableLeverEntity* parent = ((PullableLeverEntity*)super->parent); + if (parent->pullLength < 8) { + super->spriteSettings.draw = 0; + } else { + super->spriteSettings.draw = 1; + tmp = (((PullableLeverEntity*)super->parent)->pullLength - 8) & 7; + switch (super->type2) { + case 0: + super->y.HALF.HI = (super->parent->y.HALF.HI - tmp) - 0x11; + break; + case 1: + super->x.HALF.HI = tmp + super->parent->x.HALF.HI + 0x11; + break; + case 2: + super->y.HALF.HI = tmp + super->parent->y.HALF.HI + 0x11; + break; + case 3: + super->x.HALF.HI = (super->parent->x.HALF.HI - tmp) - 0x11; + break; + } + tmp = (parent->pullLength - 8) >> 4; + if (tmp != super->animationState) { + super->animationState = tmp; + InitializeAnimation(super, tmp * 4 + super->type2 + 8); + } + } +} + +void sub_08091504(PullableLeverEntity* this) { + super->action = 1; + super->spriteSettings.draw = 1; + super->spritePriority.b0 = 6; + InitializeAnimation(super, super->type2 + 4); + UpdateSpriteForCollisionLayer(super); +} + +void sub_0809153C(PullableLeverEntity* this) { + s16 prevX; + s16 prevY; + u32 dir; + s16 diff; + s32 radius; + + Entity* player = &gPlayerEntity; + dir = gUnk_081222C0[super->type2]; + if (this->necessaryPullLength <= this->pullLength) { + return; + } + prevX = player->x.HALF.HI; + prevY = player->y.HALF.HI; + sub_080044AE(&gPlayerEntity, super->speed, dir); + if ((prevX == gPlayerEntity.x.HALF.HI) && (prevY == gPlayerEntity.y.HALF.HI)) { + return; + } + + switch (super->type2) { + case 0: + diff = player->y.HALF.HI - prevY; + break; + case 1: + diff = prevX - gPlayerEntity.x.HALF.HI; + break; + case 2: + diff = prevY - gPlayerEntity.y.HALF.HI; + break; + case 3: + diff = gPlayerEntity.x.HALF.HI - prevX; + break; + } + radius = (diff << 0x18); + super->x.WORD += gSineTable[dir * 8] * (radius >> 0x10); + super->y.WORD -= gSineTable[dir * 8 + 0x40] * (radius >> 0x10); + PullableLever_UpdateLength(this); + if (this->necessaryPullLength <= this->pullLength) { + EnqueueSFX(SFX_BUTTON_PRESS); + SetFlag(this->pulledFlag); + } else { + if (--super->field_0xf == 0) { + super->field_0xf = 0x10; + EnqueueSFX(SFX_10F); + } + } +} + +void PullableLever_UpdateLength(PullableLeverEntity* this) { + switch (super->type2) { + case 0: + this->pullLength = super->y.HALF.HI - this->initialY; + break; + case 1: + this->pullLength = this->initialX - super->x.HALF.HI; + break; + case 2: + this->pullLength = this->initialY - super->y.HALF.HI; + break; + case 3: + this->pullLength = super->x.HALF.HI - this->initialX; + break; + } + + if (CheckFlags(this->pulledFlag) && (this->pullLength == 0)) { + ClearFlag(this->pulledFlag); + } +} + +void (*const PullableLever_HandleActions[])(PullableLeverEntity*) = { + PullableLever_HandleInit, + PullableLever_HandleAction1, + PullableLever_HandleAction2, +}; +void (*const PullableLever_MiddleActions[])(PullableLeverEntity*) = { + PullableLever_MiddleInit, + PullableLever_MiddleAction1, +}; +const s8 PullableLever_InitialOffsets[] = { + 0, 9, -9, 0, 0, -9, 9, 0, +}; +void (*const PullableLever_HandleSubActions[])(PullableLeverEntity*) = { + PullableLever_HandleSubAction0, + PullableLever_HandleSubAction1, +}; +const s8 gUnk_081222B8[] = { + 0, 10, -8, 0, 0, -10, 8, 0, +}; +const u8 gUnk_081222C0[] = { + 16, + 24, + 0, + 8, +}; diff --git a/src/object/pushableLever.c b/src/object/pushableLever.c index 503ec5b5..dff5ed9a 100644 --- a/src/object/pushableLever.c +++ b/src/object/pushableLever.c @@ -23,7 +23,7 @@ typedef struct { enum PushableLeverAction { INIT, IDLE, - PUSHING + PUSHING, }; extern void (*const PushableLever_Actions[])(PushableLeverEntity*); @@ -145,4 +145,4 @@ const u8 PushableLever_InitialOffsets[] = { }; const u8 PushableLever_PushedOffsets[] = { 0, 0, 0, 0, 0, 255, 0, 0, -}; \ No newline at end of file +}; diff --git a/src/projectile/spiderWeb.c b/src/projectile/spiderWeb.c index 40bc8007..3f683296 100644 --- a/src/projectile/spiderWeb.c +++ b/src/projectile/spiderWeb.c @@ -8,10 +8,6 @@ typedef struct { u8 direction; } PACKED Struct_0812A074; -extern void sub_0806FBB4(Entity*); -extern u32 sub_080002D4(s32, s32, u32); -extern void sub_08078930(Entity*); - extern void (*const SpiderWeb_Functions[])(Entity*); extern void (*const SpiderWeb_Actions[])(Entity*); extern const u8 gUnk_0812A03C[]; From a6657fbd330de38b99646e0513e7c74bc871fac9 Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 24 Jan 2022 21:52:22 +0100 Subject: [PATCH 3/4] Decompile HittableLever --- include/functions.h | 1 + include/object.h | 2 +- linker.ld | 4 +- src/manager/managerC.c | 1 - src/object/button.c | 2 - src/object/hittableLever.c | 79 ++++++++++++++++++++++++++++++++++++++ src/object/pullableLever.c | 2 - 7 files changed, 83 insertions(+), 8 deletions(-) create mode 100644 src/object/hittableLever.c diff --git a/include/functions.h b/include/functions.h index 02149d4d..c298432d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -164,4 +164,5 @@ extern u32 GetTileIndex(u32, u32); extern void sub_0806FBB4(Entity*); extern u32 sub_080002D4(s32, s32, u32); extern void sub_08078930(Entity*); +extern void sub_080044AE(Entity*, u32, u32); #endif diff --git a/include/object.h b/include/object.h index 38a3176a..0be01661 100644 --- a/include/object.h +++ b/include/object.h @@ -273,7 +273,7 @@ void Object2B(Entity*); void Beanstalk(Entity*); void Smoke(Entity*); void PushableRock(Entity*); -void HittableLever(Entity*); +void HittableLever(); void Object30(Entity*); void FrozenFlower(Entity*); void PullableMushroom(Entity*); diff --git a/linker.ld b/linker.ld index ec0f1d98..f0cd008d 100644 --- a/linker.ld +++ b/linker.ld @@ -691,7 +691,7 @@ SECTIONS { asm/object/beanstalk.o(.text); src/object/smoke.o(.text); asm/object/pushableRock.o(.text); - asm/object/hittableLever.o(.text); + src/object/hittableLever.o(.text); asm/object/object30.o(.text); src/object/frozenFlower.o(.text); asm/object/pullableMushroom.o(.text); @@ -1416,7 +1416,7 @@ SECTIONS { data/const/object/smoke.o(.rodata); data/const/object/pushableRock.o(.rodata); data/animations/object/pushableRock.o(.rodata); - data/const/object/hittableLever.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); diff --git a/src/manager/managerC.c b/src/manager/managerC.c index 5f498695..5bc20a62 100644 --- a/src/manager/managerC.c +++ b/src/manager/managerC.c @@ -46,7 +46,6 @@ u32 sub_08058B08(ManagerC*, u32, u32, const struct_08108228*); void sub_08058B5C(ManagerC*, u32); extern void sub_0805622C(struct BgAffineDstData*, u32, u32); -extern void sub_080044AE(Entity*, u32, u32); extern u8 gUnk_03003DE4[0xC]; diff --git a/src/object/button.c b/src/object/button.c index 3cc892d5..61f4e704 100644 --- a/src/object/button.c +++ b/src/object/button.c @@ -259,8 +259,6 @@ u32 sub_08081F7C(Entity* this, u32 r7) { return 1; } -extern void sub_080044AE(Entity*, u32, u32); - void sub_08081FF8(Entity* this) { u32 direction; u32 i; diff --git a/src/object/hittableLever.c b/src/object/hittableLever.c new file mode 100644 index 00000000..c7c1022c --- /dev/null +++ b/src/object/hittableLever.c @@ -0,0 +1,79 @@ +/** + * @file hittableLever.c + * @ingroup Objects + * + * @brief Hittable 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 wasHit; /**< Has this lever been hit before. */ + /*0x72*/ u8 unk_72[0x14]; + /*0x86*/ u16 hitFlag; +} HittableLeverEntity; + +extern void (*const HittableLever_Actions[])(HittableLeverEntity*); +extern const Hitbox gUnk_08121180; + +void HittableLever_UpdateTile(HittableLeverEntity*); + +void HittableLever(HittableLeverEntity* this) { + if (super->iframes == 0) { + this->wasHit = 0; + } + HittableLever_Actions[super->action](this); +} + +void HittableLever_Init(HittableLeverEntity* this) { + super->action = 1; + super->flags |= 0x80; + super->field_0x3c = 7; + super->hitType = 0x8f; + super->flags2 = 0xa; + super->hitbox = (Hitbox*)&gUnk_08121180; + if (super->type == 0) { + if (CheckFlags(this->hitFlag)) { + super->type = 1; + } else { + super->type = 0; + } + } else { + SetFlag(this->hitFlag); + } + HittableLever_UpdateTile(this); +} + +void HittableLever_Idle(HittableLeverEntity* this) { + if (((super->bitfield & 0x80) != 0) && (this->wasHit == 0)) { + this->wasHit = 1; + super->type ^= 1; + super->iframes = -0x18; + HittableLever_UpdateTile(this); + if (CheckFlags(this->hitFlag)) { + ClearFlag(this->hitFlag); + } else { + SetFlag(this->hitFlag); + } + SoundReqClipped(super, SFX_117); + } +} + +void HittableLever_UpdateTile(HittableLeverEntity* this) { + if (super->type != 0) { + sub_0807B7D8(0x378, COORD_TO_TILE(super), super->collisionLayer); + } else { + sub_0807B7D8(0x377, COORD_TO_TILE(super), super->collisionLayer); + } +} + +void (*const HittableLever_Actions[])(HittableLeverEntity*) = { + HittableLever_Init, + HittableLever_Idle, +}; +const Hitbox gUnk_08121180 = { 0, 1, { 0, 0, 0, 0 }, 4, 3 }; diff --git a/src/object/pullableLever.c b/src/object/pullableLever.c index 3e122953..28109862 100644 --- a/src/object/pullableLever.c +++ b/src/object/pullableLever.c @@ -30,8 +30,6 @@ typedef struct { enum PullableLeverPart { HANDLE, MIDDLE, SOCKET }; -extern void sub_080044AE(Entity*, u32, u32); - extern u16 gUnk_02021F00[]; extern Hitbox gUnk_080FD270; extern Hitbox gUnk_080FD278; From d550d58ff3c5a65c98f30981d5eef51c0460b6fe Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Mon, 24 Jan 2022 22:24:07 +0100 Subject: [PATCH 4/4] Decompile BigPushableLever --- asm/non_matching/bigGoron/sub_0806D5D4.inc | 21 - .../castorWildsStatue/sub_080675D4.inc | 131 -- asm/non_matching/common/sub_0801DFB4.inc | 44 - asm/non_matching/player/PlayerNormal.inc | 544 ------ asm/non_matching/vram/CopyOAM.inc | 76 - asm/object/bigPushableLever.s | 357 ---- asm/object/hittableLever.s | 188 --- asm/object/lilypadLarge.s | 1479 ----------------- asm/object/pullableLever.s | 666 -------- asm/object/pushableLever.s | 323 ---- data/const/enemy/bombarossa.s | 5 - data/const/object/bigPushableLever.s | 19 - data/const/object/hittableLever.s | 12 - data/const/object/pullableLever.s | 27 - data/const/object/pushableLever.s | 19 - include/object.h | 2 +- linker.ld | 4 +- src/object/bigPushableLever.c | 155 ++ src/object/hittableLever.c | 6 +- 19 files changed, 161 insertions(+), 3917 deletions(-) delete mode 100644 asm/non_matching/bigGoron/sub_0806D5D4.inc delete mode 100644 asm/non_matching/castorWildsStatue/sub_080675D4.inc delete mode 100644 asm/non_matching/common/sub_0801DFB4.inc delete mode 100644 asm/non_matching/player/PlayerNormal.inc delete mode 100644 asm/non_matching/vram/CopyOAM.inc delete mode 100644 asm/object/bigPushableLever.s delete mode 100644 asm/object/hittableLever.s delete mode 100644 asm/object/lilypadLarge.s delete mode 100644 asm/object/pullableLever.s delete mode 100644 asm/object/pushableLever.s delete mode 100644 data/const/enemy/bombarossa.s delete mode 100644 data/const/object/bigPushableLever.s delete mode 100644 data/const/object/hittableLever.s delete mode 100644 data/const/object/pullableLever.s delete mode 100644 data/const/object/pushableLever.s create mode 100644 src/object/bigPushableLever.c diff --git a/asm/non_matching/bigGoron/sub_0806D5D4.inc b/asm/non_matching/bigGoron/sub_0806D5D4.inc deleted file mode 100644 index c9084c09..00000000 --- a/asm/non_matching/bigGoron/sub_0806D5D4.inc +++ /dev/null @@ -1,21 +0,0 @@ - .syntax unified - push {lr} - bl InitBiggoronTimer - movs r0, #0xd - bl IsItemEquipped - adds r1, r0, #0 - cmp r1, #2 - beq _0806D5F0 - ldr r0, _0806D5FC @ =gSave - adds r0, #0xb4 - adds r0, r1, r0 - movs r1, #0 - strb r1, [r0] -_0806D5F0: - movs r0, #0xd - movs r1, #0 - bl sub_0807CAA0 - pop {pc} - .align 2, 0 -_0806D5FC: .4byte gSave - .syntax divided diff --git a/asm/non_matching/castorWildsStatue/sub_080675D4.inc b/asm/non_matching/castorWildsStatue/sub_080675D4.inc deleted file mode 100644 index 48e73e86..00000000 --- a/asm/non_matching/castorWildsStatue/sub_080675D4.inc +++ /dev/null @@ -1,131 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - ldr r5, _080676D0 @ =gUnk_08110E78 - ldrb r0, [r4, #0xd] - lsls r0, r0, #2 - adds r7, r0, #0 - subs r7, #0xc - movs r0, #0x3f - mov r8, r0 - movs r6, #8 -_080675EC: - adds r0, r4, #0 - movs r1, #2 - movs r2, #0 - bl CreateFx - adds r3, r0, #0 - cmp r3, #0 - beq _08067646 - movs r0, #0 - ldrsb r0, [r5, r0] - ldrh r1, [r3, #0x2e] - adds r0, r0, r1 - strh r0, [r3, #0x2e] - movs r0, #1 - ldrsb r0, [r5, r0] - ldrh r1, [r3, #0x32] - adds r0, r0, r1 - strh r0, [r3, #0x32] - strh r7, [r3, #0x36] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r3, #0 - adds r0, #0x38 - strb r1, [r0] - ldrb r1, [r4, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r3, #0x1b] - mov r0, r8 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x1b] - ldrb r1, [r4, #0x19] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r3, #0x19] - mov r0, r8 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x19] - adds r0, r4, #0 - adds r1, r3, #0 - bl SortEntityAbove -_08067646: - subs r6, #1 - adds r5, #2 - cmp r6, #0 - bge _080675EC - ldr r5, _080676D4 @ =gUnk_08110E8A - movs r0, #0x3f - mov r8, r0 - movs r6, #3 -_08067656: - adds r0, r4, #0 - movs r1, #4 - movs r2, #0 - bl CreateFx - adds r3, r0, #0 - cmp r3, #0 - beq _080676B0 - movs r0, #0 - ldrsb r0, [r5, r0] - ldrh r1, [r3, #0x2e] - adds r0, r0, r1 - strh r0, [r3, #0x2e] - movs r0, #1 - ldrsb r0, [r5, r0] - ldrh r1, [r3, #0x32] - adds r0, r0, r1 - strh r0, [r3, #0x32] - strh r7, [r3, #0x36] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r1, [r0] - adds r0, r3, #0 - adds r0, #0x38 - strb r1, [r0] - ldrb r1, [r4, #0x1b] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r3, #0x1b] - mov r0, r8 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x1b] - ldrb r1, [r4, #0x19] - lsrs r1, r1, #6 - lsls r1, r1, #6 - ldrb r2, [r3, #0x19] - mov r0, r8 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x19] - adds r0, r4, #0 - adds r1, r3, #0 - bl SortEntityAbove -_080676B0: - subs r6, #1 - adds r5, #2 - cmp r6, #0 - bge _08067656 - ldrb r0, [r4, #0xd] - cmp r0, #2 - bls _080676C8 - ldrb r1, [r4, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0x18] -_080676C8: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080676D0: .4byte gUnk_08110E78 -_080676D4: .4byte gUnk_08110E8A - .syntax divided diff --git a/asm/non_matching/common/sub_0801DFB4.inc b/asm/non_matching/common/sub_0801DFB4.inc deleted file mode 100644 index 2dfd039c..00000000 --- a/asm/non_matching/common/sub_0801DFB4.inc +++ /dev/null @@ -1,44 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r4, r1, #0 - adds r5, r2, #0 - adds r6, r3, #0 - ldr r7, _0801E004 @ =gFuseInfo - adds r0, r7, #0 - movs r1, #0x10 - bl MemClear - strh r4, [r7, #6] - strh r5, [r7, #8] - strh r6, [r7, #0xa] - mov r0, r8 - str r0, [r7, #0xc] - ldr r0, _0801E008 @ =gUnk_03003DF0 - ldrb r0, [r0, #2] - strb r0, [r7, #3] - mov r1, r8 - cmp r1, #0 - beq _0801DFF8 - ldrb r1, [r1, #0x11] - lsls r0, r1, #0x1c - lsrs r0, r0, #0x1c - strb r0, [r7, #4] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - mov r1, r8 - strb r0, [r1, #0x11] -_0801DFF8: - movs r0, #0 - strb r0, [r7] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801E004: .4byte gFuseInfo -_0801E008: .4byte gUnk_03003DF0 - .syntax divided diff --git a/asm/non_matching/player/PlayerNormal.inc b/asm/non_matching/player/PlayerNormal.inc deleted file mode 100644 index fb4b93a2..00000000 --- a/asm/non_matching/player/PlayerNormal.inc +++ /dev/null @@ -1,544 +0,0 @@ - .syntax unified - - .text - - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldr r6, _080707F0 @ =gPlayerState - adds r3, r6, #0 - adds r3, #0xa8 - movs r4, #0 - strb r4, [r3] - ldr r1, [r6, #0x30] - movs r7, #0x10 - adds r0, r1, #0 - ands r0, r7 - mov ip, r6 - cmp r0, #0 - beq _08070818 - adds r2, r5, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #0x39 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2] - adds r0, r5, #0 - adds r0, #0x42 - strb r4, [r0] - movs r0, #0xa0 - lsls r0, r0, #1 - strh r0, [r5, #0x24] - movs r0, #0x80 - strb r0, [r6, #6] - strb r7, [r3] - ldrb r0, [r5, #0x14] - lsrs r0, r0, #1 - adds r0, #0x5c - adds r1, r5, #0 - adds r1, #0x58 - ldrb r1, [r1] - cmp r0, r1 - bne _080707F8 - ldrh r0, [r5, #0x12] - cmp r0, #2 - bne _080707F8 - ldr r0, _080707F4 @ =gPlayerEntity - bl UpdateAnimationSingleFrame - b _08070800 - .align 2, 0 -_080707F0: .4byte gPlayerState -_080707F4: .4byte gPlayerEntity -_080707F8: - movs r0, #0x97 - lsls r0, r0, #2 - mov r1, ip - strh r0, [r1, #8] -_08070800: - ldr r0, _08070814 @ =gPlayerEntity - bl sub_0806F948 - bl ResetPlayer - adds r0, r5, #0 - bl sub_08077698 - b _08070BE4 - .align 2, 0 -_08070814: .4byte gPlayerEntity -_08070818: - movs r0, #0x80 - lsls r0, r0, #5 - ands r0, r1 - cmp r0, #0 - beq _08070842 - adds r1, r5, #0 - adds r1, #0x40 - movs r0, #0x1e - strb r0, [r1] - movs r0, #0xc - strb r0, [r3] - movs r1, #0 - movs r2, #0x24 - ldrsh r0, [r5, r2] - cmp r0, #0 - bne _0807083A - movs r1, #1 -_0807083A: - adds r0, r5, #0 - bl sub_08070BEC - b _08070BE4 -_08070842: - movs r4, #0x80 - lsls r4, r4, #0xc - ands r4, r1 - cmp r4, #0 - beq _08070852 - bl ResolvePlayerAnimation - b _08070BE4 -_08070852: - adds r0, r5, #0 - bl sub_080085B0 - adds r0, r5, #0 - adds r0, #0x40 - strb r4, [r0] - bl RunQueuedAction - cmp r0, #0 - beq _08070868 - b _08070BE4 -_08070868: - adds r0, r6, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - bne _080708AC - ldrb r1, [r6, #2] - movs r2, #0xc0 - adds r0, r2, #0 - ands r0, r1 - cmp r0, #0 - bne _080708AC - ldrb r0, [r6, #3] - cmp r0, #0 - bne _0807088E - adds r0, r6, #0 - adds r0, #0x21 - ldrb r0, [r0] - cmp r0, #0 - beq _08070892 -_0807088E: - strh r2, [r5, #0x24] - b _080708AC -_08070892: - ldrb r0, [r6, #0x1b] - cmp r0, #0 - beq _0807089C - movs r0, #0xe0 - b _080708AA -_0807089C: - ldrb r0, [r6, #0x1c] - cmp r0, #0 - beq _080708A6 - movs r0, #0x80 - b _080708AA -_080708A6: - movs r0, #0xa0 - lsls r0, r0, #1 -_080708AA: - strh r0, [r5, #0x24] -_080708AC: - ldr r4, _08070918 @ =gPlayerState - ldrb r0, [r4, #6] - movs r1, #0x80 - orrs r1, r0 - strb r1, [r4, #6] - ldr r0, [r4, #0x30] - ldr r6, _0807091C @ =0x10000002 - ands r0, r6 - cmp r0, #0 - bne _080708C4 - bl UpdateFloorType -_080708C4: - bl RunQueuedAction - cmp r0, #0 - beq _080708CE - b _08070BE4 -_080708CE: - ldrb r0, [r4, #2] - cmp r0, #0 - beq _080708D6 - b _080709D8 -_080708D6: - ldr r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #3 - ands r0, r1 - cmp r0, #0 - beq _080708E4 - b _080709D8 -_080708E4: - adds r0, r5, #0 - adds r0, #0x42 - ldrb r0, [r0] - cmp r0, #0 - bne _08070924 - bl sub_080782C0 - cmp r0, #0 - beq _08070924 - ldr r0, _08070920 @ =gRoomVars - ldrb r0, [r0, #6] - cmp r0, #0 - bne _08070902 - bl ResetPlayer -_08070902: - ldr r0, [r4, #0x30] - ands r0, r6 - cmp r0, #0 - beq _0807090C - b _08070BE4 -_0807090C: - bl UpdateFloorType - bl RunQueuedAction - b _08070BE4 - .align 2, 0 -_08070918: .4byte gPlayerState -_0807091C: .4byte 0x10000002 -_08070920: .4byte gRoomVars -_08070924: - ldr r0, _0807094C @ =gPlayerState - ldr r1, [r0, #0x30] - ldr r2, _08070950 @ =0x00041635 - ands r1, r2 - adds r0, #0xaa - ldrb r0, [r0] - orrs r1, r0 - cmp r1, #0 - bne _080709D8 - bl UpdatePlayerCollision - cmp r0, #0xf - bls _08070940 - b _08070BE4 -_08070940: - lsls r0, r0, #2 - ldr r1, _08070954 @ =_08070958 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807094C: .4byte gPlayerState -_08070950: .4byte 0x00041635 -_08070954: .4byte _08070958 -_08070958: @ jump table - .4byte _08070998 @ case 0 - .4byte _08070BE4 @ case 1 - .4byte _08070BE4 @ case 2 - .4byte _080709A8 @ case 3 - .4byte _080709C2 @ case 4 - .4byte _08070BE4 @ case 5 - .4byte _08070BE4 @ case 6 - .4byte _08070BE4 @ case 7 - .4byte _08070BE4 @ case 8 - .4byte _08070BE4 @ case 9 - .4byte _08070BE4 @ case 10 - .4byte _08070BE4 @ case 11 - .4byte _08070BE4 @ case 12 - .4byte _08070BE4 @ case 13 - .4byte _08070BE4 @ case 14 - .4byte _080709B4 @ case 15 -_08070998: - ldr r0, _080709A4 @ =gPlayerState - ldrb r1, [r0, #6] - movs r2, #0x80 - eors r1, r2 - strb r1, [r0, #6] - b _080709D8 - .align 2, 0 -_080709A4: .4byte gPlayerState -_080709A8: - ldr r1, _080709B0 @ =gPlayerState - movs r0, #0x80 - strb r0, [r1, #6] - b _080709D8 - .align 2, 0 -_080709B0: .4byte gPlayerState -_080709B4: - ldrb r1, [r5, #0x10] - movs r0, #0x7f - ands r0, r1 - strb r0, [r5, #0x10] - bl sub_080797EC - b _08070BE4 -_080709C2: - ldr r0, _080709D4 @ =gPlayerState - ldrb r1, [r0, #6] - movs r2, #0x80 - eors r1, r2 - strb r1, [r0, #6] - bl sub_080797EC - b _08070BE4 - .align 2, 0 -_080709D4: .4byte gPlayerState -_080709D8: - adds r1, r5, #0 - adds r1, #0x3c - movs r0, #0 - strb r0, [r1] - adds r6, r5, #0 - adds r6, #0x29 - ldrb r1, [r6] - subs r0, #8 - ands r0, r1 - movs r1, #4 - orrs r0, r1 - strb r0, [r6] - adds r0, r5, #0 - bl sub_0807AC54 - cmp r0, #0 - beq _080709FC - b _08070BE4 -_080709FC: - adds r0, r5, #0 - bl sub_08077698 - bl RunQueuedAction - cmp r0, #0 - beq _08070A0C - b _08070BE4 -_08070A0C: - bl sub_080792D8 - ldr r4, _08070A78 @ =gPlayerState - ldrb r1, [r4, #2] - ldrb r0, [r4, #0xa] - orrs r0, r1 - cmp r0, #0 - bne _08070A32 - bl sub_08079550 - cmp r0, #0 - beq _08070A26 - b _08070BE4 -_08070A26: - adds r0, r5, #0 - bl sub_08078F74 - cmp r0, #0 - beq _08070A32 - b _08070BE4 -_08070A32: - adds r0, r5, #0 - bl DoJump - bl RunQueuedAction - cmp r0, #0 - beq _08070A42 - b _08070BE4 -_08070A42: - ldrb r2, [r4, #2] - cmp r2, #0 - beq _08070AAC - adds r1, r4, #0 - adds r1, #0xa8 - movs r0, #0x14 - strb r0, [r1] - movs r0, #0xc0 - ands r0, r2 - cmp r0, #0 - bne _08070A80 - movs r0, #7 - ands r0, r2 - cmp r0, #3 - beq _08070A7C - movs r0, #0x20 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0 - bne _08070A7C - strh r0, [r5, #0x24] - adds r0, r5, #0 - bl sub_08008926 - b _08070A80 - .align 2, 0 -_08070A78: .4byte gPlayerState -_08070A7C: - movs r0, #0xff - strb r0, [r5, #0x15] -_08070A80: - bl UpdatePlayerMovement - adds r0, r5, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _08070A94 - b _08070BE4 -_08070A94: - ldr r0, _08070AA8 @ =gPlayerState - ldrb r0, [r0, #4] - cmp r0, #0 - beq _08070A9E - b _08070BE4 -_08070A9E: - adds r0, r5, #0 - bl UpdateAnimationSingleFrame - b _08070BE4 - .align 2, 0 -_08070AA8: .4byte gPlayerState -_08070AAC: - adds r0, r5, #0 - adds r0, #0x42 - ldrb r1, [r0] - adds r7, r0, #0 - cmp r1, #0 - beq _08070ABA - b _08070BBC -_08070ABA: - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08070AD4 - adds r1, r4, #0 - adds r1, #0xa8 - movs r0, #7 - strb r0, [r1] - adds r0, r5, #0 - bl sub_0807ACCC - b _08070B56 -_08070AD4: - ldr r0, [r4, #0x30] - movs r1, #0x80 - lsls r1, r1, #0x12 - ands r0, r1 - cmp r0, #0 - bne _08070AEE - ldrb r0, [r6] - movs r1, #0x39 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #8 - orrs r1, r0 - strb r1, [r6] -_08070AEE: - ldrb r1, [r4, #0x1e] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - beq _08070B00 - adds r0, r5, #0 - bl sub_08008AA0 - b _08070B1E -_08070B00: - ldrb r0, [r4, #0x12] - cmp r0, #0x17 - bne _08070B0E - adds r0, r5, #0 - bl sub_08008926 - b _08070B1E -_08070B0E: - cmp r0, #1 - bne _08070B18 - bl ResetPlayerVelocity - b _08070B1E -_08070B18: - adds r0, r5, #0 - bl sub_08008AA0 -_08070B1E: - ldr r2, _08070BB8 @ =gPlayerState - ldrb r1, [r2, #0x1b] - movs r0, #0x10 - ands r0, r1 - cmp r0, #0 - bne _08070B56 - ldrb r3, [r2, #0xd] - strb r3, [r5, #0x15] - ldr r0, [r2, #0x30] - movs r1, #0x80 - lsls r1, r1, #3 - ands r0, r1 - cmp r0, #0 - beq _08070B56 - movs r0, #0xc0 - lsls r0, r0, #2 - strh r0, [r5, #0x24] - movs r0, #0x80 - ands r0, r3 - cmp r0, #0 - beq _08070B52 - ldrb r1, [r5, #0x14] - movs r0, #0xe - ands r0, r1 - lsls r0, r0, #2 - strb r0, [r5, #0x15] -_08070B52: - bl DeleteClones -_08070B56: - movs r4, #0 - ldr r3, _08070BB8 @ =gPlayerState - ldrb r2, [r3, #7] - ldrb r0, [r5, #0x15] - orrs r0, r2 - movs r1, #0x80 - ands r0, r1 - ldrb r1, [r3, #0xa] - orrs r0, r1 - cmp r0, #0 - bne _08070B8E - movs r0, #0x10 - ands r0, r2 - cmp r0, #0 - bne _08070B8E - movs r4, #1 - ldrb r0, [r7] - cmp r0, #0 - bne _08070B8E - ldrb r1, [r3, #0x1e] - movs r0, #0x40 - ands r0, r1 - cmp r0, #0 - bne _08070B8C - ldrb r0, [r3, #0x12] - cmp r0, #0x17 - beq _08070B8E -_08070B8C: - movs r4, #3 -_08070B8E: - adds r0, r5, #0 - adds r1, r4, #0 - bl sub_08070BEC - adds r0, r5, #0 - bl sub_08008AC6 - ldrb r0, [r7] - cmp r0, #0 - bne _08070BE4 - ldr r1, _08070BB8 @ =gPlayerState - ldrb r0, [r1, #0xb] - cmp r0, #0 - bne _08070BE4 - ldrb r0, [r1, #0x12] - cmp r0, #0x1e - beq _08070BE4 - adds r0, r5, #0 - bl sub_0806F948 - b _08070BE4 - .align 2, 0 -_08070BB8: .4byte gPlayerState -_08070BBC: - ldr r0, [r4, #0x2c] - cmp r0, #0 - bne _08070BC8 - adds r0, r5, #0 - bl UpdateAnimationSingleFrame -_08070BC8: - adds r0, r4, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08070BE4 - ldr r0, _08070BE8 @ =gRoomTransition - ldr r0, [r0] - movs r1, #7 - ands r0, r1 - cmp r0, #0 - bne _08070BE4 - adds r0, r5, #0 - bl CreateWaterTrace -_08070BE4: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08070BE8: .4byte gRoomTransition - .syntax divided diff --git a/asm/non_matching/vram/CopyOAM.inc b/asm/non_matching/vram/CopyOAM.inc deleted file mode 100644 index d9213f65..00000000 --- a/asm/non_matching/vram/CopyOAM.inc +++ /dev/null @@ -1,76 +0,0 @@ - .syntax unified - push {r4, lr} - ldr r1, _080AD948 @ =gMain - ldrb r0, [r1, #0xb] - adds r2, r0, #0 - cmp r2, #0 - bne _080AD958 - ldr r1, _080AD94C @ =gOAMControls - movs r3, #0xa4 - lsls r3, r3, #3 - adds r0, r1, r3 - strb r2, [r0] - ldr r3, _080AD950 @ =0x00000664 - adds r0, r1, r3 - strb r2, [r0] - movs r3, #0xf5 - lsls r3, r3, #3 - adds r0, r1, r3 - strb r2, [r0] - ldr r3, _080AD954 @ =0x000008EC - adds r0, r1, r3 - strb r2, [r0] - adds r4, r1, #0 - b _080AD95E - .align 2, 0 -_080AD948: .4byte gMain -_080AD94C: .4byte gOAMControls -_080AD950: .4byte 0x00000664 -_080AD954: .4byte 0x000008EC -_080AD958: - subs r0, #1 - strb r0, [r1, #0xb] - ldr r4, _080AD9A8 @ =gOAMControls -_080AD95E: - ldrb r1, [r4, #3] - movs r0, #0x80 - subs r2, r0, r1 - cmp r2, #0 - ble _080AD980 - lsls r1, r1, #3 - adds r0, r4, #0 - adds r0, #0x20 - adds r1, r1, r0 - movs r3, #0xa8 - lsls r3, r3, #2 - adds r0, r3, #0 -_080AD976: - strh r0, [r1] - adds r1, #8 - subs r2, #1 - cmp r2, #0 - bne _080AD976 -_080AD980: - adds r1, r4, #0 - ldr r0, _080AD9AC @ =0x00000427 - adds r2, r1, r0 - ldrb r0, [r2] - cmp r0, #0 - beq _080AD9A0 - movs r0, #0 - strb r0, [r2] - movs r2, #0x84 - lsls r2, r2, #3 - adds r0, r1, r2 - adds r1, #0x26 - movs r2, #0x20 - movs r3, #8 - bl ObjAffineSet -_080AD9A0: - movs r0, #1 - strb r0, [r4] - pop {r4, pc} - .align 2, 0 -_080AD9A8: .4byte gOAMControls -_080AD9AC: .4byte 0x00000427 - .syntax divided diff --git a/asm/object/bigPushableLever.s b/asm/object/bigPushableLever.s deleted file mode 100644 index 6bf1711e..00000000 --- a/asm/object/bigPushableLever.s +++ /dev/null @@ -1,357 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start BigPushableLever -BigPushableLever: @ 0x08098EE0 - push {lr} - ldr r2, _08098EF4 @ =gUnk_081236DC - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08098EF4: .4byte gUnk_081236DC - - thumb_func_start sub_08098EF8 -sub_08098EF8: @ 0x08098EF8 - push {lr} - adds r3, r0, #0 - adds r3, #0x29 - ldrb r2, [r3] - movs r1, #8 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #5 - orrs r1, r2 - strb r1, [r3] - bl sub_08098FCC - pop {pc} - .align 2, 0 - - thumb_func_start sub_08098F14 -sub_08098F14: @ 0x08098F14 - push {r4, r5, r6, lr} - adds r5, r0, #0 - bl sub_080990EC - cmp r0, #0 - beq _08098F84 - movs r6, #0 - movs r0, #2 - strb r0, [r5, #0xc] - adds r0, r5, #0 - adds r0, #0x74 - ldrh r0, [r0] - adds r1, r5, #0 - adds r1, #0x70 - ldrh r1, [r1] - adds r4, r5, #0 - adds r4, #0x38 - ldrb r2, [r4] - bl SetTile - adds r0, r5, #0 - adds r0, #0x76 - ldrh r0, [r0] - adds r1, r5, #0 - adds r1, #0x72 - ldrh r1, [r1] - ldrb r2, [r4] - bl SetTile - movs r0, #0x99 - lsls r0, r0, #1 - bl EnqueueSFX - adds r0, r5, #0 - movs r1, #0x1e - bl RequestPriorityDuration - bl sub_08079F8C - cmp r0, #0 - beq _08098F84 - ldr r2, _08098F88 @ =gPlayerState - movs r0, #0x98 - strb r0, [r2, #6] - movs r0, #5 - strb r0, [r2, #0xc] - ldr r0, [r2, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r2, #0x30] - ldr r1, _08098F8C @ =gPlayerEntity - strh r6, [r1, #0x2c] - strh r6, [r1, #0x30] - ldrb r0, [r1, #0x14] - lsls r0, r0, #2 - strb r0, [r1, #0x15] -_08098F84: - pop {r4, r5, r6, pc} - .align 2, 0 -_08098F88: .4byte gPlayerState -_08098F8C: .4byte gPlayerEntity - - thumb_func_start sub_08098F90 -sub_08098F90: @ 0x08098F90 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _08098FC8 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _08098FB8 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - b _08098FC2 -_08098FB8: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl ClearFlag -_08098FC2: - adds r0, r4, #0 - bl sub_08098FCC -_08098FC8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08098FCC -sub_08098FCC: @ 0x08098FCC - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - adds r2, r0, #0 - adds r2, #0x84 - movs r1, #0x3c - strh r1, [r2] - bl sub_08098FE0 - pop {pc} - - thumb_func_start sub_08098FE0 -sub_08098FE0: @ 0x08098FE0 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _0809906C - strb r0, [r6, #0xb] - movs r0, #0x2e - ldrsh r2, [r6, r0] - ldr r1, _08099060 @ =gRoomControls - ldrh r0, [r1, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r3, #0x3f - ands r2, r3 - movs r4, #0x32 - ldrsh r0, [r6, r4] - ldrh r1, [r1, #8] - adds r1, #0x10 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r2, r0 - adds r5, r6, #0 - adds r5, #0x70 - strh r2, [r5] - subs r2, #0x40 - adds r7, r6, #0 - adds r7, #0x72 - strh r2, [r7] - ldrh r0, [r5] - adds r4, r6, #0 - adds r4, #0x38 - ldrb r1, [r4] - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x74 - strh r0, [r1] - ldrh r0, [r7] - ldrb r1, [r4] - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x76 - strh r0, [r1] - ldr r0, _08099064 @ =0x00004057 - ldrh r1, [r5] - ldrb r2, [r4] - bl SetTile - ldr r0, _08099068 @ =0x00004058 - ldrh r1, [r7] - ldrb r2, [r4] - bl SetTile - adds r0, r6, #0 - movs r1, #1 - bl InitializeAnimation - b _080990DC - .align 2, 0 -_08099060: .4byte gRoomControls -_08099064: .4byte 0x00004057 -_08099068: .4byte 0x00004058 -_0809906C: - movs r0, #1 - strb r0, [r6, #0xb] - movs r0, #0x2e - ldrsh r1, [r6, r0] - ldr r2, _080990E0 @ =gRoomControls - ldrh r0, [r2, #6] - adds r0, #0x10 - subs r1, r1, r0 - asrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - movs r4, #0x32 - ldrsh r0, [r6, r4] - ldrh r2, [r2, #8] - subs r0, r0, r2 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - adds r5, r6, #0 - adds r5, #0x70 - strh r1, [r5] - subs r1, #1 - adds r7, r6, #0 - adds r7, #0x72 - strh r1, [r7] - ldrh r0, [r5] - adds r4, r6, #0 - adds r4, #0x38 - ldrb r1, [r4] - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x74 - strh r0, [r1] - ldrh r0, [r7] - ldrb r1, [r4] - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x76 - strh r0, [r1] - ldr r0, _080990E4 @ =0x00004055 - ldrh r1, [r5] - ldrb r2, [r4] - bl SetTile - ldr r0, _080990E8 @ =0x00004056 - ldrh r1, [r7] - ldrb r2, [r4] - bl SetTile - adds r0, r6, #0 - movs r1, #0 - bl InitializeAnimation -_080990DC: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080990E0: .4byte gRoomControls -_080990E4: .4byte 0x00004055 -_080990E8: .4byte 0x00004056 - - thumb_func_start sub_080990EC -sub_080990EC: @ 0x080990EC - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r4, #0 - adds r6, #0x72 - ldrh r0, [r6] - adds r5, r4, #0 - adds r5, #0x38 - ldrb r1, [r5] - bl GetTileIndex - ldr r1, _0809911C @ =0x00004059 - cmp r0, r1 - bne _08099140 - adds r1, r4, #0 - adds r1, #0x84 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _08099120 - movs r0, #1 - b _08099156 - .align 2, 0 -_0809911C: .4byte 0x00004059 -_08099120: - adds r0, r4, #0 - bl sub_08099158 - ldr r1, _0809913C @ =gUnk_081236E8 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - ldrh r1, [r6] - ldrb r2, [r5] - bl SetTile - b _08099154 - .align 2, 0 -_0809913C: .4byte gUnk_081236E8 -_08099140: - adds r1, r4, #0 - adds r1, #0x84 - movs r2, #0 - movs r0, #0x3c - strh r0, [r1] - adds r0, r4, #0 - adds r0, #0x62 - strb r2, [r0] - adds r0, #1 - strb r2, [r0] -_08099154: - movs r0, #0 -_08099156: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08099158 -sub_08099158: @ 0x08099158 - push {r4, lr} - adds r3, r0, #0 - ldrb r0, [r3, #0xb] - ldr r4, _08099198 @ =gUnk_081236F4 - cmp r0, #0 - bne _08099166 - ldr r4, _0809919C @ =gUnk_081236EC -_08099166: - adds r2, r3, #0 - adds r2, #0x84 - ldrh r0, [r2] - lsrs r0, r0, #2 - movs r1, #6 - ands r0, r1 - adds r4, r4, r0 - ldrb r0, [r4] - adds r1, r3, #0 - adds r1, #0x62 - strb r0, [r1] - ldrb r1, [r4, #1] - adds r0, r3, #0 - adds r0, #0x63 - strb r1, [r0] - ldrh r1, [r2] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _08099194 - ldr r0, _080991A0 @ =0x00000131 - bl EnqueueSFX -_08099194: - pop {r4, pc} - .align 2, 0 -_08099198: .4byte gUnk_081236F4 -_0809919C: .4byte gUnk_081236EC -_080991A0: .4byte 0x00000131 diff --git a/asm/object/hittableLever.s b/asm/object/hittableLever.s deleted file mode 100644 index 0efb82fb..00000000 --- a/asm/object/hittableLever.s +++ /dev/null @@ -1,188 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start HittableLever -HittableLever: @ 0x0808A6F4 - push {lr} - adds r2, r0, #0 - adds r0, #0x3d - movs r1, #0 - ldrsb r1, [r0, r1] - cmp r1, #0 - bne _0808A706 - adds r0, #0x33 - strh r1, [r0] -_0808A706: - ldr r0, _0808A718 @ =gUnk_08121178 - ldrb r1, [r2, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r2, #0 - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808A718: .4byte gUnk_08121178 - - thumb_func_start sub_0808A71C -sub_0808A71C: @ 0x0808A71C - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #1 - strb r5, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r1, #3 - movs r0, #0x8f - strb r0, [r1] - subs r1, #4 - movs r0, #0xa - strb r0, [r1] - ldr r0, _0808A75C @ =gUnk_08121180 - str r0, [r4, #0x48] - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0808A764 - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - beq _0808A760 - strb r5, [r4, #0xa] - b _0808A76E - .align 2, 0 -_0808A75C: .4byte gUnk_08121180 -_0808A760: - strb r0, [r4, #0xa] - b _0808A76E -_0808A764: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag -_0808A76E: - adds r0, r4, #0 - bl sub_0808A7D8 - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_0808A778 -sub_0808A778: @ 0x0808A778 - push {r4, r5, lr} - adds r5, r0, #0 - adds r0, #0x41 - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0808A7D0 - adds r1, r5, #0 - adds r1, #0x70 - ldrh r0, [r1] - cmp r0, #0 - bne _0808A7D0 - movs r0, #1 - strh r0, [r1] - ldrb r0, [r5, #0xa] - movs r1, #1 - eors r0, r1 - strb r0, [r5, #0xa] - adds r1, r5, #0 - adds r1, #0x3d - movs r0, #0xe8 - strb r0, [r1] - adds r0, r5, #0 - bl sub_0808A7D8 - adds r4, r5, #0 - adds r4, #0x86 - ldrh r0, [r4] - bl CheckFlags - cmp r0, #0 - beq _0808A7C2 - ldrh r0, [r4] - bl ClearFlag - b _0808A7C8 -_0808A7C2: - ldrh r0, [r4] - bl SetFlag -_0808A7C8: - ldr r1, _0808A7D4 @ =0x00000117 - adds r0, r5, #0 - bl SoundReqClipped -_0808A7D0: - pop {r4, r5, pc} - .align 2, 0 -_0808A7D4: .4byte 0x00000117 - - thumb_func_start sub_0808A7D8 -sub_0808A7D8: @ 0x0808A7D8 - push {r4, r5, r6, lr} - adds r5, r0, #0 - ldrb r0, [r5, #0xa] - cmp r0, #0 - beq _0808A818 - movs r0, #0xde - lsls r0, r0, #2 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _0808A814 @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - 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 sub_0807B7D8 - b _0808A844 - .align 2, 0 -_0808A814: .4byte gRoomControls -_0808A818: - ldr r0, _0808A848 @ =0x00000377 - movs r2, #0x2e - ldrsh r1, [r5, r2] - ldr r3, _0808A84C @ =gRoomControls - ldrh r2, [r3, #6] - subs r1, r1, r2 - asrs r1, r1, #4 - movs r4, #0x3f - ands r1, r4 - movs r6, #0x32 - ldrsh r2, [r5, r6] - 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 sub_0807B7D8 -_0808A844: - pop {r4, r5, r6, pc} - .align 2, 0 -_0808A848: .4byte 0x00000377 -_0808A84C: .4byte gRoomControls diff --git a/asm/object/lilypadLarge.s b/asm/object/lilypadLarge.s deleted file mode 100644 index cdc6ede6..00000000 --- a/asm/object/lilypadLarge.s +++ /dev/null @@ -1,1479 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start LilypadLarge -LilypadLarge: @ 0x080854EC - push {lr} - ldr r2, _08085500 @ =gUnk_08120608 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08085500: .4byte gUnk_08120608 - - thumb_func_start sub_08085504 -sub_08085504: @ 0x08085504 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xa] - cmp r0, #0xff - bne _08085520 - movs r0, #0x46 - bl GetInventoryValue - cmp r0, #0 - beq _0808551C - bl DeleteThisEntity -_0808551C: - movs r0, #0 - strb r0, [r4, #0xa] -_08085520: - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _08085552 - ldr r0, _08085540 @ =gArea - ldrb r0, [r0, #1] - cmp r0, #0x1b - beq _08085544 - ldrb r0, [r4, #0xb] - bl CheckLocalFlag - cmp r0, #0 - bne _08085552 - movs r0, #5 - strb r0, [r4, #0xc] - b _080855E2 - .align 2, 0 -_08085540: .4byte gArea -_08085544: - ldrb r0, [r4, #0xb] - bl CheckLocalFlag - cmp r0, #0 - bne _08085552 - bl DeleteThisEntity -_08085552: - ldrb r0, [r4, #0xe] - cmp r0, #0 - beq _0808556C - adds r0, r4, #0 - bl sub_080040A2 - cmp r0, #0 - bne _08085566 - bl DeleteThisEntity -_08085566: - movs r0, #0 - strb r0, [r4, #0xe] - b _0808557A -_0808556C: - adds r0, r4, #0 - bl EntityHasDuplicateID - cmp r0, #0 - beq _0808557A - bl DeleteThisEntity -_0808557A: - movs r2, #1 - strb r2, [r4, #0xc] - movs r3, #0 - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r4, #0x24] - movs r0, #0x29 - adds r0, r0, r4 - mov ip, r0 - ldrb r1, [r0] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - mov r1, ip - strb r0, [r1] - ldr r0, _080855E4 @ =gUnk_08120640 - str r0, [r4, #0x48] - ldrb r1, [r4, #0x10] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r1, r4, #0 - adds r1, #0x3c - movs r0, #7 - strb r0, [r1] - adds r0, r4, #0 - adds r0, #0x3f - strb r2, [r0] - subs r1, #1 - movs r0, #4 - strb r0, [r1] - movs r0, #0x80 - lsls r0, r0, #0x11 - str r0, [r4, #0x78] - adds r1, #0x43 - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r1] - adds r0, r4, #0 - adds r0, #0x85 - strb r3, [r0] - subs r0, #1 - strb r3, [r0] - adds r0, r4, #0 - movs r1, #9 - bl InitializeAnimation - adds r0, r4, #0 - bl sub_080855E8 -_080855E2: - pop {r4, pc} - .align 2, 0 -_080855E4: .4byte gUnk_08120640 - - thumb_func_start sub_080855E8 -sub_080855E8: @ 0x080855E8 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r7, r0, #0 - ldrb r1, [r7, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r7, #0x10] - ldr r6, _0808564C @ =gPlayerEntity - adds r0, r7, #0 - adds r1, r6, #0 - movs r2, #0x18 - bl sub_0806FC80 - adds r1, r0, #0 - cmp r1, #0 - beq _080856EE - ldr r3, _08085650 @ =gPlayerState - ldr r0, [r3, #0x30] - movs r1, #2 - orrs r0, r1 - str r0, [r3, #0x30] - ldr r4, [r6, #0x34] - cmp r4, #0 - beq _0808561C - b _080857CE -_0808561C: - adds r5, r3, #0 - adds r5, #0x26 - ldrb r0, [r5] - cmp r0, #0 - beq _08085634 - adds r2, r6, #0 - adds r2, #0x3c - ldrb r1, [r2] - movs r0, #0xfb - ands r0, r1 - strb r0, [r2] - strb r4, [r5] -_08085634: - adds r0, r3, #0 - adds r0, #0x84 - str r7, [r0] - adds r0, r7, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - bne _08085654 - adds r0, r6, #0 - bl ResetCollisionLayer - b _0808565A - .align 2, 0 -_0808564C: .4byte gPlayerEntity -_08085650: .4byte gPlayerState -_08085654: - adds r0, r6, #0 - bl sub_08004542 -_0808565A: - ldrb r0, [r7, #0xf] - cmp r0, #0 - bne _0808568C - movs r0, #4 - strb r0, [r7, #0xf] -_08085664: - adds r0, r7, #0 - movs r1, #8 - movs r2, #0xa - bl sub_080A2AF4 - ldrb r0, [r7, #0xf] - subs r0, #1 - strb r0, [r7, #0xf] - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - bne _08085664 - movs r0, #1 - strb r0, [r7, #0xf] - ldrb r1, [r7, #0xe] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r7, #0xe] - str r2, [r7, #0x70] - str r2, [r7, #0x6c] -_0808568C: - ldr r2, _080856B8 @ =gPlayerState - ldrb r0, [r2, #0x1c] - cmp r0, #3 - beq _08085696 - b _080857CE -_08085696: - ldr r1, _080856BC @ =gUnk_08120620 - ldrb r0, [r2, #0x1d] - subs r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r4, [r0] - ldr r0, _080856C0 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - movs r1, #6 - ands r1, r0 - cmp r1, #2 - beq _080856DE - cmp r1, #2 - bgt _080856C4 - cmp r1, #0 - beq _080856D6 - b _080857CE - .align 2, 0 -_080856B8: .4byte gPlayerState -_080856BC: .4byte gUnk_08120620 -_080856C0: .4byte gPlayerEntity -_080856C4: - cmp r1, #4 - beq _080856CE - cmp r1, #6 - beq _080856E6 - b _080857CE -_080856CE: - ldr r0, [r7, #0x70] - subs r0, r0, r4 - str r0, [r7, #0x70] - b _080857CE -_080856D6: - ldr r0, [r7, #0x70] - adds r0, r0, r4 - str r0, [r7, #0x70] - b _080857CE -_080856DE: - ldr r0, [r7, #0x6c] - subs r0, r0, r4 - str r0, [r7, #0x6c] - b _080857CE -_080856E6: - ldr r0, [r7, #0x6c] - adds r0, r0, r4 - str r0, [r7, #0x6c] - b _080857CE -_080856EE: - ldrb r0, [r7, #0xf] - cmp r0, #0 - beq _080856FC - strb r1, [r7, #0xf] - movs r0, #0x83 - bl SoundReq -_080856FC: - adds r2, r7, #0 - adds r2, #0x41 - ldrb r1, [r2] - movs r0, #0x7f - ands r0, r1 - mov r8, r2 - cmp r0, #0x13 - bne _080857C8 - movs r0, #0x2e - ldrsh r1, [r6, r0] - ldr r3, _08085758 @ =gUnk_08126EE4 - ldrb r2, [r6, #0x14] - movs r0, #0xe - ands r0, r2 - adds r0, r0, r3 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r5, r1, r0 - movs r0, #0x32 - ldrsh r1, [r6, r0] - movs r0, #1 - orrs r0, r2 - adds r0, r0, r3 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r3, r1, r0 - movs r1, #0x2e - ldrsh r0, [r7, r1] - movs r2, #0x32 - ldrsh r1, [r7, r2] - adds r2, r5, #0 - bl sub_080045D4 - strb r0, [r7, #0x15] - ldr r0, _0808575C @ =gPlayerState - ldrb r0, [r0, #0x1d] - cmp r0, #2 - beq _0808576A - cmp r0, #2 - bgt _08085760 - cmp r0, #1 - beq _08085770 - b _08085774 - .align 2, 0 -_08085758: .4byte gUnk_08126EE4 -_0808575C: .4byte gPlayerState -_08085760: - cmp r0, #3 - bne _08085774 - movs r4, #0x80 - lsls r4, r4, #3 - b _08085774 -_0808576A: - movs r4, #0xc0 - lsls r4, r4, #2 - b _08085774 -_08085770: - movs r4, #0x80 - lsls r4, r4, #2 -_08085774: - ldr r6, _080858A8 @ =gSineTable - ldrb r0, [r7, #0x15] - lsls r0, r0, #4 - adds r0, r0, r6 - movs r1, #0 - ldrsh r0, [r0, r1] - lsls r4, r4, #0x10 - asrs r4, r4, #0x18 - adds r1, r4, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - movs r5, #0x80 - lsls r5, r5, #1 - adds r1, r5, #0 - bl FixedDiv - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r7, #0x6c] - adds r1, r1, r0 - str r1, [r7, #0x6c] - ldrb r0, [r7, #0x15] - lsls r0, r0, #4 - adds r0, #0x80 - adds r0, r0, r6 - movs r2, #0 - ldrsh r0, [r0, r2] - adds r1, r4, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - adds r1, r5, #0 - bl FixedDiv - lsls r0, r0, #0x10 - asrs r0, r0, #8 - ldr r1, [r7, #0x70] - subs r1, r1, r0 - str r1, [r7, #0x70] -_080857C8: - movs r0, #0 - mov r1, r8 - strb r0, [r1] -_080857CE: - ldr r0, [r7, #0x2c] - str r0, [r7, #0x54] - ldr r0, [r7, #0x30] - str r0, [r7, #0x50] - ldr r0, [r7, #0x6c] - cmp r0, #0 - bne _080857E4 - ldr r0, [r7, #0x70] - cmp r0, #0 - bne _080857E4 - b _080859F4 -_080857E4: - ldr r0, [r7, #0x70] - ldr r1, _080858AC @ =0xFFFF0000 - cmp r0, r1 - blt _080857F4 - movs r1, #0x80 - lsls r1, r1, #9 - cmp r0, r1 - ble _080857F6 -_080857F4: - str r1, [r7, #0x70] -_080857F6: - ldr r0, [r7, #0x6c] - ldr r1, _080858AC @ =0xFFFF0000 - cmp r0, r1 - blt _08085806 - movs r1, #0x80 - lsls r1, r1, #9 - cmp r0, r1 - ble _08085808 -_08085806: - str r1, [r7, #0x6c] -_08085808: - ldr r0, _080858B0 @ =gRoomTransition - ldr r0, [r0] - movs r1, #0xf - ands r0, r1 - cmp r0, #0 - bne _0808581A - adds r0, r7, #0 - bl sub_080A2AD4 -_0808581A: - ldr r0, [r7, #0x2c] - ldr r1, [r7, #0x6c] - adds r5, r0, r1 - ldr r1, [r7, #0x30] - ldr r2, [r7, #0x70] - adds r3, r1, r2 - adds r2, r5, #0 - bl sub_080045D4 - strb r0, [r7, #0x15] - ldr r0, [r7, #0x6c] - lsls r0, r0, #8 - asrs r0, r0, #0x10 - movs r4, #0x80 - lsls r4, r4, #1 - adds r1, r4, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - ldr r5, _080858A8 @ =gSineTable - ldrb r1, [r7, #0x15] - lsls r1, r1, #4 - adds r1, r1, r5 - movs r2, #0 - ldrsh r1, [r1, r2] - bl FixedDiv - strh r0, [r7, #0x24] - ldr r0, [r7, #0x70] - lsls r0, r0, #8 - asrs r0, r0, #0x10 - adds r1, r4, #0 - bl FixedMul - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - ldrb r1, [r7, #0x15] - lsls r1, r1, #4 - adds r1, #0x80 - adds r1, r1, r5 - movs r2, #0 - ldrsh r1, [r1, r2] - bl FixedDiv - lsls r0, r0, #0x10 - asrs r0, r0, #0x10 - rsbs r4, r0, #0 - movs r1, #0x24 - ldrsh r0, [r7, r1] - cmp r4, r0 - ble _08085884 - strh r4, [r7, #0x24] -_08085884: - ldrb r0, [r7, #0xb] - cmp r0, #0 - beq _080858BC - adds r0, r7, #0 - adds r0, #0x7e - movs r2, #0 - ldrsh r1, [r0, r2] - ldr r0, _080858B4 @ =0x00000FFF - cmp r1, r0 - bgt _080858B8 - movs r0, #0x24 - ldrsh r1, [r7, r0] - lsls r1, r1, #0xc - ldr r0, [r7, #0x7c] - adds r0, r0, r1 - str r0, [r7, #0x7c] - b _080858E0 - .align 2, 0 -_080858A8: .4byte gSineTable -_080858AC: .4byte 0xFFFF0000 -_080858B0: .4byte gRoomTransition -_080858B4: .4byte 0x00000FFF -_080858B8: - movs r0, #0 - b _080858DE -_080858BC: - adds r0, r7, #0 - adds r0, #0x7e - movs r2, #0 - ldrsh r1, [r0, r2] - ldr r0, _080858D8 @ =0xFFFFF000 - cmp r1, r0 - ble _080858DC - movs r0, #0x24 - ldrsh r1, [r7, r0] - lsls r1, r1, #0xc - ldr r0, [r7, #0x7c] - subs r0, r0, r1 - str r0, [r7, #0x7c] - b _080858E0 - .align 2, 0 -_080858D8: .4byte 0xFFFFF000 -_080858DC: - movs r0, #1 -_080858DE: - strb r0, [r7, #0xb] -_080858E0: - adds r0, r7, #0 - bl sub_08085EFC - adds r0, r7, #0 - bl sub_080AF134 - ldr r1, [r7, #0x54] - ldr r0, [r7, #0x2c] - cmp r1, r0 - bne _0808590C - adds r0, r7, #0 - adds r0, #0x85 - ldrb r1, [r0] - adds r2, r0, #0 - cmp r1, #2 - bne _08085906 - movs r0, #0 - str r0, [r7, #0x6c] - b _08085916 -_08085906: - adds r0, r1, #1 - strb r0, [r2] - b _08085916 -_0808590C: - adds r1, r7, #0 - adds r1, #0x85 - movs r0, #0 - strb r0, [r1] - adds r2, r1, #0 -_08085916: - ldr r1, [r7, #0x50] - ldr r0, [r7, #0x30] - cmp r1, r0 - bne _0808592E - ldrb r0, [r2] - cmp r0, #2 - bne _0808592A - movs r0, #0 - str r0, [r7, #0x70] - b _08085932 -_0808592A: - adds r0, #1 - b _08085930 -_0808592E: - movs r0, #0 -_08085930: - strb r0, [r2] -_08085932: - ldr r0, _0808595C @ =gPlayerState - ldr r0, [r0, #0x30] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - beq _08085944 - adds r0, r7, #0 - bl sub_08085F1C -_08085944: - ldr r1, [r7, #0x6c] - cmp r1, #0 - beq _08085998 - cmp r1, #0 - bge _0808596E - movs r0, #0x80 - rsbs r0, r0, #0 - cmp r1, r0 - ble _08085960 - movs r0, #0 - b _08085964 - .align 2, 0 -_0808595C: .4byte gPlayerState -_08085960: - adds r0, r1, #0 - adds r0, #0x80 -_08085964: - str r0, [r7, #0x6c] - ldrh r2, [r7, #0x2a] - movs r1, #0xe0 - lsls r1, r1, #4 - b _08085982 -_0808596E: - cmp r1, #0x7f - bhi _08085976 - movs r0, #0 - b _0808597A -_08085976: - adds r0, r1, #0 - subs r0, #0x80 -_0808597A: - str r0, [r7, #0x6c] - ldrh r2, [r7, #0x2a] - movs r1, #0xe0 - lsls r1, r1, #8 -_08085982: - adds r0, r1, #0 - ands r0, r2 - cmp r0, r1 - bne _08085998 - ldr r0, [r7, #0x6c] - cmp r0, #0 - bge _08085992 - adds r0, #3 -_08085992: - asrs r0, r0, #2 - rsbs r0, r0, #0 - str r0, [r7, #0x6c] -_08085998: - ldr r1, [r7, #0x70] - cmp r1, #0 - beq _080859E6 - cmp r1, #0 - bge _080859C0 - movs r0, #0x80 - rsbs r0, r0, #0 - cmp r1, r0 - ble _080859AE - movs r0, #0 - b _080859B2 -_080859AE: - adds r0, r1, #0 - adds r0, #0x80 -_080859B2: - str r0, [r7, #0x70] - ldrh r1, [r7, #0x2a] - movs r0, #0xe - ands r0, r1 - cmp r0, #0xe - bne _080859E6 - b _080859D8 -_080859C0: - cmp r1, #0x7f - bhi _080859C8 - movs r0, #0 - b _080859CC -_080859C8: - adds r0, r1, #0 - subs r0, #0x80 -_080859CC: - str r0, [r7, #0x70] - ldrh r1, [r7, #0x2a] - movs r0, #0xe0 - ands r0, r1 - cmp r0, #0xe0 - bne _080859E6 -_080859D8: - ldr r0, [r7, #0x70] - cmp r0, #0 - bge _080859E0 - adds r0, #3 -_080859E0: - asrs r0, r0, #2 - rsbs r0, r0, #0 - str r0, [r7, #0x70] -_080859E6: - adds r0, r7, #0 - bl sub_08085D28 - adds r0, r7, #0 - bl sub_08085D60 - b _08085A0A -_080859F4: - ldr r0, _08085A18 @ =gRoomTransition - ldr r0, [r0] - movs r1, #0x1f - ands r0, r1 - cmp r0, #0 - bne _08085A0A - adds r0, r7, #0 - movs r1, #8 - movs r2, #0xa - bl sub_080A2AF4 -_08085A0A: - adds r0, r7, #0 - bl sub_08085F48 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08085A18: .4byte gRoomTransition - - thumb_func_start sub_08085A1C -sub_08085A1C: @ 0x08085A1C - push {lr} - ldr r2, _08085A3C @ =gUnk_0812062C - ldrb r1, [r0, #0xd] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - ldr r2, _08085A40 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #2 - orrs r0, r1 - str r0, [r2, #0x30] - bl sub_08078B48 - pop {pc} - .align 2, 0 -_08085A3C: .4byte gUnk_0812062C -_08085A40: .4byte gPlayerState - - thumb_func_start sub_08085A44 -sub_08085A44: @ 0x08085A44 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x80 - lsls r0, r0, #2 - strh r0, [r4, #0x24] - adds r0, r4, #0 - movs r1, #0x10 - movs r2, #0x18 - bl sub_080002B4 - cmp r0, #0x11 - beq _08085A62 - movs r0, #0x18 - strb r0, [r4, #0x15] - b _08085A82 -_08085A62: - movs r1, #0x10 - rsbs r1, r1, #0 - adds r0, r4, #0 - movs r2, #0x18 - bl sub_080002B4 - cmp r0, #0x11 - beq _08085A78 - movs r0, #8 - strb r0, [r4, #0x15] - b _08085A82 -_08085A78: - movs r0, #0x10 - strb r0, [r4, #0x15] - movs r0, #1 - strb r0, [r4, #0xd] - b _08085A94 -_08085A82: - adds r0, r4, #0 - bl sub_08085EFC - adds r0, r4, #0 - bl sub_080AF134 - adds r0, r4, #0 - bl sub_08085F1C -_08085A94: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08085A98 -sub_08085A98: @ 0x08085A98 - push {r4, lr} - adds r4, r0, #0 - bl sub_08085EFC - adds r0, r4, #0 - bl LinearMoveUpdate - adds r0, r4, #0 - bl sub_08085F1C - ldr r1, [r4, #0x78] - ldr r0, _08085B00 @ =0x007FFFFF - cmp r1, r0 - bls _08085ACC - ldr r2, _08085B04 @ =0xFFFE0000 - adds r0, r1, r2 - str r0, [r4, #0x78] - adds r0, r4, #0 - adds r0, #0x7a - ldrh r2, [r0] - adds r0, #4 - ldrh r3, [r0] - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_0805EC9C -_08085ACC: - adds r0, r4, #0 - movs r1, #0 - movs r2, #0x18 - bl sub_080002B4 - cmp r0, #0x11 - beq _08085B34 - movs r0, #2 - strb r0, [r4, #0xd] - ldr r0, _08085B08 @ =gArea - ldrb r0, [r0, #1] - cmp r0, #0x1b - bne _08085B10 - ldrh r0, [r4, #0x32] - adds r0, #0xd0 - strh r0, [r4, #0x32] - ldr r0, _08085B0C @ =0x0000FF30 - strh r0, [r4, #0x36] - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #0x46 - strh r0, [r1] - movs r0, #0x73 - bl SetLocalFlag - b _08085B22 - .align 2, 0 -_08085B00: .4byte 0x007FFFFF -_08085B04: .4byte 0xFFFE0000 -_08085B08: .4byte gArea -_08085B0C: .4byte 0x0000FF30 -_08085B10: - ldrh r0, [r4, #0x32] - adds r0, #0x40 - strh r0, [r4, #0x32] - ldr r0, _08085B38 @ =0x0000FFC0 - strh r0, [r4, #0x36] - adds r1, r4, #0 - adds r1, #0x82 - movs r0, #0xf - strh r0, [r1] -_08085B22: - adds r0, r4, #0 - movs r1, #0x2b - movs r2, #0 - movs r3, #0 - bl CreateObjectWithParent - ldr r0, _08085B3C @ =0x0000012D - bl SoundReq -_08085B34: - pop {r4, pc} - .align 2, 0 -_08085B38: .4byte 0x0000FFC0 -_08085B3C: .4byte 0x0000012D - - thumb_func_start sub_08085B40 -sub_08085B40: @ 0x08085B40 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, [r5, #0x34] - cmp r0, #0 - beq _08085BB4 - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r5, #0 - bl GravityUpdate - cmp r0, #0 - beq _08085BE8 - ldr r1, [r5, #0x78] - ldr r0, _08085B9C @ =0x011FFFFF - cmp r1, r0 - bhi _08085B7A - movs r2, #0x80 - lsls r2, r2, #0xd - adds r0, r1, r2 - str r0, [r5, #0x78] - adds r0, r5, #0 - adds r0, #0x7a - ldrh r2, [r0] - adds r0, #4 - ldrh r3, [r0] - adds r0, r5, #0 - adds r1, r2, #0 - bl sub_0805EC9C -_08085B7A: - ldr r4, _08085BA0 @ =gPlayerEntity - ldrh r3, [r5, #0x32] - ldrh r0, [r5, #0x36] - adds r0, r3, r0 - adds r1, r5, #0 - adds r1, #0x74 - ldrh r1, [r1] - subs r2, r0, r1 - strh r2, [r4, #0x32] - ldr r0, _08085BA4 @ =gArea - ldrb r0, [r0, #1] - cmp r0, #0x1b - bne _08085BA8 - subs r0, r3, r1 - adds r1, r2, #0 - adds r1, #0xd0 - b _08085BAE - .align 2, 0 -_08085B9C: .4byte 0x011FFFFF -_08085BA0: .4byte gPlayerEntity -_08085BA4: .4byte gArea -_08085BA8: - subs r0, r3, r1 - adds r1, r2, #0 - adds r1, #0x40 -_08085BAE: - subs r0, r0, r1 - strh r0, [r4, #0x36] - b _08085BE8 -_08085BB4: - adds r0, r5, #0 - bl ResetCollisionLayer - adds r0, r5, #0 - bl sub_080002B8 - cmp r0, #0xd - bne _08085BE8 - ldr r4, _08085C50 @ =gPlayerEntity - adds r0, r4, #0 - bl ResetCollisionLayer - adds r0, r5, #0 - bl sub_08085CDC - adds r0, r4, #0 - adds r1, r5, #0 - bl GetFacingDirection - strb r0, [r5, #0x15] - movs r1, #0x80 - lsls r1, r1, #1 - ldrb r2, [r5, #0x15] - adds r0, r4, #0 - bl LinearMoveDirection -_08085BE8: - adds r1, r5, #0 - adds r1, #0x82 - ldrh r0, [r1] - cmp r0, #0 - bne _08085C54 - ldr r4, _08085C50 @ =gPlayerEntity - movs r1, #0x80 - lsls r1, r1, #6 - adds r0, r4, #0 - bl GravityUpdate - cmp r0, #0 - bne _08085C58 - adds r0, r4, #0 - bl ResetCollisionLayer - adds r0, r5, #0 - bl sub_08085F1C - movs r0, #1 - strb r0, [r5, #0xc] - movs r0, #4 - strb r0, [r5, #0xf] -_08085C16: - adds r0, r5, #0 - movs r1, #8 - movs r2, #0xa - bl sub_080A2AF4 - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - lsrs r2, r0, #0x18 - cmp r2, #0 - bne _08085C16 - movs r0, #1 - strb r0, [r5, #0xf] - ldrb r1, [r5, #0xe] - movs r0, #0x80 - orrs r0, r1 - strb r0, [r5, #0xe] - str r2, [r5, #0x70] - str r2, [r5, #0x6c] - adds r0, r5, #0 - bl sub_080002B8 - cmp r0, #0xd - bne _08085C58 - movs r0, #4 - strb r0, [r5, #0xc] - b _08085C58 - .align 2, 0 -_08085C50: .4byte gPlayerEntity -_08085C54: - subs r0, #1 - strh r0, [r1] -_08085C58: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08085C5C -sub_08085C5C: @ 0x08085C5C - push {r4, r5, lr} - adds r4, r0, #0 - ldr r5, _08085CA0 @ =gPlayerEntity - adds r1, r5, #0 - movs r2, #0x18 - bl sub_0806FC80 - cmp r0, #0 - beq _08085CAE - adds r0, r4, #0 - bl LinearMoveUpdate - ldrh r0, [r4, #0x24] - strh r0, [r5, #0x24] - ldrb r0, [r4, #0x15] - strb r0, [r5, #0x15] - adds r0, r5, #0 - bl LinearMoveUpdate - ldr r2, _08085CA4 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #2 - orrs r0, r1 - str r0, [r2, #0x30] - adds r0, r4, #0 - adds r0, #0x38 - ldrb r0, [r0] - cmp r0, #1 - bne _08085CA8 - adds r0, r5, #0 - bl ResetCollisionLayer - b _08085CAE - .align 2, 0 -_08085CA0: .4byte gPlayerEntity -_08085CA4: .4byte gPlayerState -_08085CA8: - adds r0, r5, #0 - bl sub_08004542 -_08085CAE: - ldr r3, _08085CD4 @ =gRoomControls - ldrh r0, [r3] - cmp r0, #0 - bne _08085CD2 - ldrb r1, [r4, #0x10] - movs r0, #0xdf - ands r0, r1 - strb r0, [r4, #0x10] - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x11] - lsrs r2, r1, #4 - subs r0, #0x11 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x11] - ldr r0, _08085CD8 @ =gPlayerEntity - str r0, [r3, #0x30] -_08085CD2: - pop {r4, r5, pc} - .align 2, 0 -_08085CD4: .4byte gRoomControls -_08085CD8: .4byte gPlayerEntity - - thumb_func_start sub_08085CDC -sub_08085CDC: @ 0x08085CDC - push {r4, lr} - adds r4, r0, #0 - ldr r0, [r4, #0x78] - movs r1, #0x80 - lsls r1, r1, #0xd - adds r0, r0, r1 - str r0, [r4, #0x78] - ldr r1, _08085D04 @ =0x03FFFFFF - cmp r0, r1 - bhi _08085D08 - adds r0, r4, #0 - adds r0, #0x7a - ldrh r2, [r0] - adds r0, #4 - ldrh r3, [r0] - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_0805EC9C - b _08085D0C - .align 2, 0 -_08085D04: .4byte 0x03FFFFFF -_08085D08: - bl DeleteThisEntity -_08085D0C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08085D10 -sub_08085D10: @ 0x08085D10 - push {r4, lr} - adds r4, r0, #0 - bl EntityHasDuplicateID - cmp r0, #0 - beq _08085D26 - ldrb r0, [r4, #0xb] - bl SetLocalFlag - bl DeleteThisEntity -_08085D26: - pop {r4, pc} - - thumb_func_start sub_08085D28 -sub_08085D28: @ 0x08085D28 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _08085D5C @ =gPlayerState - adds r0, r1, #0 - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0x13 - beq _08085D5A - ldr r0, [r1, #0x30] - movs r5, #2 - ands r0, r5 - cmp r0, #0 - beq _08085D5A - adds r0, r4, #0 - movs r1, #0 - movs r2, #0x18 - bl sub_080002B4 - cmp r0, #0x11 - bne _08085D5A - movs r0, #0 - strb r5, [r4, #0xc] - strb r0, [r4, #0xd] - bl sub_08078B48 -_08085D5A: - pop {r4, r5, pc} - .align 2, 0 -_08085D5C: .4byte gPlayerState - - thumb_func_start sub_08085D60 -sub_08085D60: @ 0x08085D60 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r5, r0, #0 - ldr r2, _08085D94 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #2 - ands r0, r1 - cmp r0, #0 - beq _08085E64 - adds r0, r2, #0 - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0x12 - beq _08085E64 - ldrb r0, [r2, #2] - cmp r0, #0 - bne _08085E64 - ldrb r1, [r5, #0x15] - movs r0, #7 - ands r0, r1 - cmp r0, #0 - bne _08085D98 - ldrb r6, [r5, #0x15] - adds r4, r6, #0 - b _08085DB0 - .align 2, 0 -_08085D94: .4byte gPlayerState -_08085D98: - movs r0, #0x10 - ands r0, r1 - movs r4, #8 - cmp r0, #0 - beq _08085DA4 - movs r4, #0x18 -_08085DA4: - ldrb r0, [r5, #0x15] - subs r0, #8 - movs r6, #0x10 - cmp r0, #0x10 - ble _08085DB0 - movs r6, #0 -_08085DB0: - cmp r4, #0x18 - beq _08085DB8 - cmp r4, #8 - bne _08085E20 -_08085DB8: - lsrs r3, r4, #2 - ldr r1, _08085E10 @ =gUnk_08120638 - adds r0, r3, r1 - movs r7, #0 - ldrsb r7, [r0, r7] - adds r0, r3, #1 - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - mov r8, r0 - adds r0, r5, #0 - adds r1, r7, #0 - mov r2, r8 - bl sub_080002CC - cmp r0, #0xff - bne _08085E20 - movs r1, #0x2e - ldrsh r0, [r5, r1] - ldr r2, _08085E14 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - adds r0, r0, r7 - movs r3, #0x32 - ldrsh r1, [r5, r3] - ldrh r2, [r2, #8] - subs r1, r1, r2 - add r1, r8 - adds r2, r4, #0 - movs r3, #5 - bl sub_080806BC - cmp r0, #0 - bne _08085E1C - ldr r0, _08085E18 @ =gPlayerEntity - lsrs r1, r4, #3 - bl sub_0807BD14 - cmp r0, #0 - beq _08085E20 - strb r4, [r5, #0x15] - b _08085E52 - .align 2, 0 -_08085E10: .4byte gUnk_08120638 -_08085E14: .4byte gRoomControls -_08085E18: .4byte gPlayerEntity -_08085E1C: - strb r4, [r5, #0x15] - b _08085E6C -_08085E20: - cmp r6, #0 - beq _08085E28 - cmp r6, #0x10 - bne _08085E6C -_08085E28: - lsrs r3, r6, #2 - ldr r2, _08085E5C @ =gUnk_08120638 - adds r0, r3, r2 - movs r1, #0 - ldrsb r1, [r0, r1] - adds r0, r3, #1 - adds r0, r0, r2 - movs r2, #0 - ldrsb r2, [r0, r2] - adds r0, r5, #0 - bl sub_080002CC - cmp r0, #0xff - bne _08085E6C - ldr r0, _08085E60 @ =gPlayerEntity - lsrs r1, r6, #3 - bl sub_0807BD14 - cmp r0, #0 - beq _08085E6C - strb r6, [r5, #0x15] -_08085E52: - adds r0, r5, #0 - bl sub_08085E74 - b _08085E6C - .align 2, 0 -_08085E5C: .4byte gUnk_08120638 -_08085E60: .4byte gPlayerEntity -_08085E64: - ldrb r1, [r5, #0x10] - movs r0, #0xdf - ands r0, r1 - strb r0, [r5, #0x10] -_08085E6C: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_08085E74 -sub_08085E74: @ 0x08085E74 - push {lr} - adds r2, r0, #0 - ldrb r1, [r2, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r2, #0x10] - ldrb r1, [r2, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2, #0x11] - movs r0, #3 - strb r0, [r2, #0xc] - ldrb r0, [r2, #0x15] - cmp r0, #8 - beq _08085EB8 - cmp r0, #8 - bgt _08085EA2 - cmp r0, #0 - beq _08085EAC - b _08085EBE -_08085EA2: - cmp r0, #0x10 - beq _08085EB2 - cmp r0, #0x18 - beq _08085EB8 - b _08085EBE -_08085EAC: - movs r0, #0x90 - lsls r0, r0, #1 - b _08085EBC -_08085EB2: - movs r0, #0x9c - lsls r0, r0, #1 - b _08085EBC -_08085EB8: - movs r0, #0x80 - lsls r0, r0, #1 -_08085EBC: - strh r0, [r2, #0x24] -_08085EBE: - movs r0, #0 - str r0, [r2, #0x70] - str r0, [r2, #0x6c] - strh r0, [r2, #0x2c] - strh r0, [r2, #0x30] - ldr r1, _08085EF0 @ =gPlayerEntity - strh r0, [r1, #0x2c] - strh r0, [r1, #0x30] - ldrb r0, [r2, #0x15] - strb r0, [r1, #0x15] - ldr r1, _08085EF4 @ =gPlayerState - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r1, #8] - ldr r0, _08085EF8 @ =gRoomControls - str r2, [r0, #0x30] - ldr r0, [r1, #0x2c] - cmp r0, #0 - beq _08085EE8 - bl DeleteEntity -_08085EE8: - bl ResetPlayer - pop {pc} - .align 2, 0 -_08085EF0: .4byte gPlayerEntity -_08085EF4: .4byte gPlayerState -_08085EF8: .4byte gRoomControls - - thumb_func_start sub_08085EFC -sub_08085EFC: @ 0x08085EFC - ldr r3, _08085F18 @ =gPlayerEntity - ldrh r1, [r0, #0x2e] - ldrh r2, [r3, #0x2e] - subs r1, r1, r2 - adds r2, r0, #0 - adds r2, #0x76 - strh r1, [r2] - ldrh r1, [r0, #0x32] - ldrh r2, [r3, #0x32] - subs r1, r1, r2 - adds r0, #0x74 - strh r1, [r0] - bx lr - .align 2, 0 -_08085F18: .4byte gPlayerEntity - - thumb_func_start sub_08085F1C -sub_08085F1C: @ 0x08085F1C - push {lr} - adds r3, r0, #0 - ldr r2, _08085F44 @ =gPlayerEntity - adds r1, r3, #0 - adds r1, #0x76 - ldrh r0, [r3, #0x2e] - ldrh r1, [r1] - subs r0, r0, r1 - strh r0, [r2, #0x2e] - adds r1, r3, #0 - adds r1, #0x74 - ldrh r0, [r3, #0x32] - ldrh r1, [r1] - subs r0, r0, r1 - strh r0, [r2, #0x32] - ldrb r0, [r3, #0x15] - bl sub_0807A5B8 - pop {pc} - .align 2, 0 -_08085F44: .4byte gPlayerEntity - - thumb_func_start sub_08085F48 -sub_08085F48: @ 0x08085F48 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r2, [r4, #0xe] - movs r0, #0x80 - ands r0, r2 - lsls r0, r0, #0x18 - lsrs r3, r0, #0x18 - cmp r3, #0 - beq _08085F8C - ldr r5, _08085F80 @ =gPlayerState - ldrb r0, [r5, #0x12] - cmp r0, #0x17 - bne _08085F6A - bl ResetPlayerVelocity - movs r0, #0x19 - strb r0, [r5, #0x12] -_08085F6A: - movs r0, #0x83 - bl SoundReq - ldr r1, [r4, #0x78] - ldr r0, _08085F84 @ =0x0127FFFF - cmp r1, r0 - bhi _08085F88 - movs r2, #0x80 - lsls r2, r2, #0xc - b _08085FF8 - .align 2, 0 -_08085F80: .4byte gPlayerState -_08085F84: .4byte 0x0127FFFF -_08085F88: - movs r0, #0 - b _08086006 -_08085F8C: - ldr r0, _08085FAC @ =gPlayerState - ldr r1, [r0, #0x30] - movs r0, #2 - ands r1, r0 - cmp r1, #0 - beq _08085FCC - lsls r0, r2, #0x18 - cmp r0, #0 - beq _08085FB8 - ldr r1, [r4, #0x78] - ldr r0, _08085FB0 @ =0x011FFFFF - cmp r1, r0 - bhi _08085FB4 - movs r2, #0x80 - lsls r2, r2, #8 - b _08085FF8 - .align 2, 0 -_08085FAC: .4byte gPlayerState -_08085FB0: .4byte 0x011FFFFF -_08085FB4: - strb r3, [r4, #0xe] - b _08086008 -_08085FB8: - ldr r1, [r4, #0x78] - movs r0, #0x88 - lsls r0, r0, #0x11 - cmp r1, r0 - bls _08086004 - ldr r2, _08085FC8 @ =0xFFFF8000 - b _08085FF8 - .align 2, 0 -_08085FC8: .4byte 0xFFFF8000 -_08085FCC: - lsls r0, r2, #0x18 - cmp r0, #0 - beq _08085FEC - ldr r2, [r4, #0x78] - ldr r0, _08085FE4 @ =0x010FFFFF - cmp r2, r0 - bhi _08085FE8 - movs r1, #0x80 - lsls r1, r1, #7 - adds r0, r2, r1 - str r0, [r4, #0x78] - b _08086008 - .align 2, 0 -_08085FE4: .4byte 0x010FFFFF -_08085FE8: - strb r1, [r4, #0xe] - b _08086008 -_08085FEC: - ldr r1, [r4, #0x78] - movs r0, #0x83 - lsls r0, r0, #0x11 - cmp r1, r0 - bls _08086004 - ldr r2, _08086000 @ =0xFFFFC000 -_08085FF8: - adds r0, r1, r2 - str r0, [r4, #0x78] - b _08086008 - .align 2, 0 -_08086000: .4byte 0xFFFFC000 -_08086004: - movs r0, #1 -_08086006: - strb r0, [r4, #0xe] -_08086008: - adds r0, r4, #0 - adds r0, #0x7a - ldrh r2, [r0] - adds r0, #4 - ldrh r3, [r0] - adds r0, r4, #0 - adds r1, r2, #0 - bl sub_0805EC9C - pop {r4, r5, pc} diff --git a/asm/object/pullableLever.s b/asm/object/pullableLever.s deleted file mode 100644 index ac64c6b9..00000000 --- a/asm/object/pullableLever.s +++ /dev/null @@ -1,666 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start PullableLever -PullableLever: @ 0x080911EC - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x72 - ldrh r0, [r0] - cmp r0, #1 - beq _0809123C - cmp r0, #1 - bgt _08091202 - cmp r0, #0 - beq _08091208 - b _08091260 -_08091202: - cmp r0, #2 - beq _08091254 - b _08091260 -_08091208: - ldr r1, _08091234 @ =gUnk_08122294 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0800445C - ldr r1, _08091238 @ =gUnk_02021F00 - adds r0, r4, #0 - adds r0, #0x74 - ldrb r0, [r0] - lsls r0, r0, #1 - adds r0, r0, r1 - adds r1, r4, #0 - adds r1, #0x70 - ldrh r1, [r1] - strh r1, [r0] - b _08091260 - .align 2, 0 -_08091234: .4byte gUnk_08122294 -_08091238: .4byte gUnk_02021F00 -_0809123C: - ldr r0, _08091250 @ =gUnk_081222A0 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 - b _08091260 - .align 2, 0 -_08091250: .4byte gUnk_081222A0 -_08091254: - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _08091260 - adds r0, r4, #0 - bl sub_08091504 -_08091260: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08091264 -sub_08091264: @ 0x08091264 - push {r4, r5, r6, r7, lr} - adds r6, r0, #0 - ldr r0, _080912C4 @ =gEntCount - ldrb r0, [r0] - cmp r0, #0x45 - bhi _0809132C - ldrb r1, [r6, #0xa] - ldrb r2, [r6, #0xb] - movs r0, #0x54 - bl CreateObject - adds r7, r0, #0 - ldrb r1, [r6, #0xa] - ldrb r2, [r6, #0xb] - movs r0, #0x54 - bl CreateObject - adds r1, r0, #0 - str r6, [r7, #0x50] - str r6, [r1, #0x50] - adds r0, r7, #0 - adds r0, #0x72 - movs r5, #1 - movs r4, #1 - strh r4, [r0] - adds r2, r1, #0 - adds r2, #0x72 - movs r0, #2 - strh r0, [r2] - adds r0, r6, #0 - bl CopyPosition - movs r2, #1 - strb r5, [r6, #0xc] - ldrb r1, [r6, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - orrs r0, r2 - strb r0, [r6, #0x18] - movs r0, #0x60 - strh r0, [r6, #0x24] - ldrb r0, [r6, #0xb] - ands r4, r0 - cmp r4, #0 - beq _080912CC - ldr r0, _080912C8 @ =gUnk_080FD278 - b _080912CE - .align 2, 0 -_080912C4: .4byte gEntCount -_080912C8: .4byte gUnk_080FD278 -_080912CC: - ldr r0, _08091330 @ =gUnk_080FD270 -_080912CE: - str r0, [r6, #0x48] - movs r0, #1 - strb r0, [r6, #0x16] - ldr r2, _08091334 @ =gUnk_081222A8 - ldrb r0, [r6, #0xb] - lsls r0, r0, #1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r6, #0x2e] - adds r0, r0, r1 - strh r0, [r6, #0x2e] - adds r1, r6, #0 - adds r1, #0x80 - strh r0, [r1] - ldrb r0, [r6, #0xb] - lsls r0, r0, #1 - adds r0, #1 - adds r0, r0, r2 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r6, #0x32] - adds r0, r0, r1 - strh r0, [r6, #0x32] - adds r1, r6, #0 - adds r1, #0x82 - strh r0, [r1] - adds r0, r6, #0 - adds r1, r7, #0 - bl CopyPosition - adds r0, r6, #0 - adds r0, #0x7e - ldrb r0, [r0] - adds r1, r6, #0 - adds r1, #0x76 - strh r0, [r1] - ldrb r1, [r6, #0xe] - adds r0, r6, #0 - adds r0, #0x74 - strb r1, [r0] - ldrb r1, [r6, #0xb] - adds r0, r6, #0 - bl InitializeAnimation -_0809132C: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08091330: .4byte gUnk_080FD270 -_08091334: .4byte gUnk_081222A8 - - thumb_func_start sub_08091338 -sub_08091338: @ 0x08091338 - push {r4, lr} - adds r4, r0, #0 - bl sub_08078930 - adds r0, r4, #0 - adds r0, #0x70 - ldrh r0, [r0] - cmp r0, #0 - beq _0809135C - ldrb r0, [r4, #0xb] - lsls r0, r0, #3 - strb r0, [r4, #0x15] - adds r0, r4, #0 - bl LinearMoveUpdate - adds r0, r4, #0 - bl sub_08091660 -_0809135C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08091360 -sub_08091360: @ 0x08091360 - push {r4, lr} - adds r4, r0, #0 - bl sub_0806FBB4 - ldr r1, _0809137C @ =gUnk_081222B0 - ldrb r0, [r4, #0xd] - subs r0, #5 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - pop {r4, pc} - .align 2, 0 -_0809137C: .4byte gUnk_081222B0 - - thumb_func_start sub_08091380 -sub_08091380: @ 0x08091380 - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - ldr r7, _0809142C @ =gPlayerEntity - adds r0, #0x75 - ldrb r0, [r0] - cmp r0, #0 - bne _080913E0 - ldrb r0, [r4, #0xb] - lsls r2, r0, #1 - ldrb r0, [r7, #0x14] - cmp r2, r0 - bne _080913D4 - ldr r1, _08091430 @ =gUnk_081222B8 - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r3, [r4, #0x2e] - adds r0, r0, r3 - lsls r0, r0, #0x10 - lsrs r6, r0, #0x10 - adds r0, r2, #1 - adds r0, r0, r1 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - ldrh r1, [r4, #0x32] - adds r0, r0, r1 - lsls r0, r0, #0x10 - lsrs r5, r0, #0x10 - adds r0, r7, #0 - adds r0, #0x38 - ldrb r2, [r0] - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_080002D4 - subs r0, #0xf - cmp r0, #0x10 - bls _080913D4 - strh r6, [r7, #0x2e] - strh r5, [r7, #0x32] -_080913D4: - adds r1, r4, #0 - adds r1, #0x75 - movs r0, #1 - strb r0, [r1] - movs r0, #2 - strb r0, [r4, #0xf] -_080913E0: - ldrb r0, [r7, #0x14] - lsrs r0, r0, #1 - ldrb r3, [r4, #0xb] - cmp r0, r3 - bne _0809142A - ldr r1, _08091434 @ =gPlayerState - adds r0, r1, #0 - adds r0, #0xa8 - ldrb r0, [r0] - cmp r0, #0x1a - bne _0809142A - ldrb r1, [r1, #5] - movs r5, #2 - adds r0, r5, #0 - ands r0, r1 - cmp r0, #0 - beq _0809142A - ldr r0, _0809142C @ =gPlayerEntity - adds r0, #0x5a - ldrb r1, [r0] - adds r0, r5, #0 - ands r0, r1 - cmp r0, #0 - beq _0809142A - adds r0, r4, #0 - bl sub_0809153C - adds r1, r4, #0 - adds r1, #0x75 - ldrb r0, [r1] - cmp r0, #1 - bne _0809142A - strb r5, [r1] - movs r0, #0xcf - lsls r0, r0, #1 - bl EnqueueSFX -_0809142A: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0809142C: .4byte gPlayerEntity -_08091430: .4byte gUnk_081222B8 -_08091434: .4byte gPlayerState - - thumb_func_start sub_08091438 -sub_08091438: @ 0x08091438 - movs r2, #0 - movs r1, #1 - strb r1, [r0, #0xc] - adds r0, #0x75 - strb r2, [r0] - bx lr - - thumb_func_start sub_08091444 -sub_08091444: @ 0x08091444 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - subs r0, #9 - ands r0, r1 - movs r1, #5 - orrs r0, r1 - strb r0, [r2] - ldr r0, [r4, #0x50] - ldrb r1, [r0, #0xb] - adds r1, #8 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - pop {r4, pc} - - thumb_func_start sub_08091470 -sub_08091470: @ 0x08091470 - push {r4, lr} - adds r2, r0, #0 - ldr r4, [r2, #0x50] - adds r3, r4, #0 - adds r3, #0x70 - ldrh r0, [r3] - cmp r0, #7 - bhi _0809148C - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r2, #0x18] - b _08091502 -_0809148C: - ldrb r1, [r2, #0x18] - movs r0, #4 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #1 - orrs r0, r1 - strb r0, [r2, #0x18] - ldrh r0, [r3] - adds r1, r0, #0 - subs r1, #8 - movs r0, #7 - ands r1, r0 - ldrb r3, [r2, #0xb] - cmp r3, #1 - beq _080914C8 - cmp r3, #1 - bgt _080914B4 - cmp r3, #0 - beq _080914BE - b _080914E2 -_080914B4: - cmp r3, #2 - beq _080914D0 - cmp r3, #3 - beq _080914DA - b _080914E2 -_080914BE: - ldrh r0, [r4, #0x32] - subs r0, r0, r1 - subs r0, #0x11 - strh r0, [r2, #0x32] - b _080914E2 -_080914C8: - ldrh r0, [r4, #0x2e] - adds r0, r1, r0 - adds r0, #0x11 - b _080914E0 -_080914D0: - ldrh r0, [r4, #0x32] - adds r0, r1, r0 - adds r0, #0x11 - strh r0, [r2, #0x32] - b _080914E2 -_080914DA: - ldrh r0, [r4, #0x2e] - subs r0, r0, r1 - subs r0, #0x11 -_080914E0: - strh r0, [r2, #0x2e] -_080914E2: - adds r0, r4, #0 - adds r0, #0x70 - ldrh r0, [r0] - subs r0, #8 - lsls r0, r0, #0xc - lsrs r1, r0, #0x10 - ldrb r0, [r2, #0x14] - cmp r1, r0 - beq _08091502 - strb r1, [r2, #0x14] - lsls r1, r1, #2 - adds r1, r1, r3 - adds r1, #8 - adds r0, r2, #0 - bl InitializeAnimation -_08091502: - pop {r4, pc} - - thumb_func_start sub_08091504 -sub_08091504: @ 0x08091504 - push {r4, lr} - adds r4, r0, #0 - movs r2, #1 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x18] - subs r0, #5 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, #0x18] - adds r2, r4, #0 - adds r2, #0x29 - ldrb r1, [r2] - movs r0, #8 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #6 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r4, #0xb] - adds r1, #4 - adds r0, r4, #0 - bl InitializeAnimation - adds r0, r4, #0 - bl UpdateSpriteForCollisionLayer - pop {r4, pc} - - thumb_func_start sub_0809153C -sub_0809153C: @ 0x0809153C - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - sub sp, #4 - adds r5, r0, #0 - ldr r6, _080915A8 @ =gPlayerEntity - ldr r1, _080915AC @ =gUnk_081222C0 - ldrb r0, [r5, #0xb] - adds r0, r0, r1 - ldrb r0, [r0] - mov r8, r0 - adds r0, r5, #0 - adds r0, #0x76 - adds r1, r5, #0 - adds r1, #0x70 - ldrh r0, [r0] - ldrh r1, [r1] - cmp r0, r1 - bls _08091656 - ldrh r4, [r6, #0x2e] - ldrh r0, [r6, #0x32] - mov sb, r0 - movs r2, #0x24 - ldrsh r1, [r5, r2] - adds r0, r6, #0 - mov r2, r8 - str r3, [sp] - bl sub_080044AE - lsls r4, r4, #0x10 - asrs r4, r4, #0x10 - ldrh r2, [r6, #0x2e] - movs r7, #0x2e - ldrsh r0, [r6, r7] - ldr r3, [sp] - cmp r4, r0 - bne _08091596 - mov r1, sb - lsls r0, r1, #0x10 - asrs r0, r0, #0x10 - movs r7, #0x32 - ldrsh r1, [r6, r7] - cmp r0, r1 - beq _08091656 -_08091596: - ldrb r0, [r5, #0xb] - cmp r0, #1 - beq _080915CA - cmp r0, #1 - bgt _080915B0 - cmp r0, #0 - beq _080915BA - b _080915E0 - .align 2, 0 -_080915A8: .4byte gPlayerEntity -_080915AC: .4byte gUnk_081222C0 -_080915B0: - cmp r0, #2 - beq _080915CE - cmp r0, #3 - beq _080915DA - b _080915E0 -_080915BA: - ldrh r1, [r6, #0x32] - mov r2, sb - lsls r0, r2, #0x10 - asrs r0, r0, #0x10 - subs r1, r1, r0 - lsls r1, r1, #0x10 - lsrs r3, r1, #0x10 - b _080915E0 -_080915CA: - subs r0, r4, r2 - b _080915DC -_080915CE: - ldrh r1, [r6, #0x32] - mov r7, sb - lsls r0, r7, #0x10 - asrs r0, r0, #0x10 - subs r0, r0, r1 - b _080915DC -_080915DA: - subs r0, r2, r4 -_080915DC: - lsls r0, r0, #0x10 - lsrs r3, r0, #0x10 -_080915E0: - lsls r2, r3, #0x18 - ldr r3, _0809163C @ =gSineTable - mov r1, r8 - lsls r0, r1, #4 - adds r0, r0, r3 - movs r7, #0 - ldrsh r0, [r0, r7] - asrs r2, r2, #0x10 - adds r1, r0, #0 - muls r1, r2, r1 - ldr r0, [r5, #0x2c] - adds r0, r0, r1 - str r0, [r5, #0x2c] - mov r1, r8 - lsls r0, r1, #4 - adds r0, #0x80 - adds r0, r0, r3 - movs r7, #0 - ldrsh r0, [r0, r7] - adds r1, r0, #0 - muls r1, r2, r1 - ldr r0, [r5, #0x30] - subs r0, r0, r1 - str r0, [r5, #0x30] - adds r0, r5, #0 - bl sub_08091660 - adds r0, r5, #0 - adds r0, #0x76 - adds r1, r5, #0 - adds r1, #0x70 - ldrh r0, [r0] - ldrh r1, [r1] - cmp r0, r1 - bhi _08091640 - movs r0, #0x86 - lsls r0, r0, #1 - bl EnqueueSFX - adds r0, r5, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - b _08091656 - .align 2, 0 -_0809163C: .4byte gSineTable -_08091640: - ldrb r0, [r5, #0xf] - subs r0, #1 - strb r0, [r5, #0xf] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08091656 - movs r0, #0x10 - strb r0, [r5, #0xf] - adds r0, #0xff - bl EnqueueSFX -_08091656: - add sp, #4 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_08091660 -sub_08091660: @ 0x08091660 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, #1 - beq _08091686 - cmp r0, #1 - bgt _08091674 - cmp r0, #0 - beq _0809167E - b _080916AA -_08091674: - cmp r0, #2 - beq _08091690 - cmp r0, #3 - beq _0809169A - b _080916AA -_0809167E: - adds r1, r4, #0 - adds r1, #0x82 - ldrh r0, [r4, #0x32] - b _080916A0 -_08091686: - adds r0, r4, #0 - adds r0, #0x80 - ldrh r0, [r0] - ldrh r1, [r4, #0x2e] - b _080916A2 -_08091690: - adds r0, r4, #0 - adds r0, #0x82 - ldrh r0, [r0] - ldrh r1, [r4, #0x32] - b _080916A2 -_0809169A: - adds r1, r4, #0 - adds r1, #0x80 - ldrh r0, [r4, #0x2e] -_080916A0: - ldrh r1, [r1] -_080916A2: - subs r0, r0, r1 - adds r1, r4, #0 - adds r1, #0x70 - strh r0, [r1] -_080916AA: - adds r5, r4, #0 - adds r5, #0x86 - ldrh r0, [r5] - bl CheckFlags - cmp r0, #0 - beq _080916C8 - adds r0, r4, #0 - adds r0, #0x70 - ldrh r0, [r0] - cmp r0, #0 - bne _080916C8 - ldrh r0, [r5] - bl ClearFlag -_080916C8: - pop {r4, r5, pc} - .align 2, 0 diff --git a/asm/object/pushableLever.s b/asm/object/pushableLever.s deleted file mode 100644 index c427d578..00000000 --- a/asm/object/pushableLever.s +++ /dev/null @@ -1,323 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start PushableLever -PushableLever: @ 0x08098260 - push {lr} - ldr r2, _08098274 @ =gUnk_08123494 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08098274: .4byte gUnk_08123494 - - thumb_func_start sub_08098278 -sub_08098278: @ 0x08098278 - push {lr} - adds r3, r0, #0 - adds r3, #0x29 - ldrb r2, [r3] - movs r1, #8 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #5 - orrs r1, r2 - strb r1, [r3] - bl sub_08098340 - pop {pc} - .align 2, 0 - - thumb_func_start sub_08098294 -sub_08098294: @ 0x08098294 - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_08098418 - cmp r0, #0 - beq _080982FA - movs r5, #0 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - adds r0, #0x62 - strb r5, [r0] - adds r0, #1 - strb r5, [r0] - adds r0, #0xf - ldrh r0, [r0] - adds r1, r4, #0 - adds r1, #0x70 - ldrh r1, [r1] - adds r2, r4, #0 - adds r2, #0x38 - ldrb r2, [r2] - bl SetTile - movs r0, #0xb5 - lsls r0, r0, #1 - bl EnqueueSFX - adds r0, r4, #0 - movs r1, #0x1e - bl RequestPriorityDuration - bl sub_08079F8C - cmp r0, #0 - beq _080982FA - ldr r2, _080982FC @ =gPlayerState - movs r0, #0x90 - strb r0, [r2, #6] - movs r0, #5 - strb r0, [r2, #0xc] - ldr r0, [r2, #0x30] - movs r1, #1 - orrs r0, r1 - str r0, [r2, #0x30] - ldr r1, _08098300 @ =gPlayerEntity - strh r5, [r1, #0x2c] - strh r5, [r1, #0x30] - ldrb r0, [r1, #0x14] - lsls r0, r0, #2 - strb r0, [r1, #0x15] -_080982FA: - pop {r4, r5, pc} - .align 2, 0 -_080982FC: .4byte gPlayerState -_08098300: .4byte gPlayerEntity - - thumb_func_start sub_08098304 -sub_08098304: @ 0x08098304 - push {r4, lr} - adds r4, r0, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r1, [r0] - movs r0, #0x80 - ands r0, r1 - cmp r0, #0 - beq _0809833C - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _0809832C - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl SetFlag - b _08098336 -_0809832C: - adds r0, r4, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl ClearFlag -_08098336: - adds r0, r4, #0 - bl sub_08098340 -_0809833C: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08098340 -sub_08098340: @ 0x08098340 - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - adds r2, r0, #0 - adds r2, #0x74 - movs r1, #0x3c - strh r1, [r2] - bl sub_08098354 - pop {pc} - - thumb_func_start sub_08098354 -sub_08098354: @ 0x08098354 - push {r4, r5, r6, lr} - adds r6, r0, #0 - adds r0, #0x86 - ldrh r0, [r0] - bl CheckFlags - cmp r0, #0 - bne _080983BC - strb r0, [r6, #0xb] - movs r0, #0x2e - ldrsh r2, [r6, r0] - ldr r1, _080983B4 @ =gRoomControls - ldrh r0, [r1, #6] - subs r2, r2, r0 - asrs r2, r2, #4 - movs r3, #0x3f - ands r2, r3 - movs r4, #0x32 - ldrsh r0, [r6, r4] - ldrh r1, [r1, #8] - adds r1, #0x10 - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r2, r0 - adds r4, r6, #0 - adds r4, #0x70 - strh r2, [r4] - ldrh r0, [r4] - adds r5, r6, #0 - adds r5, #0x38 - ldrb r1, [r5] - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x72 - strh r0, [r1] - ldr r0, _080983B8 @ =0x00004053 - ldrh r1, [r4] - ldrb r2, [r5] - bl SetTile - adds r0, r6, #0 - movs r1, #1 - bl InitializeAnimation - b _0809840C - .align 2, 0 -_080983B4: .4byte gRoomControls -_080983B8: .4byte 0x00004053 -_080983BC: - movs r0, #1 - strb r0, [r6, #0xb] - movs r0, #0x2e - ldrsh r2, [r6, r0] - ldr r1, _08098410 @ =gRoomControls - ldrh r0, [r1, #6] - adds r0, #0x10 - subs r2, r2, r0 - asrs r2, r2, #4 - movs r3, #0x3f - ands r2, r3 - movs r4, #0x32 - ldrsh r0, [r6, r4] - ldrh r1, [r1, #8] - subs r0, r0, r1 - asrs r0, r0, #4 - ands r0, r3 - lsls r0, r0, #6 - orrs r2, r0 - adds r4, r6, #0 - adds r4, #0x70 - strh r2, [r4] - ldrh r0, [r4] - adds r5, r6, #0 - adds r5, #0x38 - ldrb r1, [r5] - bl GetTileIndex - adds r1, r6, #0 - adds r1, #0x72 - strh r0, [r1] - ldr r0, _08098414 @ =0x00004052 - ldrh r1, [r4] - ldrb r2, [r5] - bl SetTile - adds r0, r6, #0 - movs r1, #0 - bl InitializeAnimation -_0809840C: - pop {r4, r5, r6, pc} - .align 2, 0 -_08098410: .4byte gRoomControls -_08098414: .4byte 0x00004052 - - thumb_func_start sub_08098418 -sub_08098418: @ 0x08098418 - push {r4, r5, r6, lr} - adds r4, r0, #0 - adds r6, r4, #0 - adds r6, #0x70 - ldrh r0, [r6] - adds r5, r4, #0 - adds r5, #0x38 - ldrb r1, [r5] - bl GetTileIndex - ldr r1, _08098448 @ =0x00004054 - cmp r0, r1 - bne _0809846C - adds r1, r4, #0 - adds r1, #0x74 - ldrh r0, [r1] - subs r0, #1 - strh r0, [r1] - lsls r0, r0, #0x10 - cmp r0, #0 - bne _0809844C - movs r0, #1 - b _08098482 - .align 2, 0 -_08098448: .4byte 0x00004054 -_0809844C: - adds r0, r4, #0 - bl sub_08098484 - ldr r1, _08098468 @ =gUnk_081234A0 - ldrb r0, [r4, #0xb] - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - ldrh r1, [r6] - ldrb r2, [r5] - bl SetTile - b _08098480 - .align 2, 0 -_08098468: .4byte gUnk_081234A0 -_0809846C: - adds r1, r4, #0 - adds r1, #0x74 - movs r2, #0 - movs r0, #0x3c - strh r0, [r1] - adds r0, r4, #0 - adds r0, #0x62 - strb r2, [r0] - adds r0, #1 - strb r2, [r0] -_08098480: - movs r0, #0 -_08098482: - pop {r4, r5, r6, pc} - - thumb_func_start sub_08098484 -sub_08098484: @ 0x08098484 - push {r4, lr} - adds r3, r0, #0 - ldrb r0, [r3, #0xb] - ldr r4, _080984C4 @ =gUnk_081234AC - cmp r0, #0 - bne _08098492 - ldr r4, _080984C8 @ =gUnk_081234A4 -_08098492: - adds r2, r3, #0 - adds r2, #0x74 - ldrh r0, [r2] - lsrs r0, r0, #2 - movs r1, #6 - ands r0, r1 - adds r4, r4, r0 - ldrb r0, [r4] - adds r1, r3, #0 - adds r1, #0x62 - strb r0, [r1] - ldrb r1, [r4, #1] - adds r0, r3, #0 - adds r0, #0x63 - strb r1, [r0] - ldrh r1, [r2] - movs r0, #3 - ands r0, r1 - cmp r0, #0 - bne _080984C2 - movs r0, #0x82 - lsls r0, r0, #1 - bl EnqueueSFX -_080984C2: - pop {r4, pc} - .align 2, 0 -_080984C4: .4byte gUnk_081234AC -_080984C8: .4byte gUnk_081234A4 diff --git a/data/const/enemy/bombarossa.s b/data/const/enemy/bombarossa.s deleted file mode 100644 index d721bc55..00000000 --- a/data/const/enemy/bombarossa.s +++ /dev/null @@ -1,5 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 diff --git a/data/const/object/bigPushableLever.s b/data/const/object/bigPushableLever.s deleted file mode 100644 index 51139f8a..00000000 --- a/data/const/object/bigPushableLever.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_081236DC:: @ 081236DC - .4byte sub_08098EF8 - .4byte sub_08098F14 - .4byte sub_08098F90 - -gUnk_081236E8:: @ 081236E8 - .incbin "bigPushableLever/gUnk_081236E8.bin" - -gUnk_081236EC:: @ 081236EC - .incbin "bigPushableLever/gUnk_081236EC.bin" - -gUnk_081236F4:: @ 081236F4 - .incbin "bigPushableLever/gUnk_081236F4.bin" diff --git a/data/const/object/hittableLever.s b/data/const/object/hittableLever.s deleted file mode 100644 index 2eb08f28..00000000 --- a/data/const/object/hittableLever.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08121178:: @ 08121178 - .4byte sub_0808A71C - .4byte sub_0808A778 - -gUnk_08121180:: @ 08121180 - .incbin "hittableLever/gUnk_08121180.bin" diff --git a/data/const/object/pullableLever.s b/data/const/object/pullableLever.s deleted file mode 100644 index da94c059..00000000 --- a/data/const/object/pullableLever.s +++ /dev/null @@ -1,27 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08122294:: @ 08122294 - .4byte sub_08091264 - .4byte sub_08091338 - .4byte sub_08091360 - -gUnk_081222A0:: @ 081222A0 - .4byte sub_08091444 - .4byte sub_08091470 - -gUnk_081222A8:: @ 081222A8 - .incbin "pullableLever/gUnk_081222A8.bin" - -gUnk_081222B0:: @ 081222B0 - .4byte sub_08091380 - .4byte sub_08091438 - -gUnk_081222B8:: @ 081222B8 - .incbin "pullableLever/gUnk_081222B8.bin" - -gUnk_081222C0:: @ 081222C0 - .incbin "pullableLever/gUnk_081222C0.bin" diff --git a/data/const/object/pushableLever.s b/data/const/object/pushableLever.s deleted file mode 100644 index 1b8fca63..00000000 --- a/data/const/object/pushableLever.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08123494:: @ 08123494 - .4byte sub_08098278 - .4byte sub_08098294 - .4byte sub_08098304 - -gUnk_081234A0:: @ 081234A0 - .incbin "pushableLever/gUnk_081234A0.bin" - -gUnk_081234A4:: @ 081234A4 - .incbin "pushableLever/gUnk_081234A4.bin" - -gUnk_081234AC:: @ 081234AC - .incbin "pushableLever/gUnk_081234AC.bin" diff --git a/include/object.h b/include/object.h index 0be01661..4b3fb61c 100644 --- a/include/object.h +++ b/include/object.h @@ -357,7 +357,7 @@ void PicoBloom(Entity*); void Board(Entity*); void Object81(Entity*); void BigVortex(Entity*); -void BigPushableLever(Entity*); +void BigPushableLever(); void SmallIceBlock(Entity*); void BigIceBlock(Entity*); void Object86(Entity*); diff --git a/linker.ld b/linker.ld index f0cd008d..715fc763 100644 --- a/linker.ld +++ b/linker.ld @@ -777,7 +777,7 @@ SECTIONS { asm/object/board.o(.text); asm/object/object81.o(.text); src/object/bigVortex.o(.text); - asm/object/bigPushableLever.o(.text); + src/object/bigPushableLever.o(.text); asm/object/smallIceBlock.o(.text); asm/object/bigIceBlock.o(.text); src/object/object86.o(.text); @@ -1521,7 +1521,7 @@ SECTIONS { data/const/object/object81.o(.rodata); data/const/object/bigVortex.o(.rodata); data/animations/object/bigVortex.o(.rodata); - data/const/object/bigPushableLever.o(.rodata); + src/object/bigPushableLever.o(.rodata); data/animations/object/bigPushableLever.o(.rodata); data/const/object/smallIceBlock.o(.rodata); data/animations/object/smallIceBlock.o(.rodata); diff --git a/src/object/bigPushableLever.c b/src/object/bigPushableLever.c new file mode 100644 index 00000000..71f10a90 --- /dev/null +++ b/src/object/bigPushableLever.c @@ -0,0 +1,155 @@ +/** + * @file bigPushableLever.c + * @ingroup Objects + * + * @brief Big 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 tilePositionUpper; + /*0x72*/ u16 tilePositionLower; + /*0x74*/ u16 tileIndexUpper; + /*0x76*/ u16 tileIndexLower; + /*0x78*/ u8 unk_78[12]; + /*0x84*/ u16 timer; + /*0x86*/ u16 pushedFlag; +} BigPushableLeverEntity; + +enum BigPushableLeverAction { + INIT, + IDLE, + PUSHING, +}; + +extern void (*const BigPushableLever_Actions[])(BigPushableLeverEntity*); +extern const u16 gUnk_081236E8[]; +extern const u8 BigPushableLever_InitialOffsets[]; +extern const u8 BigPushableLever_PushedOffsets[]; + +void BigPushableLever_SetIdle(BigPushableLeverEntity*); +bool32 BigPushableLever_ShouldStartPushing(BigPushableLeverEntity*); +void BigPushableLever_SetTiles(BigPushableLeverEntity*); +void BigPushableLever_CalculateSpriteOffsets(BigPushableLeverEntity*); + +#define TILE_INITIAL 0x4058 +#define TILE_PUSHED 0x4056 + +void BigPushableLever(BigPushableLeverEntity* this) { + BigPushableLever_Actions[super->action](this); +} + +void BigPushableLever_Init(BigPushableLeverEntity* this) { + super->spritePriority.b0 = 5; + BigPushableLever_SetIdle(this); +} + +void BigPushableLever_Idle(BigPushableLeverEntity* this) { + if (BigPushableLever_ShouldStartPushing(this)) { + super->action = PUSHING; + SetTile(this->tileIndexUpper, this->tilePositionUpper, super->collisionLayer); + SetTile(this->tileIndexLower, this->tilePositionLower, super->collisionLayer); + EnqueueSFX(SFX_132); + RequestPriorityDuration(super, 0x1e); + if (sub_08079F8C()) { + gPlayerState.pushedObject = 0x98; + gPlayerState.queued_action = 5; + gPlayerState.flags |= 1; + gPlayerEntity.x.HALF.LO = 0; + gPlayerEntity.y.HALF.LO = 0; + gPlayerEntity.direction = gPlayerEntity.animationState << 2; + } + } +} + +void BigPushableLever_Pushing(BigPushableLeverEntity* this) { + GetNextFrame(super); + if ((super->frame & 0x80) != 0) { + if (super->type2 == 0) { + SetFlag(this->pushedFlag); + } else { + ClearFlag(this->pushedFlag); + } + BigPushableLever_SetIdle(this); + } +} + +void BigPushableLever_SetIdle(BigPushableLeverEntity* this) { + super->action = IDLE; + this->timer = 0x3c; + BigPushableLever_SetTiles(this); +} + +void BigPushableLever_SetTiles(BigPushableLeverEntity* this) { + if (!CheckFlags(this->pushedFlag)) { + super->type2 = 0; + this->tilePositionUpper = COORD_TO_TILE_OFFSET(super, 0, 0x10); + this->tilePositionLower = this->tilePositionUpper - 0x40; + this->tileIndexUpper = GetTileIndex(this->tilePositionUpper, super->collisionLayer); + this->tileIndexLower = GetTileIndex(this->tilePositionLower, super->collisionLayer); + SetTile(0x4057, this->tilePositionUpper, super->collisionLayer); + SetTile(0x4058, this->tilePositionLower, super->collisionLayer); + InitializeAnimation(super, 1); + } else { + super->type2 = 1; + this->tilePositionUpper = COORD_TO_TILE_OFFSET(super, 0x10, 0); + this->tilePositionLower = this->tilePositionUpper - 1; + this->tileIndexUpper = GetTileIndex(this->tilePositionUpper, super->collisionLayer); + this->tileIndexLower = GetTileIndex(this->tilePositionLower, super->collisionLayer); + SetTile(0x4055, this->tilePositionUpper, super->collisionLayer); + SetTile(0x4056, this->tilePositionLower, super->collisionLayer); + InitializeAnimation(super, 0); + } +} + +bool32 BigPushableLever_ShouldStartPushing(BigPushableLeverEntity* this) { + if (GetTileIndex(this->tilePositionLower, super->collisionLayer) == 0x4059) { + if (--this->timer == 0) { + return TRUE; + } + BigPushableLever_CalculateSpriteOffsets(this); + SetTile(gUnk_081236E8[super->type2], this->tilePositionLower, super->collisionLayer); + } else { + this->timer = 0x3c; + super->spriteOffsetX = 0; + super->spriteOffsetY = 0; + } + return FALSE; +} + +void BigPushableLever_CalculateSpriteOffsets(BigPushableLeverEntity* this) { + const u8* offsets; + if (super->type2 == 0) { + offsets = BigPushableLever_InitialOffsets; + } else { + offsets = BigPushableLever_PushedOffsets; + } + offsets = &offsets[this->timer >> 2 & 6]; + super->spriteOffsetX = offsets[0]; + super->spriteOffsetY = offsets[1]; + if ((this->timer & 3) == 0) { + EnqueueSFX(SFX_131); + } +} + +void (*const BigPushableLever_Actions[])(BigPushableLeverEntity*) = { + BigPushableLever_Init, + BigPushableLever_Idle, + BigPushableLever_Pushing, +}; +const u16 gUnk_081236E8[] = { + TILE_INITIAL, + TILE_PUSHED, +}; +const u8 BigPushableLever_InitialOffsets[] = { + 0, 0, 0, 0, 255, 0, 0, 0, +}; +const u8 BigPushableLever_PushedOffsets[] = { + 0, 0, 0, 0, 0, 255, 0, 0, +}; diff --git a/src/object/hittableLever.c b/src/object/hittableLever.c index c7c1022c..6dc52e8d 100644 --- a/src/object/hittableLever.c +++ b/src/object/hittableLever.c @@ -19,7 +19,7 @@ typedef struct { } HittableLeverEntity; extern void (*const HittableLever_Actions[])(HittableLeverEntity*); -extern const Hitbox gUnk_08121180; +extern const Hitbox HittableLever_Hitbox; void HittableLever_UpdateTile(HittableLeverEntity*); @@ -36,7 +36,7 @@ void HittableLever_Init(HittableLeverEntity* this) { super->field_0x3c = 7; super->hitType = 0x8f; super->flags2 = 0xa; - super->hitbox = (Hitbox*)&gUnk_08121180; + super->hitbox = (Hitbox*)&HittableLever_Hitbox; if (super->type == 0) { if (CheckFlags(this->hitFlag)) { super->type = 1; @@ -76,4 +76,4 @@ void (*const HittableLever_Actions[])(HittableLeverEntity*) = { HittableLever_Init, HittableLever_Idle, }; -const Hitbox gUnk_08121180 = { 0, 1, { 0, 0, 0, 0 }, 4, 3 }; +const Hitbox HittableLever_Hitbox = { 0, 1, { 0, 0, 0, 0 }, 4, 3 };