mirror of
https://github.com/zeldaret/tmc
synced 2026-08-06 18:03:17 -04:00
Decompile Object11
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
/**
|
||||
* @file object11.c
|
||||
* @ingroup Objects
|
||||
*
|
||||
* @brief Object11 object
|
||||
*/
|
||||
|
||||
#define NENT_DEPRECATED
|
||||
#include "global.h"
|
||||
#include "object.h"
|
||||
#include "functions.h"
|
||||
#include "hitbox.h"
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ Entity base;
|
||||
/*0x68*/ u8 unk_68[8];
|
||||
/*0x70*/ u16 unk_70;
|
||||
/*0x72*/ u8 unk_72;
|
||||
} Object11Entity;
|
||||
|
||||
typedef struct {
|
||||
u8 unk_0;
|
||||
u8 unk_1;
|
||||
u8 unk_2;
|
||||
} struct_08120588;
|
||||
|
||||
void Object11_Init(Object11Entity*);
|
||||
void Object11_Action1(Object11Entity*);
|
||||
void Object11_Action2(Object11Entity*);
|
||||
void Object11_Action2SubAction0(Object11Entity*);
|
||||
void Object11_Action2SubAction1(Object11Entity*);
|
||||
void Object11_Action2SubAction2(Object11Entity*);
|
||||
void Object11_Action2SubAction3(Object11Entity*);
|
||||
void Object11_Action2SubAction4(Object11Entity*);
|
||||
void Object11_Action2SubAction5(Object11Entity*);
|
||||
|
||||
void Object11(Object11Entity* this) {
|
||||
static void (*const Object11_Actions[])(Object11Entity*) = {
|
||||
Object11_Init,
|
||||
Object11_Action1,
|
||||
Object11_Action2,
|
||||
};
|
||||
if (!EntityIsDeleted(super)) {
|
||||
Object11_Actions[super->action](this);
|
||||
}
|
||||
}
|
||||
|
||||
extern const Hitbox gUnk_081205B4;
|
||||
void Object11_Init(Object11Entity* this) {
|
||||
static const struct_08120588 gUnk_08120588[] = {
|
||||
{ 0, 32, 1 }, { 0, 64, 2 }, { 0, 32, 2 }, { 13, 1, 0 }, { 22, 1, 0 },
|
||||
};
|
||||
if (super->type == 3) {
|
||||
Object11_Action2SubAction5(this);
|
||||
}
|
||||
sub_08004168(super);
|
||||
if (super->type == 4) {
|
||||
Object11_Action2SubAction5(this);
|
||||
}
|
||||
super->action = 2;
|
||||
super->flags |= ENT_COLLIDE;
|
||||
super->spriteRendering.b3 = 2;
|
||||
super->field_0x1d = gUnk_08120588[super->type].unk_1;
|
||||
super->field_0x1c = gUnk_08120588[super->type].unk_2;
|
||||
super->speed = 0x80;
|
||||
super->collisionLayer = gPlayerEntity.collisionLayer;
|
||||
super->health = 1;
|
||||
super->field_0x3c = 7;
|
||||
super->hitType = 0x6e;
|
||||
super->flags2 = 4;
|
||||
super->hitbox = (Hitbox*)&gUnk_081205B4;
|
||||
this->unk_72 = 0;
|
||||
this->unk_70 = GetTileIndex(COORD_TO_TILE(super), super->collisionLayer);
|
||||
SetTile(0x4022, COORD_TO_TILE(super), super->collisionLayer);
|
||||
InitializeAnimation(super, gUnk_08120588[super->type].unk_0);
|
||||
}
|
||||
|
||||
void Object11_Action1(Object11Entity* this) {
|
||||
if (((gPlayerState.field_0x1c & 0xf) != 1) || ((super->bitfield & 0x7f) != 0x13)) {
|
||||
sub_0807BA8C(COORD_TO_TILE(super), super->collisionLayer);
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
void Object11_Action2(Object11Entity* this) {
|
||||
static void (*const Object11_Action2SubActions[])(Object11Entity*) = {
|
||||
Object11_Action2SubAction0, Object11_Action2SubAction1, Object11_Action2SubAction2,
|
||||
Object11_Action2SubAction3, Object11_Action2SubAction4, Object11_Action2SubAction5,
|
||||
};
|
||||
Object11_Action2SubActions[super->subAction](this);
|
||||
}
|
||||
|
||||
const Hitbox gUnk_081205B4 = { 0, 0, { 6, 3, 3, 6 }, 6, 6 };
|
||||
|
||||
void Object11_Action2SubAction0(Object11Entity* this) {
|
||||
super->subAction = 1;
|
||||
Object11_Action2SubAction1(this);
|
||||
}
|
||||
|
||||
void Object11_Action2SubAction1(Object11Entity* this) {
|
||||
Object11_Action1(this);
|
||||
sub_0806F4E8(super);
|
||||
if ((super->field_0x1d != 0) && (--super->field_0x1d == 0)) {
|
||||
super->subAction = 2;
|
||||
}
|
||||
}
|
||||
|
||||
void Object11_Action2SubAction2(Object11Entity* this) {
|
||||
if (this->unk_72 == 0) {
|
||||
this->unk_72 = 1;
|
||||
super->spriteOffsetX = 0;
|
||||
sub_0807B9B8(this->unk_70, COORD_TO_TILE(super), super->collisionLayer);
|
||||
}
|
||||
if (((gPlayerState.field_0x1c & 0xf) != 1) || ((super->bitfield & 0x7f) != 0x13)) {
|
||||
Object11_Action2SubAction5(this);
|
||||
}
|
||||
if (sub_0806F3E4(super) && ((super->field_0x1c & 0xf) == 1)) {
|
||||
DeleteThisEntity();
|
||||
}
|
||||
}
|
||||
|
||||
void Object11_Action2SubAction3(Object11Entity* this) {
|
||||
}
|
||||
|
||||
void Object11_Action2SubAction4(Object11Entity* this) {
|
||||
}
|
||||
|
||||
void Object11_Action2SubAction5(Object11Entity* this) {
|
||||
switch (super->type2) {
|
||||
case 0xff:
|
||||
break;
|
||||
case 0xf:
|
||||
CreateFx(super, super->actionDelay, 0x80);
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
CreateObjectWithParent(super, super->type2, super->actionDelay, 0);
|
||||
break;
|
||||
}
|
||||
DeleteThisEntity();
|
||||
}
|
||||
Reference in New Issue
Block a user