From 14b7338946ddd0a497b332da518be91fc5ea0749 Mon Sep 17 00:00:00 2001 From: Andrei Drexler Date: Sun, 27 Feb 2022 21:36:47 +0200 Subject: [PATCH] Fix intermission camera angles during demo playback (see https://github.com/sezero/quakespasm/issues/18) --- Quake/cl_parse.c | 3 +++ Quake/view.c | 14 ++++++++++++++ Quake/view.h | 1 + 3 files changed, 18 insertions(+) diff --git a/Quake/cl_parse.c b/Quake/cl_parse.c index 736ea354..17028511 100644 --- a/Quake/cl_parse.c +++ b/Quake/cl_parse.c @@ -1188,6 +1188,7 @@ void CL_ParseServerMessage (void) cl.intermission = 1; cl.completed_time = cl.time; vid.recalc_refdef = true; // go to full screen + V_RestoreAngles (); break; case svc_finale: @@ -1199,6 +1200,7 @@ void CL_ParseServerMessage (void) SCR_CenterPrint (str); Con_LogCenterPrint (str); //johnfitz + V_RestoreAngles (); break; case svc_cutscene: @@ -1210,6 +1212,7 @@ void CL_ParseServerMessage (void) SCR_CenterPrint (str); Con_LogCenterPrint (str); //johnfitz + V_RestoreAngles (); break; case svc_sellscreen: diff --git a/Quake/view.c b/Quake/view.c index acb2d927..6a24181c 100644 --- a/Quake/view.c +++ b/Quake/view.c @@ -870,6 +870,20 @@ void V_CalcRefdef (void) Chase_UpdateForDrawing (); //johnfitz } +/* +================== +V_RestoreAngles + +Resets the viewentity angles to the last values received from the server +(undoing the manual adjustments performed by V_CalcRefdef) +================== +*/ +void V_RestoreAngles (void) +{ + entity_t *ent = &cl_entities[cl.viewentity]; + VectorCopy (ent->msg_angles[0], ent->angles); +} + /* ================== V_RenderView diff --git a/Quake/view.h b/Quake/view.h index af0cdf1d..32d683be 100644 --- a/Quake/view.h +++ b/Quake/view.h @@ -33,6 +33,7 @@ void V_RenderView (void); void V_CalcBlend (void); void V_UpdateBlend (void); float V_CalcRoll (vec3_t angles, vec3_t velocity); +void V_RestoreAngles (void); //void V_UpdatePalette (void); //johnfitz #endif /* _QUAKE_VIEW_H */