From 2446053493563105fb27d01c16862fb8636376a2 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sun, 13 Mar 2022 11:53:19 +0200 Subject: [PATCH] Decompile object63 --- asm/object/object63.s | 112 ----------------------------------- data/const/object/object63.s | 10 ---- linker.ld | 4 +- src/object/object63.c | 65 ++++++++++++++++++++ 4 files changed, 67 insertions(+), 124 deletions(-) delete mode 100644 asm/object/object63.s delete mode 100644 data/const/object/object63.s create mode 100644 src/object/object63.c diff --git a/asm/object/object63.s b/asm/object/object63.s deleted file mode 100644 index 76bf8b49..00000000 --- a/asm/object/object63.s +++ /dev/null @@ -1,112 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - - thumb_func_start Object63 -Object63: @ 0x08093D70 - push {lr} - ldr r2, _08093D84 @ =gUnk_08122944 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08093D84: .4byte gUnk_08122944 - - thumb_func_start sub_08093D88 -sub_08093D88: @ 0x08093D88 - push {r4, lr} - adds r4, r0, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x36] - subs r0, #8 - strh r0, [r4, #0x36] - movs r0, #0xa8 - lsls r0, r0, #0xa - str r0, [r4, #0x20] - movs r0, #0x20 - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xa] - cmp r0, #0 - beq _08093DAC - cmp r0, #1 - beq _08093DC4 - b _08093DDE -_08093DAC: - adds r0, r4, #0 - movs r1, #4 - bl CreateRandomItemDrop - cmp r0, #0 - bne _08093DBC - movs r0, #2 - strb r0, [r4, #0xc] -_08093DBC: - ldr r1, [r4, #0x54] - ldr r0, [r4, #0x20] - str r0, [r1, #0x20] - b _08093DDE -_08093DC4: - movs r0, #0 - movs r1, #0x5f - movs r2, #0 - bl CreateObject - adds r1, r0, #0 - cmp r1, #0 - beq _08093DDE - movs r0, #5 - strb r0, [r1, #0xe] - adds r0, r4, #0 - bl sub_08093E10 -_08093DDE: - pop {r4, pc} - - thumb_func_start sub_08093DE0 -sub_08093DE0: @ 0x08093DE0 - push {lr} - adds r2, r0, #0 - ldrb r0, [r2, #0xe] - subs r0, #1 - strb r0, [r2, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08093DF4 - movs r0, #2 - strb r0, [r2, #0xc] -_08093DF4: - ldrb r1, [r2, #0xe] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _08093E06 - ldr r1, [r2, #0x54] - ldrh r0, [r1, #0x32] - adds r0, #1 - strh r0, [r1, #0x32] -_08093E06: - pop {pc} - - thumb_func_start sub_08093E08 -sub_08093E08: @ 0x08093E08 - push {lr} - bl DeleteEntity - pop {pc} - - thumb_func_start sub_08093E10 -sub_08093E10: @ 0x08093E10 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - bl CopyPosition - str r4, [r5, #0x50] - str r5, [r4, #0x54] - ldr r0, [r4, #0x20] - str r0, [r5, #0x20] - pop {r4, r5, pc} diff --git a/data/const/object/object63.s b/data/const/object/object63.s deleted file mode 100644 index 0727682c..00000000 --- a/data/const/object/object63.s +++ /dev/null @@ -1,10 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08122944:: @ 08122944 - .4byte sub_08093D88 - .4byte sub_08093DE0 - .4byte sub_08093E08 diff --git a/linker.ld b/linker.ld index a92d765b..58e09d13 100644 --- a/linker.ld +++ b/linker.ld @@ -723,7 +723,7 @@ SECTIONS { src/object/swordsmanNewsletter.o(.text); src/object/object61.o(.text); src/object/giantTwig.o(.text); - asm/object/object63.o(.text); + src/object/object63.o(.text); src/object/object64.o(.text); src/object/ladderHoleInBookshelf.o(.text); asm/object/object66.o(.text); @@ -1464,7 +1464,7 @@ SECTIONS { data/const/object/swordsmanNewsletter.o(.rodata); src/object/object61.o(.rodata); src/object/giantTwig.o(.rodata); - data/const/object/object63.o(.rodata); + src/object/object63.o(.rodata); src/object/object64.o(.rodata); data/animations/object/object64.o(.rodata); src/object/ladderHoleInBookshelf.o(.rodata); diff --git a/src/object/object63.c b/src/object/object63.c new file mode 100644 index 00000000..5cdd827e --- /dev/null +++ b/src/object/object63.c @@ -0,0 +1,65 @@ +#define NENT_DEPRECATED +#include "entity.h" +#include "functions.h" +#include "asm.h" +#include "object.h" + +void sub_08093D88(Entity*); +void sub_08093DE0(Entity*); +void Object63_Delete(Entity*); +void sub_08093E10(Entity*, Entity*); + +void Object63(Entity* this) { + static void (*const actionFuncs[])(Entity*) = { + sub_08093D88, + sub_08093DE0, + Object63_Delete, + }; + + actionFuncs[this->action]((Entity*)this); +} + +void sub_08093D88(Entity* this) { + Entity* objEnt; + + this->action = 1; + this->z.HALF.HI -= 8; + this->zVelocity = 0x2a000; + this->actionDelay = 32; + switch (this->type) { + case 0: + if (CreateRandomItemDrop(this, 4) == 0) { + this->action = 2; + } + this->child->zVelocity = this->zVelocity; + break; + case 1: + objEnt = CreateObject(0, OBJECT_BLOCKING_STAIRS, 0); + if (objEnt != NULL) { + objEnt->actionDelay = 5; + sub_08093E10(this, objEnt); + } + break; + } +} + +void sub_08093DE0(Entity* this) { + if (--this->actionDelay == 0) { + this->action = 2; + } + + if ((this->actionDelay & 1) != 0) { + this->child->y.HALF.HI++; + } +} + +void Object63_Delete(Entity* this) { + DeleteEntity(this); +} + +void sub_08093E10(Entity* this, Entity* ent) { + CopyPosition(this, ent); + ent->parent = this; + this->child = ent; + ent->zVelocity = this->zVelocity; +}