diff --git a/src/cvars.cpp b/src/cvars.cpp index dd4f09336..c41f66514 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -1174,7 +1174,7 @@ consvar_t cv_fov[MAXSPLITSCREENPLAYERS] = { Player("fov4", "90").floating_point().min_max(60*FRACUNIT, 179*FRACUNIT).onchange(Fov_OnChange).dont_save(), }; -consvar_t cv_freecam_speed = Player("freecam_speed", "1").min_max(1, 10).dont_save(); +consvar_t cv_freecam_speed = Player("freecam_speed", "1").min_max(-64, 10).dont_save(); void I_JoyScale(void); void I_JoyScale2(void); diff --git a/src/p_user.c b/src/p_user.c index e3d28ff21..7fe77b316 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2948,10 +2948,15 @@ void P_DemoCameraMovement(camera_t *cam, UINT8 num) cam->angle += turning; // camera movement: - if (!cam->button_a_held) + if (!cam->button_a_held && cv_freecam_speed.value) { int dir = ((cmd->buttons & BT_ACCELERATE) ? 1 : 0) + ((cmd->buttons & BT_BRAKE) ? -1 : 0); - fixed_t spd = 32*mapobjectscale*cv_freecam_speed.value; + + fixed_t spd = 32*mapobjectscale; + if (cv_freecam_speed.value > 1) + spd *= cv_freecam_speed.value; + else if (cv_freecam_speed.value < -1) + spd /= -cv_freecam_speed.value; switch (dir) { @@ -3029,9 +3034,13 @@ void P_DemoCameraMovement(camera_t *cam, UINT8 num) cam->momx = cam->momy = cam->momz = 0; - if (cmd->forwardmove != 0) + if (cmd->forwardmove != 0 && cv_freecam_speed.value) { - fixed_t spd = cmd->forwardmove*mapobjectscale*cv_freecam_speed.value; + fixed_t spd = cmd->forwardmove*mapobjectscale; + if (cv_freecam_speed.value > 1) + spd *= cv_freecam_speed.value; + else if (cv_freecam_speed.value < -1) + spd /= -cv_freecam_speed.value; thrustangle = cam->angle >> ANGLETOFINESHIFT;