From a5612b1a020b64ae37212580eea49c2ca974952e Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Wed, 18 Mar 2020 10:19:45 +1100 Subject: [PATCH] Manually merge EDuke32 SVN commit 8565. --- source/rr/src/player.cpp | 66 +++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/source/rr/src/player.cpp b/source/rr/src/player.cpp index ff3ce7ac7..5322d90cb 100644 --- a/source/rr/src/player.cpp +++ b/source/rr/src/player.cpp @@ -3170,6 +3170,9 @@ int32_t mouseyaxismode = -1; static int P_CheckLockedMovement(int const playerNum) { auto const pPlayer = g_player[playerNum].ps; + + if (pPlayer->on_crane >= 0) return 2; + return (pPlayer->dead_flag || pPlayer->fist_incs || pPlayer->transporter_hold > 2 || pPlayer->hard_landing || pPlayer->access_incs > 0 || pPlayer->knee_incs > 0 || (PWEAPON(playerNum, pPlayer->curr_weapon, WorksLike) == TRIPBOMB_WEAPON && pPlayer->kickback_pic > 1 && pPlayer->kickback_pic < PWEAPON(playerNum, pPlayer->curr_weapon, FireDelay))); @@ -3443,7 +3446,9 @@ void P_GetInput(int const playerNum) localInput.extbits |= buttonMap.ButtonDown(gamefunc_Turn_Left)<<4; localInput.extbits |= buttonMap.ButtonDown(gamefunc_Turn_Right)<<5; - if ((ud.scrollmode && ud.overhead_on) || P_CheckLockedMovement(playerNum)) + int const movementLocked = P_CheckLockedMovement(playerNum); + + if ((ud.scrollmode && ud.overhead_on) || movementLocked == 1) { if (ud.scrollmode && ud.overhead_on) { @@ -3459,14 +3464,17 @@ void P_GetInput(int const playerNum) } else { - localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); + if (movementLocked != 2) + { + localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); + localInput.fvel = clamp(localInput.fvel + input.fvel, -MAXVEL, MAXVEL); + localInput.svel = clamp(localInput.svel + input.svel, -MAXSVEL, MAXSVEL); + + pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel); + pPlayer->q16ang &= 0x7FFFFFF; + } + localInput.q16horz = fix16_clamp(fix16_sadd(localInput.q16horz, input.q16horz), F16(-MAXHORIZVEL), F16(MAXHORIZVEL)); - localInput.fvel = clamp(localInput.fvel + input.fvel, -MAXVEL, MAXVEL); - localInput.svel = clamp(localInput.svel + input.svel, -MAXSVEL, MAXSVEL); - - pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel); - pPlayer->q16ang &= 0x7FFFFFF; - pPlayer->q16horiz = fix16_clamp(fix16_add(pPlayer->q16horiz, input.q16horz), F16(HORIZ_MIN), F16(HORIZ_MAX)); } @@ -3766,7 +3774,9 @@ void P_GetInputMotorcycle(int playerNum) input.fvel += pPlayer->moto_speed; - if ((ud.scrollmode && ud.overhead_on) || P_CheckLockedMovement(playerNum)) + int const movementLocked = P_CheckLockedMovement(playerNum); + + if ((ud.scrollmode && ud.overhead_on) || movementLocked == 1) { if (ud.scrollmode && ud.overhead_on) { @@ -3782,14 +3792,17 @@ void P_GetInputMotorcycle(int playerNum) } else { - localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); + if (movementLocked != 2) + { + localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); + localInput.fvel = clamp(localInput.fvel + input.fvel, -15, 120); + localInput.svel = clamp(localInput.svel + input.svel, -MAXSVEL, MAXSVEL); + + pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel); + pPlayer->q16ang &= 0x7FFFFFF; + } + localInput.q16horz = fix16_clamp(fix16_sadd(localInput.q16horz, input.q16horz), F16(-MAXHORIZVEL), F16(MAXHORIZVEL)); - localInput.fvel = clamp(localInput.fvel + input.fvel, -15, 120); - localInput.svel = clamp(localInput.svel + input.svel, -MAXSVEL, MAXSVEL); - - pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel); - pPlayer->q16ang &= 0x7FFFFFF; - pPlayer->q16horiz = fix16_clamp(fix16_add(pPlayer->q16horiz, input.q16horz), F16(HORIZ_MIN), F16(HORIZ_MAX)); } @@ -4068,7 +4081,9 @@ void P_GetInputBoat(int playerNum) input.q16avel = fix16_mul(input.q16avel, avelScale); - if ((ud.scrollmode && ud.overhead_on) || P_CheckLockedMovement(playerNum)) + int const movementLocked = P_CheckLockedMovement(playerNum); + + if ((ud.scrollmode && ud.overhead_on) || movementLocked == 1) { if (ud.scrollmode && ud.overhead_on) { @@ -4084,14 +4099,17 @@ void P_GetInputBoat(int playerNum) } else { - localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); + if (movementLocked != 2) + { + localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); + localInput.fvel = clamp(localInput.fvel + input.fvel, -15, 120); + localInput.svel = clamp(localInput.svel + input.svel, -MAXSVEL, MAXSVEL); + + pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel); + pPlayer->q16ang &= 0x7FFFFFF; + } + localInput.q16horz = fix16_clamp(fix16_sadd(localInput.q16horz, input.q16horz), F16(-MAXHORIZVEL), F16(MAXHORIZVEL)); - localInput.fvel = clamp(localInput.fvel + input.fvel, -15, 120); - localInput.svel = clamp(localInput.svel + input.svel, -MAXSVEL, MAXSVEL); - - pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel); - pPlayer->q16ang &= 0x7FFFFFF; - pPlayer->q16horiz = fix16_clamp(fix16_add(pPlayer->q16horiz, input.q16horz), F16(HORIZ_MIN), F16(HORIZ_MAX)); }