diff --git a/assets/xml/objects/object_wf.xml b/assets/xml/objects/object_wf.xml
index b6c5b640d8..0d8fdb68c7 100644
--- a/assets/xml/objects/object_wf.xml
+++ b/assets/xml/objects/object_wf.xml
@@ -65,11 +65,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -135,8 +135,8 @@
-
+
-
+
diff --git a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c
index 1a2f8b685a..6f533b3a3a 100644
--- a/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c
+++ b/src/overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.c
@@ -16,8 +16,8 @@ void EnSyatekiCrow_Destroy(Actor* thisx, PlayState* play);
void EnSyatekiCrow_Update(Actor* thisx, PlayState* play);
void EnSyatekiCrow_Draw(Actor* thisx, PlayState* play);
-void EnSyatekiCrow_SetupWaitForSpawn(EnSyatekiCrow* this);
-void EnSyatekiCrow_WaitForSpawn(EnSyatekiCrow* this, PlayState* play);
+void EnSyatekiCrow_SetupWaitForSignal(EnSyatekiCrow* this);
+void EnSyatekiCrow_WaitForSignal(EnSyatekiCrow* this, PlayState* play);
void EnSyatekiCrow_SetupWaitToMove(EnSyatekiCrow* this);
void EnSyatekiCrow_WaitToMove(EnSyatekiCrow* this, PlayState* play);
void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play);
@@ -105,7 +105,7 @@ void EnSyatekiCrow_Init(Actor* thisx, PlayState* play2) {
this->maxPointIndex = path->count;
this->deathTimer = 20;
this->waitTimer = 0;
- EnSyatekiCrow_SetupWaitForSpawn(this);
+ EnSyatekiCrow_SetupWaitForSignal(this);
}
void EnSyatekiCrow_Destroy(Actor* thisx, PlayState* play) {
@@ -114,7 +114,7 @@ void EnSyatekiCrow_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyJntSph(play, &this->collider);
}
-void EnSyatekiCrow_SetupWaitForSpawn(EnSyatekiCrow* this) {
+void EnSyatekiCrow_SetupWaitForSignal(EnSyatekiCrow* this) {
Actor_SetScale(&this->actor, 0.03f);
this->actor.speedXZ = 0.0f;
this->actor.gravity = 0.0f;
@@ -123,13 +123,13 @@ void EnSyatekiCrow_SetupWaitForSpawn(EnSyatekiCrow* this) {
this->actor.shape.rot = this->actor.world.rot;
this->currentPointIndex = 1;
this->actor.draw = NULL;
- this->actionFunc = EnSyatekiCrow_WaitForSpawn;
+ this->actionFunc = EnSyatekiCrow_WaitForSignal;
}
/**
- * Waits until the shooting gallery man sets the appropriate Guay flag to spawn.
+ * Waits until the shooting gallery man sets the appropriate Guay flag.
*/
-void EnSyatekiCrow_WaitForSpawn(EnSyatekiCrow* this, PlayState* play) {
+void EnSyatekiCrow_WaitForSignal(EnSyatekiCrow* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isActive == true) &&
@@ -144,6 +144,10 @@ void EnSyatekiCrow_WaitForSpawn(EnSyatekiCrow* this, PlayState* play) {
}
}
+/**
+ * Positions the Guay at the start of its assigned path and rotates it to face the
+ * next point on the path, then sets it up to start waiting.
+ */
void EnSyatekiCrow_SetupWaitToMove(EnSyatekiCrow* this) {
Vec3f targetPos;
@@ -181,7 +185,7 @@ void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
- EnSyatekiCrow_SetupWaitForSpawn(this);
+ EnSyatekiCrow_SetupWaitForSignal(this);
return;
}
@@ -203,7 +207,7 @@ void EnSyatekiCrow_Fly(EnSyatekiCrow* this, PlayState* play) {
} else {
this->isActive = false;
syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor));
- EnSyatekiCrow_SetupWaitForSpawn(this);
+ EnSyatekiCrow_SetupWaitForSignal(this);
}
SkelAnime_Update(&this->skelAnime);
@@ -242,7 +246,7 @@ void EnSyatekiCrow_Dead(EnSyatekiCrow* this, PlayState* play) {
func_800B3030(play, &this->actor.world.pos, &sZeroVec, &sZeroVec, this->actor.scale.x * 10000.0f, 0, 0);
syatekiMan->guayHitCounter++;
syatekiMan->guayFlags &= ~(1 << EN_SYATEKI_CROW_GET_INDEX(&this->actor));
- EnSyatekiCrow_SetupWaitForSpawn(this);
+ EnSyatekiCrow_SetupWaitForSignal(this);
}
this->deathTimer++;
diff --git a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c
index 601095cfd7..c21eb61157 100644
--- a/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c
+++ b/src/overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.c
@@ -17,10 +17,10 @@ void EnSyatekiDekunuts_Destroy(Actor* thisx, PlayState* play);
void EnSyatekiDekunuts_Update(Actor* thisx, PlayState* play);
void EnSyatekiDekunuts_Draw(Actor* thisx, PlayState* play);
-void EnSyatekiDekunuts_SetupWaitForSpawn(EnSyatekiDekunuts* this);
-void EnSyatekiDekunuts_WaitForSpawn(EnSyatekiDekunuts* this, PlayState* play);
-void EnSyatekiDekunuts_SetupSpawn(EnSyatekiDekunuts* this);
-void EnSyatekiDekunuts_Spawn(EnSyatekiDekunuts* this, PlayState* play);
+void EnSyatekiDekunuts_SetupWaitForSignal(EnSyatekiDekunuts* this);
+void EnSyatekiDekunuts_WaitForSignal(EnSyatekiDekunuts* this, PlayState* play);
+void EnSyatekiDekunuts_SetupWaitToStart(EnSyatekiDekunuts* this);
+void EnSyatekiDekunuts_WaitToStart(EnSyatekiDekunuts* this, PlayState* play);
void EnSyatekiDekunuts_SetupWaitToEmerge(EnSyatekiDekunuts* this);
void EnSyatekiDekunuts_WaitToEmerge(EnSyatekiDekunuts* this, PlayState* play);
void EnSyatekiDekunuts_SetupEmerge(EnSyatekiDekunuts* this);
@@ -152,7 +152,7 @@ void EnSyatekiDekunuts_Init(Actor* thisx, PlayState* play2) {
this->timer = 0;
this->unk_1DC = 0;
this->waitTimer = 0;
- EnSyatekiDekunuts_SetupWaitForSpawn(this);
+ EnSyatekiDekunuts_SetupWaitForSignal(this);
}
void EnSyatekiDekunuts_Destroy(Actor* thisx, PlayState* play) {
@@ -161,7 +161,7 @@ void EnSyatekiDekunuts_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyCylinder(play, &this->collider);
}
-void EnSyatekiDekunuts_SetupWaitForSpawn(EnSyatekiDekunuts* this) {
+void EnSyatekiDekunuts_SetupWaitForSignal(EnSyatekiDekunuts* this) {
Animation_PlayOnceSetSpeed(&this->skelAnime, &gDekuScrubUpAnim, 0.0f);
this->actor.speedXZ = 0.0f;
@@ -176,18 +176,18 @@ void EnSyatekiDekunuts_SetupWaitForSpawn(EnSyatekiDekunuts* this) {
this->isAlive = true;
}
- this->actionFunc = EnSyatekiDekunuts_WaitForSpawn;
+ this->actionFunc = EnSyatekiDekunuts_WaitForSignal;
}
/**
- * Waits until the shooting gallery man sets the appropriate Deku Scrub flag to spawn.
+ * Waits until the shooting gallery man sets the appropriate Deku Scrub flag.
*/
-void EnSyatekiDekunuts_WaitForSpawn(EnSyatekiDekunuts* this, PlayState* play) {
+void EnSyatekiDekunuts_WaitForSignal(EnSyatekiDekunuts* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isAlive == true) &&
(syatekiMan->dekuScrubFlags & (1 << this->index))) {
- EnSyatekiDekunuts_SetupSpawn(this);
+ EnSyatekiDekunuts_SetupWaitToStart(this);
} else if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
this->isAlive = true;
}
@@ -201,7 +201,7 @@ void EnSyatekiDekunuts_WaitForSpawn(EnSyatekiDekunuts* this, PlayState* play) {
/**
* Positions the Deku Scrub to match up with its flower, then sets it up to start waiting.
*/
-void EnSyatekiDekunuts_SetupSpawn(EnSyatekiDekunuts* this) {
+void EnSyatekiDekunuts_SetupWaitToStart(EnSyatekiDekunuts* this) {
Vec3f pos;
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
@@ -221,13 +221,13 @@ void EnSyatekiDekunuts_SetupSpawn(EnSyatekiDekunuts* this) {
this->headdressType = EN_SYATEKI_DEKUNUTS_HEADDRESS_TYPE_NORMAL;
}
- this->actionFunc = EnSyatekiDekunuts_Spawn;
+ this->actionFunc = EnSyatekiDekunuts_WaitToStart;
}
/**
* Waits 20 frames, then plays a sound and starts the process of making the Deku Scrubs emerge.
*/
-void EnSyatekiDekunuts_Spawn(EnSyatekiDekunuts* this, PlayState* play) {
+void EnSyatekiDekunuts_WaitToStart(EnSyatekiDekunuts* this, PlayState* play) {
EnSyatekiMan* syatekiMan;
if (this->waitTimer > 20) {
@@ -357,7 +357,7 @@ void EnSyatekiDekunuts_SetupGameEnd(EnSyatekiDekunuts* this) {
*/
void EnSyatekiDekunuts_GameEnd(EnSyatekiDekunuts* this, PlayState* play) {
if (this->waitTimer > 20) {
- EnSyatekiDekunuts_SetupWaitForSpawn(this);
+ EnSyatekiDekunuts_SetupWaitForSignal(this);
this->waitTimer = 0;
} else {
this->waitTimer++;
@@ -411,7 +411,7 @@ void EnSyatekiDekunuts_Dead(EnSyatekiDekunuts* this, PlayState* play) {
syatekiMan->dekuScrubFlags &= ~(1 << this->index);
}
- EnSyatekiDekunuts_SetupWaitForSpawn(this);
+ EnSyatekiDekunuts_SetupWaitForSignal(this);
}
} else if (this->timer < 160) {
this->timer--;
@@ -424,7 +424,7 @@ void EnSyatekiDekunuts_Update(Actor* thisx, PlayState* play) {
this->actionFunc(this, play);
- if ((this->actionFunc != EnSyatekiDekunuts_WaitForSpawn) && (this->timer < this->timeToBurrow) &&
+ if ((this->actionFunc != EnSyatekiDekunuts_WaitForSignal) && (this->timer < this->timeToBurrow) &&
(this->timer > 10)) {
if ((this->collider.base.acFlags & AC_HIT) && (this->isAlive == true)) {
if (EN_SYATEKI_DEKUNUTS_GET_TYPE(&this->actor) == EN_SYATEKI_DEKUNUTS_TYPE_BONUS) {
@@ -463,7 +463,7 @@ void EnSyatekiDekunuts_Draw(Actor* thisx, PlayState* play) {
Vec3f flowerPos;
s32 i;
- if (this->actionFunc != EnSyatekiDekunuts_WaitForSpawn) {
+ if (this->actionFunc != EnSyatekiDekunuts_WaitForSignal) {
SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable,
EnSyatekiDekunuts_OverrideLimbDraw, NULL, &this->actor);
}
diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c
index 20871efb29..9f35d8bc72 100644
--- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c
+++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c
@@ -16,19 +16,19 @@ void EnSyatekiWf_Destroy(Actor* thisx, PlayState* play);
void EnSyatekiWf_Update(Actor* thisx, PlayState* play2);
void EnSyatekiWf_Draw(Actor* thisx, PlayState* play);
-void func_80A201CC(EnSyatekiWf* this);
-void func_80A20284(EnSyatekiWf* this, PlayState* play);
-void func_80A2030C(EnSyatekiWf* this);
-void func_80A20320(EnSyatekiWf* this, PlayState* play);
-void func_80A20378(EnSyatekiWf* this);
-void func_80A203DC(EnSyatekiWf* this, PlayState* play);
-void func_80A20670(EnSyatekiWf* this);
-void func_80A206DC(EnSyatekiWf* this, PlayState* play);
-void func_80A20710(EnSyatekiWf* this);
-void func_80A2075C(EnSyatekiWf* this, PlayState* play);
-void func_80A2079C(EnSyatekiWf* this);
-void func_80A20800(EnSyatekiWf* this, PlayState* play);
-void func_80A208F8(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupWaitForSignal(EnSyatekiWf* this);
+void EnSyatekiWf_WaitForSignal(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupWaitToMove(EnSyatekiWf* this);
+void EnSyatekiWf_WaitToMove(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupRun(EnSyatekiWf* this);
+void EnSyatekiWf_Run(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupJump(EnSyatekiWf* this);
+void EnSyatekiWf_Jump(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupLand(EnSyatekiWf* this);
+void EnSyatekiWf_Land(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_SetupHowl(EnSyatekiWf* this);
+void EnSyatekiWf_Howl(EnSyatekiWf* this, PlayState* play);
+void EnSyatekiWf_Dead(EnSyatekiWf* this, PlayState* play);
static ColliderJntSphElementInit sJntSphElementsInit[1] = {
{
@@ -40,11 +40,11 @@ static ColliderJntSphElementInit sJntSphElementsInit[1] = {
BUMP_ON,
OCELEM_ON,
},
- { 17, { { 800, 0, 0 }, 25 }, 100 },
+ { WOLFOS_NORMAL_LIMB_HEAD, { { 800, 0, 0 }, 25 }, 100 },
},
};
-static ColliderCylinderInit sCylinderInit1 = {
+static ColliderCylinderInit sBodyCylinderInit = {
{
COLTYPE_HIT5,
AT_NONE,
@@ -77,7 +77,7 @@ static ColliderJntSphInit sJntSphInit = {
sJntSphElementsInit,
};
-static ColliderCylinderInit sCylinderInit2 = {
+static ColliderCylinderInit sTailCylinderInit = {
{
COLTYPE_HIT5,
AT_NONE,
@@ -97,9 +97,9 @@ static ColliderCylinderInit sCylinderInit2 = {
{ 15, 20, -15, { 0, 0, 0 } },
};
-static Vec3f D_80A20EDC = { 0.0f, 20.0f, 0.0f };
+static Vec3f sVelocity = { 0.0f, 20.0f, 0.0f };
-static Vec3f D_80A20EE8 = { 0.0f, 0.0f, 0.0f };
+static Vec3f sAccel = { 0.0f, 0.0f, 0.0f };
ActorInit En_Syateki_Wf_InitVars = {
ACTOR_EN_SYATEKI_WF,
@@ -113,14 +113,24 @@ ActorInit En_Syateki_Wf_InitVars = {
(ActorFunc)EnSyatekiWf_Draw,
};
+typedef enum {
+ /* 0 */ EN_SYATEKI_WF_ANIM_WAIT, // unused
+ /* 1 */ EN_SYATEKI_WF_ANIM_RUN,
+ /* 2 */ EN_SYATEKI_WF_ANIM_JUMP,
+ /* 3 */ EN_SYATEKI_WF_ANIM_LAND,
+ /* 4 */ EN_SYATEKI_WF_ANIM_BACKFLIP, // unused
+ /* 5 */ EN_SYATEKI_WF_ANIM_DAMAGED,
+ /* 6 */ EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER,
+} EnSyatekiWfAnimation;
+
static AnimationInfo sAnimationInfo[] = {
- { &gWolfosWaitingAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f },
- { &gWolfosRunningAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
- { &gWolfosRunningAnim, 1.0f, 0.0f, 4.0f, ANIMMODE_ONCE, 1.0f },
- { &gWolfosRunningAnim, 1.0f, 4.0f, 8.0f, ANIMMODE_ONCE, 1.0f },
- { &gWolfosBackflippingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &gWolfosWaitAnim, 2.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f },
+ { &gWolfosRunAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -8.0f },
+ { &gWolfosRunAnim, 1.0f, 0.0f, 4.0f, ANIMMODE_ONCE, 1.0f },
+ { &gWolfosRunAnim, 1.0f, 4.0f, 8.0f, ANIMMODE_ONCE, 1.0f },
+ { &gWolfosBackflipAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
{ &gWolfosDamagedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 8.0f },
- { &gWolfosRearingUpFallingOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
+ { &gWolfosRearUpFallOverAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f },
};
static InitChainEntry sInitChain[] = {
@@ -128,17 +138,6 @@ static InitChainEntry sInitChain[] = {
ICHAIN_F32_DIV1000(gravity, -2000, ICHAIN_STOP),
};
-static Vec3f D_80A20FC4 = { 0.0f, 0.5f, 0.0f };
-
-static Vec3f D_80A20FD0 = { 1200.0f, 0.0f, 0.0f };
-
-static TexturePtr sEyeTextures[] = {
- gWolfosNormalEyeOpenTex,
- gWolfosNormalEyeHalfTex,
- gWolfosNormalEyeNarrowTex,
- gWolfosNormalEyeHalfTex,
-};
-
void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
s32 pad;
EnSyatekiWf* this = THIS;
@@ -160,12 +159,12 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
return;
}
- this->unk_2A0 = Lib_SegmentedToVirtual(path->points);
- this->unk_2A4 = 1;
- this->unk_2A6 = path->count;
+ this->pathPoints = Lib_SegmentedToVirtual(path->points);
+ this->currentPointIndex = 1;
+ this->maxPointIndex = path->count;
Actor_ProcessInitChain(&this->actor, sInitChain);
- this->unk_29C = 0;
+ this->waitTimer = 0;
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 0.0f);
this->actor.focus.pos = this->actor.world.pos;
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
@@ -175,45 +174,46 @@ void EnSyatekiWf_Init(Actor* thisx, PlayState* play) {
this->eyeIndex = 0;
this->unk_2AC = 10.0f;
- Collider_InitCylinder(play, &this->unk_2B4);
- Collider_SetCylinder(play, &this->unk_2B4, &this->actor, &sCylinderInit1);
- Collider_InitCylinder(play, &this->unk_300);
- Collider_SetCylinder(play, &this->unk_300, &this->actor, &sCylinderInit2);
- Collider_InitJntSph(play, &this->unk_34C);
- Collider_SetJntSph(play, &this->unk_34C, &this->actor, &sJntSphInit, this->unk_36C);
- this->unk_34C.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius;
+ Collider_InitCylinder(play, &this->bodyCollider);
+ Collider_SetCylinder(play, &this->bodyCollider, &this->actor, &sBodyCylinderInit);
+ Collider_InitCylinder(play, &this->tailCollider);
+ Collider_SetCylinder(play, &this->tailCollider, &this->actor, &sTailCylinderInit);
+ Collider_InitJntSph(play, &this->headCollider);
+ Collider_SetJntSph(play, &this->headCollider, &this->actor, &sJntSphInit, this->headColliderElements);
+ this->headCollider.elements->dim.worldSphere.radius = sJntSphInit.elements[0].dim.modelSphere.radius;
- SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosNormalSkel, &gWolfosWaitingAnim, this->jointTable,
- this->morphTable, WOLFOS_NORMAL_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosNormalSkel, &gWolfosWaitAnim, this->jointTable, this->morphTable,
+ WOLFOS_NORMAL_LIMB_MAX);
Actor_SetScale(&this->actor, 0.01f);
this->actor.hintId = TATL_HINT_ID_WOLFOS;
- func_80A201CC(this);
+ EnSyatekiWf_SetupWaitForSignal(this);
}
void EnSyatekiWf_Destroy(Actor* thisx, PlayState* play) {
EnSyatekiWf* this = THIS;
- Collider_DestroyCylinder(play, &this->unk_2B4);
- Collider_DestroyCylinder(play, &this->unk_300);
+ Collider_DestroyCylinder(play, &this->bodyCollider);
+ Collider_DestroyCylinder(play, &this->tailCollider);
}
-void func_80A200E0(EnSyatekiWf* this) {
- Vec3f sp24;
- s16 temp;
+/**
+ * Positions the Wolfos at the start of its assigned path and rotates it to face
+ * the next point on the path.
+ */
+void EnSyatekiWf_InitPathStart(EnSyatekiWf* this) {
+ Vec3f targetPos;
- this->actor.world.pos.x = this->unk_2A0[0].x;
- this->actor.world.pos.y = this->unk_2A0[0].y;
- this->actor.world.pos.z = this->unk_2A0[0].z;
- sp24.x = this->unk_2A0[this->unk_2A4].x;
- sp24.y = this->unk_2A0[this->unk_2A4].y;
- sp24.z = this->unk_2A0[this->unk_2A4].z;
- temp = Math_Vec3f_Yaw(&this->actor.world.pos, &sp24);
- this->actor.shape.rot.y = temp;
- this->actor.world.rot.y = temp;
+ this->actor.world.pos.x = this->pathPoints[0].x;
+ this->actor.world.pos.y = this->pathPoints[0].y;
+ this->actor.world.pos.z = this->pathPoints[0].z;
+ targetPos.x = this->pathPoints[this->currentPointIndex].x;
+ targetPos.y = this->pathPoints[this->currentPointIndex].y;
+ targetPos.z = this->pathPoints[this->currentPointIndex].z;
+ this->actor.world.rot.y = this->actor.shape.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &targetPos);
}
-void func_80A201CC(EnSyatekiWf* this) {
+void EnSyatekiWf_SetupWaitForSignal(EnSyatekiWf* this) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
this->actor.speedXZ = 0.0f;
@@ -222,67 +222,79 @@ void func_80A201CC(EnSyatekiWf* this) {
this->actor.shape.rot = this->actor.world.rot;
this->actor.colChkInfo.health = 2;
this->actor.draw = NULL;
- this->unk_2A4 = 1;
- this->unk_298 = 0;
+ this->currentPointIndex = 1;
+ this->isActive = false;
syatekiMan->wolfosFlags &= ~(1 << EN_SYATEKI_WF_GET_INDEX(&this->actor));
- this->actionFunc = func_80A20284;
+ this->actionFunc = EnSyatekiWf_WaitForSignal;
}
-void func_80A20284(EnSyatekiWf* this, PlayState* play) {
+/**
+ * Waits until the shooting gallery man sets the appropriate Wolfos flag.
+ */
+void EnSyatekiWf_WaitForSignal(EnSyatekiWf* this, PlayState* play) {
EnSyatekiMan* syatekiMan;
if (this->actor.parent != NULL) {
syatekiMan = (EnSyatekiMan*)this->actor.parent;
- if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->unk_298 == 1)) {
- func_80A200E0(this);
- func_80A2030C(this);
+ if ((syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && (this->isActive == true)) {
+ EnSyatekiWf_InitPathStart(this);
+ EnSyatekiWf_SetupWaitToMove(this);
} else if (syatekiMan->wolfosFlags & (1 << EN_SYATEKI_WF_GET_INDEX(&this->actor))) {
- this->unk_298 = 1;
+ this->isActive = true;
}
}
}
-void func_80A2030C(EnSyatekiWf* this) {
- this->actionFunc = func_80A20320;
+void EnSyatekiWf_SetupWaitToMove(EnSyatekiWf* this) {
+ this->actionFunc = EnSyatekiWf_WaitToMove;
}
-void func_80A20320(EnSyatekiWf* this, PlayState* play) {
- if (this->unk_29C >= 11) {
+/**
+ * Waits 11 frames, then makes the Wolfos start running forward.
+ */
+void EnSyatekiWf_WaitToMove(EnSyatekiWf* this, PlayState* play) {
+ if (this->waitTimer >= 11) {
Actor_PlaySfxAtPos(this->actor.parent, NA_SE_EN_WOLFOS_APPEAR);
- this->unk_29C = 0;
- func_80A20378(this);
+ this->waitTimer = 0;
+ EnSyatekiWf_SetupRun(this);
} else {
- this->unk_29C++;
+ this->waitTimer++;
}
}
-void func_80A20378(EnSyatekiWf* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1);
+void EnSyatekiWf_SetupRun(EnSyatekiWf* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_RUN);
this->actor.speedXZ = 10.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.draw = EnSyatekiWf_Draw;
- this->actionFunc = func_80A203DC;
+ this->actionFunc = EnSyatekiWf_Run;
}
-void func_80A203DC(EnSyatekiWf* this, PlayState* play) {
- Vec3f sp54;
- f32 sp50;
- s16 temp_v0;
+/**
+ * Runs forward along its assigned path. If the Wolfos encounters a wall directly
+ * in front of it, this function will make it jump. If the Wolfos reaches a certain
+ * point along the path (which is specified via its params), this function will make
+ * it stop running and howl in place.
+ */
+void EnSyatekiWf_Run(EnSyatekiWf* this, PlayState* play) {
+ Vec3f targetPoint;
+ f32 distToTarget;
+ s16 wallYawDiff;
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
if (syatekiMan->shootingGameState != SG_GAME_STATE_RUNNING) {
- func_80A201CC(this);
+ EnSyatekiWf_SetupWaitForSignal(this);
}
- sp54.x = this->unk_2A0[this->unk_2A4].x;
- sp54.y = this->unk_2A0[this->unk_2A4].y;
- sp54.z = this->unk_2A0[this->unk_2A4].z;
- temp_v0 = (this->actor.wallYaw - this->actor.world.rot.y) + 0x8000;
+ targetPoint.x = this->pathPoints[this->currentPointIndex].x;
+ targetPoint.y = this->pathPoints[this->currentPointIndex].y;
+ targetPoint.z = this->pathPoints[this->currentPointIndex].z;
+ wallYawDiff = (this->actor.wallYaw - this->actor.world.rot.y) + 0x8000;
if (this->actor.bgCheckFlags & 1) {
if (this->actor.bgCheckFlags & 8) {
- if ((ABS(temp_v0) < 0x1555) && (this->actor.wallPoly != this->actor.floorPoly)) {
- func_80A20670(this);
+ if ((ABS(wallYawDiff) < 0x1555) && (this->actor.wallPoly != this->actor.floorPoly)) {
+ EnSyatekiWf_SetupJump(this);
return;
}
}
@@ -291,13 +303,13 @@ void func_80A203DC(EnSyatekiWf* this, PlayState* play) {
this->actor.velocity.y = 2.0f;
}
- sp50 = Math_Vec3f_DistXZ(&this->actor.world.pos, &sp54);
- this->unk_2A8 = Math_Vec3f_Yaw(&this->actor.world.pos, &sp54);
+ distToTarget = Math_Vec3f_DistXZ(&this->actor.world.pos, &targetPoint);
+ this->yawTarget = Math_Vec3f_Yaw(&this->actor.world.pos, &targetPoint);
- if (sp50 > 15.0f) {
- Math_SmoothStepToS(&this->actor.world.rot.y, this->unk_2A8, 5, 0x3000, 0x100);
+ if (distToTarget > 15.0f) {
+ Math_SmoothStepToS(&this->actor.world.rot.y, this->yawTarget, 5, 0x3000, 0x100);
this->actor.shape.rot.y = this->actor.world.rot.y;
- if (sp50 < 50.0f) {
+ if (distToTarget < 50.0f) {
if (this->actor.speedXZ > 3.0f) {
this->actor.speedXZ = this->actor.speedXZ - 0.5f;
} else {
@@ -305,16 +317,16 @@ void func_80A203DC(EnSyatekiWf* this, PlayState* play) {
}
}
} else {
- if (this->unk_2A4 < (this->unk_2A6 - 1)) {
- if (this->unk_2A4 == EN_SYATEKI_WF_GET_PARAM_F0(&this->actor)) {
- func_80A2079C(this);
+ if (this->currentPointIndex < (this->maxPointIndex - 1)) {
+ if (this->currentPointIndex == EN_SYATEKI_WF_GET_POINT_TO_HOWL(&this->actor)) {
+ EnSyatekiWf_SetupHowl(this);
}
- this->unk_2A4++;
+ this->currentPointIndex++;
} else {
- this->unk_298 = 0;
- this->unk_2A4 = 1;
- func_80A201CC(this);
+ this->isActive = false;
+ this->currentPointIndex = 1;
+ EnSyatekiWf_SetupWaitForSignal(this);
}
}
@@ -324,76 +336,82 @@ void func_80A203DC(EnSyatekiWf* this, PlayState* play) {
}
}
-void func_80A20670(EnSyatekiWf* this) {
+void EnSyatekiWf_SetupJump(EnSyatekiWf* this) {
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_TEKU_JUMP);
this->actor.velocity.y = 20.0f;
this->actor.speedXZ = 5.0f;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2);
- this->actionFunc = func_80A206DC;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_JUMP);
+ this->actionFunc = EnSyatekiWf_Jump;
}
-void func_80A206DC(EnSyatekiWf* this, PlayState* play) {
+void EnSyatekiWf_Jump(EnSyatekiWf* this, PlayState* play) {
if (this->actor.bgCheckFlags & 2) {
- func_80A20710(this);
+ EnSyatekiWf_SetupLand(this);
}
}
-void func_80A20710(EnSyatekiWf* this) {
+void EnSyatekiWf_SetupLand(EnSyatekiWf* this) {
this->actor.speedXZ = 0.0f;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3);
- this->actionFunc = func_80A2075C;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_LAND);
+ this->actionFunc = EnSyatekiWf_Land;
}
-void func_80A2075C(EnSyatekiWf* this, PlayState* play) {
+/**
+ * Freezes the Wolfos in place until its landing animation is complete, then makes it start running.
+ */
+void EnSyatekiWf_Land(EnSyatekiWf* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80A20378(this);
+ EnSyatekiWf_SetupRun(this);
}
}
-void func_80A2079C(EnSyatekiWf* this) {
- this->unk_29A = 40;
+void EnSyatekiWf_SetupHowl(EnSyatekiWf* this) {
+ this->timer = 40;
this->actor.speedXZ = 0.0f;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 5);
- this->actionFunc = func_80A20800;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_DAMAGED);
+ this->actionFunc = EnSyatekiWf_Howl;
}
-void func_80A20800(EnSyatekiWf* this, PlayState* play) {
+/**
+ * Makes the Wolfos stand completely still until 40 frames after its damaged animation is complete.
+ */
+void EnSyatekiWf_Howl(EnSyatekiWf* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- this->unk_29A--;
- if (this->unk_29A == 0) {
- func_80A20378(this);
+ this->timer--;
+ if (this->timer == 0) {
+ EnSyatekiWf_SetupRun(this);
}
}
}
-void func_80A20858(EnSyatekiWf* this, PlayState* play) {
+void EnSyatekiWf_SetupDead(EnSyatekiWf* this, PlayState* play) {
EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent;
- this->unk_298 = 0;
+ this->isActive = false;
this->actor.speedXZ = 0.0f;
- EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A20EDC, &D_80A20EE8, 5, 2);
+ EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 5, 2);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_DEAD);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 6);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, EN_SYATEKI_WF_ANIM_REAR_UP_FALL_OVER);
syatekiMan->score += 100;
- this->actionFunc = func_80A208F8;
+ this->actionFunc = EnSyatekiWf_Dead;
}
-void func_80A208F8(EnSyatekiWf* this, PlayState* play) {
+void EnSyatekiWf_Dead(EnSyatekiWf* this, PlayState* play) {
s32 pad;
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- func_80A201CC(this);
+ EnSyatekiWf_SetupWaitForSignal(this);
} else {
- Vec3f sp68;
- Vec3f sp5C = D_80A20FC4;
+ Vec3f firePos;
+ Vec3f sFireVelocityAndAccel = { 0.0f, 0.5f, 0.0f };
s32 i;
for (i = (s32)this->skelAnime.animLength - (s32)this->skelAnime.curFrame; i >= 0; i--) {
- sp68.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x;
- sp68.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z;
- sp68.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f);
- func_800B3030(play, &sp68, &sp5C, &sp5C, 0x64, 0, 2);
+ firePos.x = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.x;
+ firePos.z = randPlusMinusPoint5Scaled(60.0f) + this->actor.world.pos.z;
+ firePos.y = randPlusMinusPoint5Scaled(50.0f) + (this->actor.world.pos.y + 20.0f);
+ func_800B3030(play, &firePos, &sFireVelocityAndAccel, &sFireVelocityAndAccel, 100, 0, 2);
}
}
}
@@ -402,7 +420,7 @@ void EnSyatekiWf_Update(Actor* thisx, PlayState* play2) {
PlayState* play = play2;
EnSyatekiWf* this = THIS;
- if (this->actionFunc != func_80A20284) {
+ if (this->actionFunc != EnSyatekiWf_WaitForSignal) {
SkelAnime_Update(&this->skelAnime);
}
@@ -417,26 +435,34 @@ void EnSyatekiWf_Update(Actor* thisx, PlayState* play2) {
Math_SmoothStepToS(&this->actor.shape.rot.z, 0, 1, 0x3E8, 0);
}
- if ((this->unk_2B4.base.acFlags & AC_HIT) || (this->unk_300.base.acFlags & AC_HIT) ||
- (this->unk_34C.base.acFlags & AC_HIT)) {
- this->unk_2B4.base.acFlags &= ~AC_HIT;
- this->unk_300.base.acFlags &= ~AC_HIT;
- this->unk_34C.base.acFlags &= ~AC_HIT;
+ if ((this->bodyCollider.base.acFlags & AC_HIT) || (this->tailCollider.base.acFlags & AC_HIT) ||
+ (this->headCollider.base.acFlags & AC_HIT)) {
+ this->bodyCollider.base.acFlags &= ~AC_HIT;
+ this->tailCollider.base.acFlags &= ~AC_HIT;
+ this->headCollider.base.acFlags &= ~AC_HIT;
+
+ // The Wolfos always starts with 2 health, so the subtraction below is guaranteed to kill it;
+ // the else-block is never reached in practice. If you *could* damage the Wolfos without killing
+ // it, then the number "30" would appear every time you hit it, and the player's displayed score
+ // would increase by 30. However, the else-block doesn't increase the shooting gallery man's
+ // "score" variable, so it would become desynchronized from the displayed score. This could cause
+ // weird behavior, like not getting a free replay after finishing a game with 2000 or more points.
this->actor.colChkInfo.health -= 2;
if (this->actor.colChkInfo.health == 0) {
Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900);
- func_80A20858(this, play);
+ EnSyatekiWf_SetupDead(this, play);
} else {
play_sound(NA_SE_SY_TRE_BOX_APPEAR);
- EffectSsExtra_Spawn(play, &this->actor.world.pos, &D_80A20EDC, &D_80A20EE8, 3, 0);
+ EffectSsExtra_Spawn(play, &this->actor.world.pos, &sVelocity, &sAccel, 3, 0);
}
}
- Collider_UpdateCylinder(&this->actor, &this->unk_2B4);
- if ((this->actionFunc != func_80A20284) && (this->actionFunc != func_80A208F8) && (this->actor.draw != NULL)) {
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->unk_300.base);
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->unk_2B4.base);
- CollisionCheck_SetAC(play, &play->colChkCtx, &this->unk_34C.base);
+ Collider_UpdateCylinder(&this->actor, &this->bodyCollider);
+ if ((this->actionFunc != EnSyatekiWf_WaitForSignal) && (this->actionFunc != EnSyatekiWf_Dead) &&
+ (this->actor.draw != NULL)) {
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->tailCollider.base);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->bodyCollider.base);
+ CollisionCheck_SetAC(play, &play->colChkCtx, &this->headCollider.base);
this->actor.focus.pos = this->actor.world.pos;
this->actor.focus.pos.y += 25.0f;
}
@@ -455,19 +481,26 @@ s32 EnSyatekiWf_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Ve
}
void EnSyatekiWf_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
+ static Vec3f sTailColliderOffset = { 1200.0f, 0.0f, 0.0f };
EnSyatekiWf* this = THIS;
- Vec3f sp18;
+ Vec3f tailColliderPos;
- Collider_UpdateSpheres(limbIndex, &this->unk_34C);
+ Collider_UpdateSpheres(limbIndex, &this->headCollider);
if (limbIndex == WOLFOS_NORMAL_LIMB_TAIL) {
- Matrix_MultVec3f(&D_80A20FD0, &sp18);
- this->unk_300.dim.pos.x = sp18.x;
- this->unk_300.dim.pos.y = sp18.y;
- this->unk_300.dim.pos.z = sp18.z;
+ Matrix_MultVec3f(&sTailColliderOffset, &tailColliderPos);
+ this->tailCollider.dim.pos.x = tailColliderPos.x;
+ this->tailCollider.dim.pos.y = tailColliderPos.y;
+ this->tailCollider.dim.pos.z = tailColliderPos.z;
}
}
void EnSyatekiWf_Draw(Actor* thisx, PlayState* play) {
+ static TexturePtr sEyeTextures[] = {
+ gWolfosNormalEyeOpenTex,
+ gWolfosNormalEyeHalfTex,
+ gWolfosNormalEyeNarrowTex,
+ gWolfosNormalEyeHalfTex,
+ };
EnSyatekiWf* this = THIS;
OPEN_DISPS(play->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h
index 56770952f7..4a1fb2f72b 100644
--- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h
+++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.h
@@ -4,9 +4,9 @@
#include "global.h"
#include "objects/object_wf/object_wf.h"
-#define EN_SYATEKI_WF_GET_PARAM_F0(thisx) (((thisx)->params & 0xF0) >> 4)
+#define EN_SYATEKI_WF_GET_POINT_TO_HOWL(thisx) (((thisx)->params & 0xF0) >> 4)
#define EN_SYATEKI_WF_GET_INDEX(thisx) (((thisx)->params & 0xFF00) >> 8)
-#define EN_SYATEKI_WF_PARAMS(index, unkF0, unused) (((index << 8) & 0xFF00) | ((unkF0 << 4) & 0xF0) | (unused & 0xF))
+#define EN_SYATEKI_WF_PARAMS(index, pointToHowl, unused) (((index << 8) & 0xFF00) | ((pointToHowl << 4) & 0xF0) | (unused & 0xF))
struct EnSyatekiWf;
@@ -19,19 +19,19 @@ typedef struct EnSyatekiWf {
/* 0x20C */ Vec3s morphTable[WOLFOS_NORMAL_LIMB_MAX];
/* 0x290 */ UNK_TYPE1 unk_290[0x4];
/* 0x294 */ EnSyatekiWfActionFunc actionFunc;
- /* 0x298 */ s16 unk_298;
- /* 0x29A */ s16 unk_29A;
- /* 0x29C */ s16 unk_29C;
- /* 0x2A0 */ Vec3s* unk_2A0;
- /* 0x2A4 */ s16 unk_2A4;
- /* 0x2A6 */ s16 unk_2A6;
- /* 0x2A8 */ s16 unk_2A8;
- /* 0x2AC */ f32 unk_2AC;
+ /* 0x298 */ s16 isActive;
+ /* 0x29A */ s16 timer;
+ /* 0x29C */ s16 waitTimer;
+ /* 0x2A0 */ Vec3s* pathPoints;
+ /* 0x2A4 */ s16 currentPointIndex;
+ /* 0x2A6 */ s16 maxPointIndex;
+ /* 0x2A8 */ s16 yawTarget;
+ /* 0x2AC */ f32 unk_2AC; // set to 10.0f, but never used
/* 0x2B0 */ u8 eyeIndex;
- /* 0x2B4 */ ColliderCylinder unk_2B4;
- /* 0x300 */ ColliderCylinder unk_300;
- /* 0x34C */ ColliderJntSph unk_34C;
- /* 0x36C */ ColliderJntSphElement unk_36C[1];
+ /* 0x2B4 */ ColliderCylinder bodyCollider;
+ /* 0x300 */ ColliderCylinder tailCollider;
+ /* 0x34C */ ColliderJntSph headCollider;
+ /* 0x36C */ ColliderJntSphElement headColliderElements[1];
/* 0x3AC */ UNK_TYPE1 unk_3AC[0x20];
} EnSyatekiWf; // size = 0x3CC
diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c
index bc505ee530..8d6daa3c2c 100644
--- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c
+++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c
@@ -317,7 +317,7 @@ void EnWf_Init(Actor* thisx, PlayState* play) {
Actor_SetScale(&this->actor, 0.0075f);
if (this->actor.params == 0) {
- SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosNormalSkel, &gWolfosWaitingAnim, this->jointTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosNormalSkel, &gWolfosWaitAnim, this->jointTable,
this->morphTable, WOLFOS_NORMAL_LIMB_MAX);
this->actor.hintId = TATL_HINT_ID_WOLFOS;
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable2, &sColChkInfoInit);
@@ -325,7 +325,7 @@ void EnWf_Init(Actor* thisx, PlayState* play) {
this->collider1.elements[1].info.toucher.damage = 8;
this->actor.colChkInfo.health = 6;
} else {
- SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosWhiteSkel, &gWolfosWaitingAnim, this->jointTable,
+ SkelAnime_InitFlex(play, &this->skelAnime, &gWolfosWhiteSkel, &gWolfosWaitAnim, this->jointTable,
this->morphTable, WOLFOS_WHITE_LIMB_MAX);
this->actor.hintId = TATL_HINT_ID_WHITE_WOLFOS;
CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable1, &sColChkInfoInit);
@@ -549,7 +549,7 @@ void func_80990F50(EnWf* this, PlayState* play) {
}
void func_80990FC8(EnWf* this) {
- Animation_Change(&this->skelAnime, &gWolfosRearingUpFallingOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, 0.0f);
+ Animation_Change(&this->skelAnime, &gWolfosRearUpFallOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, 0.0f);
this->unk_2A0 = 5;
this->actor.flags |= ACTOR_FLAG_1;
this->actionFunc = func_80991040;
@@ -572,7 +572,7 @@ void func_80991040(EnWf* this, PlayState* play) {
void func_809910F0(EnWf* this) {
this->collider2.base.acFlags &= ~AC_ON;
this->actor.speedXZ = 0.0f;
- Animation_Change(&this->skelAnime, &gWolfosRearingUpFallingOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, -5.0f);
+ Animation_Change(&this->skelAnime, &gWolfosRearUpFallOverAnim, 0.5f, 0.0f, 7.0f, ANIMMODE_ONCE_INTERP, -5.0f);
this->unk_2A0 = 5;
this->actionFunc = func_80991174;
}
@@ -591,7 +591,7 @@ void func_80991174(EnWf* this, PlayState* play) {
void func_80991200(EnWf* this) {
this->collider2.base.acFlags |= AC_ON;
- Animation_MorphToLoop(&this->skelAnime, &gWolfosWaitingAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosWaitAnim, -4.0f);
this->unk_2A0 = (s32)Rand_ZeroFloat(10.0f) + 2;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_80991280;
@@ -642,7 +642,7 @@ void func_80991280(EnWf* this, PlayState* play) {
void func_80991438(EnWf* this) {
this->collider2.base.acFlags |= AC_ON;
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actor.speedXZ = 8.0f;
this->actionFunc = func_8099149C;
@@ -703,7 +703,7 @@ void func_8099149C(EnWf* this, PlayState* play) {
}
void func_80991738(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosSidesteppingAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosSidestepAnim, -4.0f);
this->actionFunc = func_8099177C;
}
@@ -755,7 +755,7 @@ void func_8099177C(EnWf* this, PlayState* play) {
void func_80991948(EnWf* this) {
this->collider2.base.acFlags |= AC_ON;
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
if (Rand_ZeroOne() > 0.5f) {
this->unk_29A = 16000;
} else {
@@ -809,7 +809,7 @@ void func_809919F4(EnWf* this, PlayState* play) {
void func_80991C04(EnWf* this) {
this->collider2.base.acFlags |= AC_ON;
- Animation_PlayOnce(&this->skelAnime, &gWolfosSlashingAnim);
+ Animation_PlayOnce(&this->skelAnime, &gWolfosSlashAnim);
this->collider1.base.atFlags &= ~AT_BOUNCED;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
this->unk_2A0 = 7;
@@ -879,7 +879,7 @@ void func_80991FD8(EnWf* this) {
if (this->skelAnime.curFrame > 15.0f) {
phi_f0 = 15.0f;
}
- Animation_Change(&this->skelAnime, &gWolfosSlashingAnim, -0.5f, this->skelAnime.curFrame - 1.0f, phi_f0,
+ Animation_Change(&this->skelAnime, &gWolfosSlashAnim, -0.5f, this->skelAnime.curFrame - 1.0f, phi_f0,
ANIMMODE_ONCE_INTERP, 0.0f);
this->collider1.base.atFlags &= ~AT_ON;
this->actionFunc = func_80992068;
@@ -923,7 +923,7 @@ void func_80992068(EnWf* this, PlayState* play) {
void func_8099223C(EnWf* this) {
this->collider2.base.acFlags &= ~AC_ON;
- Animation_MorphToPlayOnce(&this->skelAnime, &gWolfosBackflippingAnim, -3.0f);
+ Animation_MorphToPlayOnce(&this->skelAnime, &gWolfosBackflipAnim, -3.0f);
this->unk_2A0 = 0;
this->actor.speedXZ = -6.0f;
this->actor.shape.rot.y = this->actor.yawTowardsPlayer;
@@ -1021,8 +1021,8 @@ void func_809924EC(EnWf* this, PlayState* play) {
void func_809926D0(EnWf* this) {
this->collider2.base.acFlags &= ~AC_ON;
- Animation_Change(&this->skelAnime, &gWolfosBackflippingAnim, -1.0f,
- Animation_GetLastFrame(&gWolfosBackflippingAnim.common), 0.0f, ANIMMODE_ONCE, -3.0f);
+ Animation_Change(&this->skelAnime, &gWolfosBackflipAnim, -1.0f, Animation_GetLastFrame(&gWolfosBackflipAnim.common),
+ 0.0f, ANIMMODE_ONCE, -3.0f);
this->unk_2A0 = 0;
this->actor.speedXZ = 6.5f;
this->actor.velocity.y = 15.0f;
@@ -1053,8 +1053,8 @@ void func_8099282C(EnWf* this) {
this->collider1.base.atFlags &= ~AT_ON;
this->unk_2A0 = 10;
this->actor.speedXZ = 0.0f;
- Animation_Change(&this->skelAnime, &gWolfosBlockingAnim, -1.0f, Animation_GetLastFrame(&gWolfosBlockingAnim.common),
- 0.0f, ANIMMODE_ONCE, -2.0f);
+ Animation_Change(&this->skelAnime, &gWolfosBlockAnim, -1.0f, Animation_GetLastFrame(&gWolfosBlockAnim.common), 0.0f,
+ ANIMMODE_ONCE, -2.0f);
this->actionFunc = func_809928CC;
}
@@ -1091,7 +1091,7 @@ void func_80992A74(EnWf* this, PlayState* play) {
f32 temp_f0;
this->collider2.base.acFlags |= AC_ON;
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
player = GET_PLAYER(play);
temp_f0 = Math_SinS((player->actor.shape.rot.y + this->unk_29A) - this->actor.yawTowardsPlayer);
if (temp_f0 > 0.0f) {
@@ -1153,7 +1153,7 @@ void func_80992B8C(EnWf* this, PlayState* play) {
void func_80992D6C(EnWf* this) {
this->collider2.base.acFlags &= ~AC_ON;
- Animation_MorphToPlayOnce(&this->skelAnime, &gWolfosRearingUpFallingOverAnim, -4.0f);
+ Animation_MorphToPlayOnce(&this->skelAnime, &gWolfosRearUpFallOverAnim, -4.0f);
this->actor.world.rot.y = this->actor.yawTowardsPlayer;
if (this->actor.bgCheckFlags & 1) {
this->actor.speedXZ = -6.0f;
@@ -1205,7 +1205,7 @@ void func_80992E0C(EnWf* this, PlayState* play) {
}
void func_80992FD4(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosWaitingAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosWaitAnim, -4.0f);
this->actionFunc = func_80993018;
}
@@ -1232,7 +1232,7 @@ void func_80993018(EnWf* this, PlayState* play) {
}
void func_80993148(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
this->actor.speedXZ = 0.0f;
this->actionFunc = func_80993194;
}
@@ -1277,7 +1277,7 @@ void func_80993194(EnWf* this, PlayState* play) {
}
void func_80993350(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
Actor_PlaySfxAtPos(&this->actor, NA_SE_EN_WOLFOS_APPEAR);
this->actionFunc = func_809933A0;
}
@@ -1317,7 +1317,7 @@ void func_809933A0(EnWf* this, PlayState* play) {
}
void func_80993524(EnWf* this) {
- Animation_MorphToLoop(&this->skelAnime, &gWolfosRunningAnim, -4.0f);
+ Animation_MorphToLoop(&this->skelAnime, &gWolfosRunAnim, -4.0f);
this->actor.speedXZ = 6.0f;
this->actor.world.rot.y = this->actor.shape.rot.y;
this->actionFunc = func_8099357C;
diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt
index 822b19131e..c4fa65163c 100644
--- a/tools/disasm/functions.txt
+++ b/tools/disasm/functions.txt
@@ -9125,8 +9125,8 @@
0x809CA27C:("BgIcicle_Draw",),
0x809CA3F0:("EnSyatekiCrow_Init",),
0x809CA5A8:("EnSyatekiCrow_Destroy",),
- 0x809CA5D4:("EnSyatekiCrow_SetupWaitForSpawn",),
- 0x809CA67C:("EnSyatekiCrow_WaitForSpawn",),
+ 0x809CA5D4:("EnSyatekiCrow_SetupWaitForSignal",),
+ 0x809CA67C:("EnSyatekiCrow_WaitForSignal",),
0x809CA71C:("EnSyatekiCrow_SetupWaitToMove",),
0x809CA840:("EnSyatekiCrow_WaitToMove",),
0x809CA8E4:("EnSyatekiCrow_Fly",),
@@ -9876,21 +9876,21 @@
0x80A1FC50:("DmHina_Draw",),
0x80A1FE50:("EnSyatekiWf_Init",),
0x80A200A0:("EnSyatekiWf_Destroy",),
- 0x80A200E0:("func_80A200E0",),
- 0x80A201CC:("func_80A201CC",),
- 0x80A20284:("func_80A20284",),
- 0x80A2030C:("func_80A2030C",),
- 0x80A20320:("func_80A20320",),
- 0x80A20378:("func_80A20378",),
- 0x80A203DC:("func_80A203DC",),
- 0x80A20670:("func_80A20670",),
- 0x80A206DC:("func_80A206DC",),
- 0x80A20710:("func_80A20710",),
- 0x80A2075C:("func_80A2075C",),
- 0x80A2079C:("func_80A2079C",),
- 0x80A20800:("func_80A20800",),
- 0x80A20858:("func_80A20858",),
- 0x80A208F8:("func_80A208F8",),
+ 0x80A200E0:("EnSyatekiWf_InitPathStart",),
+ 0x80A201CC:("EnSyatekiWf_SetupWaitForSignal",),
+ 0x80A20284:("EnSyatekiWf_WaitForSignal",),
+ 0x80A2030C:("EnSyatekiWf_SetupWaitToMove",),
+ 0x80A20320:("EnSyatekiWf_WaitToMove",),
+ 0x80A20378:("EnSyatekiWf_SetupRun",),
+ 0x80A203DC:("EnSyatekiWf_Run",),
+ 0x80A20670:("EnSyatekiWf_SetupJump",),
+ 0x80A206DC:("EnSyatekiWf_Jump",),
+ 0x80A20710:("EnSyatekiWf_SetupLand",),
+ 0x80A2075C:("EnSyatekiWf_Land",),
+ 0x80A2079C:("EnSyatekiWf_SetupHowl",),
+ 0x80A20800:("EnSyatekiWf_Howl",),
+ 0x80A20858:("EnSyatekiWf_SetupDead",),
+ 0x80A208F8:("EnSyatekiWf_Dead",),
0x80A20A50:("EnSyatekiWf_Update",),
0x80A20CF4:("EnSyatekiWf_OverrideLimbDraw",),
0x80A20D10:("EnSyatekiWf_PostLimbDraw",),
@@ -10063,10 +10063,10 @@
0x80A2B390:("BgDblueMovebg_Draw",),
0x80A2BC00:("EnSyatekiDekunuts_Init",),
0x80A2BE28:("EnSyatekiDekunuts_Destroy",),
- 0x80A2BE54:("EnSyatekiDekunuts_SetupWaitForSpawn",),
- 0x80A2BF18:("EnSyatekiDekunuts_WaitForSpawn",),
- 0x80A2BFC4:("EnSyatekiDekunuts_SetupSpawn",),
- 0x80A2C0F8:("EnSyatekiDekunuts_Spawn",),
+ 0x80A2BE54:("EnSyatekiDekunuts_SetupWaitForSignal",),
+ 0x80A2BF18:("EnSyatekiDekunuts_WaitForSignal",),
+ 0x80A2BFC4:("EnSyatekiDekunuts_SetupWaitToStart",),
+ 0x80A2C0F8:("EnSyatekiDekunuts_WaitToStart",),
0x80A2C150:("EnSyatekiDekunuts_SetupWaitToEmerge",),
0x80A2C168:("EnSyatekiDekunuts_WaitToEmerge",),
0x80A2C1AC:("EnSyatekiDekunuts_SetupEmerge",),
diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt
index f74ea0a5f6..16dcf55afc 100644
--- a/tools/disasm/variables.txt
+++ b/tools/disasm/variables.txt
@@ -10954,13 +10954,13 @@
0x80A20EA0:("D_80A20EA0","UNK_TYPE1","",0x1),
0x80A20EAC:("D_80A20EAC","UNK_PTR","",0x4),
0x80A20EB0:("D_80A20EB0","UNK_TYPE1","",0x1),
- 0x80A20EDC:("D_80A20EDC","UNK_TYPE1","",0x1),
- 0x80A20EE8:("D_80A20EE8","UNK_TYPE1","",0x1),
+ 0x80A20EDC:("sVelocity","UNK_TYPE1","",0x1),
+ 0x80A20EE8:("sAccel","UNK_TYPE1","",0x1),
0x80A20EF4:("En_Syateki_Wf_InitVars","UNK_TYPE1","",0x1),
0x80A20F14:("D_80A20F14","UNK_PTR","",0x4),
0x80A20FBC:("D_80A20FBC","UNK_TYPE1","",0x1),
- 0x80A20FC4:("D_80A20FC4","UNK_TYPE4","",0x4),
- 0x80A20FD0:("D_80A20FD0","UNK_TYPE1","",0x1),
+ 0x80A20FC4:("sFireVelocityAndAccel","UNK_TYPE4","",0x4),
+ 0x80A20FD0:("sTailColliderOffset","UNK_TYPE1","",0x1),
0x80A20FDC:("D_80A20FDC","UNK_TYPE1","",0x1),
0x80A20FF0:("D_80A20FF0","f32","",0x4),
0x80A229F0:("Obj_Skateblock_InitVars","UNK_TYPE1","",0x1),