diff --git a/assets/xml/objects/object_zos.xml b/assets/xml/objects/object_zos.xml
index a1364a8429..5b3b12345e 100644
--- a/assets/xml/objects/object_zos.xml
+++ b/assets/xml/objects/object_zos.xml
@@ -6,7 +6,7 @@
-
+
diff --git a/assets/xml/objects/object_zov.xml b/assets/xml/objects/object_zov.xml
index 440782f102..31b9bcd7be 100644
--- a/assets/xml/objects/object_zov.xml
+++ b/assets/xml/objects/object_zov.xml
@@ -1,81 +1,90 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c
index 4be070d254..0e3262869e 100644
--- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c
+++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c
@@ -138,7 +138,7 @@ static AnimationHeader* sAnimations[] = {
&gEvanLeanOnKeyboardAnim, // EN_ZOS_ANIM_LEAN_ON_KEYBOARD
&gEvanLeanOnKeyboardAndSighAnim, // EN_ZOS_ANIM_LEAN_ON_KEYBOARD_AND_SIGH
&gEvanHandsOnHipsAnim, // EN_ZOS_ANIM_HANDS_ON_HIPS
- &gEeanTalkFootTapAnim, // EN_ZOS_ANIM_TALK_FOOT_TAP
+ &gEvanTalkFootTapAnim, // EN_ZOS_ANIM_TALK_FOOT_TAP
&gEvanTalkLookDownAnim, // EN_ZOS_ANIM_TALK_LOOK_DOWN
&gEvanTalkArmsOutAnim, // EN_ZOS_ANIM_TALK_ARMS_OUT
&gEvanTalkHandsOnHipsAnim, // EN_ZOS_ANIM_TALK_HANDS_ON_HIPS
diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.c b/src/overlays/actors/ovl_En_Zov/z_en_zov.c
index 6342c38d39..8e85f46759 100644
--- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c
+++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c
@@ -5,7 +5,6 @@
*/
#include "z_en_zov.h"
-#include "objects/object_zov/object_zov.h"
#include "overlays/actors/ovl_En_Elf/z_en_elf.h"
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY)
@@ -60,20 +59,20 @@ static ColliderCylinderInit sCylinderInit = {
{ 20, 40, 0, { 0, 0, 0 } },
};
-static AnimationHeader* D_80BD270C[] = {
- &object_zov_Anim_00D3EC, &object_zov_Anim_008120, &object_zov_Anim_00B4CC, &object_zov_Anim_00A888,
- &object_zov_Anim_00C510, &object_zov_Anim_00CAA8, &object_zov_Anim_008120, &object_zov_Anim_00A888,
- &object_zov_Anim_002B5C, &object_zov_Anim_00418C, &object_zov_Anim_005A6C, &object_zov_Anim_0066A4,
- &object_zov_Anim_0017D4, &object_zov_Anim_0023F4,
+static AnimationHeader* sAnimations[] = {
+ &gLuluLookDownAnim, &gLuluPutHandsDownAnim, &gLuluLookForwardAndDownAnim, &gLuluLookAroundAnim,
+ &gLuluAngleHeadAnim, &gLuluNodAnim, &gLuluPutHandsDownAnim, &gLuluLookAroundAnim,
+ &gLuluSingStartAnim, &gLuluSingLoopAnim, &gLuluLookForwardAndLeftAnim, &gLuluLookLeftLoopAnim,
+ &gLuluTurnAndWalkAnim, &gLuluWalkLoopAnim,
};
static Vec3f D_80BD2744 = { 400.0f, 600.0f, 0.0f };
static Vec3f D_80BD2750 = { 400.0f, 600.0f, 0.0f };
-static TexturePtr D_80BD275C[] = { object_zov_Tex_013C38, object_zov_Tex_015138, object_zov_Tex_014138 };
+static TexturePtr sEyeTextures[] = { gLuluEyeOpenTex, gLuluEyeHalfTex, gLuluEyeClosedTex };
-static TexturePtr D_80BD2768[] = { object_zov_Tex_0135F8, object_zov_Tex_014538 };
+static TexturePtr sMouthTextures[] = { gLuluMouthClosedTex, gLuluMouthOpenTex };
static s8 D_80BD2770[] = {
1, 2, 1, 0, 0, 1, 2, 1,
@@ -86,9 +85,9 @@ void EnZov_Init(Actor* thisx, PlayState* play) {
this->picto.actor.colChkInfo.mass = MASS_IMMOVABLE;
Actor_SetScale(&this->picto.actor, 0.01f);
Collider_InitAndSetCylinder(play, &this->collider, &this->picto.actor, &sCylinderInit);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_zov_Skel_016258, &object_zov_Anim_00D3EC, this->jontTable,
- this->morphTable, 23);
- Animation_PlayLoop(&this->skelAnime, &object_zov_Anim_00D3EC);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gLuluSkel, &gLuluLookDownAnim, this->jointTable, this->morphTable,
+ LULU_LIMB_MAX);
+ Animation_PlayLoop(&this->skelAnime, &gLuluLookDownAnim);
this->unk_320 = 0;
this->csIdIndex = -1;
@@ -147,10 +146,10 @@ void func_80BD1440(EnZov* this, s16 arg1) {
this->csIdIndex = arg1;
}
-void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 transitionRate) {
+void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 morphFrames) {
f32 frame;
- if (((index != this->unk_322) || (mode != ANIMMODE_LOOP)) && (index >= 0) && (index < ARRAY_COUNT(D_80BD270C))) {
+ if (((index != this->unk_322) || (mode != ANIMMODE_LOOP)) && (index >= 0) && (index < ARRAY_COUNT(sAnimations))) {
switch (index) {
case 6:
frame = 30.0f;
@@ -164,8 +163,8 @@ void func_80BD1470(EnZov* this, s16 index, u8 mode, f32 transitionRate) {
frame = 0.0f;
break;
}
- Animation_Change(&this->skelAnime, D_80BD270C[index], 1.0f, frame, Animation_GetLastFrame(D_80BD270C[index]),
- mode, transitionRate);
+ Animation_Change(&this->skelAnime, sAnimations[index], 1.0f, frame, Animation_GetLastFrame(sAnimations[index]),
+ mode, morphFrames);
this->unk_322 = index;
}
}
@@ -521,14 +520,14 @@ void EnZov_Update(Actor* thisx, PlayState* play) {
s32 EnZov_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) {
EnZov* this = THIS;
- if (limbIndex == 12) {
+ if (limbIndex == LULU_LIMB_HEAD) {
rot->x += this->unk_2F0.y;
if ((this->unk_320 & 0x10) && (this->unk_322 == 0)) {
rot->z += this->unk_2F0.x;
}
}
- if (limbIndex == 11) {
+ if (limbIndex == LULU_LIMB_TORSO) {
rot->x += this->unk_2F6.y;
}
return false;
@@ -537,17 +536,17 @@ s32 EnZov_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p
void EnZov_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
EnZov* this = THIS;
- if (limbIndex == 12) {
+ if (limbIndex == LULU_LIMB_HEAD) {
Matrix_MultVec3f(&D_80BD2744, &this->picto.actor.focus.pos);
Math_Vec3f_Copy(&this->unk_2FC, &this->picto.actor.focus.pos);
this->unk_2FC.y += 10.0f;
}
- if (limbIndex == 18) {
+ if (limbIndex == LULU_LIMB_RIGHT_UPPER_ARM) {
Matrix_MultVec3f(&D_80BD2750, &this->unk_308);
}
- if (limbIndex == 13) {
+ if (limbIndex == LULU_LIMB_LEFT_UPPER_ARM) {
Matrix_MultVec3f(&D_80BD2750, &this->unk_314);
}
}
@@ -625,8 +624,8 @@ void EnZov_Draw(Actor* thisx, PlayState* play) {
}
gfx = POLY_OPA_DISP;
- gSPSegment(&gfx[0], 0x09, Lib_SegmentedToVirtual(D_80BD275C[phi_v1]));
- gSPSegment(&gfx[1], 0x08, Lib_SegmentedToVirtual(D_80BD2768[phi_a1]));
+ gSPSegment(&gfx[0], 0x09, Lib_SegmentedToVirtual(sEyeTextures[phi_v1]));
+ gSPSegment(&gfx[1], 0x08, Lib_SegmentedToVirtual(sMouthTextures[phi_a1]));
POLY_OPA_DISP = &gfx[2];
CLOSE_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.h b/src/overlays/actors/ovl_En_Zov/z_en_zov.h
index 7e12041009..7637bb53e5 100644
--- a/src/overlays/actors/ovl_En_Zov/z_en_zov.h
+++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.h
@@ -3,6 +3,7 @@
#include "global.h"
#include "z64snap.h"
+#include "objects/object_zov/object_zov.h"
struct EnZov;
@@ -16,8 +17,8 @@ typedef void (*EnZovActionFunc)(struct EnZov*, PlayState*);
typedef struct EnZov {
/* 0x000 */ PictoActor picto;
- /* 0x148 */ Vec3s jontTable[23];
- /* 0x1D2 */ Vec3s morphTable[23];
+ /* 0x148 */ Vec3s jointTable[LULU_LIMB_MAX];
+ /* 0x1D2 */ Vec3s morphTable[LULU_LIMB_MAX];
/* 0x25C */ SkelAnime skelAnime;
/* 0x2A0 */ ColliderCylinder collider;
/* 0x2EC */ s16 unk_2EC;