- Duke: Move RRRA vehicle tilting out of the input code and into the playsim.

This commit is contained in:
Mitchell Richters 2023-03-30 22:42:06 +11:00
parent c13745efc8
commit 03eb105df1
5 changed files with 19 additions and 28 deletions

View file

@ -119,7 +119,7 @@ void displayweapon_r(int snum, double interpfrac)
weapon_sway = interpolatedvalue<double>(p->oweapon_sway, p->weapon_sway, interpfrac); weapon_sway = interpolatedvalue<double>(p->oweapon_sway, p->weapon_sway, interpfrac);
hard_landing = interpolatedvalue<double>(p->ohard_landing, p->hard_landing, interpfrac); hard_landing = interpolatedvalue<double>(p->ohard_landing, p->hard_landing, interpfrac);
gun_pos = 80 - interpolatedvalue<double>(p->oweapon_pos * p->oweapon_pos, p->weapon_pos * p->weapon_pos, interpfrac); gun_pos = 80 - interpolatedvalue<double>(p->oweapon_pos * p->oweapon_pos, p->weapon_pos * p->weapon_pos, interpfrac);
TiltStatus = !SyncInput() ? p->TiltStatus : interpolatedvalue<double>(p->oTiltStatus, p->TiltStatus, interpfrac); TiltStatus = interpolatedvalue<double>(p->oTiltStatus, p->TiltStatus, interpfrac);
} }
else else
{ {

View file

@ -508,17 +508,6 @@ void hud_input(int plnum)
// //
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
static void doVehicleTilting(player_struct* const p, const int turndir, const float factor)
{
if (turndir)
{
p->oTiltStatus = p->TiltStatus;
p->TiltStatus += factor * turndir;
if (abs(p->TiltStatus) > 10)
p->TiltStatus = 10.f * turndir;
}
}
static float getVehicleTurnVel(player_struct* p, HIDInput* const hidInput, const float factor, const float baseVel, const float velScale) static float getVehicleTurnVel(player_struct* p, HIDInput* const hidInput, const float factor, const float baseVel, const float velScale)
{ {
float turnvel = 0; float turnvel = 0;
@ -534,16 +523,8 @@ static float getVehicleTurnVel(player_struct* p, HIDInput* const hidInput, const
const bool hidRight = hidInput->mouseturnx > 0 || hidInput->joyaxes[JOYAXIS_Yaw] < 0; const bool hidRight = hidInput->mouseturnx > 0 || hidInput->joyaxes[JOYAXIS_Yaw] < 0;
const int turndir = (kbdRight || hidRight) - (kbdLeft || hidLeft); const int turndir = (kbdRight || hidRight) - (kbdLeft || hidLeft);
if (p->OnMotorcycle && (p->MotoSpeed == 0 || !p->on_ground)) if ((p->OnMotorcycle || p->MotoSpeed) && (turndir || p->moto_drink))
{ {
resetTurnHeldAmt();
doVehicleTilting(p, turndir, factor);
}
else if ((p->OnMotorcycle || p->MotoSpeed) && (turndir || p->moto_drink))
{
if (p->OnMotorcycle || !p->NotOnWater)
doVehicleTilting(p, turndir, factor);
const bool noattenuate = (isTurboTurnTime() || hidLeft || hidRight) && (!p->OnMotorcycle || p->MotoSpeed > 0); const bool noattenuate = (isTurboTurnTime() || hidLeft || hidRight) && (!p->OnMotorcycle || p->MotoSpeed > 0);
const auto vel = (noattenuate) ? (baseVel) : (baseVel * velScale); const auto vel = (noattenuate) ? (baseVel) : (baseVel * velScale);
@ -558,15 +539,11 @@ static float getVehicleTurnVel(player_struct* p, HIDInput* const hidInput, const
if (hidInput->mouseturnx) if (hidInput->mouseturnx)
turnvel += sqrtf(abs(vel * hidInput->mouseturnx / factor) * (7.f / 20.f)) * Sgn(vel) * Sgn(hidInput->mouseturnx); turnvel += sqrtf(abs(vel * hidInput->mouseturnx / factor) * (7.f / 20.f)) * Sgn(vel) * Sgn(hidInput->mouseturnx);
} }
else if (p->OnMotorcycle || !p->NotOnWater) else
{ {
resetTurnHeldAmt(); resetTurnHeldAmt();
p->TiltStatus -= factor * Sgn(p->TiltStatus);
} }
if (fabs(p->TiltStatus) < factor)
p->TiltStatus = 0;
return turnvel * factor; return turnvel * factor;
} }

View file

@ -1491,6 +1491,18 @@ static unsigned outVehicleFlags(player_struct* p, ESyncBits& actions)
// //
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
static void doVehicleTilting(player_struct* const p, const int turndir, const bool canTilt)
{
p->oTiltStatus = p->TiltStatus;
p->TiltStatus = clamp(p->TiltStatus + (turndir && canTilt ? turndir : -Sgn(p->TiltStatus)), -10, 10);
}
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
static void doVehicleBumping(player_struct* p, DDukeActor* pact, unsigned flags, bool bumptest, int bumpscale) static void doVehicleBumping(player_struct* p, DDukeActor* pact, unsigned flags, bool bumptest, int bumpscale)
{ {
if (p->MotoSpeed != 0 && p->on_ground == 1) if (p->MotoSpeed != 0 && p->on_ground == 1)
@ -1718,6 +1730,7 @@ static void onMotorcycle(int snum, ESyncBits &actions)
p->MotoSpeed = 0; p->MotoSpeed = 0;
unsigned flags = outVehicleFlags(p, actions); unsigned flags = outVehicleFlags(p, actions);
doVehicleTilting(p, Sgn(p->sync.avel), !p->on_ground || p->sync.avel);
doVehicleSounds(p, pact, flags, 187, 188, 214, 189); doVehicleSounds(p, pact, flags, 187, 188, 214, 189);
doVehicleDrunk(p); doVehicleDrunk(p);
doVehicleThrottling(p, pact, flags, 2, 15, p->moto_on_oil ? 2 : 4, 70, -30); doVehicleThrottling(p, pact, flags, 2, 15, p->moto_on_oil ? 2 : 4, 70, -30);
@ -1809,6 +1822,7 @@ static void onBoat(int snum, ESyncBits &actions)
p->MotoSpeed = 0; p->MotoSpeed = 0;
unsigned flags = outVehicleFlags(p, actions); unsigned flags = outVehicleFlags(p, actions);
doVehicleTilting(p, Sgn(p->sync.avel), (p->MotoSpeed != 0 && (p->sync.avel || p->moto_drink)) || !p->NotOnWater);
doVehicleSounds(p, pact, flags, 87, 88, 89, 90); doVehicleSounds(p, pact, flags, 87, 88, 89, 90);
if (!p->NotOnWater) if (!p->NotOnWater)

View file

@ -299,7 +299,7 @@ struct player_struct
int SeaSick; int SeaSick;
short MamaEnd; // raat609 short MamaEnd; // raat609
short moto_drink; short moto_drink;
float TiltStatus, oTiltStatus; short TiltStatus, oTiltStatus;
double VBumpNow, VBumpTarget; double VBumpNow, VBumpTarget;
short TurbCount; short TurbCount;
short drug_stat[3]; // raat5f1..5 short drug_stat[3]; // raat5f1..5

View file

@ -325,7 +325,7 @@ struct DukePlayer native
native int SeaSick; native int SeaSick;
native int16 MamaEnd; // raat609 native int16 MamaEnd; // raat609
native int16 moto_drink; native int16 moto_drink;
native float TiltStatus, oTiltStatus; native int16 TiltStatus, oTiltStatus;
native double VBumpNow, VBumpTarget; native double VBumpNow, VBumpTarget;
native int16 TurbCount; native int16 TurbCount;
native int16 drug_stat[3]; // raat5f1..5 native int16 drug_stat[3]; // raat5f1..5