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),