Intermission Demo playback fix?
Posted: Sun Jul 13, 2014 12:53 am
There is an issue in FitzQuake 0.85, JoeQuake and ProQuake --- which means any engine derived from one of these. Original Quake is not affected, appears related to support shorts for angles for players, instead of original Quake "byte angles".
Record a demo: play e1m1 and go through exit teleporter. Intermission is up. Let it sit a few seconds, and make note of what the view looks like then type "stop".
Play back your demo. Notice that at intermission, the camera is not looking where it should! If you used protocol 15, playing it back in WinQuake or GLQuake will be correct, therefore it the interpretation of read messages.
Now for me, this is fixing it:
BEFORE: FitzQuake 0.85 example
AFTER: After a lot of inspection, I added the following which resolves the issue with every demo I have played back.
mviewangles are the current and previous network received viewangles, as I understand it.
It looks like angles from svc_setangle have a negative pitch (maybe all angle messages from the server do?)
Record a demo: play e1m1 and go through exit teleporter. Intermission is up. Let it sit a few seconds, and make note of what the view looks like then type "stop".
Play back your demo. Notice that at intermission, the camera is not looking where it should! If you used protocol 15, playing it back in WinQuake or GLQuake will be correct, therefore it the interpretation of read messages.
Now for me, this is fixing it:
BEFORE: FitzQuake 0.85 example
Code: Select all
case svc_setangle:
for (i=0 ; i<3 ; i++)
cl.viewangles[i] = MSG_ReadAngle ();Code: Select all
case svc_setangle:
for (i=0 ; i<3 ; i++)
cl.viewangles[i] = MSG_ReadAngle ();
// Baker addition ...
if (cls.demoplayback)
{
VectorCopy (cl.viewangles, cl.mviewangles[0]);
VectorCopy (cl.mviewangles[0], cl.mviewangles[1]);
VectorCopy (cl.mviewangles[0], cl.lerpangles);
cl.mviewangles[0][0] = cl.mviewangles[1][0] = cl.lerpangles[0] = -cl.lerpangles[0];
}
It looks like angles from svc_setangle have a negative pitch (maybe all angle messages from the server do?)