Decompile Object64

This commit is contained in:
octorock 2022-03-10 21:50:58 +01:00
parent a24178a56e
commit 1aef85e81c
5 changed files with 122 additions and 237 deletions

View File

@ -1,214 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Object64
Object64: @ 0x08093E24
push {lr}
ldr r2, _08093E38 @ =gUnk_0812295C
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_08093E38: .4byte gUnk_0812295C
thumb_func_start sub_08093E3C
sub_08093E3C: @ 0x08093E3C
push {r4, lr}
adds r4, r0, #0
movs r2, #1
movs r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x10]
movs r0, #0x7f
ands r0, r1
strb r0, [r4, #0x10]
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
orrs r0, r2
strb r0, [r4, #0x18]
adds r0, r4, #0
adds r0, #0x38
ldrb r0, [r0]
cmp r0, #0
bne _08093E6A
adds r0, r4, #0
bl ResolveCollisionLayer
_08093E6A:
ldrb r1, [r4, #0xa]
adds r0, r4, #0
bl InitializeAnimation
ldrb r0, [r4, #0xa]
lsls r0, r0, #2
ldr r1, _08093EA8 @ =gUnk_08122950
adds r2, r0, r1
ldrh r0, [r2]
cmp r0, #0
beq _08093E90
ldrb r1, [r4, #0xb]
movs r0, #0x40
ands r0, r1
cmp r0, #0
bne _08093E90
ldrh r0, [r2]
bl EnqueueSFX
_08093E90:
ldrb r1, [r4, #0xb]
movs r0, #0x20
ands r0, r1
cmp r0, #0
beq _08093EA6
ldrb r0, [r4, #0x19]
movs r1, #0x3f
ands r1, r0
movs r0, #0x40
orrs r1, r0
strb r1, [r4, #0x19]
_08093EA6:
pop {r4, pc}
.align 2, 0
_08093EA8: .4byte gUnk_08122950
thumb_func_start sub_08093EAC
sub_08093EAC: @ 0x08093EAC
push {lr}
ldr r3, _08093EC8 @ =gUnk_08122964
ldr r2, _08093ECC @ =gUnk_08122950
ldrb r1, [r0, #0xa]
lsls r1, r1, #2
adds r1, r1, r2
ldrb r1, [r1, #2]
lsrs r1, r1, #4
lsls r1, r1, #2
adds r1, r1, r3
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_08093EC8: .4byte gUnk_08122964
_08093ECC: .4byte gUnk_08122950
thumb_func_start sub_08093ED0
sub_08093ED0: @ 0x08093ED0
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 _08093EEC
adds r0, r4, #0
bl DeleteEntity
_08093EEC:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_08093EF0
sub_08093EF0: @ 0x08093EF0
push {r4, r5, r6, lr}
adds r5, r0, #0
ldrb r4, [r5, #0xa]
cmp r4, #1
beq _08093F40
cmp r4, #1
bgt _08093F04
cmp r4, #0
beq _08093F0A
b _08093FB0
_08093F04:
cmp r4, #2
beq _08093F98
b _08093FB0
_08093F0A:
ldrb r0, [r5, #0xd]
cmp r0, #0
bne _08093FB0
adds r0, r5, #0
bl GetNextFrame
adds r0, r5, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _08093FB0
movs r0, #0x64
movs r1, #1
movs r2, #0
bl CreateObject
adds r1, r0, #0
cmp r1, #0
beq _08093F8E
ldr r0, [r5, #0x50]
str r0, [r1, #0x50]
adds r0, r5, #0
bl CopyPosition
b _08093F8E
_08093F40:
adds r0, r5, #0
bl GetNextFrame
adds r1, r5, #0
adds r1, #0x5a
ldrb r0, [r1]
ands r4, r0
adds r6, r1, #0
cmp r4, #0
beq _08093F72
movs r0, #0
strb r0, [r6]
movs r0, #0x64
movs r1, #2
movs r2, #0
bl CreateObject
adds r1, r0, #0
cmp r1, #0
beq _08093F72
ldr r0, [r5, #0x50]
str r0, [r1, #0x50]
adds r0, r5, #0
bl CopyPosition
_08093F72:
ldrb r1, [r6]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _08093FB0
ldr r1, [r5, #0x50]
ldr r0, _08093F94 @ =gPlayerEntity
cmp r1, r0
bne _08093F8E
movs r0, #0x7a
bl SoundReq
bl sub_08079D84
_08093F8E:
bl DeleteThisEntity
b _08093FB0
.align 2, 0
_08093F94: .4byte gPlayerEntity
_08093F98:
adds r0, r5, #0
bl GetNextFrame
adds r0, r5, #0
adds r0, #0x5a
ldrb r1, [r0]
movs r0, #0x80
ands r0, r1
cmp r0, #0
beq _08093FB0
bl DeleteThisEntity
_08093FB0:
pop {r4, r5, r6, pc}
.align 2, 0

View File

@ -44050,11 +44050,6 @@
"size": 28,
"type": "animation"
},
{
"path": "object64/gUnk_08122950.bin",
"start": 1190224,
"size": 12
},
{
"path": "object67/gUnk_081229D0.bin",
"start": 1190352,

View File

@ -1,16 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_08122950:: @ 08122950
.incbin "object64/gUnk_08122950.bin"
gUnk_0812295C:: @ 0812295C
.4byte sub_08093E3C
.4byte sub_08093EAC
gUnk_08122964:: @ 08122964
.4byte sub_08093ED0
.4byte sub_08093EF0

View File

@ -724,7 +724,7 @@ SECTIONS {
src/object/object61.o(.text);
src/object/giantTwig.o(.text);
asm/object/object63.o(.text);
asm/object/object64.o(.text);
src/object/object64.o(.text);
src/object/ladderHoleInBookshelf.o(.text);
asm/object/object66.o(.text);
asm/object/object67.o(.text);
@ -1466,7 +1466,7 @@ SECTIONS {
src/object/object61.o(.rodata);
src/object/giantTwig.o(.rodata);
data/const/object/object63.o(.rodata);
data/const/object/object64.o(.rodata);
src/object/object64.o(.rodata);
data/animations/object/object64.o(.rodata);
src/object/ladderHoleInBookshelf.o(.rodata);
data/const/object/object67.o(.rodata);

120
src/object/object64.c Normal file
View File

@ -0,0 +1,120 @@
/**
* @file object64.c
* @ingroup Objects
*
* @brief Object64 object
*/
#define NENT_DEPRECATED
#include "global.h"
#include "object.h"
#include "functions.h"
typedef struct {
/*0x00*/ Entity base;
} Object64Entity;
void sub_08093E3C(Object64Entity*);
void sub_08093EAC(Object64Entity*);
void sub_08093ED0(Object64Entity*);
void sub_08093EF0(Object64Entity*);
typedef struct {
u16 unk_0;
u8 unk_2;
u8 unk_3;
} struct_08122950;
const struct_08122950 gUnk_08122950[] = {
{ 244, 31, 0 },
{ 0, 31, 0 },
{ 0, 31, 0 },
};
void Object64(Object64Entity* this) {
static void (*const gUnk_0812295C[])(Object64Entity*) = {
sub_08093E3C,
sub_08093EAC,
};
gUnk_0812295C[super->action](this);
}
void sub_08093E3C(Object64Entity* this) {
const u16* ptr;
super->action = 1;
super->flags &= 0x7f;
super->spriteSettings.draw = 1;
if (super->collisionLayer == 0) {
ResolveCollisionLayer(super);
}
InitializeAnimation(super, super->type);
ptr = &gUnk_08122950[super->type].unk_0;
if ((ptr[0] != 0) && ((super->type2 & 0x40) == 0)) {
EnqueueSFX(ptr[0]);
}
if ((super->type2 & 0x20) != 0) {
super->spriteRendering.b3 = 1;
}
}
void sub_08093EAC(Object64Entity* this) {
static void (*const gUnk_08122964[])(Object64Entity*) = {
sub_08093ED0,
sub_08093EF0,
};
gUnk_08122964[gUnk_08122950[super->type].unk_2 >> 4](this);
}
void sub_08093ED0(Object64Entity* this) {
GetNextFrame(super);
if ((super->frame & 0x80) != 0) {
DeleteEntity(super);
}
}
void sub_08093EF0(Object64Entity* this) {
Entity* object;
switch (super->type) {
case 0:
if (super->subAction != 0) {
return;
}
GetNextFrame(super);
if ((super->frame & 0x80) == 0) {
return;
}
object = CreateObject(OBJECT_64, 1, 0);
if (object != NULL) {
object->parent = super->parent;
CopyPosition(super, object);
}
DeleteThisEntity();
break;
case 1:
GetNextFrame(super);
if ((super->frame & 1) != 0) {
super->frame = 0;
object = CreateObject(OBJECT_64, 2, 0);
if (object != NULL) {
object->parent = super->parent;
CopyPosition(super, object);
}
}
if ((super->frame & 0x80) == 0) {
return;
}
if (super->parent == &gPlayerEntity) {
SoundReq(SFX_PLY_VO6);
sub_08079D84();
}
DeleteThisEntity();
break;
case 2:
GetNextFrame(super);
if ((super->frame & 0x80) == 0) {
return;
}
DeleteThisEntity();
break;
}
}