Update animation enum; fix 180 jump roll inputs; fix kayak paddle hold inputs; cleanup

This commit is contained in:
Sezz 2022-04-02 15:50:40 +11:00
parent 682faf6375
commit 395ec6052d
7 changed files with 59 additions and 51 deletions

View file

@ -1,6 +1,6 @@
-- TombEngine settings file
-- Created by MontyTRC
-- Place all the engine settings for your game in this LUA script.
-- Place all the engine settings for your game in this Lua script.
-- WARNING: Bad values could make your game unplayable; please follow reference guide attentively.
local settings = Settings.new();

View file

@ -284,7 +284,8 @@ void lara_as_run_forward(ITEM_INFO* item, CollisionInfo* coll)
SetLaraRunJumpQueue(item, coll);
}
if ((TrInput & IN_ROLL || (TrInput & IN_FORWARD && TrInput & IN_BACK)) && !lara->Control.RunJumpQueued &&
if ((TrInput & IN_ROLL || (TrInput & IN_FORWARD && TrInput & IN_BACK)) &&
!lara->Control.RunJumpQueued && // Jump queue blocks roll.
lara->Control.WaterStatus != WaterStatus::Wade)
{
item->Animation.TargetState = LS_ROLL_FORWARD;

View file

@ -97,7 +97,7 @@ void lara_as_jump_forward(ITEM_INFO* item, CollisionInfo* coll)
return;
}
if (TrInput & IN_ROLL || (TrInput & IN_FORWARD && TrInput & IN_BACK))
if (TrInput & IN_ROLL || TrInput & IN_BACK)
{
item->Animation.TargetState = LS_JUMP_ROLL_180;
return;
@ -467,7 +467,7 @@ void lara_as_jump_back(ITEM_INFO* item, CollisionInfo* coll)
return;
}
if (TrInput & IN_ROLL || (TrInput & IN_FORWARD && TrInput & IN_BACK))
if (TrInput & IN_ROLL || TrInput & IN_FORWARD)
{
item->Animation.TargetState = LS_JUMP_ROLL_180;
return;

View file

@ -516,28 +516,28 @@ enum LaraAnim
LA_CRAWL_TO_HANG_START = 289, // Crawl > hang (1/3)
LA_CRAWL_TO_HANG_CONTINUE = 290, // Crawl > hang (2/3)
// TODO: position commands in 302 may be stacked in 290, so can remove 302?
LA_CROUCH_PICKUP = 291, // Crouching pickup
LA_CRAWL_PICKUP = 292, // Crawling pickup
LA_CROUCH_HIT_BACK = 293, // Jerk back crouching from damage
LA_CROUCH_HIT_FRONT = 294, // Jerk forward crouching from damage
LA_CROUCH_HIT_LEFT = 295, // Jerk right crouching from damage
LA_CROUCH_HIT_RIGHT = 296, // Jerk left crouching from damage
LA_CRAWL_HIT_BACK = 297, // Jerk forward crawling from damage
LA_CRAWL_HIT_FRONT = 298, // Jerk back crawling from damage
LA_CRAWL_HIT_LEFT = 299, // Jerk left crawling from damage
LA_CRAWL_HIT_RIGHT = 300, // Jerk right crawling from damage
LA_CRAWL_DEATH = 301, // Crawl death
LA_CRAWL_TO_HANG_END = 302, // Crawl > hang (3/3)
LA_STAND_TO_CROUCH_ABORT = 303, // Stand > crouch abort
LA_RUN_TO_CROUCH_LEFT_START = 304, // Run > crouch, left foot first (1/2)
LA_RUN_TO_CROUCH_RIGHT_START = 305, // Run > crouch, right foot first (1/2)
LA_RUN_TO_CROUCH_LEFT_END = 306, // Run > crouch, left foot first (2/2)
LA_RUN_TO_CROUCH_RIGHT_END = 307, // Run > crouch, right foot first (2/2)
LA_SPRINT_ROLL_TO_RUN_RIGHT_START = 308, // Sprint roll, right foot first > run (2/2)
LA_SPRINT_ROLL_TO_RUN_RIGHT_END = 309, // Sprint roll, right foot first > run (2/2)
LA_SPRINT_TO_CROUCH_LEFT = 310, // Sprint roll, left foot first > crouch
LA_SPRINT_TO_CROUCH_RIGHT = 311, // Sprint roll, right foot first > crouch
LA_CROUCH_PICKUP_FLARE = 312, // Pickup flare crouching
LA_CROUCH_PICKUP = 291, // Crouching pickup
LA_CRAWL_PICKUP = 292, // Crawling pickup
LA_CROUCH_HIT_BACK = 293, // Jerk back crouching from damage
LA_CROUCH_HIT_FRONT = 294, // Jerk forward crouching from damage
LA_CROUCH_HIT_LEFT = 295, // Jerk right crouching from damage
LA_CROUCH_HIT_RIGHT = 296, // Jerk left crouching from damage
LA_CRAWL_HIT_BACK = 297, // Jerk forward crawling from damage
LA_CRAWL_HIT_FRONT = 298, // Jerk back crawling from damage
LA_CRAWL_HIT_LEFT = 299, // Jerk left crawling from damage
LA_CRAWL_HIT_RIGHT = 300, // Jerk right crawling from damage
LA_CRAWL_DEATH = 301, // Crawl death
LA_CRAWL_TO_HANG_END = 302, // Crawl > hang (3/3)
LA_STAND_TO_CROUCH_ABORT = 303, // Stand > crouch abort
LA_RUN_TO_CROUCH_LEFT_START = 304, // Run > crouch, left foot first (1/2)
LA_RUN_TO_CROUCH_RIGHT_START = 305, // Run > crouch, right foot first (1/2)
LA_RUN_TO_CROUCH_LEFT_END = 306, // Run > crouch, left foot first (2/2)
LA_RUN_TO_CROUCH_RIGHT_END = 307, // Run > crouch, right foot first (2/2)
LA_SPRINT_ROLL_TO_RUN_RIGHT_START = 308, // Sprint roll, right foot first > run (2/2)
LA_SPRINT_ROLL_TO_RUN_RIGHT_END = 309, // Sprint roll, right foot first > run (2/2)
LA_SPRINT_TO_CROUCH_LEFT = 310, // Sprint roll, left foot first > crouch
LA_SPRINT_TO_CROUCH_RIGHT = 311, // Sprint roll, right foot first > crouch
LA_CROUCH_PICKUP_FLARE = 312, // Pickup flare crouching
// TR4
LA_DOOR_OPEN_PUSH = 313, // Push door open using doorknob
@ -787,9 +787,21 @@ enum LaraAnim
LA_RUN_TO_STAND_LEFT_SOFT = 545,
LA_RUN_TO_STAND_RIGHT_SOFT = 546,
LA_MONKEY_JUMP_START = 547,
LA_MONKEY_JUMP = 548,
LA_MONKEY_JUMP_CONTINUE = 548,
LA_SPRINT_JUMP_LEFT_START = 549,
LA_SPRINT_JUMP_LEFT_CONTINUE = 550,
LA_SPRINT_JUMP_LEFT_TO_REACH_1 = 551,
LA_SPRINT_JUMP_LEFT_TO_REACH_2 = 552,
LA_SPRINT_JUMP_LEFT_TO_REACH_3 = 553,
LA_SPRINT_JUMP_LEFT_TO_REACH_4 = 554,
LA_SPRINT_JUMP_RIGHT_START = 555,
LA_SPRINT_JUMP_RIGHT_CONTINUE = 556,
LA_SPRINT_JUMP_RIGHT_TO_REACH_1 = 557,
LA_SPRINT_JUMP_RIGHT_TO_REACH_2 = 558,
LA_SPRINT_JUMP_RIGHT_TO_REACH_3 = 559,
LA_SPRINT_JUMP_RIGHT_TO_REACH_4 = 560,
NUM_LARA_ANIMS
NUM_LARA_ANIMS,
// TRASHED ANIMS (please reuse slots before going any higher and remove entries from this list as you go):
// 102

View file

@ -45,7 +45,7 @@ struct CrawlVaultTestSetup
int GapMin;
int CrossDist;
int DestDist;
int MaxProbeHeightDif;
int FloorBound;
bool CheckSlope = true;
bool CheckDeath = true;
};

View file

@ -2150,14 +2150,14 @@ CrawlVaultTestResult TestLaraCrawlVaultTolerance(ITEM_INFO* item, CollisionInfo*
return CrawlVaultTestResult{ false };
// Assess crawl vault feasibility to location ahead.
if ((probeA.Position.Floor - y) <= testSetup.LowerFloorBound && // Within lower floor bound.
(probeA.Position.Floor - y) >= testSetup.UpperFloorBound && // Within upper floor bound.
abs(probeA.Position.Ceiling - probeA.Position.Floor) > testSetup.ClampMin && // Crossing clamp limit.
abs(probeB.Position.Ceiling - probeB.Position.Floor) > testSetup.ClampMin && // Destination clamp limit.
abs(probeMiddle.Position.Ceiling - probeA.Position.Floor) >= testSetup.GapMin && // Gap is optically permissive (going up).
abs(probeA.Position.Ceiling - probeMiddle.Position.Floor) >= testSetup.GapMin && // Gap is optically permissive (going down).
abs(probeA.Position.Floor - probeB.Position.Floor) <= testSetup.MaxProbeHeightDif && // Crossing/destination floor height difference suggests continuous crawl surface.
(probeA.Position.Ceiling - y) < -testSetup.GapMin) // Ceiling height is permissive.
if ((probeA.Position.Floor - y) <= testSetup.LowerFloorBound && // Within lower floor bound.
(probeA.Position.Floor - y) >= testSetup.UpperFloorBound && // Within upper floor bound.
abs(probeA.Position.Ceiling - probeA.Position.Floor) > testSetup.ClampMin && // Crossing clamp limit.
abs(probeB.Position.Ceiling - probeB.Position.Floor) > testSetup.ClampMin && // Destination clamp limit.
abs(probeMiddle.Position.Ceiling - probeA.Position.Floor) >= testSetup.GapMin && // Gap is optically permissive (going up).
abs(probeA.Position.Ceiling - probeMiddle.Position.Floor) >= testSetup.GapMin && // Gap is optically permissive (going down).
abs(probeA.Position.Floor - probeB.Position.Floor) <= testSetup.FloorBound && // Crossing/destination floor height difference suggests continuous crawl surface.
(probeA.Position.Ceiling - y) < -testSetup.GapMin) // Ceiling height is permissive.
{
return CrawlVaultTestResult{ true };
}

View file

@ -60,6 +60,7 @@ using std::vector;
#define KAYAK_IN_BACK IN_BACK
#define KAYAK_IN_LEFT IN_LEFT
#define KAYAK_IN_RIGHT IN_RIGHT
#define KAYAK_IN_HOLD IN_WALK
#define KAYAK_IN_HOLD_LEFT IN_LSTEP
#define KAYAK_IN_HOLD_RIGHT IN_RSTEP
#define KAYAK_IN_DISMOUNT (IN_JUMP | IN_ROLL)
@ -416,12 +417,8 @@ void KayakDoCurrent(ITEM_INFO* laraItem, ITEM_INFO* kayakItem)
{
int sinkval = lara->WaterCurrentActive - 1;
Vector3Int target;
target.x = g_Level.Sinks[sinkval].x;
target.y = g_Level.Sinks[sinkval].y;
target.z = g_Level.Sinks[sinkval].z;
int angle = (((mGetAngle(target.x, target.z, laraItem->Pose.Position.x, laraItem->Pose.Position.z) - ANGLE(90))) / 16) & 4095;
auto target = Vector3Int(g_Level.Sinks[sinkval].x, g_Level.Sinks[sinkval].y, g_Level.Sinks[sinkval].z);
int angle = (((mGetAngle(target.x, target.z, laraItem->Pose.Position.x, laraItem->Pose.Position.z) - ANGLE(90.0f))) / 16) & 4095;
int dx = target.x - laraItem->Pose.Position.x;
int dz = target.z - laraItem->Pose.Position.z;
@ -791,17 +788,15 @@ void KayakUserInput(ITEM_INFO* laraItem, ITEM_INFO* kayakItem)
kayak->Forward = false;
}
else if (TrInput & KAYAK_IN_HOLD_LEFT &&
else if ((TrInput & KAYAK_IN_HOLD_LEFT || (TrInput & KAYAK_IN_HOLD && TrInput & KAYAK_IN_LEFT)) &&
(kayak->Velocity ||
lara->WaterCurrentPull.x ||
lara->WaterCurrentPull.z))
lara->WaterCurrentPull.x || lara->WaterCurrentPull.z))
{
laraItem->Animation.TargetState = KAYAK_STATE_HOLD_LEFT;
}
else if (TrInput & KAYAK_IN_HOLD_RIGHT &&
else if ((TrInput & KAYAK_IN_HOLD_RIGHT || (TrInput & KAYAK_IN_HOLD && TrInput & KAYAK_IN_RIGHT)) &&
(kayak->Velocity ||
lara->WaterCurrentPull.x ||
lara->WaterCurrentPull.z))
lara->WaterCurrentPull.x || lara->WaterCurrentPull.z))
{
laraItem->Animation.TargetState = KAYAK_STATE_HOLD_RIGHT;
}
@ -956,7 +951,7 @@ void KayakUserInput(ITEM_INFO* laraItem, ITEM_INFO* kayakItem)
break;
case KAYAK_STATE_HOLD_LEFT:
if (!(TrInput & KAYAK_IN_HOLD_LEFT) ||
if (!(TrInput & KAYAK_IN_HOLD_LEFT || (TrInput & KAYAK_IN_HOLD && TrInput & KAYAK_IN_LEFT)) ||
(!kayak->Velocity &&
!lara->WaterCurrentPull.x &&
!lara->WaterCurrentPull.z))
@ -992,7 +987,7 @@ void KayakUserInput(ITEM_INFO* laraItem, ITEM_INFO* kayakItem)
break;
case KAYAK_STATE_HOLD_RIGHT:
if (!(TrInput & KAYAK_IN_HOLD_RIGHT) ||
if (!(TrInput & KAYAK_IN_HOLD_RIGHT || (TrInput & KAYAK_IN_HOLD && TrInput & KAYAK_IN_RIGHT)) ||
(!kayak->Velocity &&
!lara->WaterCurrentPull.x &&
!lara->WaterCurrentPull.z))