diff --git a/source/rr/src/player.cpp b/source/rr/src/player.cpp index 5d6cde35c..fd32d29f3 100644 --- a/source/rr/src/player.cpp +++ b/source/rr/src/player.cpp @@ -3596,11 +3596,6 @@ void P_GetInputMotorcycle(int playerNum) input.q16avel = fix16_sadd(input.q16avel, fix16_sdiv(fix16_from_int(info.mousex), F16(32))); input.q16avel = fix16_sadd(input.q16avel, fix16_from_int(info.dyaw / analogExtent * (analogTurnAmount << 1))); - input.q16horz = fix16_sadd(input.q16horz, fix16_sdiv(fix16_from_int(info.mousey), F16(64))); - - if (!in_mouseflip) input.q16horz = -input.q16horz; - - input.q16horz = fix16_ssub(input.q16horz, fix16_from_int(info.dpitch * analogTurnAmount / analogExtent)); input.svel -= info.dx * keyMove / analogExtent; input.fvel -= info.dz * keyMove / analogExtent; @@ -3645,27 +3640,24 @@ void P_GetInputMotorcycle(int playerNum) localInput.extbits |= (buttonMap.ButtonDown(gamefunc_Strafe_Left) || (input.svel > 0)) << 2; localInput.extbits |= (buttonMap.ButtonDown(gamefunc_Strafe_Right) || (input.svel < 0)) << 3; + int turnAmount; int const turn = input.q16avel / 32; int turnLeft = buttonMap.ButtonDown(gamefunc_Turn_Left) || buttonMap.ButtonDown(gamefunc_Strafe_Left); int turnRight = buttonMap.ButtonDown(gamefunc_Turn_Right) || buttonMap.ButtonDown(gamefunc_Strafe_Right); int avelScale = F16((turnLeft || turnRight) ? 1 : 0); if (turn) { + turnAmount = 40; avelScale = fix16_max(avelScale, fix16_clamp(fix16_mul(turn, turn),0,F16(1))); if (turn < 0) turnLeft = 1; else if (turn > 0) turnRight = 1; } + else + turnAmount = 20; - input.svel = input.fvel = input.q16avel = input.q16horz = 0; - - if (!pPlayer->moto_underwater) - { - localInput.bits |= (buttonMap.ButtonDown(gamefunc_Move_Forward) || buttonMap.ButtonDown(gamefunc_Strafe)) << SK_JUMP; - localInput.bits |= buttonMap.ButtonDown(gamefunc_Move_Backward) << SK_AIM_UP; - localInput.bits |= buttonMap.ButtonDown(gamefunc_Run) << SK_CROUCH; - } + input.svel = input.fvel = input.q16avel = 0; localInput.bits |= turnLeft << SK_AIM_DOWN; localInput.bits |= turnRight << SK_LOOK_LEFT; @@ -3702,36 +3694,16 @@ void P_GetInputMotorcycle(int playerNum) if (turnHeldTime >= TURBOTURNTIME && pPlayer->moto_speed > 0) { if (moveBack) - { - if (turn) - input.q16avel += fix16_from_int(20*2); - else - input.q16avel += fix16_from_int(10*2); - } + input.q16avel = fix16_sadd(input.q16avel, fix16_from_float(scaleAdjustmentToInterval(turnAmount))); else - { - if (turn) - input.q16avel -= fix16_from_int(20*2); - else - input.q16avel -= fix16_from_int(10*2); - } + input.q16avel = fix16_ssub(input.q16avel, fix16_from_float(scaleAdjustmentToInterval(turnAmount))); } else { if (moveBack) - { - if (turn) - input.q16avel += fix16_from_int(10*2); - else - input.q16avel += fix16_from_int(3*2); - } + input.q16avel = fix16_sadd(input.q16avel, fix16_from_float(scaleAdjustmentToInterval((turnAmount / 2.667)))); else - { - if (turn) - input.q16avel -= fix16_from_int(10*2); - else - input.q16avel -= fix16_from_int(3*2); - } + input.q16avel = fix16_ssub(input.q16avel, fix16_from_float(scaleAdjustmentToInterval((turnAmount / 2.667)))); } } else if (turnRight || pPlayer->moto_drink > 0) @@ -3743,36 +3715,16 @@ void P_GetInputMotorcycle(int playerNum) if (turnHeldTime >= TURBOTURNTIME && pPlayer->moto_speed > 0) { if (moveBack) - { - if (turn) - input.q16avel -= fix16_from_int(20*2); - else - input.q16avel -= fix16_from_int(10*2); - } + input.q16avel = fix16_ssub(input.q16avel, fix16_from_float(scaleAdjustmentToInterval(turnAmount))); else - { - if (turn) - input.q16avel += fix16_from_int(20*2); - else - input.q16avel += fix16_from_int(10*2); - } + input.q16avel = fix16_sadd(input.q16avel, fix16_from_float(scaleAdjustmentToInterval(turnAmount))); } else { if (moveBack) - { - if (turn) - input.q16avel -= fix16_from_int(10*2); - else - input.q16avel -= fix16_from_int(3*2); - } + input.q16avel = fix16_ssub(input.q16avel, fix16_from_float(scaleAdjustmentToInterval((turnAmount / 2.667)))); else - { - if (turn) - input.q16avel += fix16_from_int(10*2); - else - input.q16avel += fix16_from_int(3*2); - } + input.q16avel = fix16_sadd(input.q16avel, fix16_from_float(scaleAdjustmentToInterval((turnAmount / 2.667)))); } } else @@ -3787,83 +3739,20 @@ void P_GetInputMotorcycle(int playerNum) } if (pPlayer->moto_underwater) - pPlayer->moto_speed = 0; - - input.q16avel = fix16_mul(input.q16avel, avelScale); - - input.fvel += pPlayer->moto_speed; - - 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; + pPlayer->moto_speed = 0; } else { - if (!(movementLocked & IL_NOMOVE)) - { - localInput.fvel = clamp(localInput.fvel + input.fvel, -15, 120); - localInput.svel = clamp(localInput.svel + input.svel, -MAXSVEL, MAXSVEL); - } - - if (!(movementLocked & IL_NOANGLE)) - { - localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); - pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel) & 0x7FFFFFF; - } - - if (!(movementLocked & IL_NOHORIZ)) - { - localInput.q16horz = fix16_clamp(fix16_sadd(localInput.q16horz, input.q16horz), F16(-MAXHORIZVEL), F16(MAXHORIZVEL)); - pPlayer->q16horiz = fix16_clamp(fix16_sadd(pPlayer->q16horiz, input.q16horz), F16(HORIZ_MIN), F16(HORIZ_MAX)); - } + localInput.bits |= (buttonMap.ButtonDown(gamefunc_Move_Forward) || buttonMap.ButtonDown(gamefunc_Strafe)) << SK_JUMP; + localInput.bits |= buttonMap.ButtonDown(gamefunc_Move_Backward) << SK_AIM_UP; + localInput.bits |= buttonMap.ButtonDown(gamefunc_Run) << SK_CROUCH; } - // A horiz diff of 128 equal 45 degrees, so we convert horiz to 1024 angle units - - if (thisPlayer.horizAngleAdjust) - { - float const horizAngle - = atan2f(pPlayer->q16horiz - F16(100), F16(128)) * (512.f / fPI) + scaleAdjustmentToInterval(thisPlayer.horizAngleAdjust); - pPlayer->q16horiz = F16(100) + Blrintf(F16(128) * tanf(horizAngle * (fPI / 512.f))); - } - else if (pPlayer->return_to_center > 0 || thisPlayer.horizRecenter) - { - pPlayer->q16horiz = fix16_sadd(pPlayer->q16horiz, fix16_from_float(scaleAdjustmentToInterval(fix16_to_float(F16(66.666) - fix16_sdiv(pPlayer->q16horiz, F16(1.5)))))); - - if ((!pPlayer->return_to_center && thisPlayer.horizRecenter) || (pPlayer->q16horiz >= F16(99.9) && pPlayer->q16horiz <= F16(100.1))) - { - pPlayer->q16horiz = F16(100); - thisPlayer.horizRecenter = false; - } - - if (pPlayer->q16horizoff >= F16(-0.1) && pPlayer->q16horizoff <= F16(0.1)) - pPlayer->q16horizoff = 0; - } - - if (pPlayer->q16horizoff > 0) - { - pPlayer->q16horizoff = fix16_ssub(pPlayer->q16horizoff, fix16_from_float(scaleAdjustmentToInterval(fix16_to_float((pPlayer->q16horizoff >> 3) + fix16_one)))); - pPlayer->q16horizoff = fix16_max(pPlayer->q16horizoff, 0); - } - else if (pPlayer->q16horizoff < 0) - { - pPlayer->q16horizoff = fix16_sadd(pPlayer->q16horizoff, fix16_from_float(scaleAdjustmentToInterval(fix16_to_float((-pPlayer->q16horizoff >> 3) + fix16_one)))); - pPlayer->q16horizoff = fix16_min(pPlayer->q16horizoff, 0); - } - - if (thisPlayer.horizSkew) - pPlayer->q16horiz = fix16_sadd(pPlayer->q16horiz, fix16_from_float(scaleAdjustmentToInterval(fix16_to_float(thisPlayer.horizSkew)))); - - pPlayer->q16horiz = fix16_clamp(pPlayer->q16horiz, F16(HORIZ_MIN), F16(HORIZ_MAX)); + input.q16avel = fix16_mul(input.q16avel, avelScale); + localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); + pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel) & 0x7FFFFFF; + localInput.fvel = clamp(localInput.fvel + (input.fvel += pPlayer->moto_speed), -(MAXVEL / 8), (MAXVEL * 1.333)); if (TEST_SYNC_KEY(localInput.bits, SK_JUMP)) { @@ -3913,11 +3802,6 @@ void P_GetInputBoat(int playerNum) input.q16avel = fix16_sadd(input.q16avel, fix16_sdiv(fix16_from_int(info.mousex), F16(32))); input.q16avel = fix16_sadd(input.q16avel, fix16_from_int(info.dyaw / analogExtent * (analogTurnAmount << 1))); - input.q16horz = fix16_sadd(input.q16horz, fix16_sdiv(fix16_from_int(info.mousey), F16(64))); - - if (!in_mouseflip) input.q16horz = -input.q16horz; - - input.q16horz = fix16_ssub(input.q16horz, fix16_from_int(info.dpitch * analogTurnAmount / analogExtent)); input.svel -= info.dx * keyMove / analogExtent; input.fvel -= info.dz * keyMove / analogExtent; @@ -3962,21 +3846,25 @@ void P_GetInputBoat(int playerNum) localInput.extbits |= (buttonMap.ButtonDown(gamefunc_Strafe_Left) || (input.svel > 0)) << 2; localInput.extbits |= (buttonMap.ButtonDown(gamefunc_Strafe_Right) || (input.svel < 0)) << 3; + int turnAmount; int const turn = input.q16avel / 32; int turnLeft = buttonMap.ButtonDown(gamefunc_Turn_Left) || buttonMap.ButtonDown(gamefunc_Strafe_Left); int turnRight = buttonMap.ButtonDown(gamefunc_Turn_Right) || buttonMap.ButtonDown(gamefunc_Strafe_Right); int avelScale = F16((turnLeft || turnRight) ? 1 : 0); if (turn) { + turnAmount = 48; avelScale = fix16_max(avelScale, fix16_clamp(fix16_mul(turn, turn),0,F16(1))); if (turn < 0) turnLeft = 1; else if (turn > 0) turnRight = 1; } + else + turnAmount = 24; + + input.svel = input.fvel = input.q16avel = 0; - input.svel = input.fvel = input.q16avel = input.q16horz = 0; - localInput.bits |= (buttonMap.ButtonDown(gamefunc_Move_Forward) || buttonMap.ButtonDown(gamefunc_Strafe)) << SK_JUMP; localInput.bits |= buttonMap.ButtonDown(gamefunc_Move_Backward) << SK_AIM_UP; localInput.bits |= buttonMap.ButtonDown(gamefunc_Run) << SK_CROUCH; @@ -3998,41 +3886,16 @@ void P_GetInputBoat(int playerNum) pPlayer->tilt_status--; if (pPlayer->tilt_status < -10) pPlayer->tilt_status = -10; - } - if (turnHeldTime >= TURBOTURNTIME) - { - if (pPlayer->not_on_water) - { - if (turn) - input.q16avel -= fix16_from_int(6*2); - else - input.q16avel -= fix16_from_int(3*2); - } + if (turnHeldTime >= TURBOTURNTIME) + input.q16avel = fix16_ssub(input.q16avel, fix16_from_float(scaleAdjustmentToInterval(turnAmount))); else - { - if (turn) - input.q16avel -= fix16_from_int(20*2); - else - input.q16avel -= fix16_from_int(10*2); - } + input.q16avel = fix16_ssub(input.q16avel, fix16_from_float(scaleAdjustmentToInterval((turnAmount / 3.333)))); } else - { - if (pPlayer->not_on_water) - { - if (turn) - input.q16avel -= fix16_from_int(2*2); - else - input.q16avel -= fix16_from_int(1*2); - } + if (turnHeldTime >= TURBOTURNTIME) + input.q16avel = fix16_ssub(input.q16avel, fix16_from_float(scaleAdjustmentToInterval((turnAmount / 3)))); else - { - if (turn) - input.q16avel -= fix16_from_int(6*2); - else - input.q16avel -= fix16_from_int(3*2); - } - } + input.q16avel = fix16_ssub(input.q16avel, fix16_from_float(scaleAdjustmentToInterval(((turnAmount / 3.333) / 3)))); } else if (turnRight || pPlayer->moto_drink > 0) { @@ -4042,41 +3905,16 @@ void P_GetInputBoat(int playerNum) pPlayer->tilt_status++; if (pPlayer->tilt_status > 10) pPlayer->tilt_status = 10; - } - if (turnHeldTime >= TURBOTURNTIME) - { - if (pPlayer->not_on_water) - { - if (turn) - input.q16avel += fix16_from_int(6*2); - else - input.q16avel += fix16_from_int(3*2); - } + if (turnHeldTime >= TURBOTURNTIME) + input.q16avel = fix16_sadd(input.q16avel, fix16_from_float(scaleAdjustmentToInterval(turnAmount))); else - { - if (turn) - input.q16avel += fix16_from_int(20*2); - else - input.q16avel += fix16_from_int(10*2); - } + input.q16avel = fix16_sadd(input.q16avel, fix16_from_float(scaleAdjustmentToInterval((turnAmount / 3.333)))); } else - { - if (pPlayer->not_on_water) - { - if (turn) - input.q16avel += fix16_from_int(2*2); - else - input.q16avel += fix16_from_int(1*2); - } + if (turnHeldTime >= TURBOTURNTIME) + input.q16avel = fix16_sadd(input.q16avel, fix16_from_float(scaleAdjustmentToInterval((turnAmount / 3)))); else - { - if (turn) - input.q16avel += fix16_from_int(6*2); - else - input.q16avel += fix16_from_int(3*2); - } - } + input.q16avel = fix16_sadd(input.q16avel, fix16_from_float(scaleAdjustmentToInterval(((turnAmount / 3.333) / 3)))); } else if (!pPlayer->not_on_water) { @@ -4098,82 +3936,10 @@ void P_GetInputBoat(int playerNum) pPlayer->tilt_status++; } - input.fvel += pPlayer->moto_speed; - - input.q16avel = fix16_mul(input.q16avel, avelScale); - - 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(localInput.fvel + input.fvel, -15, 120); - localInput.svel = clamp(localInput.svel + input.svel, -MAXSVEL, MAXSVEL); - } - - if (!(movementLocked & IL_NOANGLE)) - { - localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); - pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel) & 0x7FFFFFF; - } - - if (!(movementLocked & IL_NOHORIZ)) - { - localInput.q16horz = fix16_clamp(fix16_sadd(localInput.q16horz, input.q16horz), F16(-MAXHORIZVEL), F16(MAXHORIZVEL)); - pPlayer->q16horiz = fix16_clamp(fix16_sadd(pPlayer->q16horiz, input.q16horz), F16(HORIZ_MIN), F16(HORIZ_MAX)); - } - } - - // A horiz diff of 128 equal 45 degrees, - // so we convert horiz to 1024 angle units - - if (thisPlayer.horizAngleAdjust) - { - float const horizAngle - = atan2f(pPlayer->q16horiz - F16(100), F16(128)) * (512.f / fPI) + scaleAdjustmentToInterval(thisPlayer.horizAngleAdjust); - pPlayer->q16horiz = F16(100) + Blrintf(F16(128) * tanf(horizAngle * (fPI / 512.f))); - } - else if (pPlayer->return_to_center > 0 || thisPlayer.horizRecenter) - { - pPlayer->q16horiz = fix16_sadd(pPlayer->q16horiz, fix16_from_float(scaleAdjustmentToInterval(fix16_to_float(F16(66.666) - fix16_sdiv(pPlayer->q16horiz, F16(1.5)))))); - - if ((!pPlayer->return_to_center && thisPlayer.horizRecenter) || (pPlayer->q16horiz >= F16(99.9) && pPlayer->q16horiz <= F16(100.1))) - { - pPlayer->q16horiz = F16(100); - thisPlayer.horizRecenter = false; - } - - if (pPlayer->q16horizoff >= F16(-0.1) && pPlayer->q16horizoff <= F16(0.1)) - pPlayer->q16horizoff = 0; - } - - if (pPlayer->q16horizoff > 0) - { - pPlayer->q16horizoff = fix16_ssub(pPlayer->q16horizoff, fix16_from_float(scaleAdjustmentToInterval(fix16_to_float((pPlayer->q16horizoff >> 3) + fix16_one)))); - pPlayer->q16horizoff = fix16_max(pPlayer->q16horizoff, 0); - } - else if (pPlayer->q16horizoff < 0) - { - pPlayer->q16horizoff = fix16_sadd(pPlayer->q16horizoff, fix16_from_float(scaleAdjustmentToInterval(fix16_to_float((-pPlayer->q16horizoff >> 3) + fix16_one)))); - pPlayer->q16horizoff = fix16_min(pPlayer->q16horizoff, 0); - } - - if (thisPlayer.horizSkew) - pPlayer->q16horiz = fix16_sadd(pPlayer->q16horiz, fix16_from_float(scaleAdjustmentToInterval(fix16_to_float(thisPlayer.horizSkew)))); - - pPlayer->q16horiz = fix16_clamp(pPlayer->q16horiz, F16(HORIZ_MIN), F16(HORIZ_MAX)); + input.q16avel = fix16_mul(input.q16avel, avelScale); + localInput.q16avel = fix16_sadd(localInput.q16avel, input.q16avel); + pPlayer->q16ang = fix16_sadd(pPlayer->q16ang, input.q16avel) & 0x7FFFFFF; + localInput.fvel = clamp(localInput.fvel + (input.fvel += pPlayer->moto_speed), -15, 120); } int dword_A99D4, dword_A99D8, dword_A99DC, dword_A99E0;