diff --git a/src/cvars.cpp b/src/cvars.cpp index 986cc1e7c..ea3db407c 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -1174,6 +1174,8 @@ 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(); + void I_JoyScale(void); void I_JoyScale2(void); void I_JoyScale3(void); diff --git a/src/p_user.c b/src/p_user.c index 63bfe58ba..c40568a32 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2918,6 +2918,8 @@ fixed_t t_cam_rotate[MAXSPLITSCREENPLAYERS] = {-42,-42,-42,-42}; void P_DemoCameraMovement(camera_t *cam, UINT8 num) { + extern consvar_t cv_freecam_speed; + ticcmd_t *cmd; angle_t thrustangle; player_t *lastp; @@ -2946,16 +2948,17 @@ void P_DemoCameraMovement(camera_t *cam, UINT8 num) if (!cam->button_a_held) { int dir = ((cmd->buttons & BT_ACCELERATE) ? 1 : 0) + ((cmd->buttons & BT_BRAKE) ? -1 : 0); + fixed_t spd = 32*mapobjectscale*cv_freecam_speed.value; switch (dir) { case 1: - cam->z += 32*mapobjectscale; + cam->z += spd; moving = true; break; case -1: - cam->z -= 32*mapobjectscale; + cam->z -= spd; moving = true; break; } @@ -3025,14 +3028,16 @@ void P_DemoCameraMovement(camera_t *cam, UINT8 num) if (cmd->forwardmove != 0) { + fixed_t spd = cmd->forwardmove*mapobjectscale*cv_freecam_speed.value; + thrustangle = cam->angle >> ANGLETOFINESHIFT; - cam->x += FixedMul(cmd->forwardmove*mapobjectscale, FINECOSINE(thrustangle)); - cam->y += FixedMul(cmd->forwardmove*mapobjectscale, FINESINE(thrustangle)); + cam->x += FixedMul(spd, FINECOSINE(thrustangle)); + cam->y += FixedMul(spd, FINESINE(thrustangle)); if (!cam->reset_aiming) { - cam->z += FixedMul(cmd->forwardmove*mapobjectscale, AIMINGTOSLOPE(cam->aiming)); + cam->z += FixedMul(spd, AIMINGTOSLOPE(cam->aiming)); } // momentums are useless here, directly add to the coordinates