Fix jump stutter on steps

This commit is contained in:
Sezz 2021-12-13 16:12:33 +11:00
parent 12bcd53336
commit 02d7433405
4 changed files with 13 additions and 14 deletions

View file

@ -68,7 +68,7 @@ void lara_as_controlled(ITEM_INFO* item, COLL_INFO* coll)
coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpaz = false;
if (item->frameNumber == TestLastFrame(item, item->animNumber) - 1)
if (item->frameNumber == g_Level.Anims[item->animNumber].frameEnd - 1)
{
info->gunStatus = LG_HANDS_FREE;
@ -97,7 +97,7 @@ void lara_as_walk_forward(ITEM_INFO* item, COLL_INFO* coll)
LaraInfo*& info = item->data;
info->jumpCount++;
if (info->jumpCount > LARA_JUMP_TIME - 4) // If anyone complains about the walk jump being nerfed, increase this value.
if (info->jumpCount > LARA_JUMP_TIME - 4)
info->jumpCount = LARA_JUMP_TIME - 4;
if (item->hitPoints <= 0)
@ -232,14 +232,15 @@ void lara_as_run_forward(ITEM_INFO* item, COLL_INFO* coll)
!item->gravityStatus &&
info->waterStatus != LW_WADE)
{
info->jumpQueued = TrInput & IN_FORWARD;
if (info->jumpCount >= LARA_JUMP_TIME)
{
item->goalAnimState = LS_JUMP_FORWARD;
return;
}
info->jumpQueued = TrInput & IN_FORWARD;
}
if (TrInput & IN_SPRINT && info->sprintTimer &&
info->waterStatus != LW_WADE)
{
@ -247,7 +248,7 @@ void lara_as_run_forward(ITEM_INFO* item, COLL_INFO* coll)
return;
}
if (TrInput & IN_ROLL &&
if (TrInput & IN_ROLL && !info->jumpQueued &&
info->waterStatus != LW_WADE)
{
item->goalAnimState = LS_ROLL_FORWARD;

View file

@ -1488,7 +1488,6 @@ bool TestLaraStepUp(ITEM_INFO* item, COLL_INFO* coll)
{
if (coll->Middle.Floor < -CLICK(0.5f) && // Lower floor bound.
coll->Middle.Floor >= -STEPUP_HEIGHT && // Upper floor bound.
coll->Middle.Floor != NO_HEIGHT &&
item->currentAnimState != LS_CRAWL_IDLE && // Crawl step up handled differently.
item->currentAnimState != LS_CRAWL_FORWARD)
{
@ -1502,7 +1501,6 @@ bool TestLaraStepDown(ITEM_INFO* item, COLL_INFO* coll)
{
if (coll->Middle.Floor > CLICK(0.5f) && // Upper floor bound.
coll->Middle.Floor <= STEPUP_HEIGHT && // Lower floor bound.
coll->Middle.Floor != NO_HEIGHT &&
item->currentAnimState != LS_CRAWL_IDLE && // Crawl step down handled differently.
item->currentAnimState != LS_CRAWL_FORWARD)
{

View file

@ -198,13 +198,13 @@ void TranslateItem(ITEM_INFO* item, int x, int y, int z)
item->pos.zPos += -s * x + c * z;
}
int GetChange(ITEM_INFO* item, ANIM_STRUCT* anim)
bool GetChange(ITEM_INFO* item, ANIM_STRUCT* anim)
{
if (item->currentAnimState == item->goalAnimState)
return 0;
return false;
if (anim->numberChanges <= 0)
return 0;
return false;
for (int i = 0; i < anim->numberChanges; i++)
{
@ -219,13 +219,13 @@ int GetChange(ITEM_INFO* item, ANIM_STRUCT* anim)
item->animNumber = range->linkAnimNum;
item->frameNumber = range->linkFrameNum;
return 1;
return true;
}
}
}
}
return 0;
return false;
}
BOUNDING_BOX* GetBoundsAccurate(ITEM_INFO* item)

View file

@ -61,7 +61,7 @@ short GetFrameNumber(short objectID, short animNumber, short frameToStart);
int GetFrameCount(short animNumber);
int GetNextAnimState(ITEM_INFO* item);
int GetNextAnimState(short objectID, short animNumber);
int GetChange(ITEM_INFO* item, ANIM_STRUCT* anim);
bool GetChange(ITEM_INFO* item, ANIM_STRUCT* anim);
int GetFrame(ITEM_INFO* item, ANIM_FRAME* framePtr[], int* rate);
ANIM_FRAME* GetBestFrame(ITEM_INFO* item);
BOUNDING_BOX* GetBoundsAccurate(ITEM_INFO* item);