mirror of https://github.com/zeldaret/tmc.git
Decompile Object30
This commit is contained in:
parent
cbae0aa1e5
commit
29bacb4ff3
|
|
@ -1,207 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
|
||||
thumb_func_start Object30
|
||||
Object30: @ 0x0808A850
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldr r1, _0808A86C @ =gUnk_08121188
|
||||
ldrb r0, [r4, #0xc]
|
||||
lsls r0, r0, #2
|
||||
adds r0, r0, r1
|
||||
ldr r1, [r0]
|
||||
adds r0, r4, #0
|
||||
bl _call_via_r1
|
||||
adds r0, r4, #0
|
||||
bl sub_08080CB4
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0808A86C: .4byte gUnk_08121188
|
||||
|
||||
thumb_func_start sub_0808A870
|
||||
sub_0808A870: @ 0x0808A870
|
||||
push {r4, r5, lr}
|
||||
adds r5, r0, #0
|
||||
ldrb r0, [r5, #0xa]
|
||||
cmp r0, #1
|
||||
beq _0808A8BE
|
||||
cmp r0, #1
|
||||
bgt _0808A884
|
||||
cmp r0, #0
|
||||
beq _0808A896
|
||||
b _0808A8C4
|
||||
_0808A884:
|
||||
cmp r0, #3
|
||||
bgt _0808A8C4
|
||||
adds r0, r5, #0
|
||||
bl sub_0808A968
|
||||
adds r0, r5, #0
|
||||
bl sub_0808A8E0
|
||||
b _0808A8C4
|
||||
_0808A896:
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x38
|
||||
ldrb r0, [r0]
|
||||
bl GetLayerByIndex
|
||||
adds r4, r0, #0
|
||||
adds r0, r5, #0
|
||||
bl sub_0806F798
|
||||
lsls r0, r0, #1
|
||||
adds r0, #4
|
||||
adds r4, r4, r0
|
||||
str r4, [r5, #0x6c]
|
||||
ldrh r1, [r4]
|
||||
adds r0, r5, #0
|
||||
adds r0, #0x68
|
||||
strh r1, [r0]
|
||||
movs r0, #1
|
||||
strb r0, [r5, #0xc]
|
||||
b _0808A8C4
|
||||
_0808A8BE:
|
||||
adds r0, r5, #0
|
||||
bl sub_0808A968
|
||||
_0808A8C4:
|
||||
pop {r4, r5, pc}
|
||||
.align 2, 0
|
||||
|
||||
thumb_func_start sub_0808A8C8
|
||||
sub_0808A8C8: @ 0x0808A8C8
|
||||
push {lr}
|
||||
adds r2, r0, #0
|
||||
adds r0, #0x68
|
||||
ldr r1, [r2, #0x6c]
|
||||
ldrh r0, [r0]
|
||||
ldrh r1, [r1]
|
||||
cmp r0, r1
|
||||
beq _0808A8DE
|
||||
adds r0, r2, #0
|
||||
bl sub_0808A968
|
||||
_0808A8DE:
|
||||
pop {pc}
|
||||
|
||||
thumb_func_start sub_0808A8E0
|
||||
sub_0808A8E0: @ 0x0808A8E0
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
ldrb r2, [r4, #0xa]
|
||||
cmp r2, #0
|
||||
beq _0808A8F0
|
||||
cmp r2, #1
|
||||
beq _0808A930
|
||||
b _0808A954
|
||||
_0808A8F0:
|
||||
ldr r0, [r4, #0x70]
|
||||
cmp r0, #0
|
||||
beq _0808A930
|
||||
ldr r3, [r4, #0x20]
|
||||
cmp r3, #0
|
||||
bge _0808A926
|
||||
movs r0, #0x36
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r0, #8
|
||||
rsbs r0, r0, #0
|
||||
cmp r1, r0
|
||||
ble _0808A90C
|
||||
str r2, [r4, #0x70]
|
||||
b _0808A926
|
||||
_0808A90C:
|
||||
ldr r0, _0808A918 @ =0xFFFFC000
|
||||
cmp r3, r0
|
||||
bge _0808A920
|
||||
ldr r0, _0808A91C @ =0xFFFFFC00
|
||||
b _0808A924
|
||||
.align 2, 0
|
||||
_0808A918: .4byte 0xFFFFC000
|
||||
_0808A91C: .4byte 0xFFFFFC00
|
||||
_0808A920:
|
||||
movs r0, #0x80
|
||||
lsls r0, r0, #3
|
||||
_0808A924:
|
||||
str r0, [r4, #0x70]
|
||||
_0808A926:
|
||||
ldr r1, [r4, #0x70]
|
||||
adds r0, r4, #0
|
||||
bl GravityUpdate
|
||||
b _0808A962
|
||||
_0808A930:
|
||||
ldr r2, _0808A964 @ =gUnk_08121194
|
||||
ldrb r0, [r4, #0xf]
|
||||
adds r1, r0, #1
|
||||
strb r1, [r4, #0xf]
|
||||
lsls r0, r0, #0x18
|
||||
lsrs r0, r0, #0x1b
|
||||
movs r1, #7
|
||||
ands r0, r1
|
||||
adds r0, r0, r2
|
||||
ldrb r0, [r0]
|
||||
lsls r0, r0, #0x18
|
||||
asrs r0, r0, #0x18
|
||||
strh r0, [r4, #0x36]
|
||||
adds r0, r4, #0
|
||||
bl IsCollidingPlayer
|
||||
cmp r0, #0
|
||||
beq _0808A962
|
||||
_0808A954:
|
||||
ldrb r1, [r4, #0xb]
|
||||
movs r0, #0x5c
|
||||
movs r2, #0
|
||||
bl CreateItemEntity
|
||||
bl DeleteThisEntity
|
||||
_0808A962:
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0808A964: .4byte gUnk_08121194
|
||||
|
||||
thumb_func_start sub_0808A968
|
||||
sub_0808A968: @ 0x0808A968
|
||||
push {r4, lr}
|
||||
adds r4, r0, #0
|
||||
movs r0, #2
|
||||
strb r0, [r4, #0xc]
|
||||
movs r0, #0x1e
|
||||
strb r0, [r4, #0xe]
|
||||
ldrb r1, [r4, #0x18]
|
||||
subs r0, #0x22
|
||||
ands r0, r1
|
||||
movs r1, #1
|
||||
orrs r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
movs r0, #0xa0
|
||||
lsls r0, r0, #0xa
|
||||
str r0, [r4, #0x20]
|
||||
adds r2, r4, #0
|
||||
adds r2, #0x29
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0x39
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
movs r1, #0x18
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
ldrb r1, [r4, #0x18]
|
||||
movs r0, #0x31
|
||||
rsbs r0, r0, #0
|
||||
ands r0, r1
|
||||
strb r0, [r4, #0x18]
|
||||
adds r2, #0x13
|
||||
ldrb r1, [r2]
|
||||
movs r0, #0x10
|
||||
orrs r0, r1
|
||||
strb r0, [r2]
|
||||
ldr r0, _0808A9C0 @ =gUnk_08121C58
|
||||
str r0, [r4, #0x48]
|
||||
adds r0, r4, #0
|
||||
movs r1, #2
|
||||
bl SetDefaultPriority
|
||||
movs r0, #0xa0
|
||||
lsls r0, r0, #6
|
||||
str r0, [r4, #0x70]
|
||||
pop {r4, pc}
|
||||
.align 2, 0
|
||||
_0808A9C0: .4byte gUnk_08121C58
|
||||
|
|
@ -43118,11 +43118,6 @@
|
|||
"size": 4,
|
||||
"type": "animation"
|
||||
},
|
||||
{
|
||||
"path": "object30/gUnk_08121194.bin",
|
||||
"start": 1184148,
|
||||
"size": 8
|
||||
},
|
||||
{
|
||||
"path": "animations/gSpriteAnimations_PullableMushroom_0.bin",
|
||||
"start": 1184260,
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnk_08121188:: @ 08121188
|
||||
.4byte sub_0808A870
|
||||
.4byte sub_0808A8C8
|
||||
.4byte sub_0808A8E0
|
||||
|
||||
gUnk_08121194:: @ 08121194
|
||||
.incbin "object30/gUnk_08121194.bin"
|
||||
|
|
@ -668,7 +668,7 @@ SECTIONS {
|
|||
src/object/smoke.o(.text);
|
||||
src/object/pushableRock.o(.text);
|
||||
src/object/hittableLever.o(.text);
|
||||
asm/object/object30.o(.text);
|
||||
src/object/object30.o(.text);
|
||||
src/object/frozenFlower.o(.text);
|
||||
src/object/pullableMushroom.o(.text);
|
||||
src/object/bollard.o(.text);
|
||||
|
|
@ -1395,7 +1395,7 @@ SECTIONS {
|
|||
src/object/pushableRock.o(.rodata);
|
||||
data/animations/object/pushableRock.o(.rodata);
|
||||
src/object/hittableLever.o(.rodata);
|
||||
data/const/object/object30.o(.rodata);
|
||||
src/object/object30.o(.rodata);
|
||||
data/const/object/object31.o(.rodata);
|
||||
src/object/pullableMushroom.o(.rodata);
|
||||
data/animations/object/pullableMushroom.o(.rodata);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,114 @@
|
|||
/**
|
||||
* @file object30.c
|
||||
* @ingroup Objects
|
||||
*
|
||||
* @brief Object30 object
|
||||
*/
|
||||
|
||||
#define NENT_DEPRECATED
|
||||
#include "global.h"
|
||||
#include "object.h"
|
||||
#include "functions.h"
|
||||
#include "item.h"
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ Entity base;
|
||||
/*0x68*/ u16 unk_68;
|
||||
/*0x6a*/ u16 unk_6a;
|
||||
/*0x6c*/ u16* unk_6c;
|
||||
/*0x70*/ u32 unk_70;
|
||||
} Object30Entity;
|
||||
|
||||
extern u32 sub_0806F798(Entity*);
|
||||
extern const Hitbox gUnk_08121C58;
|
||||
|
||||
void Object30_Init(Object30Entity*);
|
||||
void Object30_Action1(Object30Entity*);
|
||||
void Object30_Action2(Object30Entity*);
|
||||
void sub_0808A968(Object30Entity*);
|
||||
|
||||
void Object30(Object30Entity* this) {
|
||||
static void (*const Object30_Actions[])(Object30Entity*) = {
|
||||
Object30_Init,
|
||||
Object30_Action1,
|
||||
Object30_Action2,
|
||||
};
|
||||
Object30_Actions[super->action](this);
|
||||
sub_08080CB4(super);
|
||||
}
|
||||
|
||||
void Object30_Init(Object30Entity* this) {
|
||||
LayerStruct* data;
|
||||
const u16* ptr;
|
||||
switch (super->type) {
|
||||
case 0:
|
||||
data = GetLayerByIndex(super->collisionLayer);
|
||||
ptr = &data->mapData[sub_0806F798(super)];
|
||||
this->unk_6c = (u16*)ptr;
|
||||
this->unk_68 = ptr[0];
|
||||
super->action = 1;
|
||||
break;
|
||||
case 1:
|
||||
sub_0808A968(this);
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
sub_0808A968(this);
|
||||
Object30_Action2(this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Object30_Action1(Object30Entity* this) {
|
||||
if (this->unk_68 != this->unk_6c[0]) {
|
||||
sub_0808A968(this);
|
||||
}
|
||||
}
|
||||
|
||||
void Object30_Action2(Object30Entity* this) {
|
||||
static const u8 gUnk_08121194[] = {
|
||||
249, 248, 247, 246, 245, 246, 247, 248,
|
||||
};
|
||||
u8 tmp;
|
||||
switch (super->type) {
|
||||
case 0:
|
||||
if (this->unk_70 != 0) {
|
||||
if (super->zVelocity < 0) {
|
||||
if (super->z.HALF.HI > -8) {
|
||||
this->unk_70 = 0;
|
||||
} else {
|
||||
if (super->zVelocity < -0x4000) {
|
||||
this->unk_70 = -0x400;
|
||||
} else {
|
||||
this->unk_70 = 0x400;
|
||||
}
|
||||
}
|
||||
}
|
||||
GravityUpdate(super, this->unk_70);
|
||||
return;
|
||||
}
|
||||
// fallthrough
|
||||
case 1:
|
||||
tmp = gUnk_08121194[(super->field_0xf++ >> 3) & 7];
|
||||
super->z.HALF.HI = tmp << 0x18 >> 0x18;
|
||||
if (!IsCollidingPlayer(super)) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
CreateItemEntity(ITEM_KINSTONE, (u32)super->type2, 0);
|
||||
DeleteThisEntity();
|
||||
}
|
||||
|
||||
void sub_0808A968(Object30Entity* this) {
|
||||
super->action = 2;
|
||||
super->actionDelay = 0x1e;
|
||||
super->spriteSettings.draw = 1;
|
||||
super->zVelocity = 0x28000;
|
||||
super->spritePriority.b1 = 3;
|
||||
super->spriteSettings.shadow = 0;
|
||||
super->field_0x3c |= 0x10;
|
||||
super->hitbox = (Hitbox*)&gUnk_08121C58;
|
||||
SetDefaultPriority(super, 2);
|
||||
this->unk_70 = 0x2800;
|
||||
}
|
||||
Loading…
Reference in New Issue