diff --git a/src/menus/transient/pause-replay.c b/src/menus/transient/pause-replay.c index 163a2885e..46c0a6cfb 100644 --- a/src/menus/transient/pause-replay.c +++ b/src/menus/transient/pause-replay.c @@ -239,6 +239,7 @@ void M_PlaybackToggleFreecam(INT32 choice) if (!demo.freecam) // toggle on { demo.freecam = true; + democam.button_a_held = 2; } else // toggle off { diff --git a/src/p_local.h b/src/p_local.h index 22c593c21..06f8b9d61 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -131,6 +131,14 @@ struct camera_t angle_t old_angle, old_aiming; }; +// demo freecam or something before i commit die +struct demofreecam_s { + + UINT8 button_a_held; // A button was held since entering from menu, so don't move camera +}; + +extern struct demofreecam_s democam; + extern camera_t camera[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_cam_dist[MAXSPLITSCREENPLAYERS], cv_cam_still[MAXSPLITSCREENPLAYERS], cv_cam_height[MAXSPLITSCREENPLAYERS]; extern consvar_t cv_cam_speed[MAXSPLITSCREENPLAYERS], cv_cam_rotate[MAXSPLITSCREENPLAYERS]; diff --git a/src/p_user.c b/src/p_user.c index cec39ee8a..46df9a0ad 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2939,6 +2939,8 @@ fixed_t t_cam_dist[MAXSPLITSCREENPLAYERS] = {-42,-42,-42,-42}; fixed_t t_cam_height[MAXSPLITSCREENPLAYERS] = {-42,-42,-42,-42}; fixed_t t_cam_rotate[MAXSPLITSCREENPLAYERS] = {-42,-42,-42,-42}; +struct demofreecam_s democam; + void P_DemoCameraMovement(camera_t *cam) { ticcmd_t *cmd; @@ -2954,10 +2956,18 @@ void P_DemoCameraMovement(camera_t *cam) cam->aiming = G_ClipAimingPitch((INT32 *)&cam->aiming); // camera movement: - if (cmd->buttons & BT_ACCELERATE) - cam->z += 32*mapobjectscale; - else if (cmd->buttons & BT_BRAKE) - cam->z -= 32*mapobjectscale; + if (!democam.button_a_held) + { + if (cmd->buttons & BT_ACCELERATE) + cam->z += 32*mapobjectscale; + else if (cmd->buttons & BT_BRAKE) + cam->z -= 32*mapobjectscale; + } + + if (!(cmd->buttons & BT_ACCELERATE) && democam.button_a_held) + { + democam.button_a_held--; + } // if you hold item, you will lock on to displayplayer. (The last player you were ""f12-ing"") if (demo.freecam && cmd->buttons & BT_ATTACK)