diff --git a/assets/xml/objects/object_horse_ganon.xml b/assets/xml/objects/object_horse_ganon.xml
new file mode 100644
index 0000000000..b2766fea80
--- /dev/null
+++ b/assets/xml/objects/object_horse_ganon.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_horse_link_child.xml b/assets/xml/objects/object_horse_link_child.xml
new file mode 100644
index 0000000000..a6ba3dda85
--- /dev/null
+++ b/assets/xml/objects/object_horse_link_child.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_horse_normal.xml b/assets/xml/objects/object_horse_normal.xml
new file mode 100644
index 0000000000..1ebbf834bb
--- /dev/null
+++ b/assets/xml/objects/object_horse_normal.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/xml/objects/object_horse_zelda.xml b/assets/xml/objects/object_horse_zelda.xml
new file mode 100644
index 0000000000..5773d952ed
--- /dev/null
+++ b/assets/xml/objects/object_horse_zelda.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spec b/spec
index 450f6c094e..52e41c626d 100644
--- a/spec
+++ b/spec
@@ -3694,7 +3694,8 @@ endseg
beginseg
name "object_horse_normal"
romalign 0x1000
- include "build/baserom/object_horse_normal.o"
+ include "build/assets/objects/object_horse_normal/object_horse_normal.o"
+ number 6
endseg
beginseg
@@ -3731,7 +3732,8 @@ endseg
beginseg
name "object_horse_ganon"
romalign 0x1000
- include "build/baserom/object_horse_ganon.o"
+ include "build/assets/objects/object_horse_ganon/object_horse_ganon.o"
+ number 6
endseg
beginseg
@@ -3878,7 +3880,8 @@ endseg
beginseg
name "object_horse_zelda"
romalign 0x1000
- include "build/baserom/object_horse_zelda.o"
+ include "build/assets/objects/object_horse_zelda/object_horse_zelda.o"
+ number 6
endseg
beginseg
@@ -4357,7 +4360,8 @@ endseg
beginseg
name "object_horse_link_child"
romalign 0x1000
- include "build/baserom/object_horse_link_child.o"
+ include "build/assets/objects/object_horse_link_child/object_horse_link_child.o"
+ number 6
endseg
beginseg
diff --git a/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c b/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c
index fffbeccbd9..d4bc1b783a 100644
--- a/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c
+++ b/src/overlays/actors/ovl_En_Horse_Ganon/z_en_horse_ganon.c
@@ -5,6 +5,7 @@
*/
#include "z_en_horse_ganon.h"
+#include "objects/object_horse_ganon/object_horse_ganon.h"
#define FLAGS 0x00000010
@@ -36,7 +37,10 @@ const ActorInit En_Horse_Ganon_InitVars = {
(ActorFunc)EnHorseGanon_Draw,
};
-static AnimationHeader* D_80A691B0[] = { 0x06004AA4, 0x06005264, 0x06005B78, 0x06002CE4, 0x06002650, 0x06003858 };
+static AnimationHeader* sAnimations[] = {
+ &gHorseGanonIdleAnim, &gHorseGanonWhinnyAnim, &gHorseGanonWalkingAnim,
+ &gHorseGanonTrottingAnim, &gHorseGanonGallopingAnim, &gHorseGanonRearingAnim,
+};
static f32 splaySpeeds[] = { 0.66666666f, 0.66666666f, 1.0f, 1.0f, 1.0f, 0.66666666f };
@@ -105,9 +109,6 @@ static InitChainEntry sInitChain[] = {
static EnHorseGanonActionFunc sActionFuncs[] = { func_80A68AF0, func_80A68DB0 };
-extern SkeletonHeader D_06008668;
-extern AnimationHeader D_06004AA4;
-
void func_80A68660(unk_D_80A69248* data, s32 index, Vec3f* vec) {
vec->x = data[index].unk_0.x;
vec->y = data[index].unk_0.y;
@@ -178,9 +179,9 @@ void EnHorseGanon_Init(Actor* thisx, GlobalContext* globalCtx) {
this->actor.focus.pos = this->actor.world.pos;
this->action = 0;
this->actor.focus.pos.y += 70.0f;
- func_800A663C(globalCtx, &this->skin, &D_06008668, &D_06004AA4);
+ func_800A663C(globalCtx, &this->skin, &gHorseGanonSkel, &gHorseGanonIdleAnim);
this->currentAnimation = 0;
- Animation_PlayOnce(&this->skin.skelAnime, D_80A691B0[0]);
+ Animation_PlayOnce(&this->skin.skelAnime, sAnimations[0]);
Collider_InitCylinder(globalCtx, &this->colliderBody);
Collider_SetCylinder(globalCtx, &this->colliderBody, &this->actor, &sCylinderInit);
@@ -201,7 +202,7 @@ void EnHorseGanon_Destroy(Actor* thisx, GlobalContext* globalCtx) {
void func_80A68AC4(EnHorseGanon* this) {
this->action = 0;
- Animation_PlayLoop(&this->skin.skelAnime, D_80A691B0[4]);
+ Animation_PlayLoop(&this->skin.skelAnime, sAnimations[4]);
}
void func_80A68AF0(EnHorseGanon* this, GlobalContext* globalCtx) {
@@ -245,13 +246,13 @@ void func_80A68B20(EnHorseGanon* this) {
}
if (animationChanged == 1) {
- Animation_Change(&this->skin.skelAnime, D_80A691B0[this->currentAnimation],
+ Animation_Change(&this->skin.skelAnime, sAnimations[this->currentAnimation],
splaySpeeds[this->currentAnimation] * sp30 * 1.5f, 0.0f,
- Animation_GetLastFrame(D_80A691B0[this->currentAnimation]), ANIMMODE_ONCE, -3.0f);
+ Animation_GetLastFrame(sAnimations[this->currentAnimation]), ANIMMODE_ONCE, -3.0f);
} else {
- Animation_Change(&this->skin.skelAnime, D_80A691B0[this->currentAnimation],
+ Animation_Change(&this->skin.skelAnime, sAnimations[this->currentAnimation],
splaySpeeds[this->currentAnimation] * sp30 * 1.5f, 0.0f,
- Animation_GetLastFrame(D_80A691B0[this->currentAnimation]), ANIMMODE_ONCE, 0.0f);
+ Animation_GetLastFrame(sAnimations[this->currentAnimation]), ANIMMODE_ONCE, 0.0f);
}
}
diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c
index fc0db39756..63b113c413 100644
--- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c
+++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c
@@ -5,6 +5,7 @@
*/
#include "z_en_horse_link_child.h"
+#include "objects/object_horse_link_child/object_horse_link_child.h"
#define FLAGS 0x02000010
@@ -32,7 +33,10 @@ const ActorInit En_Horse_Link_Child_InitVars = {
(ActorFunc)EnHorseLinkChild_Draw,
};
-static AnimationHeader* sAnimations[] = { 0x060043E4, 0x06004B08, 0x060053F0, 0x0600360C, 0x06002F98 };
+static AnimationHeader* sAnimations[] = {
+ &gChildEponaIdleAnim, &gChildEponaWhinnyAnim, &gChildEponaWalkingAnim,
+ &gChildEponaTrottingAnim, &gChildEponaGallopingAnim,
+};
static ColliderCylinderInitType1 sCylinderInit = {
{
@@ -82,9 +86,6 @@ static ColliderJntSphInit sJntSphInit = {
static CollisionCheckInfoInit sColCheckInfoInit = { 10, 35, 100, MASS_HEAVY };
-extern AnimationHeader D_06002F98;
-extern SkeletonHeader D_06007B20;
-
void func_80A693D0(EnHorseLinkChild* this) {
static s32 D_80A6AF5C[] = { 1, 19 };
@@ -152,7 +153,7 @@ void EnHorseLinkChild_Init(Actor* thisx, GlobalContext* globalCtx) {
this->action = 1;
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 70.0f;
- func_800A663C(globalCtx, &this->skin, &D_06007B20, &D_06002F98);
+ func_800A663C(globalCtx, &this->skin, &gChildEponaSkel, &gChildEponaGallopingAnim);
this->animationIdx = 0;
Animation_PlayOnce(&this->skin.skelAnime, sAnimations[0]);
Collider_InitCylinder(globalCtx, &this->bodyCollider);
@@ -161,7 +162,7 @@ void EnHorseLinkChild_Init(Actor* thisx, GlobalContext* globalCtx) {
Collider_SetJntSph(globalCtx, &this->headCollider, &this->actor, &sJntSphInit, this->headElements);
CollisionCheck_SetInfo(&this->actor.colChkInfo, NULL, &sColCheckInfoInit);
this->unk_1F0 = 0;
- this->unk_1EC = 0;
+ this->eyeTexIndex = 0;
if (gSaveContext.sceneSetupIndex > 3) {
func_80A69EC0(this);
@@ -546,8 +547,9 @@ void func_80A6A7D0(EnHorseLinkChild* this, GlobalContext* globalCtx) {
static EnHorseLinkChildActionFunc sActionFuncs[] = {
func_80A698F4, func_80A69C18, func_80A699FC, func_80A6A068, func_80A6A7D0, func_80A6A5A4,
};
-static UNK_PTR D_80A6AF94[] = { 0x06001D28, 0x06001928, 0x06001B28 };
-static u8 D_80A6AFA0[] = { 0, 1, 2, 1 };
+
+static u64* sEyeTextures[] = { gChildEponaEyeOpenTex, gChildEponaEyeHalfTex, gChildEponaEyeCloseTex };
+static u8 sEyeIndexOrder[] = { 0, 1, 2, 1 };
void EnHorseLinkChild_Update(Actor* thisx, GlobalContext* globalCtx) {
EnHorseLinkChild* this = THIS;
@@ -564,12 +566,12 @@ void EnHorseLinkChild_Update(Actor* thisx, GlobalContext* globalCtx) {
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 70.0f;
- if ((Rand_ZeroOne() < 0.025f) && (this->unk_1EC == 0)) {
- this->unk_1EC++;
- } else if (this->unk_1EC > 0) {
- this->unk_1EC++;
- if (this->unk_1EC >= ARRAY_COUNT(D_80A6AFA0)) {
- this->unk_1EC = 0;
+ if ((Rand_ZeroOne() < 0.025f) && (this->eyeTexIndex == 0)) {
+ this->eyeTexIndex++;
+ } else if (this->eyeTexIndex > 0) {
+ this->eyeTexIndex++;
+ if (this->eyeTexIndex >= ARRAY_COUNT(sEyeIndexOrder)) {
+ this->eyeTexIndex = 0;
}
}
@@ -605,8 +607,8 @@ s32 func_80A6AD84(Actor* thisx, GlobalContext* globalCtx, s32 arg2, PSkinAwb* ar
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_en_horse_link_child.c", 1467);
if (arg2 == 0xD) {
- u8 index = D_80A6AFA0[this->unk_1EC];
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_80A6AF94[index]));
+ u8 index = sEyeIndexOrder[this->eyeTexIndex];
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[index]));
}
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_en_horse_link_child.c", 1479);
diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h
index 6e64d1408c..cd11f70ff3 100644
--- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h
+++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.h
@@ -15,7 +15,7 @@ typedef struct EnHorseLinkChild {
/* 0x0154 */ PSkinAwb skin;
/* 0x01E4 */ s32 timer;
/* 0x01E8 */ s32 unk_1E8;
- /* 0x01EC */ u8 unk_1EC;
+ /* 0x01EC */ u8 eyeTexIndex;
/* 0x01F0 */ s32 unk_1F0;
/* 0x01F4 */ ColliderCylinder bodyCollider;
/* 0x0240 */ ColliderJntSph headCollider;
diff --git a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c
index e46706193c..9fd3630338 100644
--- a/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c
+++ b/src/overlays/actors/ovl_En_Horse_Normal/z_en_horse_normal.c
@@ -6,6 +6,7 @@
#include "z_en_horse_normal.h"
#include "objects/gameplay_keep/gameplay_keep.h"
+#include "objects/object_horse_normal/object_horse_normal.h"
#define FLAGS 0x00000000
@@ -52,20 +53,10 @@ const ActorInit En_Horse_Normal_InitVars = {
(ActorFunc)EnHorseNormal_Draw,
};
-extern AnimationHeader D_06000608;
-extern AnimationHeader D_06000C20;
-extern AnimationHeader D_060013A8;
-extern AnimationHeader D_06001A1C;
-extern AnimationHeader D_06002458;
-extern AnimationHeader D_060035D4;
-extern AnimationHeader D_06004580;
-extern AnimationHeader D_06004C20;
-extern AnimationHeader D_060054BC;
-
-extern SkeletonHeader D_06009FAC;
-
static AnimationHeader* sAnimations[] = {
- &D_06004580, &D_06004C20, &D_060035D4, &D_06002458, &D_060054BC, &D_06001A1C, &D_06000608, &D_06000C20, &D_060013A8,
+ &gHorseNormalIdleAnim, &gHorseNormalWhinnyAnim, &gHorseNormalRefuseAnim,
+ &gHorseNormalRearingAnim, &gHorseNormalWalkingAnim, &gHorseNormalTrottingAnim,
+ &gHorseNormalGallopingAnim, &gHorseNormalJumpingAnim, &gHorseNormalJumpingHighAnim,
};
static ColliderCylinderInit sCylinderInit1 = {
@@ -237,7 +228,7 @@ void EnHorseNormal_Init(Actor* thisx, GlobalContext* globalCtx) {
return;
}
this->actor.home.rot.z = this->actor.world.rot.z = this->actor.shape.rot.z = 0;
- func_800A663C(globalCtx, &this->skin, &D_06009FAC, &D_06004580);
+ func_800A663C(globalCtx, &this->skin, &gHorseNormalSkel, &gHorseNormalIdleAnim);
Animation_PlayOnce(&this->skin.skelAnime, sAnimations[this->animationIdx]);
if ((this->actor.world.pos.x == -730.0f && this->actor.world.pos.y == 0.0f &&
this->actor.world.pos.z == -1100.0f) ||
@@ -251,7 +242,7 @@ void EnHorseNormal_Init(Actor* thisx, GlobalContext* globalCtx) {
Actor_Kill(&this->actor);
return;
} else {
- func_800A663C(globalCtx, &this->skin, &D_06009FAC, &D_06004580);
+ func_800A663C(globalCtx, &this->skin, &gHorseNormalSkel, &gHorseNormalIdleAnim);
Animation_PlayOnce(&this->skin.skelAnime, sAnimations[this->animationIdx]);
func_80A6C6B0(this);
return;
@@ -259,15 +250,15 @@ void EnHorseNormal_Init(Actor* thisx, GlobalContext* globalCtx) {
} else if (globalCtx->sceneNum == SCENE_SPOT12) {
if (this->actor.world.pos.x == 3707.0f && this->actor.world.pos.y == 1413.0f &&
this->actor.world.pos.z == -665.0f) {
- func_800A663C(globalCtx, &this->skin, &D_06009FAC, &D_06004580);
+ func_800A663C(globalCtx, &this->skin, &gHorseNormalSkel, &gHorseNormalIdleAnim);
Animation_PlayOnce(&this->skin.skelAnime, sAnimations[this->animationIdx]);
func_80A6C4CC(this);
return;
}
- func_800A663C(globalCtx, &this->skin, &D_06009FAC, &D_06004580);
+ func_800A663C(globalCtx, &this->skin, &gHorseNormalSkel, &gHorseNormalIdleAnim);
Animation_PlayOnce(&this->skin.skelAnime, sAnimations[this->animationIdx]);
} else {
- func_800A663C(globalCtx, &this->skin, &D_06009FAC, &D_06004580);
+ func_800A663C(globalCtx, &this->skin, &gHorseNormalSkel, &gHorseNormalIdleAnim);
Animation_PlayOnce(&this->skin.skelAnime, sAnimations[this->animationIdx]);
}
if ((this->actor.params & 0xF0) == 0x10 && (this->actor.params & 0xF) != 0xF) {
diff --git a/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c b/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c
index 9a9fcc1af3..7e869c6564 100644
--- a/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c
+++ b/src/overlays/actors/ovl_En_Horse_Zelda/z_en_horse_zelda.c
@@ -5,6 +5,7 @@
*/
#include "z_en_horse_zelda.h"
+#include "objects/object_horse_zelda/object_horse_zelda.h"
#define FLAGS 0x00000010
@@ -31,7 +32,7 @@ const ActorInit En_Horse_Zelda_InitVars = {
(ActorFunc)EnHorseZelda_Draw,
};
-static AnimationHeader* sAnimationHeaders[] = { 0x06007148 };
+static AnimationHeader* sAnimationHeaders[] = { &gHorseZeldaGallopingAnim };
static f32 splaySpeeds[] = { 0.66666666f };
@@ -105,9 +106,6 @@ static EnHorseZeldaActionFunc sActionFuncs[] = {
func_80A6DDFC,
};
-extern SkeletonHeader D_06006B2C;
-extern AnimationHeader D_06007148;
-
void func_80A6D8D0(unknownStruct* data, s32 index, Vec3f* vec) {
vec->x = data[index].unk_0.x;
vec->y = data[index].unk_0.y;
@@ -161,7 +159,7 @@ void EnHorseZelda_Init(Actor* thisx, GlobalContext* globalCtx) {
this->actor.focus.pos = this->actor.world.pos;
this->action = 0;
this->actor.focus.pos.y += 70.0f;
- func_800A663C(globalCtx, &this->skin, &D_06006B2C, &D_06007148);
+ func_800A663C(globalCtx, &this->skin, &gHorseZeldaSkel, &gHorseZeldaGallopingAnim);
this->animationIndex = 0;
Animation_PlayOnce(&this->skin.skelAnime, sAnimationHeaders[0]);
Collider_InitCylinder(globalCtx, &this->colliderCylinder);
diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
index 9cf83ef92e..cc6790c3b8 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.c
@@ -8,6 +8,8 @@
#include "overlays/actors/ovl_En_Ganon_Mant/z_en_ganon_mant.h"
#include "objects/object_zl4/object_zl4.h"
#include "objects/gameplay_keep/gameplay_keep.h"
+#include "objects/object_horse_zelda/object_horse_zelda.h"
+#include "objects/object_horse_ganon/object_horse_ganon.h"
#define FLAGS 0x00000010
@@ -25,12 +27,9 @@ void func_80B2A570(EnViewer* this, GlobalContext* globalCtx);
void func_80B2A75C(EnViewer* this, GlobalContext* globalCtx);
// sAnimFuncs
-void func_80B2A300(EnViewer* this, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg,
- AnimationHeader* animationSeg);
-void func_80B2A448(EnViewer* this, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg,
- AnimationHeader* animationSeg);
-void func_80B2A4D8(EnViewer* this, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg,
- AnimationHeader* animationSeg);
+void func_80B2A300(EnViewer* this, GlobalContext* globalCtx, void* skeletonHeaderSeg, AnimationHeader* animationSeg);
+void func_80B2A448(EnViewer* this, GlobalContext* globalCtx, void* skeletonHeaderSeg, AnimationHeader* animationSeg);
+void func_80B2A4D8(EnViewer* this, GlobalContext* globalCtx, void* skeletonHeaderSeg, AnimationHeader* animationSeg);
// sDrawFuncs
void func_80B2B4A8(EnViewer* this, GlobalContext* globalCtx);
@@ -48,38 +47,22 @@ extern AnimationHeader D_06001410;
extern AnimationHeader D_060014F4;
extern AnimationHeader D_06001D28;
extern AnimationHeader D_06002574;
-extern AnimationHeader D_06002650;
extern AnimationHeader D_06002928;
extern AnimationHeader D_060029CC;
-extern UNK_TYPE D_06002EF0;
extern AnimationHeader D_06003284;
-extern UNK_TYPE D_060032F0;
extern AnimationHeader D_06003428;
-extern UNK_TYPE D_060036F0;
-extern AnimationHeader D_06003858;
extern AnimationHeader D_06003D84;
-extern UNK_TYPE D_06003EF0;
extern AnimationHeader D_0600420C;
extern AnimationHeader D_06004260;
-extern UNK_TYPE D_060042F0;
extern AnimationHeader D_06004534;
extern AnimationHeader D_060048B0;
extern AnimationHeader D_060048FC;
-extern AnimationHeader D_06004AA4;
-extern UNK_TYPE D_06004EF0;
extern AnimationHeader D_0600504C;
extern AnimationHeader D_060050A8;
-extern UNK_TYPE D_060052F0;
-extern FlexSkeletonHeader D_06006B2C;
-extern AnimationHeader D_06007148;
extern UNK_TYPE D_06007210;
-extern FlexSkeletonHeader D_06008668;
extern UNK_TYPE D_0600A4E0;
extern Gfx D_0600BE90[];
-extern Gfx D_0600C410[];
extern Gfx D_0600D0D8[];
-extern Gfx D_0600DE08[];
-extern FlexSkeletonHeader D_0600E038;
extern Gfx D_0600E1A8[];
extern UNK_TYPE D_0600F178;
extern UNK_TYPE D_0600F378;
@@ -109,13 +92,13 @@ static InitChainEntry sInitChain[] = {
};
struct_80B2CEE8 D_80B2CEE8[] = {
- { OBJECT_HORSE_ZELDA, OBJECT_HORSE_ZELDA, 1, 0, 2, 20, 1, &D_06006B2C, &D_06007148 },
+ { OBJECT_HORSE_ZELDA, OBJECT_HORSE_ZELDA, 1, 0, 2, 20, 1, &gHorseZeldaSkel, &gHorseZeldaGallopingAnim },
{ OBJECT_IM, OBJECT_OPENING_DEMO1, 1, 0, 0, 10, 3, &D_0600F788, &D_060029CC },
{ OBJECT_ZL4, OBJECT_OPENING_DEMO1, 1, 0, 0, 10, 2, &gChildZeldaSkel, &D_06000450 },
{ OBJECT_GNDD, OBJECT_GNDD, 1, -6, 0, 10, 0, &D_060119E8, &D_06002928 },
- { OBJECT_HORSE_GANON, OBJECT_HORSE_GANON, 1, 0, 2, 20, 1, &D_06008668, &D_06003858 },
+ { OBJECT_HORSE_GANON, OBJECT_HORSE_GANON, 1, 0, 2, 20, 1, &gHorseGanonSkel, &gHorseGanonRearingAnim },
{ OBJECT_GNDD, OBJECT_GNDD, 1, -6, 0, 10, 0, &D_060119E8, &D_060005B4 },
- { OBJECT_HORSE_GANON, OBJECT_HORSE_GANON, 1, 0, 2, 20, 1, &D_06008668, &D_06002650 },
+ { OBJECT_HORSE_GANON, OBJECT_HORSE_GANON, 1, 0, 2, 20, 1, &gHorseGanonSkel, &gHorseGanonGallopingAnim },
{ OBJECT_GNDD, OBJECT_GNDD, 1, -6, 0, 10, 0, &D_060119E8, &D_06004260 },
{ OBJECT_GNDD, OBJECT_GNDD, 1, -6, 0, 10, 0, &D_060119E8, &D_060050A8 },
{ OBJECT_GANON, OBJECT_GANON, 1, -6, 0, 10, 0, &D_060114E8, &D_06011348 },
@@ -178,14 +161,13 @@ void EnViewer_Destroy(Actor* thisx, GlobalContext* globalCtx) {
func_800A6888(globalCtx, &this->skin);
}
-void func_80B2A300(EnViewer* this, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg,
- AnimationHeader* animationSeg) {
+void func_80B2A300(EnViewer* this, GlobalContext* globalCtx, void* skeletonHeaderSeg, AnimationHeader* animationSeg) {
s16 params = this->actor.params >> 8;
if (params == 2 || params == 3 || params == 5 || params == 7 || params == 8 || params == 9) {
SkelAnime_InitFlex(globalCtx, &this->skin.skelAnime, skeletonHeaderSeg, NULL, NULL, NULL, 0);
} else {
- SkelAnime_Init(globalCtx, &this->skin.skelAnime, &skeletonHeaderSeg->sh, NULL, NULL, NULL, 0);
+ SkelAnime_Init(globalCtx, &this->skin.skelAnime, skeletonHeaderSeg, NULL, NULL, NULL, 0);
}
gSegments[6] = VIRTUAL_TO_PHYSICAL(globalCtx->objectCtx.status[this->animObjBankIndex].segment);
@@ -196,18 +178,16 @@ void func_80B2A300(EnViewer* this, GlobalContext* globalCtx, FlexSkeletonHeader*
}
}
-void func_80B2A448(EnViewer* this, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg,
- AnimationHeader* animationSeg) {
+void func_80B2A448(EnViewer* this, GlobalContext* globalCtx, void* skeletonHeaderSeg, AnimationHeader* animationSeg) {
SkelAnime_InitFlex(globalCtx, &this->skin.skelAnime, skeletonHeaderSeg, NULL, NULL, NULL, 0);
gSegments[6] = VIRTUAL_TO_PHYSICAL(globalCtx->objectCtx.status[this->animObjBankIndex].segment);
Animation_PlayLoopSetSpeed(&this->skin.skelAnime, animationSeg, 3.0f);
}
-void func_80B2A4D8(EnViewer* this, GlobalContext* globalCtx, FlexSkeletonHeader* skeletonHeaderSeg,
- AnimationHeader* animationSeg) {
+void func_80B2A4D8(EnViewer* this, GlobalContext* globalCtx, void* skeletonHeaderSeg, AnimationHeader* animationSeg) {
u8 params;
- func_800A663C(globalCtx, &this->skin, &skeletonHeaderSeg->sh, animationSeg);
+ func_800A663C(globalCtx, &this->skin, skeletonHeaderSeg, animationSeg);
params = this->actor.params >> 8;
if (!(params == 3 || params == 4 || params == 7 || params == 8 || params == 9)) {
Animation_PlayLoopSetSpeed(&this->skin.skelAnime, animationSeg, 3.0f);
@@ -242,7 +222,7 @@ void func_80B2A570(EnViewer* this, GlobalContext* globalCtx) {
ActorShape_Init(&this->actor.shape, unkStruct->unk_5 * 100,
sActorShadowDrawFunc[unkStruct->actorShadowDrawFuncIndex], unkStruct->unk_7);
this->drawFuncIndex = unkStruct->drawFuncIndex;
- sAnimFuncs[this->drawFuncIndex](this, globalCtx, unkStruct->unk_C, unkStruct->unk_10);
+ sAnimFuncs[this->drawFuncIndex](this, globalCtx, unkStruct->skel, unkStruct->unk_10);
EnViewer_SetupAction(this, func_80B2A75C);
}
@@ -305,18 +285,18 @@ void func_80B2A75C(EnViewer* this, GlobalContext* globalCtx) {
}
} else if (params == 4) {
curFrame = this->skin.skelAnime.curFrame;
- if (this->skin.skelAnime.animation == &D_06003858) {
+ if (this->skin.skelAnime.animation == &gHorseGanonRearingAnim) {
if (curFrame == 8) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_GANON_HORSE_NEIGH);
}
if (curFrame == 30) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_HORSE_LAND2);
}
- } else if (this->skin.skelAnime.animation == &D_06004AA4) {
+ } else if (this->skin.skelAnime.animation == &gHorseGanonIdleAnim) {
if (curFrame == 25) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_HORSE_SANDDUST);
}
- } else if (this->skin.skelAnime.animation == &D_06002650) {
+ } else if (this->skin.skelAnime.animation == &gHorseGanonGallopingAnim) {
Audio_PlayActorSound2(&this->actor, NA_SE_EV_HORSE_RUN_LEVEL - SFX_FLAG);
}
}
@@ -335,8 +315,8 @@ void func_80B2A75C(EnViewer* this, GlobalContext* globalCtx) {
if (this->skin.skelAnime.animation != &D_06002928) {
Animation_PlayLoopSetSpeed(&this->skin.skelAnime, &D_06002928, 1.0f);
}
- } else if (this->skin.skelAnime.animation != &D_06004AA4) {
- Animation_PlayLoopSetSpeed(&this->skin.skelAnime, &D_06004AA4, 1.0f);
+ } else if (this->skin.skelAnime.animation != &gHorseGanonIdleAnim) {
+ Animation_PlayLoopSetSpeed(&this->skin.skelAnime, &gHorseGanonIdleAnim, 1.0f);
}
} else if (globalCtx->csCtx.npcActions[1]->action == 1) {
D_80B2CFCC = 100;
@@ -344,8 +324,8 @@ void func_80B2A75C(EnViewer* this, GlobalContext* globalCtx) {
if (this->skin.skelAnime.animation != &D_06001D28) {
Animation_PlayLoopSetSpeed(&this->skin.skelAnime, &D_06001D28, 1.0f);
}
- } else if (this->skin.skelAnime.animation != &D_06003858) {
- Animation_PlayLoopSetSpeed(&this->skin.skelAnime, &D_06003858, 1.0f);
+ } else if (this->skin.skelAnime.animation != &gHorseGanonRearingAnim) {
+ Animation_PlayLoopSetSpeed(&this->skin.skelAnime, &gHorseGanonRearingAnim, 1.0f);
}
} else if (params == 3) {
switch (this->unk_1E5) {
@@ -396,8 +376,9 @@ void func_80B2A75C(EnViewer* this, GlobalContext* globalCtx) {
this->unk_1E5 = 0;
break;
}
- } else if (this->skin.skelAnime.animation != &D_06002650 && globalCtx->csCtx.npcActions[1]->action == 12) {
- Animation_PlayLoopSetSpeed(&this->skin.skelAnime, &D_06002650, 3.0f);
+ } else if (this->skin.skelAnime.animation != &gHorseGanonGallopingAnim &&
+ globalCtx->csCtx.npcActions[1]->action == 12) {
+ Animation_PlayLoopSetSpeed(&this->skin.skelAnime, &gHorseGanonGallopingAnim, 3.0f);
}
}
} else if (params == 1) {
diff --git a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h
index 72e8d22d34..f1d56d02d3 100644
--- a/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h
+++ b/src/overlays/actors/ovl_En_Viewer/z_en_viewer.h
@@ -8,7 +8,7 @@ struct EnViewer;
typedef void (*EnViewerActionFunc)(struct EnViewer*, GlobalContext*);
typedef void (*EnViewerDrawFunc)(struct EnViewer*, GlobalContext*);
-typedef void (*EnViewerAnimFunc)(struct EnViewer*, GlobalContext*, FlexSkeletonHeader*, AnimationHeader*);
+typedef void (*EnViewerAnimFunc)(struct EnViewer*, GlobalContext*, void*, AnimationHeader*);
typedef struct {
/* 0x00 */ s16 objId1;
@@ -18,7 +18,7 @@ typedef struct {
/* 0x06 */ u8 actorShadowDrawFuncIndex;
/* 0x07 */ u8 unk_7;
/* 0x08 */ u8 drawFuncIndex;
- /* 0x0C */ FlexSkeletonHeader* unk_C;
+ /* 0x0C */ void* skel;
/* 0x10 */ AnimationHeader* unk_10;
} struct_80B2CEE8; // size = 0x14
diff --git a/undefined_syms.txt b/undefined_syms.txt
index 8fe2a08a38..7323296be8 100644
--- a/undefined_syms.txt
+++ b/undefined_syms.txt
@@ -555,10 +555,6 @@ D_0600BC90 = 0x0600BC90;
D_0600BCA0 = 0x0600BCA0;
D_0600BE40 = 0x0600BE40;
-// z_en_horse_zelda
-D_06006B2C = 0x06006B2C;
-D_06007148 = 0x06007148;
-
// z_arms_hook
D_0602B288 = 0x0602B288;
D_0602AFF0 = 0x0602AFF0;
@@ -785,26 +781,6 @@ D_06002C10 = 0x06002C10;
D_06004F30 = 0x06004F30;
D_060048A8 = 0x060048A8;
-// z_en_horse_ganon
-D_06008668 = 0x06008668;
-D_06004AA4 = 0x06004AA4;
-
-// z_en_horse_link_child
-D_06002F98 = 0x06002F98;
-D_06007B20 = 0x06007B20;
-
-// z_en_horse_normal
-D_06000608 = 0x06000608;
-D_06000C20 = 0x06000C20;
-D_060013A8 = 0x060013A8;
-D_06001A1C = 0x06001A1C;
-D_06002458 = 0x06002458;
-D_060035D4 = 0x060035D4;
-D_06004580 = 0x06004580;
-D_06004C20 = 0x06004C20;
-D_060054BC = 0x060054BC;
-D_06009FAC = 0x06009FAC;
-
// z_en_skjneedle
D_06000EB0 = 0x06000EB0;
@@ -2240,38 +2216,22 @@ D_06001410 = 0x06001410;
D_060014F4 = 0x060014F4;
D_06001D28 = 0x06001D28;
D_06002574 = 0x06002574;
-D_06002650 = 0x06002650;
D_06002928 = 0x06002928;
D_060029CC = 0x060029CC;
-D_06002EF0 = 0x06002EF0;
D_06003284 = 0x06003284;
-D_060032F0 = 0x060032F0;
D_06003428 = 0x06003428;
-D_060036F0 = 0x060036F0;
-D_06003858 = 0x06003858;
D_06003D84 = 0x06003D84;
-D_06003EF0 = 0x06003EF0;
D_0600420C = 0x0600420C;
D_06004260 = 0x06004260;
-D_060042F0 = 0x060042F0;
D_06004534 = 0x06004534;
D_060048B0 = 0x060048B0;
D_060048FC = 0x060048FC;
-D_06004AA4 = 0x06004AA4;
-D_06004EF0 = 0x06004EF0;
D_0600504C = 0x0600504C;
D_060050A8 = 0x060050A8;
-D_060052F0 = 0x060052F0;
-D_06006B2C = 0x06006B2C;
-D_06007148 = 0x06007148;
D_06007210 = 0x06007210;
-D_06008668 = 0x06008668;
D_0600A4E0 = 0x0600A4E0;
D_0600BE90 = 0x0600BE90;
-D_0600C410 = 0x0600C410;
D_0600D0D8 = 0x0600D0D8;
-D_0600DE08 = 0x0600DE08;
-D_0600E038 = 0x0600E038;
D_0600E1A8 = 0x0600E1A8;
D_0600F178 = 0x0600F178;
D_0600F378 = 0x0600F378;