diff --git a/TR5Main/Game/Lara/lara_hang.cpp b/TR5Main/Game/Lara/lara_hang.cpp index 6a143f8c7..2da8b83a3 100644 --- a/TR5Main/Game/Lara/lara_hang.cpp +++ b/TR5Main/Game/Lara/lara_hang.cpp @@ -93,7 +93,7 @@ void lara_col_hang(ITEM_INFO* item, COLL_INFO* coll) TestLaraHang(item, coll); - if (TestLastFrame(item, LA_REACH_TO_HANG)) + if (item->animNumber == LA_REACH_TO_HANG) { TestForObjectOnLedge(item, coll); @@ -149,7 +149,7 @@ void lara_col_hang(ITEM_INFO* item, COLL_INFO* coll) { item->goalAnimState = LS_LADDER_IDLE; } - else + else if (TestLastFrame(item)) { item->animNumber = LA_LADDER_SHIMMY_UP; item->frameNumber = g_Level.Anims[item->animNumber].frameBase; @@ -170,7 +170,7 @@ void lara_col_hang(ITEM_INFO* item, COLL_INFO* coll) { item->goalAnimState = LS_LADDER_IDLE; } - else + else if (TestLastFrame(item)) { item->animNumber = LA_LADDER_SHIMMY_DOWN; item->goalAnimState = LS_HANG; diff --git a/TR5Main/Game/animation.cpp b/TR5Main/Game/animation.cpp index bdc7cba08..ef8e83472 100644 --- a/TR5Main/Game/animation.cpp +++ b/TR5Main/Game/animation.cpp @@ -323,7 +323,7 @@ void ClampRotation(PHD_3DPOS* pos, short angle, short rot) bool TestLastFrame(ITEM_INFO* item, short animNumber) { - if (item->animNumber != animNumber) + if ((animNumber >= 0) && (item->animNumber != animNumber)) return false; ANIM_STRUCT* anim = &g_Level.Anims[item->animNumber]; diff --git a/TR5Main/Game/animation.h b/TR5Main/Game/animation.h index ba7028d78..b5fa02707 100644 --- a/TR5Main/Game/animation.h +++ b/TR5Main/Game/animation.h @@ -62,7 +62,7 @@ BOUNDING_BOX* GetBoundsAccurate(ITEM_INFO* item); void GetLaraJointPosition(PHD_VECTOR* pos, int LM_enum); void GetJointAbsPosition(ITEM_INFO* item, PHD_VECTOR* vec, int joint); void ClampRotation(PHD_3DPOS* pos, short angle, short rot); -bool TestLastFrame(ITEM_INFO* item, short animNumber); +bool TestLastFrame(ITEM_INFO* item, short animNumber = -1); void DrawAnimatingItem(ITEM_INFO* item);