diff --git a/source/games/duke/src/hudweapon_r.cpp b/source/games/duke/src/hudweapon_r.cpp index 8635c4fdb..a4ac064ed 100644 --- a/source/games/duke/src/hudweapon_r.cpp +++ b/source/games/duke/src/hudweapon_r.cpp @@ -119,7 +119,7 @@ void displayweapon_r(int snum, double interpfrac) weapon_sway = interpolatedvalue(p->oweapon_sway, p->weapon_sway, interpfrac); hard_landing = interpolatedvalue(p->ohard_landing, p->hard_landing, interpfrac); gun_pos = 80 - interpolatedvalue(p->oweapon_pos * p->oweapon_pos, p->weapon_pos * p->weapon_pos, interpfrac); - TiltStatus = !SyncInput() ? p->TiltStatus : interpolatedvalue(p->oTiltStatus, p->TiltStatus, interpfrac); + TiltStatus = interpolatedvalue(p->oTiltStatus, p->TiltStatus, interpfrac); } else { diff --git a/source/games/duke/src/input.cpp b/source/games/duke/src/input.cpp index 28d3e4a55..1ceecc69f 100644 --- a/source/games/duke/src/input.cpp +++ b/source/games/duke/src/input.cpp @@ -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) { 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 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 auto vel = (noattenuate) ? (baseVel) : (baseVel * velScale); @@ -558,15 +539,11 @@ static float getVehicleTurnVel(player_struct* p, HIDInput* const hidInput, const if (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(); - p->TiltStatus -= factor * Sgn(p->TiltStatus); } - if (fabs(p->TiltStatus) < factor) - p->TiltStatus = 0; - return turnvel * factor; } diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index 7500e8cfb..763b35960 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -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) { if (p->MotoSpeed != 0 && p->on_ground == 1) @@ -1718,6 +1730,7 @@ static void onMotorcycle(int snum, ESyncBits &actions) p->MotoSpeed = 0; 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); doVehicleDrunk(p); 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; 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); if (!p->NotOnWater) diff --git a/source/games/duke/src/types.h b/source/games/duke/src/types.h index 1383ac7a5..a8211906b 100644 --- a/source/games/duke/src/types.h +++ b/source/games/duke/src/types.h @@ -299,7 +299,7 @@ struct player_struct int SeaSick; short MamaEnd; // raat609 short moto_drink; - float TiltStatus, oTiltStatus; + short TiltStatus, oTiltStatus; double VBumpNow, VBumpTarget; short TurbCount; short drug_stat[3]; // raat5f1..5 diff --git a/wadsrc/static/zscript/games/duke/dukegame.zs b/wadsrc/static/zscript/games/duke/dukegame.zs index 7f3a7cb84..48ba924ef 100644 --- a/wadsrc/static/zscript/games/duke/dukegame.zs +++ b/wadsrc/static/zscript/games/duke/dukegame.zs @@ -325,7 +325,7 @@ struct DukePlayer native native int SeaSick; native int16 MamaEnd; // raat609 native int16 moto_drink; - native float TiltStatus, oTiltStatus; + native int16 TiltStatus, oTiltStatus; native double VBumpNow, VBumpTarget; native int16 TurbCount; native int16 drug_stat[3]; // raat5f1..5