Decompile Object42

This commit is contained in:
octorock 2022-03-11 17:08:44 +01:00
parent ae587390b4
commit 3389e2a521
5 changed files with 84 additions and 207 deletions

View File

@ -1,184 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Object42
Object42: @ 0x0808DD7C
push {lr}
adds r2, r0, #0
ldrb r0, [r2, #0xa]
cmp r0, #0
beq _0808DD9C
ldr r0, _0808DD98 @ =gUnk_081217B0
ldrb r1, [r2, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r2, #0
bl _call_via_r1
b _0808DDAC
.align 2, 0
_0808DD98: .4byte gUnk_081217B0
_0808DD9C:
ldr r0, _0808DDB0 @ =gUnk_081217A8
ldrb r1, [r2, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r2, #0
bl _call_via_r1
_0808DDAC:
pop {pc}
.align 2, 0
_0808DDB0: .4byte gUnk_081217A8
thumb_func_start sub_0808DDB4
sub_0808DDB4: @ 0x0808DDB4
push {r4, lr}
adds r4, r0, #0
movs r0, #1
strb r0, [r4, #0xc]
ldrb r0, [r4, #0xa]
cmp r0, #0
beq _0808DDDC
movs r0, #0x78
strb r0, [r4, #0xe]
adds r1, r4, #0
adds r1, #0x6c
movs r0, #0xf0
strh r0, [r1]
adds r0, r4, #0
movs r1, #0
bl InitializeAnimation
adds r0, r4, #0
bl sub_0808DDE8
_0808DDDC:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_0808DDE0
sub_0808DDE0: @ 0x0808DDE0
push {lr}
bl DeleteThisEntity
pop {pc}
thumb_func_start sub_0808DDE8
sub_0808DDE8: @ 0x0808DDE8
push {r4, r5, lr}
adds r5, r0, #0
adds r4, r5, #0
adds r4, #0x6c
ldrh r0, [r4]
subs r0, #1
strh r0, [r4]
bl sub_0807953C
cmp r0, #0
beq _0808DE04
ldrb r0, [r5, #0xf]
adds r0, #1
strb r0, [r5, #0xf]
_0808DE04:
ldrb r0, [r5, #0xf]
cmp r0, #0x1e
bhi _0808DE1C
ldr r0, _0808DE8C @ =gPlayerState
ldr r0, [r0, #0x30]
ldr r1, _0808DE90 @ =0x00001810
ands r0, r1
cmp r0, #0
bne _0808DE1C
ldrh r0, [r4]
cmp r0, #0
bne _0808DE2A
_0808DE1C:
ldr r0, _0808DE8C @ =gPlayerState
ldr r1, [r0, #0x30]
ldr r2, _0808DE94 @ =0xFFFFFBFF
ands r1, r2
str r1, [r0, #0x30]
bl DeleteThisEntity
_0808DE2A:
ldr r3, _0808DE98 @ =gPlayerEntity
ldr r1, _0808DE9C @ =gUnk_081217B8
ldrb r0, [r3, #0x14]
lsrs r0, r0, #1
adds r0, r0, r1
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
ldrh r1, [r3, #0x2e]
adds r0, r0, r1
strh r0, [r5, #0x2e]
ldrh r0, [r3, #0x32]
subs r0, #6
strh r0, [r5, #0x32]
ldr r0, [r3, #0x34]
str r0, [r5, #0x34]
adds r0, r3, #0
adds r0, #0x38
ldrb r1, [r0]
adds r0, r5, #0
adds r0, #0x38
strb r1, [r0]
ldrb r2, [r3, #0x19]
lsrs r2, r2, #6
lsls r2, r2, #6
ldrb r4, [r5, #0x19]
movs r1, #0x3f
adds r0, r1, #0
ands r0, r4
orrs r0, r2
strb r0, [r5, #0x19]
ldrb r0, [r3, #0x1b]
lsrs r0, r0, #6
lsls r0, r0, #6
ldrb r2, [r5, #0x1b]
ands r1, r2
orrs r1, r0
strb r1, [r5, #0x1b]
ldr r0, _0808DE8C @ =gPlayerState
ldr r0, [r0, #0x30]
movs r1, #0x80
lsls r1, r1, #3
ands r0, r1
cmp r0, #0
beq _0808DEA0
adds r0, r5, #0
bl GetNextFrame
b _0808DEA4
.align 2, 0
_0808DE8C: .4byte gPlayerState
_0808DE90: .4byte 0x00001810
_0808DE94: .4byte 0xFFFFFBFF
_0808DE98: .4byte gPlayerEntity
_0808DE9C: .4byte gUnk_081217B8
_0808DEA0:
bl DeleteThisEntity
_0808DEA4:
ldr r1, _0808DEC0 @ =gPlayerEntity
ldrb r0, [r1, #0x14]
lsrs r0, r0, #1
cmp r0, #2
bne _0808DEC4
adds r0, r1, #0
movs r1, #3
adds r2, r5, #0
bl sub_0806FEBC
ldrh r0, [r5, #0x32]
subs r0, #5
strh r0, [r5, #0x32]
b _0808DECE
.align 2, 0
_0808DEC0: .4byte gPlayerEntity
_0808DEC4:
adds r0, r1, #0
movs r1, #0
adds r2, r5, #0
bl sub_0806FEBC
_0808DECE:
pop {r4, r5, pc}

View File

@ -43342,11 +43342,6 @@
"start": 1185642,
"size": 26
},
{
"path": "object42/gUnk_081217B8.bin",
"start": 1185720,
"size": 4
},
{
"path": "animations/gSpriteAnimations_Object43_0.bin",
"start": 1185760,

View File

@ -1,16 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_081217A8:: @ 081217A8
.4byte sub_0808DDB4
.4byte sub_0808DDE0
gUnk_081217B0:: @ 081217B0
.4byte sub_0808DDB4
.4byte sub_0808DDE8
gUnk_081217B8:: @ 081217B8
.incbin "object42/gUnk_081217B8.bin"

View File

@ -689,7 +689,7 @@ SECTIONS {
src/object/giantLeaf.o(.text);
src/object/fairy.o(.text);
src/object/ladderUp.o(.text);
asm/object/object42.o(.text);
src/object/object42.o(.text);
src/object/object43.o(.text);
asm/object/object44.o(.text);
asm/object/object45.o(.text);
@ -1420,7 +1420,7 @@ SECTIONS {
src/object/object3E.o(.rodata);
data/const/object/giantLeaf.o(.rodata);
src/object/fairy.o(.rodata);
data/const/object/object42.o(.rodata);
src/object/object42.o(.rodata);
src/object/object43.o(.rodata);
data/animations/object/object43.o(.rodata);
data/const/object/object44.o(.rodata);

82
src/object/object42.c Normal file
View File

@ -0,0 +1,82 @@
/**
* @file object42.c
* @ingroup Objects
*
* @brief Object42 object
*/
#define NENT_DEPRECATED
#include "global.h"
#include "object.h"
#include "functions.h"
typedef struct {
/*0x00*/ Entity base;
/*0x68*/ u8 unk_68[4];
/*0x6c*/ u16 unk_6c;
} Object42Entity;
void sub_0808DDB4(Object42Entity*);
void sub_0808DDE0(Object42Entity*);
void sub_0808DDE8(Object42Entity*);
void Object42(Object42Entity* this) {
static void (*const gUnk_081217A8[])(Object42Entity*) = {
sub_0808DDB4,
sub_0808DDE0,
};
static void (*const gUnk_081217B0[])(Object42Entity*) = {
sub_0808DDB4,
sub_0808DDE8,
};
if (super->type != 0) {
gUnk_081217B0[super->action](this);
} else {
gUnk_081217A8[super->action](this);
}
}
void sub_0808DDB4(Object42Entity* this) {
super->action = 1;
if (super->type != 0) {
super->actionDelay = 0x78;
this->unk_6c = 0xf0;
InitializeAnimation(super, 0);
sub_0808DDE8(this);
}
}
void sub_0808DDE0(Object42Entity* this) {
DeleteThisEntity();
}
void sub_0808DDE8(Object42Entity* this) {
static const s8 gUnk_081217B8[] = { 0, -6, 0, 6 };
Entity* player;
this->unk_6c--;
if (sub_0807953C()) {
super->field_0xf++;
}
if (((0x1e < super->field_0xf) || ((gPlayerState.flags & 0x1810) != 0)) || (this->unk_6c == 0)) {
gPlayerState.flags &= 0xfffffbff;
DeleteThisEntity();
}
player = &gPlayerEntity;
super->x.HALF.HI = (s8)gUnk_081217B8[gPlayerEntity.animationState >> 1] + player->x.HALF.HI;
super->y.HALF.HI = gPlayerEntity.y.HALF.HI + -6;
super->z = gPlayerEntity.z;
super->collisionLayer = gPlayerEntity.collisionLayer;
super->spriteRendering.b3 = gPlayerEntity.spriteRendering.b3;
super->spriteOrientation.flipY = gPlayerEntity.spriteOrientation.flipY;
if ((gPlayerState.flags & 0x400) != 0) {
GetNextFrame(super);
} else {
DeleteThisEntity();
}
if (gPlayerEntity.animationState >> 1 == 2) {
sub_0806FEBC(&gPlayerEntity, 3, super);
super->y.HALF.HI -= 5;
} else {
sub_0806FEBC(&gPlayerEntity, 0, super);
}
}