mirror of
https://github.com/zeldaret/tmc
synced 2026-06-05 11:18:43 -04:00
decompile object1F
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
#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();
|
||||
}
|
||||
Reference in New Issue
Block a user