ovl_En_Zl4 functions

This commit is contained in:
Alejandro Javier Asenjo Nitti
2023-11-01 18:32:00 -03:00
parent 51ad0cbdc7
commit 4e92be46bb
2 changed files with 79 additions and 12 deletions
+73 -10
View File
@@ -5,6 +5,7 @@
*/
#include "z_en_zl4.h"
#include "objects/object_stk/object_stk.h"
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
@@ -15,7 +16,10 @@ void EnZl4_Destroy(Actor* thisx, PlayState* play);
void EnZl4_Update(Actor* thisx, PlayState* play);
void EnZl4_Draw(Actor* thisx, PlayState* play);
void func_809A1BB0(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex);
void func_809A1D0C(EnZl4* this, PlayState* play);
void func_809A1DA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx);
void func_809A1DBC(PlayState* play, s32 limbIndex, Actor* thisx);
#if 0
ActorInit En_Zl4_InitVars = {
@@ -32,26 +36,85 @@ ActorInit En_Zl4_InitVars = {
#endif
extern UNK_TYPE D_06013328;
extern AnimationInfo D_809A1F80;
extern Vec3f D_809A1F98;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/func_809A1BB0.s")
void func_809A1BB0(SkelAnime* skelAnime, AnimationInfo* animInfo, u16 animIndex) {
f32 endFrame;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/EnZl4_Init.s")
animInfo += animIndex;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/EnZl4_Destroy.s")
if (animInfo->frameCount < 0.0f) {
endFrame = Animation_GetLastFrame(animInfo->animation);
} else {
endFrame = animInfo->frameCount;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/func_809A1D0C.s")
Animation_Change(skelAnime, animInfo->animation, animInfo->playSpeed, animInfo->startFrame, endFrame,
animInfo->mode, animInfo->morphFrames);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/EnZl4_Update.s")
void EnZl4_Init(Actor* thisx, PlayState* play) {
EnZl4* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/func_809A1D60.s")
this->unk_2E0 = 0;
this->unk_2F0 = 0xFF;
this->actor.targetArrowOffset = 3000.0f;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f);
SkelAnime_InitFlex(play, &this->skelanime, &gSkullKidSkel, NULL, NULL, NULL, 0);
func_809A1BB0(&this->skelanime, &D_809A1F80, 0);
Actor_SetScale(&this->actor, 0.01f);
this->actionFunc = func_809A1D0C;
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/func_809A1DA4.s")
void EnZl4_Destroy(Actor* thisx, PlayState* play) {
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/func_809A1DBC.s")
void func_809A1D0C(EnZl4* this, PlayState* play) {
}
void EnZl4_Update(Actor* thisx, PlayState* play) {
EnZl4* this = THIS;
SkelAnime_Update(&this->skelanime);
this->unk_2F0 = this->unk_2F0;
this->actionFunc(this, play);
}
s32 func_809A1D60(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
Vec3f vec = D_809A1F98;
return 0;
}
void func_809A1DA4(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
}
void func_809A1DBC(PlayState* play, s32 limbIndex, Actor* thisx) {
}
s32 func_809A1DD0(GraphicsContext*, u32);
s32 func_809A1E28(GraphicsContext*, u32);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/func_809A1DD0.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/func_809A1E28.s")
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zl4/EnZl4_Draw.s")
void EnZl4_Draw(Actor* thisx, PlayState* play) {
EnZl4* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
Gfx_SetupDL25_Opa(play->state.gfxCtx);
if (this->unk_2F0 < 255) {
gSPSegment(POLY_OPA_DISP++, 0x0C, func_809A1DD0(play->state.gfxCtx, this->unk_2F0));
} else {
gSPSegment(POLY_OPA_DISP++, 0x0C, func_809A1E28(play->state.gfxCtx, this->unk_2F0));
}
CLOSE_DISPS(play->state.gfxCtx);
SkelAnime_DrawTransformFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable,
this->skelanime.dListCount, func_809A1D60, func_809A1DA4, func_809A1DBC,
&this->actor);
}
+6 -2
View File
@@ -9,9 +9,13 @@ typedef void (*EnZl4ActionFunc)(struct EnZl4*, PlayState*);
typedef struct EnZl4 {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x14C];
/* 0x144 */ SkelAnime skelanime;
/* 0x188 */ char pad_188[0x108];
/* 0x290 */ EnZl4ActionFunc actionFunc;
/* 0x294 */ char unk_294[0x60];
/* 0x294 */ char pad_294[0x4C];
/* 0x2E0 */ s16 unk_2E0;
/* 0x2E2 */ char pad_2E2[0xE];
/* 0x2F0 */ u32 unk_2F0;
} EnZl4; // size = 0x2F4
#endif // Z_EN_ZL4_H