- Duke (RR): Fix braking on vehicles which never got picked up.

This commit is contained in:
Mitchell Richters 2021-01-03 19:25:49 +11:00
parent edba971b7f
commit f6b9c3cba7
3 changed files with 17 additions and 40 deletions

View file

@ -741,9 +741,7 @@ static void processVehicleInput(player_struct *p, ControlInfo* const hidInput, I
{ {
p->vehForwardScale = std::min((buttonMap.ButtonDown(gamefunc_Move_Forward) || buttonMap.ButtonDown(gamefunc_Strafe)) + hidInput->dz, 1.f); p->vehForwardScale = std::min((buttonMap.ButtonDown(gamefunc_Move_Forward) || buttonMap.ButtonDown(gamefunc_Strafe)) + hidInput->dz, 1.f);
p->vehReverseScale = std::min(buttonMap.ButtonDown(gamefunc_Move_Backward) + -hidInput->dz, 1.f); p->vehReverseScale = std::min(buttonMap.ButtonDown(gamefunc_Move_Backward) + -hidInput->dz, 1.f);
p->vehBraking = buttonMap.ButtonDown(gamefunc_Run);
if (loc.actions & SB_RUN)
loc.actions |= SB_CROUCH;
} }
if (p->OnMotorcycle) if (p->OnMotorcycle)

View file

@ -1600,25 +1600,16 @@ static void onMotorcycle(int snum, ESyncBits &actions)
auto p = &ps[snum]; auto p = &ps[snum];
auto pact = p->GetActor(); auto pact = p->GetActor();
bool braking;
short rng; short rng;
if (p->MotoSpeed < 0) if (p->MotoSpeed < 0)
p->MotoSpeed = 0; p->MotoSpeed = 0;
if (actions & SB_CROUCH)
{
braking = true;
actions &= ~SB_CROUCH;
}
else
braking = false;
if (p->vehForwardScale != 0) if (p->vehForwardScale != 0)
{ {
if (p->on_ground) if (p->on_ground)
{ {
if (p->MotoSpeed == 0 && braking) if (p->MotoSpeed == 0 && p->vehBraking)
{ {
if (!S_CheckActorSoundPlaying(pact, 187)) if (!S_CheckActorSoundPlaying(pact, 187))
S_PlayActorSound(187, pact); S_PlayActorSound(187, pact);
@ -1676,7 +1667,7 @@ static void onMotorcycle(int snum, ESyncBits &actions)
if (p->on_ground == 1) if (p->on_ground == 1)
{ {
if (braking && p->MotoSpeed > 0) if (p->vehBraking && p->MotoSpeed > 0)
{ {
p->MotoSpeed -= p->moto_on_oil ? 2 : 4; p->MotoSpeed -= p->moto_on_oil ? 2 : 4;
if (p->MotoSpeed < 0) if (p->MotoSpeed < 0)
@ -1684,7 +1675,7 @@ static void onMotorcycle(int snum, ESyncBits &actions)
p->VBumpTarget = -30; p->VBumpTarget = -30;
p->moto_do_bump = 1; p->moto_do_bump = 1;
} }
else if (p->vehForwardScale != 0 && !braking) else if (p->vehForwardScale != 0 && !p->vehBraking)
{ {
if (p->MotoSpeed < 40) if (p->MotoSpeed < 40)
{ {
@ -1704,13 +1695,13 @@ static void onMotorcycle(int snum, ESyncBits &actions)
else if (p->MotoSpeed > 0) else if (p->MotoSpeed > 0)
p->MotoSpeed--; p->MotoSpeed--;
if (p->moto_do_bump && (!braking || p->MotoSpeed == 0)) if (p->moto_do_bump && (!p->vehBraking || p->MotoSpeed == 0))
{ {
p->VBumpTarget = 0; p->VBumpTarget = 0;
p->moto_do_bump = 0; p->moto_do_bump = 0;
} }
if (p->vehReverseScale != 0 && p->MotoSpeed <= 0 && !braking) if (p->vehReverseScale != 0 && p->MotoSpeed <= 0 && !p->vehBraking)
{ {
bool temp = p->vehTurnRight; bool temp = p->vehTurnRight;
p->vehTurnRight = p->vehTurnLeft; p->vehTurnRight = p->vehTurnLeft;
@ -1831,10 +1822,8 @@ static void onMotorcycle(int snum, ESyncBits &actions)
p->posyv += currSpeed * bsin(velAdjustment * -51 + p->angle.ang.asbuild(), 4); p->posyv += currSpeed * bsin(velAdjustment * -51 + p->angle.ang.asbuild(), 4);
} }
p->moto_on_mud = 0; p->moto_on_mud = p->moto_on_oil = 0;
p->moto_on_oil = 0; p->vehTurnLeft = p->vehTurnRight = p->vehBraking = false;
p->vehTurnLeft = false;
p->vehTurnRight = false;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -1848,7 +1837,7 @@ static void onBoat(int snum, ESyncBits &actions)
auto p = &ps[snum]; auto p = &ps[snum];
auto pact = p->GetActor(); auto pact = p->GetActor();
bool heeltoe, braking; bool heeltoe;
short rng; short rng;
if (p->NotOnWater) if (p->NotOnWater)
@ -1868,12 +1857,11 @@ static void onBoat(int snum, ESyncBits &actions)
if (p->MotoSpeed < 0) if (p->MotoSpeed < 0)
p->MotoSpeed = 0; p->MotoSpeed = 0;
if ((actions & SB_CROUCH) && (p->vehForwardScale != 0)) if (p->vehBraking && (p->vehForwardScale != 0))
{ {
heeltoe = true; heeltoe = true;
braking = false; p->vehBraking = false;
p->vehForwardScale = 0; p->vehForwardScale = 0;
actions &= ~SB_CROUCH;
} }
else else
heeltoe = false; heeltoe = false;
@ -1909,14 +1897,6 @@ static void onBoat(int snum, ESyncBits &actions)
S_PlayActorSound(87, pact); S_PlayActorSound(87, pact);
} }
if (actions & SB_CROUCH)
{
braking = true;
actions &= ~SB_CROUCH;
}
else
braking = false;
if (p->vehTurnLeft && !S_CheckActorSoundPlaying(pact, 91) && p->MotoSpeed > 30 && !p->NotOnWater) if (p->vehTurnLeft && !S_CheckActorSoundPlaying(pact, 91) && p->MotoSpeed > 30 && !p->NotOnWater)
S_PlayActorSound(91, pact); S_PlayActorSound(91, pact);
@ -1962,7 +1942,7 @@ static void onBoat(int snum, ESyncBits &actions)
p->moto_do_bump = 1; p->moto_do_bump = 1;
} }
} }
else if (braking && p->MotoSpeed > 0) else if (p->vehBraking && p->MotoSpeed > 0)
{ {
p->MotoSpeed -= 2; p->MotoSpeed -= 2;
if (p->MotoSpeed < 0) if (p->MotoSpeed < 0)
@ -1985,13 +1965,13 @@ static void onBoat(int snum, ESyncBits &actions)
else if (p->MotoSpeed > 0) else if (p->MotoSpeed > 0)
p->MotoSpeed--; p->MotoSpeed--;
if (p->moto_do_bump && (!braking || p->MotoSpeed == 0)) if (p->moto_do_bump && (!p->vehBraking || p->MotoSpeed == 0))
{ {
p->VBumpTarget = 0; p->VBumpTarget = 0;
p->moto_do_bump = 0; p->moto_do_bump = 0;
} }
if (p->vehReverseScale != 0 && p->MotoSpeed == 0 && !braking) if (p->vehReverseScale != 0 && p->MotoSpeed == 0 && !p->vehBraking)
{ {
bool temp = p->vehTurnRight; bool temp = p->vehTurnRight;
p->vehTurnRight = p->vehTurnLeft; p->vehTurnRight = p->vehTurnLeft;
@ -2080,8 +2060,7 @@ static void onBoat(int snum, ESyncBits &actions)
if (p->NotOnWater && p->MotoSpeed > 50) if (p->NotOnWater && p->MotoSpeed > 50)
p->MotoSpeed -= (p->MotoSpeed / 2.); p->MotoSpeed -= (p->MotoSpeed / 2.);
p->vehTurnLeft = false; p->vehTurnLeft = p->vehTurnRight = p->vehBraking = false;
p->vehTurnRight = false;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
@ -2340,7 +2319,7 @@ static void underwater(int snum, ESyncBits actions, int psect, int fz, int cz)
p->poszv -= 348; p->poszv -= 348;
if (p->poszv < -(256 * 6)) p->poszv = -(256 * 6); if (p->poszv < -(256 * 6)) p->poszv = -(256 * 6);
} }
else if ((actions & SB_CROUCH) || p->OnMotorcycle) else if (p->vehBraking || p->OnMotorcycle)
{ {
if (p->poszv < 0) p->poszv = 0; if (p->poszv < 0) p->poszv = 0;
p->poszv += 348; p->poszv += 348;

View file

@ -276,7 +276,7 @@ struct player_struct
uint8_t OnMotorcycle, OnBoat, moto_underwater, NotOnWater, MotoOnGround; uint8_t OnMotorcycle, OnBoat, moto_underwater, NotOnWater, MotoOnGround;
uint8_t moto_do_bump, moto_bump_fast, moto_on_oil, moto_on_mud; uint8_t moto_do_bump, moto_bump_fast, moto_on_oil, moto_on_mud;
double vehForwardScale, vehReverseScale, MotoSpeed; double vehForwardScale, vehReverseScale, MotoSpeed;
bool vehTurnLeft, vehTurnRight; bool vehTurnLeft, vehTurnRight, vehBraking;
// input stuff. // input stuff.
InputPacket sync; InputPacket sync;