mirror of https://github.com/zeldaret/tmc.git
103 lines
2.7 KiB
C
103 lines
2.7 KiB
C
#define NENT_DEPRECATED
|
|
#include "entity.h"
|
|
#include "player.h"
|
|
#include "functions.h"
|
|
#include "asm.h"
|
|
#include "effects.h"
|
|
|
|
typedef struct {
|
|
Entity base;
|
|
u8 filler[0x4];
|
|
u32 unk6c;
|
|
} Object1FEntity;
|
|
|
|
void Object1F_Init(Object1FEntity*);
|
|
void Object1F_Action1(Object1FEntity*);
|
|
void Object1F_Action2(Object1FEntity*);
|
|
|
|
void Object1F(Entity* this) {
|
|
static void (*const actionFuncs[])(Object1FEntity*) = {
|
|
Object1F_Init,
|
|
Object1F_Action1,
|
|
Object1F_Action2,
|
|
};
|
|
|
|
actionFuncs[this->action]((Object1FEntity*)this);
|
|
}
|
|
|
|
typedef struct {
|
|
u8 animationState;
|
|
u8 unk1;
|
|
u8 unk2;
|
|
u8 spriteVramOffset;
|
|
} gUnk_08120A18_struct;
|
|
|
|
void Object1F_Init(Object1FEntity* this) {
|
|
static const gUnk_08120A18_struct gUnk_08120A18[] = {
|
|
{ 0x0, 0x2, 0xA, 0xE8 },
|
|
{ 0x0, 0x5, 0x20, 0xE0 },
|
|
};
|
|
static const s8 gUnk_08120A20[] = { 0, -18, 16, 0, 0, 12, -16, 0 };
|
|
|
|
u32 temp;
|
|
super->action = 1;
|
|
super->zVelocity = 0x2c000;
|
|
super->direction = super->animationState << 2 ^ 0x10;
|
|
if (super->animationState == 0) {
|
|
super->spritePriority.b0--;
|
|
}
|
|
super->x.HALF.HI = gUnk_08120A20[super->animationState] + super->x.HALF.HI;
|
|
super->y.HALF.HI = gUnk_08120A20[super->animationState + 1] + super->y.HALF.HI;
|
|
|
|
super->spriteVramOffset = gUnk_08120A18[super->field_0xf].spriteVramOffset;
|
|
temp = gUnk_08120A18[super->field_0xf].unk1;
|
|
super->palette.b.b0 = temp;
|
|
this->unk6c = gUnk_08120A18[super->field_0xf].unk2;
|
|
super->collisionLayer = gPlayerEntity.collisionLayer;
|
|
super->speed = 0x100;
|
|
InitializeAnimation(super, gUnk_08120A18[super->field_0xf].animationState);
|
|
}
|
|
|
|
void Object1F_Action1(Object1FEntity* this) {
|
|
u32 uVar1;
|
|
|
|
if (this->unk6c) {
|
|
this->unk6c--;
|
|
uVar1 = gPlayerState.field_0x3c[1];
|
|
} else {
|
|
ProcessMovement2(super);
|
|
uVar1 = GravityUpdate(super, 0x2800);
|
|
}
|
|
|
|
if (uVar1 == 0) {
|
|
super->action = 2;
|
|
}
|
|
}
|
|
|
|
void Object1F_Action2(Object1FEntity* this) {
|
|
u8 bVar1;
|
|
|
|
bVar1 = sub_080B1B0C(super);
|
|
switch (bVar1) {
|
|
case 0x21:
|
|
CreateFx(super, FX_FALL_DOWN, 0);
|
|
break;
|
|
case 0x25:
|
|
CreateFx(super, FX_LAVA_SPLASH, 0);
|
|
break;
|
|
case 0x24:
|
|
case 0x30:
|
|
CreateFx(super, FX_WATER_SPLASH, 0);
|
|
break;
|
|
default:
|
|
if (super->type2 != 0) {
|
|
if (super->type2 == 15) {
|
|
CreateFx(super, super->actionDelay, 0x80);
|
|
} else {
|
|
CreateObjectWithParent(super, super->type2, super->actionDelay, 0);
|
|
}
|
|
}
|
|
}
|
|
DeleteThisEntity();
|
|
}
|