Fix auto jump for ladders; overhang cleanup

This commit is contained in:
Sezz 2022-02-26 23:08:48 +11:00
parent a0cbf296a3
commit ad9dfb2ec2
5 changed files with 301 additions and 289 deletions

View file

@ -114,8 +114,6 @@ void lara_as_auto_jump(ITEM_INFO* item, COLL_INFO* coll)
coll->Setup.EnableObjectPush = false;
coll->Setup.EnableSpasm = false;
info->Control.CalculatedJumpVelocity = -3 - sqrt(-9600 - 12 * std::max<int>(info->ProjectedFloorHeight - item->Position.yPos, -CLICK(7.5f)));
// Disable smooth angle adjustment for now.
//if (info->Control.ApproachTargetAngle)
// ApproachLaraTargetAngle(item, coll->NearestLedgeAngle, 2.5f);

View file

@ -320,6 +320,7 @@ void SetLaraVault(ITEM_INFO* item, COLL_INFO* coll, VaultTestResult vaultResult)
auto* info = GetLaraInfo(item);
info->ProjectedFloorHeight = vaultResult.Height;
info->Control.CalculatedJumpVelocity = -3 - sqrt(-9600 - 12 * std::max<int>(info->ProjectedFloorHeight - item->Position.yPos, -CLICK(7.5f)));
info->Control.HandStatus = vaultResult.SetBusyHands ? HandStatus::Busy : info->Control.HandStatus;
info->Control.TurnRate = 0;

File diff suppressed because it is too large Load diff

View file

@ -4,22 +4,22 @@
struct ITEM_INFO;
struct COLL_INFO;
void lara_col_slopeclimb(ITEM_INFO* lara, COLL_INFO* coll);
void lara_as_slopeclimb(ITEM_INFO* lara, COLL_INFO* coll);
void lara_as_slopefall(ITEM_INFO* lara, COLL_INFO* coll);
void lara_col_slopehang(ITEM_INFO* lara, COLL_INFO* coll);
void lara_as_slopehang(ITEM_INFO* lara, COLL_INFO* coll);
void lara_col_slopeshimmy(ITEM_INFO* lara, COLL_INFO* coll);
void lara_as_slopeshimmy(ITEM_INFO* lara, COLL_INFO* coll);
void lara_as_slopeclimbup(ITEM_INFO* lara, COLL_INFO* coll);
void lara_as_slopeclimbdown(ITEM_INFO* lara, COLL_INFO* coll);
void lara_as_sclimbstart(ITEM_INFO* lara, COLL_INFO* coll);
void lara_as_sclimbstop(ITEM_INFO* lara, COLL_INFO* coll);
void lara_as_sclimbend(ITEM_INFO* lara, COLL_INFO* coll);
void lara_col_slopeclimb(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_slopeclimb(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_slopefall(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_slopehang(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_slopehang(ITEM_INFO* item, COLL_INFO* coll);
void lara_col_slopeshimmy(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_slopeshimmy(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_slopeclimbup(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_slopeclimbdown(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_sclimbstart(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_sclimbstop(ITEM_INFO* item, COLL_INFO* coll);
void lara_as_sclimbend(ITEM_INFO* item, COLL_INFO* coll);
void SlopeHangExtra(ITEM_INFO* lara, COLL_INFO* coll);
void SlopeReachExtra(ITEM_INFO* lara, COLL_INFO* coll);
void SlopeClimbExtra(ITEM_INFO* lara, COLL_INFO* coll);
void SlopeClimbDownExtra(ITEM_INFO* lara, COLL_INFO* coll);
void SlopeMonkeyExtra(ITEM_INFO* lara, COLL_INFO* coll);
void LadderMonkeyExtra(ITEM_INFO* lara, COLL_INFO* coll);
void SlopeHangExtra(ITEM_INFO* item, COLL_INFO* coll);
void SlopeReachExtra(ITEM_INFO* item, COLL_INFO* coll);
void SlopeClimbExtra(ITEM_INFO* item, COLL_INFO* coll);
void SlopeClimbDownExtra(ITEM_INFO* item, COLL_INFO* coll);
void SlopeMonkeyExtra(ITEM_INFO* item, COLL_INFO* coll);
void LadderMonkeyExtra(ITEM_INFO* item, COLL_INFO* coll);

View file

@ -2113,6 +2113,7 @@ bool TestAndDoLaraLadderClimb(ITEM_INFO* item, COLL_INFO* coll)
auto vaultResult = TestLaraLadderAutoJump(item, coll);
if (vaultResult.Success)
{
// TODO: Somehow harmonise CalculatedJumpVelocity to work for both ledge and ladder auto jumps, because otherwise there will be a need for an odd workaround in the future.
info->Control.CalculatedJumpVelocity = -3 - sqrt(-9600 - 12 * std::max((vaultResult.Height - item->Position.yPos + CLICK(0.2f)), -CLICK(7.1f)));
item->AnimNumber = LA_STAND_SOLID;
item->FrameNumber = GetFrameNumber(item, 0);