From 8986c417cf1f59fd165414153df6b9f4012a7685 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 13 Mar 2022 09:52:51 +0200 Subject: [PATCH] Decompile object45 --- asm/object/object45.s | 89 ------------------------------------ data/const/object/object45.s | 9 ---- linker.ld | 4 +- src/object/object45.c | 44 ++++++++++++++++++ 4 files changed, 46 insertions(+), 100 deletions(-) delete mode 100644 asm/object/object45.s delete mode 100644 data/const/object/object45.s create mode 100644 src/object/object45.c diff --git a/asm/object/object45.s b/asm/object/object45.s deleted file mode 100644 index 4b1d866a..00000000 --- a/asm/object/object45.s +++ /dev/null @@ -1,89 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object45 -Object45: @ 0x0808E414 - push {lr} - ldr r2, _0808E428 @ =gUnk_08121BD8 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0808E428: .4byte gUnk_08121BD8 - - thumb_func_start sub_0808E42C -sub_0808E42C: @ 0x0808E42C - push {lr} - movs r1, #1 - strb r1, [r0, #0xc] - ldrb r2, [r0, #0x11] - subs r1, #0x11 - ands r1, r2 - movs r2, #6 - orrs r1, r2 - strb r1, [r0, #0x11] - ldrb r1, [r0, #0xa] - bl InitializeAnimation - pop {pc} - .align 2, 0 - - thumb_func_start sub_0808E448 -sub_0808E448: @ 0x0808E448 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x10 - bl IsItemEquipped - cmp r0, #1 - bls _0808E45A - bl DeleteThisEntity -_0808E45A: - adds r0, r4, #0 - bl GetNextFrame - adds r0, r4, #0 - adds r0, #0x5a - ldrb r0, [r0] - cmp r0, #1 - beq _0808E472 - cmp r0, #0x80 - bne _0808E486 - bl DeleteThisEntity -_0808E472: - ldrb r2, [r4, #0x18] - lsls r1, r2, #0x1e - lsrs r1, r1, #0x1e - movs r0, #1 - eors r1, r0 - subs r0, #5 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x18] - b _0808E494 -_0808E486: - ldrb r0, [r4, #0x18] - movs r1, #4 - rsbs r1, r1, #0 - ands r1, r0 - movs r0, #1 - orrs r1, r0 - strb r1, [r4, #0x18] -_0808E494: - ldrb r0, [r4, #0xa] - cmp r0, #0 - bne _0808E4A2 - ldr r0, [r4, #0x34] - ldr r1, _0808E4A4 @ =0xFFFF8000 - adds r0, r0, r1 - str r0, [r4, #0x34] -_0808E4A2: - pop {r4, pc} - .align 2, 0 -_0808E4A4: .4byte 0xFFFF8000 diff --git a/data/const/object/object45.s b/data/const/object/object45.s deleted file mode 100644 index 3d3acfcb..00000000 --- a/data/const/object/object45.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08121BD8:: @ 08121BD8 - .4byte sub_0808E42C - .4byte sub_0808E448 diff --git a/linker.ld b/linker.ld index 8fb6600e..9fc7b40d 100644 --- a/linker.ld +++ b/linker.ld @@ -692,7 +692,7 @@ SECTIONS { src/object/object42.o(.text); src/object/object43.o(.text); src/object/object44.o(.text); - asm/object/object45.o(.text); + src/object/object45.o(.text); src/object/giantBookLadder.o(.text); src/object/heartContainer.o(.text); src/object/fileScreenObjects.o(.text); @@ -1425,7 +1425,7 @@ SECTIONS { data/animations/object/object43.o(.rodata); src/object/object44.o(.rodata); data/animations/object/object44.o(.rodata); - data/const/object/object45.o(.rodata); + src/object/object45.o(.rodata); data/animations/object/object45.o(.rodata); src/object/giantBookLadder.o(.rodata); src/object/heartContainer.o(.rodata); diff --git a/src/object/object45.c b/src/object/object45.c new file mode 100644 index 00000000..1de0e0f1 --- /dev/null +++ b/src/object/object45.c @@ -0,0 +1,44 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "player.h" +#include "item.h" + +void sub_0808E42C(Entity*); +void sub_0808E448(Entity*); + +void Object45(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_0808E42C, + sub_0808E448, + }; + + actionFuncs[this->action]((Entity*)this); +} + +void sub_0808E42C(Entity* this) { + this->action = 1; + this->updatePriority = 6; + InitializeAnimation(this, this->type); +} + +void sub_0808E448(Entity* this) { + if (1 < IsItemEquipped(ITEM_LANTERN_ON)) { + DeleteThisEntity(); + } + GetNextFrame(this); + + switch (this->frame) { + case 0x80: + DeleteThisEntity(); + case 1: + this->spriteSettings.draw ^= 1; + break; + default: + this->spriteSettings.draw = 1; + break; + } + + if (this->type == 0) { + this->z.WORD -= 0x8000; + } +}