RR: Properly lock player movement when necessary while in a vehicle.

- This makes map follow mode work as expected again.
This commit is contained in:
Mitchell Richters 2020-05-08 11:10:47 +10:00 committed by Christoph Oelckers
parent 9c27f49d42
commit d58f90de19
1 changed files with 58 additions and 8 deletions

View File

@ -3768,10 +3768,35 @@ void P_GetInputMotorcycle(int playerNum)
localInput.bits |= buttonMap.ButtonDown(gamefunc_Run) << SK_CROUCH; localInput.bits |= buttonMap.ButtonDown(gamefunc_Run) << SK_CROUCH;
} }
input.q16avel = fix16_mul(input.q16avel, avelScale); input.fvel += pPlayer->moto_speed;
localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); input.q16avel = fix16_mul(input.q16avel, avelScale);
pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel) & 0x7FFFFFF;
localInput.fvel = clamp((input.fvel += pPlayer->moto_speed), -(MAXVELMOTO / 8), MAXVELMOTO); int const movementLocked = P_CheckLockedMovement(playerNum);
if ((ud.scrollmode && ud.overhead_on) || (movementLocked & IL_NOTHING) == IL_NOTHING)
{
if (ud.scrollmode && ud.overhead_on)
{
ud.folfvel = input.fvel;
ud.folavel = fix16_to_int(input.q16avel);
}
localInput.fvel = localInput.svel = 0;
localInput.q16avel = localInput.q16horz = 0;
}
else
{
if (!(movementLocked & IL_NOMOVE))
{
localInput.fvel = clamp(input.fvel, -(MAXVELMOTO / 8), MAXVELMOTO);
}
if (!(movementLocked & IL_NOANGLE))
{
localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel);
pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel) & 0x7FFFFFF;
}
}
if (TEST_SYNC_KEY(localInput.bits, SK_JUMP)) if (TEST_SYNC_KEY(localInput.bits, SK_JUMP))
{ {
@ -3952,10 +3977,35 @@ void P_GetInputBoat(int playerNum)
pPlayer->tilt_status++; pPlayer->tilt_status++;
} }
input.q16avel = fix16_mul(input.q16avel, avelScale); input.fvel += pPlayer->moto_speed;
localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); input.q16avel = fix16_mul(input.q16avel, avelScale);
pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel) & 0x7FFFFFF;
localInput.fvel = clamp((input.fvel += pPlayer->moto_speed), -(MAXVELMOTO / 8), MAXVELMOTO); int const movementLocked = P_CheckLockedMovement(playerNum);
if ((ud.scrollmode && ud.overhead_on) || (movementLocked & IL_NOTHING) == IL_NOTHING)
{
if (ud.scrollmode && ud.overhead_on)
{
ud.folfvel = input.fvel;
ud.folavel = fix16_to_int(input.q16avel);
}
localInput.fvel = localInput.svel = 0;
localInput.q16avel = localInput.q16horz = 0;
}
else
{
if (!(movementLocked & IL_NOMOVE))
{
localInput.fvel = clamp(input.fvel, -(MAXVELMOTO / 8), MAXVELMOTO);
}
if (!(movementLocked & IL_NOANGLE))
{
localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel);
pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel) & 0x7FFFFFF;
}
}
} }
int dword_A99D4, dword_A99D8, dword_A99DC, dword_A99E0; int dword_A99D4, dword_A99D8, dword_A99DC, dword_A99E0;