diff options
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/z_player_lib.c | 3 | ||||
| -rw-r--r-- | src/code/z_skelanime.c | 7 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index 77f0cd035..391407644 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -1125,7 +1125,8 @@ s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** sCurBodyPartPos = &this->bodyPartsPos[0] - 1; if (!LINK_IS_ADULT) { - if (!(this->skelAnime.moveFlags & ANIM_FLAG_PLAYER_2) || (this->skelAnime.moveFlags & ANIM_FLAG_0)) { + if (!(this->skelAnime.moveFlags & ANIM_FLAG_PLAYER_2) || + (this->skelAnime.moveFlags & ANIM_FLAG_UPDATE_XZ)) { pos->x *= 0.64f; pos->z *= 0.64f; } diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index acc01cb74..bef23de1e 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -1838,6 +1838,7 @@ void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle) { f32 sin; f32 cos; + // If `ANIM_FLAG_UPDATE_XZ` behaved as expected, it would also be checked here if (skelAnime->moveFlags & ANIM_FLAG_NO_MOVE) { diff->x = diff->z = 0.0f; } else { @@ -1847,6 +1848,7 @@ void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle) { cos = Math_CosS(angle); diff->x = x * cos + z * sin; diff->z = z * cos - x * sin; + x = skelAnime->prevTransl.x; z = skelAnime->prevTransl.z; sin = Math_SinS(skelAnime->prevRot); @@ -1856,22 +1858,27 @@ void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle) { } skelAnime->prevRot = angle; + skelAnime->prevTransl.x = skelAnime->jointTable[0].x; skelAnime->jointTable[0].x = skelAnime->baseTransl.x; + skelAnime->prevTransl.z = skelAnime->jointTable[0].z; skelAnime->jointTable[0].z = skelAnime->baseTransl.z; + if (skelAnime->moveFlags & ANIM_FLAG_UPDATE_Y) { if (skelAnime->moveFlags & ANIM_FLAG_NO_MOVE) { diff->y = 0.0f; } else { diff->y = skelAnime->jointTable[0].y - skelAnime->prevTransl.y; } + skelAnime->prevTransl.y = skelAnime->jointTable[0].y; skelAnime->jointTable[0].y = skelAnime->baseTransl.y; } else { diff->y = 0.0f; skelAnime->prevTransl.y = skelAnime->jointTable[0].y; } + skelAnime->moveFlags &= ~ANIM_FLAG_NO_MOVE; } |
