mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-04-28 15:57:59 +03:00
Address remaining PR #377 comments; fix pickups in crouch and crawl states; simplify step function
This commit is contained in:
parent
155884892b
commit
7c01d050a4
15 changed files with 185 additions and 198 deletions
|
@ -19,7 +19,7 @@ local anims = Animations.new();
|
|||
anims.crawlExtended = true;
|
||||
anims.crouchRoll = true;
|
||||
anims.crawlspaceSwandive = true;
|
||||
anims.monkeyReverse = true;
|
||||
anims.monkeyTurn180 = true;
|
||||
anims.monkeyAutoJump = false;
|
||||
anims.oscillateHang = true;
|
||||
anims.pose = false;
|
||||
|
|
|
@ -75,7 +75,7 @@ function<LaraRoutineFunction> lara_control_routines[NUM_LARA_STATES + 1] =
|
|||
lara_as_walk_back,//16
|
||||
lara_as_swim,//17
|
||||
lara_as_glide,//18
|
||||
lara_as_controlledl,//19
|
||||
lara_as_controlled_no_look,//19
|
||||
lara_as_turn_right_fast,//20
|
||||
lara_as_step_right,//21
|
||||
lara_as_step_left,//22
|
||||
|
@ -143,16 +143,16 @@ function<LaraRoutineFunction> lara_control_routines[NUM_LARA_STATES + 1] =
|
|||
lara_as_crawl_turn_left,//84
|
||||
lara_as_crawl_turn_right,//85
|
||||
lara_as_crawl_back,//86
|
||||
lara_as_controlledl,
|
||||
lara_as_controlledl,
|
||||
lara_as_controlled_no_look,
|
||||
lara_as_controlled_no_look,
|
||||
lara_as_controlled,
|
||||
lara_as_ropel,
|
||||
lara_as_roper,
|
||||
lara_as_controlled,
|
||||
lara_as_controlled,
|
||||
lara_as_controlled,
|
||||
lara_as_controlledl,
|
||||
lara_as_controlledl,
|
||||
lara_as_controlled_no_look,
|
||||
lara_as_controlled_no_look,
|
||||
lara_as_controlled,
|
||||
lara_as_pickup,//98
|
||||
lara_as_pole_idle,//99
|
||||
|
@ -176,7 +176,7 @@ function<LaraRoutineFunction> lara_control_routines[NUM_LARA_STATES + 1] =
|
|||
lara_as_controlled,
|
||||
lara_as_swimcheat,
|
||||
lara_as_trpose,//119
|
||||
lara_as_controlledl,//120
|
||||
lara_as_controlled_no_look,//120
|
||||
lara_as_trwalk,//121
|
||||
lara_as_trfall,//122
|
||||
lara_as_trfall,//123
|
||||
|
@ -191,8 +191,8 @@ function<LaraRoutineFunction> lara_control_routines[NUM_LARA_STATES + 1] =
|
|||
lara_as_parallelbars,//128
|
||||
lara_as_pbleapoff,//129
|
||||
lara_as_null,//130
|
||||
lara_as_controlledl,//131
|
||||
lara_as_controlledl,//132
|
||||
lara_as_controlled_no_look,//131
|
||||
lara_as_controlled_no_look,//132
|
||||
lara_as_null,//133
|
||||
lara_as_null,//134
|
||||
lara_as_null,//135
|
||||
|
@ -206,7 +206,7 @@ function<LaraRoutineFunction> lara_control_routines[NUM_LARA_STATES + 1] =
|
|||
lara_as_null,// 143 - Unused
|
||||
lara_as_null,// 144 - Unused
|
||||
lara_as_null,// 145 - Unused
|
||||
lara_as_controlledl,
|
||||
lara_as_controlled_no_look,
|
||||
lara_as_null,
|
||||
lara_as_null,
|
||||
lara_as_null,
|
||||
|
@ -223,7 +223,7 @@ function<LaraRoutineFunction> lara_collision_routines[NUM_LARA_STATES + 1] = {
|
|||
lara_col_run_forward,
|
||||
lara_col_idle,
|
||||
lara_col_forwardjump,
|
||||
lara_col_pose,
|
||||
lara_col_idle,//4
|
||||
lara_col_run_back,
|
||||
lara_col_turn_right_slow,
|
||||
lara_col_turn_left_slow,
|
||||
|
@ -745,18 +745,17 @@ void LaraAboveWater(ITEM_INFO* item, COLL_INFO* coll)
|
|||
coll->Setup.DeathFlagIsPit = false;
|
||||
coll->Setup.Mode = COLL_PROBE_MODE::QUADRANTS;
|
||||
|
||||
info->isDucked = coll->Setup.Height < LARA_HEIGHT; // TEMP HACK: Look feature will need a dedicated refactor; ResetLook() interferes with crawl flexing. @Sezz 2021.12.10
|
||||
coll->Setup.Radius = LARA_RAD;
|
||||
coll->Setup.Height = LARA_HEIGHT;
|
||||
|
||||
if (TrInput & IN_LOOK && info->look &&
|
||||
info->ExtraAnim == NO_ITEM)
|
||||
{
|
||||
LookLeftRight();
|
||||
}
|
||||
else if (!info->isDucked)
|
||||
else if (coll->Setup.Height > LARA_HEIGHT - LARA_HEADROOM) // TEMP HACK: Look feature will need a dedicated refactor; ResetLook() interferes with crawl flexing. @Sezz 2021.12.10
|
||||
ResetLook(item);
|
||||
|
||||
// TODO: Move radius and height default resets above look checks when
|
||||
coll->Setup.Radius = LARA_RAD;
|
||||
coll->Setup.Height = LARA_HEIGHT;
|
||||
info->look = true;
|
||||
|
||||
UpdateItemRoom(item, -LARA_HEIGHT / 2);
|
||||
|
|
|
@ -4,8 +4,6 @@
|
|||
struct ITEM_INFO;
|
||||
struct COLL_INFO;
|
||||
|
||||
// TODO: Rename these to be consistent and define state-specific rates.
|
||||
// State code seems to cherry-pick whatever is handy. @Sezz 2021.09.27
|
||||
#define LARA_GRAB_THRESHOLD ANGLE(35.0f)
|
||||
#define FRONT_ARC ANGLE(90.0f) // TODO: Check use.
|
||||
|
||||
|
@ -16,26 +14,26 @@ struct COLL_INFO;
|
|||
// Turn rates
|
||||
#define LARA_TURN_RATE ANGLE(2.25f)
|
||||
#define LARA_CRAWL_MOVE_TURN_RATE ANGLE(2.15f)
|
||||
#define SUB_SUIT_TURN_RATE ANGLE(0.75f)
|
||||
#define LARA_POLE_TURN_RATE ANGLE(2.25f)
|
||||
#define LARA_SUBSUIT_TURN_RATE ANGLE(0.75f)
|
||||
|
||||
// Turn rate maxes
|
||||
#define LARA_SLOW_TURN ANGLE(4.0f)
|
||||
#define LARA_SLOW_MED_TURN ANGLE(5.0f)
|
||||
#define LARA_MED_TURN ANGLE(6.0f)
|
||||
#define LARA_MED_FAST_TURN ANGLE(7.0f)
|
||||
#define LARA_FAST_TURN ANGLE(8.0f)
|
||||
#define LARA_SLOW_TURN_MAX ANGLE(4.0f)
|
||||
#define LARA_SLOW_MED_TURN_MAX ANGLE(5.0f)
|
||||
#define LARA_MED_TURN_MAX ANGLE(6.0f)
|
||||
#define LARA_MED_FAST_TURN_MAX ANGLE(7.0f)
|
||||
#define LARA_FAST_TURN_MAX ANGLE(8.0f)
|
||||
#define LARA_WADE_TURN_MAX ANGLE(5.5f)
|
||||
#define LARA_SWAMP_TURN_MAX ANGLE(2.0f)
|
||||
#define LARA_JUMP_TURN ANGLE(3.0f)
|
||||
#define LARA_CRAWL_TURN ANGLE(2.0f)
|
||||
#define LARA_CRAWL_MOVE_TURN ANGLE(3.75f)
|
||||
#define LARA_CROUCH_ROLL_TURN ANGLE(2.75f)
|
||||
#define LARA_JUMP_TURN_MAX ANGLE(3.0f)
|
||||
#define LARA_CRAWL_TURN_MAX ANGLE(2.0f)
|
||||
#define LARA_CRAWL_MOVE_TURN_MAX ANGLE(3.75f)
|
||||
#define LARA_CROUCH_ROLL_TURN_MAX ANGLE(2.75f)
|
||||
#define LARA_POLE_TURN_MAX ANGLE(4.5f)
|
||||
|
||||
// Flex rates
|
||||
#define LARA_CRAWL_FLEX ANGLE(40.0f) / 2 // 2 = hardcoded number of bones to flex (head and torso).
|
||||
#define LARA_CRAWL_FLEX_RATE ANGLE(2.25f)
|
||||
#define LARA_CRAWL_FLEX_MAX_RATE ANGLE(2.25f)
|
||||
#define LARA_CRAWL_FLEX_MAX ANGLE(40.0f) / 2 // 2 = hardcoded number of bones to flex (head and torso).
|
||||
|
||||
constexpr auto LARA_HEIGHT = CLICK(3) - 1; // Lara height in standard states.
|
||||
constexpr auto LARA_HEIGHT_CRAWL = 350; // Lara height in crawl states.
|
||||
|
|
|
@ -77,7 +77,7 @@ void lara_as_controlled(ITEM_INFO* item, COLL_INFO* coll)
|
|||
}
|
||||
}
|
||||
|
||||
void lara_as_controlledl(ITEM_INFO* item, COLL_INFO* coll)
|
||||
void lara_as_controlled_no_look(ITEM_INFO* item, COLL_INFO* coll)
|
||||
{
|
||||
LaraInfo*& info = item->data;
|
||||
|
||||
|
@ -97,8 +97,8 @@ void lara_as_walk_forward(ITEM_INFO* item, COLL_INFO* coll)
|
|||
LaraInfo*& info = item->data;
|
||||
|
||||
info->jumpCount++;
|
||||
if (info->jumpCount > LARA_JUMP_TIME / 2 + 4) // If anyone complains about the walk jump being nerfed, increase this value.
|
||||
info->jumpCount = LARA_JUMP_TIME / 2 + 4;
|
||||
if (info->jumpCount > LARA_JUMP_TIME - 4) // If anyone complains about the walk jump being nerfed, increase this value.
|
||||
info->jumpCount = LARA_JUMP_TIME - 4;
|
||||
|
||||
if (item->hitPoints <= 0)
|
||||
{
|
||||
|
@ -114,16 +114,16 @@ void lara_as_walk_forward(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_SLOW_TURN)
|
||||
info->turnRate = -LARA_SLOW_TURN;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, -LARA_LEAN_MAX / 3, LARA_LEAN_RATE / 6);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_SLOW_TURN)
|
||||
info->turnRate = LARA_SLOW_TURN;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, LARA_LEAN_MAX / 3, LARA_LEAN_RATE / 6);
|
||||
}
|
||||
|
@ -214,16 +214,16 @@ void lara_as_run_forward(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_FAST_TURN)
|
||||
info->turnRate = -LARA_FAST_TURN;
|
||||
if (info->turnRate < -LARA_FAST_TURN_MAX)
|
||||
info->turnRate = -LARA_FAST_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, -LARA_LEAN_MAX, LARA_LEAN_RATE);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_FAST_TURN)
|
||||
info->turnRate = LARA_FAST_TURN;
|
||||
if (info->turnRate > LARA_FAST_TURN_MAX)
|
||||
info->turnRate = LARA_FAST_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, LARA_LEAN_MAX, LARA_LEAN_RATE);
|
||||
}
|
||||
|
@ -341,7 +341,7 @@ void lara_col_run_forward(ITEM_INFO* item, COLL_INFO* coll)
|
|||
}
|
||||
}
|
||||
|
||||
// State: LS_IDLE (2)
|
||||
// State: LS_IDLE (2), LS_POSE (4)
|
||||
// Collision: lara_col_idle()
|
||||
void lara_as_idle(ITEM_INFO* item, COLL_INFO* coll)
|
||||
{
|
||||
|
@ -374,15 +374,15 @@ void lara_as_idle(ITEM_INFO* item, COLL_INFO* coll)
|
|||
!(TrInput & IN_JUMP)) // JUMP locks y rotation.
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_SLOW_TURN)
|
||||
info->turnRate = -LARA_SLOW_TURN;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
else if (TrInput & IN_RIGHT &&
|
||||
!(TrInput & IN_JUMP))
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_SLOW_TURN)
|
||||
info->turnRate = LARA_SLOW_TURN;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
|
||||
if (info->waterStatus == LW_WADE)
|
||||
|
@ -467,7 +467,7 @@ void lara_as_idle(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
if (TrInput & IN_SPRINT ||
|
||||
info->turnRate <= -LARA_SLOW_TURN ||
|
||||
info->turnRate <= -LARA_SLOW_TURN_MAX ||
|
||||
(info->gunStatus == LG_READY && info->gunType != WEAPON_TORCH) ||
|
||||
(info->gunStatus == LG_DRAW_GUNS && info->gunType != WEAPON_FLARE))
|
||||
{
|
||||
|
@ -481,7 +481,7 @@ void lara_as_idle(ITEM_INFO* item, COLL_INFO* coll)
|
|||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
if (TrInput & IN_SPRINT ||
|
||||
info->turnRate >= LARA_SLOW_TURN ||
|
||||
info->turnRate >= LARA_SLOW_TURN_MAX ||
|
||||
(info->gunStatus == LG_READY && info->gunType != WEAPON_TORCH) ||
|
||||
(info->gunStatus == LG_DRAW_GUNS && info->gunType != WEAPON_FLARE))
|
||||
{
|
||||
|
@ -639,7 +639,7 @@ void lara_col_idle(ITEM_INFO* item, COLL_INFO* coll)
|
|||
}
|
||||
|
||||
// State: LS_POSE (4)
|
||||
// Control: lara_col_pose()
|
||||
// Collision: lara_col_idle()
|
||||
void lara_as_pose(ITEM_INFO* item, COLL_INFO* coll)
|
||||
{
|
||||
if (item->hitPoints <= 0)
|
||||
|
@ -672,13 +672,6 @@ void lara_as_pose(ITEM_INFO* item, COLL_INFO* coll)
|
|||
item->goalAnimState = LS_IDLE;
|
||||
}
|
||||
|
||||
// State: LS_POSE (4)
|
||||
// Control: lara_as_pose()
|
||||
void lara_col_pose(ITEM_INFO* item, COLL_INFO* coll)
|
||||
{
|
||||
lara_col_idle(item, coll);
|
||||
}
|
||||
|
||||
// State: LS_RUN_BACK (5)
|
||||
// Collision: lara_col_run_back()
|
||||
void lara_as_run_back(ITEM_INFO* item, COLL_INFO* coll)
|
||||
|
@ -688,16 +681,16 @@ void lara_as_run_back(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_MED_TURN)
|
||||
info->turnRate = -LARA_MED_TURN;
|
||||
if (info->turnRate < -LARA_MED_TURN_MAX)
|
||||
info->turnRate = -LARA_MED_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, -LARA_LEAN_MAX / 3, LARA_LEAN_RATE / 4);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_MED_TURN)
|
||||
info->turnRate = LARA_MED_TURN;
|
||||
if (info->turnRate > LARA_MED_TURN_MAX)
|
||||
info->turnRate = LARA_MED_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, LARA_LEAN_MAX / 3, LARA_LEAN_RATE / 4);
|
||||
}
|
||||
|
@ -770,8 +763,8 @@ void lara_as_turn_right_slow(ITEM_INFO* item, COLL_INFO* coll)
|
|||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate < 0)
|
||||
info->turnRate = 0;
|
||||
else if (info->turnRate > LARA_MED_FAST_TURN)
|
||||
info->turnRate = LARA_MED_FAST_TURN;
|
||||
else if (info->turnRate > LARA_MED_FAST_TURN_MAX)
|
||||
info->turnRate = LARA_MED_FAST_TURN_MAX;
|
||||
|
||||
if (info->waterStatus == LW_WADE)
|
||||
{
|
||||
|
@ -858,10 +851,10 @@ void lara_as_turn_right_slow(ITEM_INFO* item, COLL_INFO* coll)
|
|||
{
|
||||
item->goalAnimState = LS_TURN_RIGHT_SLOW;
|
||||
|
||||
if (info->turnRate > LARA_SLOW_TURN)
|
||||
info->turnRate = LARA_SLOW_TURN;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
else if (info->turnRate > LARA_SLOW_MED_TURN)
|
||||
else if (info->turnRate > LARA_SLOW_MED_TURN_MAX)
|
||||
item->goalAnimState = LS_TURN_RIGHT_FAST;
|
||||
else [[likely]]
|
||||
item->goalAnimState = LS_TURN_RIGHT_SLOW;
|
||||
|
@ -981,8 +974,8 @@ void lara_as_turn_left_slow(ITEM_INFO* item, COLL_INFO* coll)
|
|||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate > 0)
|
||||
info->turnRate = 0;
|
||||
else if (info->turnRate < -LARA_MED_FAST_TURN)
|
||||
info->turnRate = -LARA_MED_FAST_TURN;
|
||||
else if (info->turnRate < -LARA_MED_FAST_TURN_MAX)
|
||||
info->turnRate = -LARA_MED_FAST_TURN_MAX;
|
||||
|
||||
if (info->waterStatus == LW_WADE)
|
||||
{
|
||||
|
@ -1069,10 +1062,10 @@ void lara_as_turn_left_slow(ITEM_INFO* item, COLL_INFO* coll)
|
|||
{
|
||||
item->goalAnimState = LS_TURN_LEFT_SLOW;
|
||||
|
||||
if (info->turnRate < -LARA_SLOW_TURN)
|
||||
info->turnRate = -LARA_SLOW_TURN;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
else if (info->turnRate < -LARA_SLOW_MED_TURN)
|
||||
else if (info->turnRate < -LARA_SLOW_MED_TURN_MAX)
|
||||
item->goalAnimState = LS_TURN_LEFT_FAST;
|
||||
else [[likely]]
|
||||
item->goalAnimState = LS_TURN_RIGHT_SLOW;
|
||||
|
@ -1279,8 +1272,8 @@ void lara_as_walk_back(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_SLOW_TURN)
|
||||
info->turnRate = -LARA_SLOW_TURN;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, -LARA_LEAN_MAX / 3, LARA_LEAN_RATE / 4);
|
||||
|
||||
|
@ -1288,8 +1281,8 @@ void lara_as_walk_back(ITEM_INFO* item, COLL_INFO* coll)
|
|||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_SLOW_TURN)
|
||||
info->turnRate = LARA_SLOW_TURN;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, LARA_LEAN_MAX / 3, LARA_LEAN_RATE / 4);
|
||||
}
|
||||
|
@ -1312,8 +1305,8 @@ void PseudoLaraAsSwampWalkBack(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_SLOW_TURN / 3)
|
||||
info->turnRate = -LARA_SLOW_TURN / 3;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX / 3)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX / 3;
|
||||
|
||||
DoLaraLean(item, coll, -LARA_LEAN_MAX / 3, LARA_LEAN_RATE / 3);
|
||||
|
||||
|
@ -1321,8 +1314,8 @@ void PseudoLaraAsSwampWalkBack(ITEM_INFO* item, COLL_INFO* coll)
|
|||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_SLOW_TURN / 3)
|
||||
info->turnRate = LARA_SLOW_TURN / 3;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX / 3)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX / 3;
|
||||
|
||||
DoLaraLean(item, coll, LARA_LEAN_MAX / 3, LARA_LEAN_RATE / 3);
|
||||
}
|
||||
|
@ -1392,10 +1385,10 @@ void lara_as_turn_right_fast(ITEM_INFO* item, COLL_INFO* coll)
|
|||
}
|
||||
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate < LARA_MED_TURN)
|
||||
info->turnRate = LARA_MED_TURN;
|
||||
else if (info->turnRate > LARA_FAST_TURN)
|
||||
info->turnRate = LARA_FAST_TURN;
|
||||
if (info->turnRate < LARA_MED_TURN_MAX)
|
||||
info->turnRate = LARA_MED_TURN_MAX;
|
||||
else if (info->turnRate > LARA_FAST_TURN_MAX)
|
||||
info->turnRate = LARA_FAST_TURN_MAX;
|
||||
|
||||
if (TrInput & IN_JUMP &&
|
||||
coll->Middle.Ceiling < -(LARA_HEADROOM * 0.7f))
|
||||
|
@ -1506,10 +1499,10 @@ void lara_as_turn_left_fast(ITEM_INFO* item, COLL_INFO* coll)
|
|||
}
|
||||
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate > -LARA_MED_TURN)
|
||||
info->turnRate = -LARA_MED_TURN;
|
||||
else if (info->turnRate < -LARA_FAST_TURN)
|
||||
info->turnRate = -LARA_FAST_TURN;
|
||||
if (info->turnRate > -LARA_MED_TURN_MAX)
|
||||
info->turnRate = -LARA_MED_TURN_MAX;
|
||||
else if (info->turnRate < -LARA_FAST_TURN_MAX)
|
||||
info->turnRate = -LARA_FAST_TURN_MAX;
|
||||
|
||||
if (TrInput & IN_JUMP &&
|
||||
coll->Middle.Ceiling < -(LARA_HEADROOM * 0.7f))
|
||||
|
@ -1626,14 +1619,14 @@ void lara_as_step_right(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_SLOW_TURN)
|
||||
info->turnRate = -LARA_SLOW_TURN;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_SLOW_TURN)
|
||||
info->turnRate = LARA_SLOW_TURN;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
|
||||
if (TrInput & IN_RSTEP)
|
||||
|
@ -1708,14 +1701,14 @@ void lara_as_step_left(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_SLOW_TURN)
|
||||
info->turnRate = -LARA_SLOW_TURN;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_SLOW_TURN)
|
||||
info->turnRate = LARA_SLOW_TURN;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
|
||||
if (TrInput & IN_LSTEP)
|
||||
|
@ -1918,16 +1911,16 @@ void lara_as_wade_forward(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_FAST_TURN)
|
||||
info->turnRate = -LARA_FAST_TURN;
|
||||
if (info->turnRate < -LARA_FAST_TURN_MAX)
|
||||
info->turnRate = -LARA_FAST_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, -LARA_LEAN_MAX, LARA_LEAN_RATE / 2);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_FAST_TURN)
|
||||
info->turnRate = LARA_FAST_TURN;
|
||||
if (info->turnRate > LARA_FAST_TURN_MAX)
|
||||
info->turnRate = LARA_FAST_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, LARA_LEAN_MAX, LARA_LEAN_RATE / 2);
|
||||
}
|
||||
|
@ -2039,16 +2032,16 @@ void lara_as_sprint(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_SLOW_TURN)
|
||||
info->turnRate = -LARA_SLOW_TURN;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, -LARA_LEAN_MAX, LARA_LEAN_RATE);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_SLOW_TURN)
|
||||
info->turnRate = LARA_SLOW_TURN;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, LARA_LEAN_MAX, LARA_LEAN_RATE);
|
||||
}
|
||||
|
@ -2154,16 +2147,16 @@ void lara_as_sprint_dive(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_SLOW_TURN)
|
||||
info->turnRate = -LARA_SLOW_TURN;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, -(LARA_LEAN_MAX * 3) / 5, LARA_LEAN_RATE);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_SLOW_TURN)
|
||||
info->turnRate = LARA_SLOW_TURN;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, (LARA_LEAN_MAX * 3) / 5, LARA_LEAN_RATE);
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ void lara_default_col(ITEM_INFO* item, COLL_INFO* coll);
|
|||
void lara_as_special(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_as_null(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_as_controlled(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_as_controlledl(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_as_controlled_no_look(ITEM_INFO* item, COLL_INFO* coll);
|
||||
|
||||
// ---------------
|
||||
// BASIC MOVEMENT:
|
||||
|
@ -33,7 +33,6 @@ void PseudoLaraAsWadeIdle(ITEM_INFO* item, COLL_INFO* coll);
|
|||
void PseudoLaraAsSwampIdle(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_col_idle(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_as_pose(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_col_pose(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_as_run_back(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_col_run_back(ITEM_INFO* item, COLL_INFO* coll);
|
||||
void lara_as_turn_right_slow(ITEM_INFO* item, COLL_INFO* coll);
|
||||
|
|
|
@ -38,6 +38,10 @@ void lara_as_crouch_idle(ITEM_INFO* item, COLL_INFO* coll)
|
|||
coll->Setup.EnableObjectPush = true;
|
||||
Camera.targetElevation = -ANGLE(24.0f);
|
||||
|
||||
// TODO: Dispatch pickups from within states.
|
||||
if (item->goalAnimState == LS_PICKUP)
|
||||
return;
|
||||
|
||||
if (item->hitPoints <= 0)
|
||||
{
|
||||
item->goalAnimState = LS_DEATH;
|
||||
|
@ -48,9 +52,9 @@ void lara_as_crouch_idle(ITEM_INFO* item, COLL_INFO* coll)
|
|||
LookUpDown();
|
||||
|
||||
if (TrInput & IN_LEFT)
|
||||
info->turnRate = -LARA_CRAWL_TURN;
|
||||
info->turnRate = -LARA_CRAWL_TURN_MAX;
|
||||
else if (TrInput & IN_RIGHT)
|
||||
info->turnRate = LARA_CRAWL_TURN;
|
||||
info->turnRate = LARA_CRAWL_TURN_MAX;
|
||||
|
||||
if ((TrInput & IN_DUCK || info->keepCrouched) &&
|
||||
info->waterStatus != LW_WADE)
|
||||
|
@ -138,16 +142,16 @@ void lara_as_crouch_roll(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_CROUCH_ROLL_TURN)
|
||||
info->turnRate = -LARA_CROUCH_ROLL_TURN;
|
||||
if (info->turnRate < -LARA_CROUCH_ROLL_TURN_MAX)
|
||||
info->turnRate = -LARA_CROUCH_ROLL_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, -LARA_LEAN_MAX, LARA_LEAN_RATE);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_CROUCH_ROLL_TURN)
|
||||
info->turnRate = LARA_CROUCH_ROLL_TURN;
|
||||
if (info->turnRate > LARA_CROUCH_ROLL_TURN_MAX)
|
||||
info->turnRate = LARA_CROUCH_ROLL_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, LARA_LEAN_MAX, LARA_LEAN_RATE);
|
||||
}
|
||||
|
@ -227,7 +231,7 @@ void lara_as_crouch_turn_left(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LOOK)
|
||||
LookUpDown();
|
||||
|
||||
info->turnRate = -LARA_CRAWL_TURN;
|
||||
info->turnRate = -LARA_CRAWL_TURN_MAX;
|
||||
|
||||
if ((TrInput & IN_DUCK || info->keepCrouched) &&
|
||||
info->waterStatus != LW_WADE)
|
||||
|
@ -283,7 +287,7 @@ void lara_as_crouch_turn_right(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LOOK)
|
||||
LookUpDown();
|
||||
|
||||
info->turnRate = LARA_CRAWL_TURN;
|
||||
info->turnRate = LARA_CRAWL_TURN_MAX;
|
||||
|
||||
if ((TrInput & IN_DUCK || info->keepCrouched) &&
|
||||
info->waterStatus != LW_WADE)
|
||||
|
@ -336,6 +340,10 @@ void lara_as_crawl_idle(ITEM_INFO* item, COLL_INFO* coll)
|
|||
coll->Setup.EnableObjectPush = true;
|
||||
Camera.targetElevation = -ANGLE(24.0f);
|
||||
|
||||
// TODO: Dispatch pickups from within states.
|
||||
if (item->goalAnimState == LS_PICKUP)
|
||||
return;
|
||||
|
||||
if (item->hitPoints <= 0)
|
||||
{
|
||||
item->goalAnimState = LS_DEATH;
|
||||
|
@ -346,9 +354,9 @@ void lara_as_crawl_idle(ITEM_INFO* item, COLL_INFO* coll)
|
|||
LookUpDown();
|
||||
|
||||
if (TrInput & IN_LEFT)
|
||||
info->turnRate = -LARA_CRAWL_TURN;
|
||||
info->turnRate = -LARA_CRAWL_TURN_MAX;
|
||||
else if (TrInput & IN_RIGHT)
|
||||
info->turnRate = LARA_CRAWL_TURN;
|
||||
info->turnRate = LARA_CRAWL_TURN_MAX;
|
||||
|
||||
if ((TrInput & IN_DUCK || info->keepCrouched) &&
|
||||
info->waterStatus != LW_WADE)
|
||||
|
@ -474,18 +482,18 @@ void lara_as_crawl_forward(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_CRAWL_MOVE_TURN_RATE;
|
||||
if (info->turnRate < -LARA_CRAWL_MOVE_TURN)
|
||||
info->turnRate = -LARA_CRAWL_MOVE_TURN;
|
||||
if (info->turnRate < -LARA_CRAWL_MOVE_TURN_MAX)
|
||||
info->turnRate = -LARA_CRAWL_MOVE_TURN_MAX;
|
||||
|
||||
DoLaraCrawlFlex(item, coll, -LARA_CRAWL_FLEX, LARA_CRAWL_FLEX_RATE);
|
||||
DoLaraCrawlFlex(item, coll, -LARA_CRAWL_FLEX_MAX, LARA_CRAWL_FLEX_MAX_RATE);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_CRAWL_MOVE_TURN_RATE;
|
||||
if (info->turnRate > LARA_CRAWL_MOVE_TURN)
|
||||
info->turnRate = LARA_CRAWL_MOVE_TURN;
|
||||
if (info->turnRate > LARA_CRAWL_MOVE_TURN_MAX)
|
||||
info->turnRate = LARA_CRAWL_MOVE_TURN_MAX;
|
||||
|
||||
DoLaraCrawlFlex(item, coll, LARA_CRAWL_FLEX, LARA_CRAWL_FLEX_RATE);
|
||||
DoLaraCrawlFlex(item, coll, LARA_CRAWL_FLEX_MAX, LARA_CRAWL_FLEX_MAX_RATE);
|
||||
}
|
||||
|
||||
if ((TrInput & IN_DUCK || info->keepCrouched) &&
|
||||
|
@ -577,18 +585,18 @@ void lara_as_crawl_back(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_CRAWL_MOVE_TURN_RATE;
|
||||
if (info->turnRate < -LARA_CRAWL_MOVE_TURN)
|
||||
info->turnRate = -LARA_CRAWL_MOVE_TURN;
|
||||
if (info->turnRate < -LARA_CRAWL_MOVE_TURN_MAX)
|
||||
info->turnRate = -LARA_CRAWL_MOVE_TURN_MAX;
|
||||
|
||||
DoLaraCrawlFlex(item, coll, LARA_CRAWL_FLEX, LARA_CRAWL_FLEX_RATE);
|
||||
DoLaraCrawlFlex(item, coll, LARA_CRAWL_FLEX_MAX, LARA_CRAWL_FLEX_MAX_RATE);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_CRAWL_MOVE_TURN_RATE;
|
||||
if (info->turnRate > LARA_CRAWL_MOVE_TURN)
|
||||
info->turnRate = LARA_CRAWL_MOVE_TURN;
|
||||
if (info->turnRate > LARA_CRAWL_MOVE_TURN_MAX)
|
||||
info->turnRate = LARA_CRAWL_MOVE_TURN_MAX;
|
||||
|
||||
DoLaraCrawlFlex(item, coll, -LARA_CRAWL_FLEX, LARA_CRAWL_FLEX_RATE);
|
||||
DoLaraCrawlFlex(item, coll, -LARA_CRAWL_FLEX_MAX, LARA_CRAWL_FLEX_MAX_RATE);
|
||||
}
|
||||
|
||||
if ((TrInput & IN_DUCK || info->keepCrouched) &&
|
||||
|
@ -668,7 +676,7 @@ void lara_as_crawl_turn_left(ITEM_INFO* item, COLL_INFO* coll)
|
|||
return;
|
||||
}
|
||||
|
||||
info->turnRate = -LARA_CRAWL_TURN;
|
||||
info->turnRate = -LARA_CRAWL_TURN_MAX;
|
||||
|
||||
if ((TrInput & IN_DUCK || info->keepCrouched) &&
|
||||
info->waterStatus != LW_WADE)
|
||||
|
@ -728,7 +736,7 @@ void lara_as_crawl_turn_right(ITEM_INFO* item, COLL_INFO* coll)
|
|||
return;
|
||||
}
|
||||
|
||||
info->turnRate = LARA_CRAWL_TURN;
|
||||
info->turnRate = LARA_CRAWL_TURN_MAX;
|
||||
|
||||
if ((TrInput & IN_DUCK || info->keepCrouched) &&
|
||||
info->waterStatus != LW_WADE)
|
||||
|
|
|
@ -20,6 +20,9 @@
|
|||
// Try implementing leg IK as a substitute to make step animations obsolete. @Sezz 2021.10.09
|
||||
void DoLaraStep(ITEM_INFO* item, COLL_INFO* coll)
|
||||
{
|
||||
if (coll->Middle.Floor == NO_HEIGHT)
|
||||
return;
|
||||
|
||||
if (!TestLaraSwamp(item))
|
||||
{
|
||||
if (TestLaraStepUp(item, coll))
|
||||
|
@ -47,20 +50,18 @@ void DoLaraStep(ITEM_INFO* item, COLL_INFO* coll)
|
|||
constexpr int rate = 50;
|
||||
int threshold = std::max(abs(item->speed) / 3 * 2, STEP_SIZE / 16);
|
||||
int sign = std::copysign(1, coll->Middle.Floor);
|
||||
if (coll->Middle.Floor != NO_HEIGHT)
|
||||
|
||||
if (TestLaraSwamp(item) && coll->Middle.Floor > 0)
|
||||
item->pos.yPos += SWAMP_GRAVITY;
|
||||
else if (abs(coll->Middle.Floor) > (STEPUP_HEIGHT / 2)) // Outer range.
|
||||
item->pos.yPos += rate * sign;
|
||||
else if (abs(coll->Middle.Floor) <= (STEPUP_HEIGHT / 2) && // Inner range.
|
||||
abs(coll->Middle.Floor) >= threshold)
|
||||
{
|
||||
if (TestLaraSwamp(item) && coll->Middle.Floor > 0)
|
||||
item->pos.yPos += SWAMP_GRAVITY;
|
||||
else if (abs(coll->Middle.Floor) > (STEPUP_HEIGHT / 2)) // Outer range.
|
||||
item->pos.yPos += rate * sign;
|
||||
else if (abs(coll->Middle.Floor) <= (STEPUP_HEIGHT / 2) && // Inner range.
|
||||
abs(coll->Middle.Floor) >= threshold)
|
||||
{
|
||||
item->pos.yPos += std::max((int)abs(coll->Middle.Floor / 2.75), threshold) * sign;
|
||||
}
|
||||
else
|
||||
item->pos.yPos += coll->Middle.Floor;
|
||||
item->pos.yPos += std::max((int)abs(coll->Middle.Floor / 2.75), threshold) * sign;
|
||||
}
|
||||
else
|
||||
item->pos.yPos += coll->Middle.Floor;
|
||||
}
|
||||
|
||||
void DoLaraCrawlVault(ITEM_INFO* item, COLL_INFO* coll)
|
||||
|
@ -226,7 +227,7 @@ void HandleLaraMovementParameters(ITEM_INFO* item, COLL_INFO* coll)
|
|||
|
||||
// Reset crawl flex.
|
||||
if (!(TrInput & IN_LOOK) &&
|
||||
!(coll->Setup.Height < LARA_HEIGHT) &&
|
||||
coll->Setup.Height > LARA_HEIGHT - LARA_HEADROOM &&
|
||||
(!item->speed || (item->speed && !(TrInput & (IN_LEFT | IN_RIGHT)))))
|
||||
{
|
||||
ResetLaraFlex(item, 12);
|
||||
|
|
|
@ -54,16 +54,14 @@ void lara_as_forwardjump(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
|
||||
if (info->turnRate < -LARA_JUMP_TURN)
|
||||
info->turnRate = -LARA_JUMP_TURN;
|
||||
if (info->turnRate < -LARA_JUMP_TURN_MAX)
|
||||
info->turnRate = -LARA_JUMP_TURN_MAX;
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
|
||||
if (info->turnRate > LARA_JUMP_TURN)
|
||||
info->turnRate = LARA_JUMP_TURN;
|
||||
if (info->turnRate > LARA_JUMP_TURN_MAX)
|
||||
info->turnRate = LARA_JUMP_TURN_MAX;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -242,15 +240,15 @@ void lara_as_compress(ITEM_INFO* item, COLL_INFO* coll)
|
|||
TrInput & (IN_FORWARD | IN_BACK))
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_SLOW_TURN)
|
||||
info->turnRate = -LARA_SLOW_TURN;
|
||||
if (info->turnRate < -LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = -LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
else if (TrInput & IN_RIGHT &&
|
||||
TrInput & (IN_FORWARD | IN_BACK))
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_SLOW_TURN)
|
||||
info->turnRate = LARA_SLOW_TURN;
|
||||
if (info->turnRate > LARA_SLOW_TURN_MAX)
|
||||
info->turnRate = LARA_SLOW_TURN_MAX;
|
||||
}
|
||||
|
||||
if (TrInput & IN_FORWARD &&
|
||||
|
@ -551,16 +549,16 @@ void lara_as_swandive(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
info->turnRate -= LARA_TURN_RATE;
|
||||
if (info->turnRate < -LARA_JUMP_TURN)
|
||||
info->turnRate = -LARA_JUMP_TURN;
|
||||
if (info->turnRate < -LARA_JUMP_TURN_MAX)
|
||||
info->turnRate = -LARA_JUMP_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, -LARA_LEAN_MAX, LARA_LEAN_RATE / 2);
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
info->turnRate += LARA_TURN_RATE;
|
||||
if (info->turnRate > LARA_JUMP_TURN)
|
||||
info->turnRate = LARA_JUMP_TURN;
|
||||
if (info->turnRate > LARA_JUMP_TURN_MAX)
|
||||
info->turnRate = LARA_JUMP_TURN_MAX;
|
||||
|
||||
DoLaraLean(item, coll, LARA_LEAN_MAX, LARA_LEAN_RATE / 2);
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ void lara_col_monkey_idle(ITEM_INFO* item, COLL_INFO* coll)
|
|||
{
|
||||
item->goalAnimState = LS_MONKEYSWING_TURN_RIGHT;
|
||||
}
|
||||
else if (TrInput & IN_ROLL && g_GameFlow->Animations.MonkeyReverse)
|
||||
else if (TrInput & IN_ROLL && g_GameFlow->Animations.MonkeyTurn180)
|
||||
{
|
||||
item->goalAnimState = LS_MONKEYSWING_TURN_180;
|
||||
}
|
||||
|
|
|
@ -95,7 +95,7 @@ void lara_as_switchoff(ITEM_INFO* item, COLL_INFO* coll)
|
|||
void lara_col_turnswitch(ITEM_INFO* item, COLL_INFO* coll)
|
||||
{
|
||||
/*state 95*/
|
||||
/*state code: lara_as_controlledl*/
|
||||
/*state code: lara_as_controlled_no_look*/
|
||||
if (coll->Setup.OldPosition.x != item->pos.xPos || coll->Setup.OldPosition.z != item->pos.zPos)
|
||||
{
|
||||
if (item->animNumber == LA_TURNSWITCH_PUSH_COUNTER_CLOCKWISE_CONTINUE)
|
||||
|
|
|
@ -279,17 +279,17 @@ void SwimTurnSubsuit(ITEM_INFO* item)
|
|||
|
||||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
Lara.turnRate -= SUB_SUIT_TURN_RATE;
|
||||
if (Lara.turnRate < -LARA_MED_TURN)
|
||||
Lara.turnRate = -LARA_MED_TURN;
|
||||
Lara.turnRate -= LARA_SUBSUIT_TURN_RATE;
|
||||
if (Lara.turnRate < -LARA_MED_TURN_MAX)
|
||||
Lara.turnRate = -LARA_MED_TURN_MAX;
|
||||
|
||||
item->pos.zRot -= LARA_LEAN_RATE;
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
Lara.turnRate += SUB_SUIT_TURN_RATE;
|
||||
if (Lara.turnRate > LARA_MED_TURN)
|
||||
Lara.turnRate = LARA_MED_TURN;
|
||||
Lara.turnRate += LARA_SUBSUIT_TURN_RATE;
|
||||
if (Lara.turnRate > LARA_MED_TURN_MAX)
|
||||
Lara.turnRate = LARA_MED_TURN_MAX;
|
||||
|
||||
item->pos.zRot += LARA_LEAN_RATE;
|
||||
}
|
||||
|
@ -305,16 +305,16 @@ void SwimTurn(ITEM_INFO* item, COLL_INFO* coll)
|
|||
if (TrInput & IN_LEFT)
|
||||
{
|
||||
Lara.turnRate -= LARA_TURN_RATE;
|
||||
if (Lara.turnRate < -LARA_MED_TURN)
|
||||
Lara.turnRate = -LARA_MED_TURN;
|
||||
if (Lara.turnRate < -LARA_MED_TURN_MAX)
|
||||
Lara.turnRate = -LARA_MED_TURN_MAX;
|
||||
|
||||
item->pos.zRot -= LARA_LEAN_RATE;
|
||||
}
|
||||
else if (TrInput & IN_RIGHT)
|
||||
{
|
||||
Lara.turnRate += LARA_TURN_RATE;
|
||||
if (Lara.turnRate > LARA_MED_TURN)
|
||||
Lara.turnRate = LARA_MED_TURN;
|
||||
if (Lara.turnRate > LARA_MED_TURN_MAX)
|
||||
Lara.turnRate = LARA_MED_TURN_MAX;
|
||||
|
||||
item->pos.zRot += LARA_LEAN_RATE;
|
||||
}
|
||||
|
|
|
@ -115,19 +115,17 @@ bool TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
|
|||
}
|
||||
}
|
||||
// Vault up two steps.
|
||||
else if (coll->Front.Floor <= -STEPUP_HEIGHT && // Lower floor bound.
|
||||
coll->Front.Floor >= -(STEP_SIZE * 2 + STEP_SIZE / 2)) // Upper floor bound.
|
||||
else if (coll->Front.Floor <= -STEPUP_HEIGHT && // Lower floor bound.
|
||||
coll->Front.Floor >= -(CLICK(2) + STEP_SIZE / 2)) // Upper floor bound.
|
||||
{
|
||||
// Vault to stand up two steps.
|
||||
if (abs((coll->Front.Ceiling - coll->Setup.Height) - coll->Front.Floor) > LARA_HEIGHT/* && // Front clamp buffer. BUG: Turned away from the ledge and toward a section with a low ceiling, stand-to-crawl vault will be performed instead. @Sezz 2021.11.06
|
||||
abs((coll->FrontLeft.Ceiling - coll->Setup.Height) - coll->FrontLeft.Floor) > LARA_HEIGHT && // Left clamp buffer. // TODO: Ceilings don't push, so these are unnecessary for now. @Sezz 2021.11.06
|
||||
abs((coll->FrontRight.Ceiling - coll->Setup.Height) - coll->FrontRight.Floor) > LARA_HEIGHT*/) // Right clamp buffer.
|
||||
if (abs((coll->Front.Ceiling - coll->Setup.Height) - coll->Front.Floor) > LARA_HEIGHT) // Front clamp buffer. BUG: Turned away from the ledge and toward a section with a low ceiling, stand-to-crawl vault will be performed instead. @Sezz 2021.11.06
|
||||
{
|
||||
item->animNumber = LA_VAULT_TO_STAND_2CLICK_START;
|
||||
item->currentAnimState = LS_GRABBING;
|
||||
item->frameNumber = GetFrameNumber(item, 0);
|
||||
item->goalAnimState = LS_IDLE;
|
||||
item->pos.yPos += coll->Front.Floor + (STEP_SIZE * 2);
|
||||
item->pos.yPos += coll->Front.Floor + CLICK(2);
|
||||
info->gunStatus = LG_HANDS_BUSY;
|
||||
success = true;
|
||||
}
|
||||
|
@ -141,19 +139,17 @@ bool TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
|
|||
item->frameNumber = GetFrameNumber(item, 0);
|
||||
item->currentAnimState = LS_GRABBING;
|
||||
item->goalAnimState = LS_CROUCH_IDLE;
|
||||
item->pos.yPos += coll->Front.Floor + (STEP_SIZE * 2);
|
||||
item->pos.yPos += coll->Front.Floor + CLICK(2);
|
||||
info->gunStatus = LG_HANDS_BUSY;
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
// Vault up three steps.
|
||||
else if (coll->Front.Floor <= -(STEP_SIZE * 2 + STEP_SIZE / 2) && // Lower floor bound.
|
||||
coll->Front.Floor >= -(WALL_SIZE - STEP_SIZE / 2)) // Upper floor bound.
|
||||
else if (coll->Front.Floor <= -(CLICK(2) + STEP_SIZE / 2) && // Lower floor bound.
|
||||
coll->Front.Floor >= -(WALL_SIZE - STEP_SIZE / 2)) // Upper floor bound.
|
||||
{
|
||||
// Vault to stand up three steps.
|
||||
if (abs((coll->Front.Ceiling - coll->Setup.Height) - coll->Front.Floor) > LARA_HEIGHT/* && // Front clamp buffer. BUG: Turned away from the ledge and toward a section with a low ceiling, stand-to-crawl vault will be performed instead. @Sezz 2021.11.06
|
||||
abs((coll->FrontLeft.Ceiling - coll->Setup.Height) - coll->FrontLeft.Floor) > LARA_HEIGHT && // Left clamp buffer. // TODO: Ceilings don't push, so these are unnecessary for now. @Sezz 2021.11.06
|
||||
abs((coll->FrontRight.Ceiling - coll->Setup.Height) - coll->FrontRight.Floor) > LARA_HEIGHT*/) // Right clamp buffer.
|
||||
if (abs((coll->Front.Ceiling - coll->Setup.Height) - coll->Front.Floor) > LARA_HEIGHT) // Front clamp buffer. BUG: Turned away from the ledge and toward a section with a low ceiling, stand-to-crawl vault will be performed instead. @Sezz 2021.11.06
|
||||
{
|
||||
item->animNumber = LA_VAULT_TO_STAND_3CLICK;
|
||||
item->currentAnimState = LS_GRABBING;
|
||||
|
@ -204,12 +200,12 @@ bool TestLaraVault(ITEM_INFO* item, COLL_INFO* coll)
|
|||
{
|
||||
if (coll->Front.Floor > -(WALL_SIZE * 2 - STEP_SIZE / 2) || // Upper front floor bound.
|
||||
coll->FrontLeft.Floor > -(WALL_SIZE * 2 - STEP_SIZE / 2) || // Upper left floor bound.
|
||||
coll->FrontRight.Floor > -(STEP_SIZE * 2) || // Upper right floor bound.
|
||||
coll->FrontRight.Floor > -CLICK(2) || // Upper right floor bound.
|
||||
coll->Middle.Ceiling > -(WALL_SIZE + STEP_SIZE / 2 + 6) || // Upper ceiling bound.
|
||||
info->waterStatus == LW_WADE)
|
||||
{
|
||||
if ((coll->Front.Floor < -WALL_SIZE || coll->Front.Ceiling >= (STEP_SIZE * 2 - 6)) &&
|
||||
coll->Middle.Ceiling <= -(STEP_SIZE * 2 + 6))
|
||||
if ((coll->Front.Floor < -WALL_SIZE || coll->Front.Ceiling >= (CLICK(2) - 6)) &&
|
||||
coll->Middle.Ceiling <= -(CLICK(2) + 6))
|
||||
{
|
||||
if (TestLaraClimbStance(item, coll))
|
||||
{
|
||||
|
@ -874,10 +870,10 @@ bool TestLaraClimbStance(ITEM_INFO* item, COLL_INFO* coll)
|
|||
{
|
||||
int shift_r, shift_l;
|
||||
|
||||
if (LaraTestClimbPos(item, coll->Setup.Radius, coll->Setup.Radius + 120, -700, (STEP_SIZE * 2), &shift_r) != 1)
|
||||
if (LaraTestClimbPos(item, coll->Setup.Radius, coll->Setup.Radius + 120, -700, CLICK(2), &shift_r) != 1)
|
||||
return false;
|
||||
|
||||
if (LaraTestClimbPos(item, coll->Setup.Radius, -(coll->Setup.Radius + 120), -700, (STEP_SIZE * 2), &shift_l) != 1)
|
||||
if (LaraTestClimbPos(item, coll->Setup.Radius, -(coll->Setup.Radius + 120), -700, CLICK(2), &shift_l) != 1)
|
||||
return false;
|
||||
|
||||
if (shift_r)
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "items.h"
|
||||
#include "lara_fire.h"
|
||||
#include "lara_flare.h"
|
||||
#include "lara_helpers.h"
|
||||
#include "lara_one_gun.h"
|
||||
#include "lara_two_guns.h"
|
||||
#include "setup.h"
|
||||
|
@ -653,10 +654,7 @@ void PickupCollision(short itemNum, ITEM_INFO* l, COLL_INFO* coll)
|
|||
|
||||
if (flag)
|
||||
{
|
||||
lara->headYrot = 0;
|
||||
lara->headXrot = 0;
|
||||
lara->torsoYrot = 0;
|
||||
lara->torsoXrot = 0;
|
||||
ResetLaraFlex(l);
|
||||
l->frameNumber = g_Level.Anims[l->animNumber].frameBase;
|
||||
lara->isMoving = false;
|
||||
lara->gunStatus = LG_HANDS_BUSY;
|
||||
|
@ -925,10 +923,7 @@ void SearchObjectCollision(short itemNumber, ITEM_INFO* laraitem, COLL_INFO* lar
|
|||
laraitem->animNumber = SearchAnims[objNumber];
|
||||
laraitem->frameNumber = g_Level.Anims[laraitem->animNumber].frameBase;
|
||||
Lara.isMoving = false;
|
||||
Lara.headYrot = 0;
|
||||
Lara.headXrot = 0;
|
||||
Lara.torsoYrot = 0;
|
||||
Lara.torsoXrot = 0;
|
||||
ResetLaraFlex(laraitem);
|
||||
Lara.gunStatus = LG_HANDS_BUSY;
|
||||
|
||||
if (item->objectNumber == ID_SEARCH_OBJECT4)
|
||||
|
|
|
@ -13,7 +13,7 @@ void GameScriptAnimations::Register(sol::state* lua)
|
|||
"crawlExtended", &GameScriptAnimations::CrawlExtended,
|
||||
"crouchRoll", &GameScriptAnimations::CrouchRoll,
|
||||
"crawlspaceSwandive", &GameScriptAnimations::CrawlspaceSwandive,
|
||||
"monkeyReverse", &GameScriptAnimations::MonkeyReverse,
|
||||
"monkeyTurn180", &GameScriptAnimations::MonkeyTurn180,
|
||||
"monkeyAutoJump", &GameScriptAnimations::MonkeyAutoJump,
|
||||
"oscillateHang", &GameScriptAnimations::OscillateHang,
|
||||
"pose", &GameScriptAnimations::Pose
|
||||
|
|
|
@ -12,7 +12,7 @@ struct GameScriptAnimations
|
|||
bool CrawlExtended; // Extended crawl moveset
|
||||
bool CrouchRoll; // Crouch roll
|
||||
bool CrawlspaceSwandive; // Swandive into crawlspaces
|
||||
bool MonkeyReverse; // 180 degree turn on monkey swing
|
||||
bool MonkeyTurn180; // 180 degree turn on monkey swing
|
||||
bool MonkeyAutoJump; // Auto jump to monkey swing when pressing UP + ACTION beneath
|
||||
bool OscillateHang; // Grab thin ledge animation from TR1 and 2
|
||||
bool Pose; // Crossed arms AFK posing
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue