From 9d49bc621ee64e2326c0b8641dc71d098ce8b2d3 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 1 Jul 2011 20:00:16 +0200 Subject: [PATCH] add a workaround for Xonotic 0.1.0 "crouchbug" --- qcsrc/client/View.qc | 7 +++++++ qcsrc/common/util-pre.qh | 2 ++ qcsrc/warpzonelib/client.qc | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 69f7f4676..823f82044 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -549,8 +549,15 @@ void CSQC_UpdateView(float w, float h) // ALWAYS Clear Current Scene First R_ClearScene(); +#ifdef WORKAROUND_XON010 + if(checkextension("DP_CSQC_ROTATEMOVES")) + { +#endif R_SetView(VF_ORIGIN, view_origin); R_SetView(VF_ANGLES, view_angles); +#ifdef WORKAROUND_XON010 + } +#endif // FIXME engine bug? VF_SIZE and VF_MIN are not restored to sensible values by this R_SetView(VF_SIZE, vf_size); diff --git a/qcsrc/common/util-pre.qh b/qcsrc/common/util-pre.qh index bc086e4a9..4e237bfb6 100644 --- a/qcsrc/common/util-pre.qh +++ b/qcsrc/common/util-pre.qh @@ -1,2 +1,4 @@ #pragma flag enable subscope #pragma flag enable lo + +#define WORKAROUND_XON010 diff --git a/qcsrc/warpzonelib/client.qc b/qcsrc/warpzonelib/client.qc index d0e797448..5979c804d 100644 --- a/qcsrc/warpzonelib/client.qc +++ b/qcsrc/warpzonelib/client.qc @@ -242,12 +242,19 @@ void WarpZone_FixView() org = R_SetView3fv(VF_ORIGIN); ang = R_SetView3fv(VF_ANGLES); +#ifdef WORKAROUND_XON010 + float dirty; + dirty = checkextension("DP_CSQC_ROTATEMOVES"); +#endif e = WarpZone_Find(org, org); if(e) { org = WarpZone_TransformOrigin(e, org); ang = WarpZone_TransformVAngles(e, ang); +#ifdef WORKAROUND_XON010 + dirty = 1; +#endif WarpZone_View_Inside(); } else @@ -264,11 +271,22 @@ void WarpZone_FixView() rick *= f; R_SetView(VF_CL_VIEWANGLES_Z, rick); +#ifdef WORKAROUND_XON010 + if(ang_z > 1 || ang_z < -1) + dirty = 1; +#endif ang_z *= f; #endif +#ifdef WORKAROUND_XON010 + if(dirty) + { +#endif R_SetView(VF_ORIGIN, org); R_SetView(VF_ANGLES, ang); +#ifdef WORKAROUND_XON010 + } +#endif nearclip = '0 0 1' * (cvar("r_nearclip") * 1.125); corner0 = cs_unproject('0 0 0' + nearclip); -- 2.39.2