Decompile ObjectBD

This commit is contained in:
octorock 2022-03-11 18:37:45 +01:00
parent 3389e2a521
commit 11609c6ee9
6 changed files with 180 additions and 204 deletions

View File

@ -0,0 +1,66 @@
.syntax unified
push {r4, r5, lr}
adds r4, r0, #0
ldrb r5, [r4, #0xc]
cmp r5, #0
beq _080A22FC
cmp r5, #1
beq _080A231C
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _080A233E
movs r0, #8
strb r0, [r4, #0xe]
ldrb r0, [r4, #0xf]
adds r0, #1
movs r1, #3
ands r0, r1
strb r0, [r4, #0xf]
ldrb r1, [r4, #0xd]
adds r0, r1, r0
strb r0, [r4, #0x1e]
lsls r1, r1, #0x18
lsls r0, r0, #0x18
cmp r1, r0
bne _080A233E
b _080A233A
_080A22FC:
adds r0, r4, #0
bl sub_080A2340
movs r0, #8
strb r0, [r4, #0xe]
strb r5, [r4, #0xf]
ldrb r0, [r4, #0x1e]
strb r0, [r4, #0xd]
bl Random
movs r1, #3
ands r0, r1
lsls r0, r0, #4
adds r0, #0x1e
strh r0, [r4, #0x24]
b _080A233E
_080A231C:
ldrh r0, [r4, #0x24]
subs r0, #1
strh r0, [r4, #0x24]
lsls r0, r0, #0x10
cmp r0, #0
bne _080A233E
bl Random
movs r1, #7
ands r0, r1
lsls r0, r0, #4
adds r0, #0x1e
strh r0, [r4, #0x24]
movs r0, #2
b _080A233C
_080A233A:
movs r0, #1
_080A233C:
strb r0, [r4, #0xc]
_080A233E:
pop {r4, r5, pc}
.syntax divided

View File

@ -1,182 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ObjectBD
ObjectBD: @ 0x080A225C
push {lr}
ldr r2, _080A2270 @ =gUnk_0812503C
ldrb r1, [r0, #0xa]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_080A2270: .4byte gUnk_0812503C
thumb_func_start sub_080A2274
sub_080A2274: @ 0x080A2274
push {lr}
adds r1, r0, #0
ldrb r0, [r1, #0xc]
cmp r0, #0
bne _080A22AE
adds r0, r1, #0
bl sub_080A2340
movs r0, #0xbd
movs r1, #1
movs r2, #0
bl CreateObject
movs r0, #0x80
lsls r0, r0, #0x12
ldrb r0, [r0, #7]
movs r1, #3
cmp r0, #1
bne _080A229C
movs r1, #2
_080A229C:
movs r0, #0xbd
movs r2, #0
bl CreateObject
movs r0, #0xbd
movs r1, #4
movs r2, #0
bl CreateObject
_080A22AE:
pop {pc}
thumb_func_start sub_080A22B0
sub_080A22B0: @ 0x080A22B0
push {lr}
adds r1, r0, #0
ldrb r0, [r1, #0xc]
cmp r0, #0
bne _080A22C0
adds r0, r1, #0
bl sub_080A2340
_080A22C0:
pop {pc}
.align 2, 0
thumb_func_start sub_080A22C4
sub_080A22C4: @ 0x080A22C4
push {r4, r5, lr}
adds r4, r0, #0
ldrb r5, [r4, #0xc]
cmp r5, #0
beq _080A22FC
cmp r5, #1
beq _080A231C
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _080A233E
movs r0, #8
strb r0, [r4, #0xe]
ldrb r0, [r4, #0xf]
adds r0, #1
movs r1, #3
ands r0, r1
strb r0, [r4, #0xf]
ldrb r1, [r4, #0xd]
adds r0, r1, r0
strb r0, [r4, #0x1e]
lsls r1, r1, #0x18
lsls r0, r0, #0x18
cmp r1, r0
bne _080A233E
b _080A233A
_080A22FC:
adds r0, r4, #0
bl sub_080A2340
movs r0, #8
strb r0, [r4, #0xe]
strb r5, [r4, #0xf]
ldrb r0, [r4, #0x1e]
strb r0, [r4, #0xd]
bl Random
movs r1, #3
ands r0, r1
lsls r0, r0, #4
adds r0, #0x1e
strh r0, [r4, #0x24]
b _080A233E
_080A231C:
ldrh r0, [r4, #0x24]
subs r0, #1
strh r0, [r4, #0x24]
lsls r0, r0, #0x10
cmp r0, #0
bne _080A233E
bl Random
movs r1, #7
ands r0, r1
lsls r0, r0, #4
adds r0, #0x1e
strh r0, [r4, #0x24]
movs r0, #2
b _080A233C
_080A233A:
movs r0, #1
_080A233C:
strb r0, [r4, #0xc]
_080A233E:
pop {r4, r5, pc}
thumb_func_start sub_080A2340
sub_080A2340: @ 0x080A2340
ldrb r1, [r0, #0xa]
lsls r1, r1, #3
ldr r2, _080A239C @ =gUnk_08125014
adds r1, r1, r2
ldrh r2, [r1]
strh r2, [r0, #0x2e]
ldrh r2, [r1, #2]
strh r2, [r0, #0x32]
ldrh r2, [r1, #4]
strb r2, [r0, #0x1e]
ldrb r1, [r1, #6]
movs r2, #0x29
adds r2, r2, r0
mov ip, r2
movs r2, #7
ands r2, r1
mov r1, ip
ldrb r3, [r1]
movs r1, #8
rsbs r1, r1, #0
ands r1, r3
orrs r1, r2
mov r2, ip
strb r1, [r2]
ldrb r3, [r0, #0x19]
movs r2, #0x3f
adds r1, r2, #0
ands r1, r3
movs r3, #0x40
orrs r1, r3
strb r1, [r0, #0x19]
ldrb r1, [r0, #0x1b]
ands r2, r1
orrs r2, r3
strb r2, [r0, #0x1b]
ldrb r2, [r0, #0x18]
movs r1, #4
rsbs r1, r1, #0
ands r1, r2
movs r2, #2
orrs r1, r2
strb r1, [r0, #0x18]
movs r1, #1
strb r1, [r0, #0xc]
bx lr
.align 2, 0
_080A239C: .4byte gUnk_08125014

View File

@ -45179,11 +45179,6 @@
"start": 1200144,
"size": 4
},
{
"path": "objectBD/gUnk_08125014.bin",
"start": 1200148,
"size": 40
},
{
"path": "animations/gSpriteAnimations_Pinwheel_0.bin",
"start": 1200232,

View File

@ -1,15 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_08125014:: @ 08125014
.incbin "objectBD/gUnk_08125014.bin"
gUnk_0812503C:: @ 0812503C
.4byte sub_080A2274
.4byte sub_080A22B0
.4byte sub_080A22B0
.4byte sub_080A22B0
.4byte sub_080A22C4

View File

@ -813,7 +813,7 @@ SECTIONS {
src/object/gyorgBossObject.o(.text);
src/object/windcrest.o(.text);
src/object/litArea.o(.text);
asm/object/objectBD.o(.text);
src/object/objectBD.o(.text);
src/object/pinwheel.o(.text);
src/object/objectBF.o(.text);
src/object/enemyItem.o(.text);
@ -1567,7 +1567,7 @@ SECTIONS {
data/const/object/objectB9.o(.rodata);
src/object/gyorgBossObject.o(.rodata);
data/const/object/windcrest.o(.rodata);
data/const/object/objectBD.o(.rodata);
src/object/objectBD.o(.rodata);
data/const/object/pinwheel.o(.rodata);
data/animations/object/pinwheel.o(.rodata);
src/object/objectC1.o(.rodata);

112
src/object/objectBD.c Normal file
View File

@ -0,0 +1,112 @@
/**
* @file objectBD.c
* @ingroup Objects
*
* @brief ObjectBD object
*/
#define NENT_DEPRECATED
#include "global.h"
#include "object.h"
#include "functions.h"
void sub_080A2274(Entity*);
void sub_080A22B0(Entity*);
void sub_080A22C4(Entity*);
void sub_080A2340(Entity*);
typedef struct {
u16 unk_0;
u16 unk_2;
u16 unk_4;
u8 unk_6;
u8 pad;
} struct_08125014;
const struct_08125014 gUnk_08125014[] = {
{ 120, 48, 16, 4, 0 }, { 136, 81, 22, 3, 0 }, { 190, 20, 25, 2, 0 }, { 192, 81, 26, 2, 0 }, { 32, 104, 27, 3, 0 },
};
void ObjectBD(Entity* this) {
static void (*const gUnk_0812503C[])(Entity*) = {
sub_080A2274, sub_080A22B0, sub_080A22B0, sub_080A22B0, sub_080A22C4,
};
gUnk_0812503C[this->type](this);
}
void sub_080A2274(Entity* this) {
u32 addr;
u32 type;
if (this->action == 0) {
sub_080A2340(this);
CreateObject(OBJECT_BD, 1, 0);
addr = 0x02000000; // TODO write to 0x2000007
if (*(u8*)(addr + 7) == 1) {
type = 2;
} else {
type = 3;
}
CreateObject(OBJECT_BD, type, 0);
CreateObject(OBJECT_BD, 4, 0);
}
}
void sub_080A22B0(Entity* this) {
if (this->action == 0) {
sub_080A2340(this);
}
}
NONMATCH("asm/non_matching/objectBD/sub_080A22C4.inc", void sub_080A22C4(Entity* this)) {
u8 bVar1;
u8 uVar2;
s16 sVar3;
u32 uVar4;
u32 tmp1, tmp2, tmp3, tmp4;
switch (this->action) {
case 0:
sub_080A2340(this);
this->actionDelay = 8;
this->field_0xf = 0;
this->subAction = this->frameIndex;
this->speed = (Random() & 3) * 0x10 + 0x1e;
break;
case 1:
if (--this->speed != 0) {
return;
}
this->speed = (Random() & 7) * 0x10 + 0x1e;
this->action = 2;
break;
default:
if (--this->actionDelay != 0) {
return;
}
this->actionDelay = 8;
this->field_0xf = tmp2 = (this->field_0xf + 1) & 3;
tmp3 = this->subAction;
tmp1 = tmp3 + tmp2;
this->frameIndex = tmp1;
if (tmp3 * 0x1000000 != tmp1 * 0x1000000) {
return;
}
this->action = 1;
break;
}
}
END_NONMATCH
void sub_080A2340(Entity* this) {
const struct_08125014* ptr;
ptr = &gUnk_08125014[this->type];
this->x.HALF.HI = ptr->unk_0;
this->y.HALF.HI = ptr->unk_2;
this->frameIndex = ptr->unk_4;
this->spritePriority.b0 = ptr->unk_6;
this->spriteRendering.b3 = 1;
this->spriteOrientation.flipY = 1;
this->spriteSettings.draw = 2;
this->action = 1;
}