diff --git a/src/doomstat.h b/src/doomstat.h index 7356a8c18..ba6e18a7f 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -304,6 +304,7 @@ extern struct quake { // camera offsets and duration fixed_t x,y,z; + angle_t roll; UINT16 time; // location, radius, and intensity... diff --git a/src/p_tick.c b/src/p_tick.c index 071e80d6c..4b94b579a 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -632,10 +632,17 @@ void P_Ticker(boolean run) quake.x = M_RandomRange(-ir,ir); quake.y = M_RandomRange(-ir,ir); quake.z = M_RandomRange(-ir,ir); + ir >>= 2; + ir = M_RandomRange(-ir,ir); + if (ir < 0) + ir = ANGLE_MAX - FixedAngle(-ir); + else + ir = FixedAngle(ir); + quake.roll = ir; --quake.time; } else - quake.x = quake.y = quake.z = 0; + quake.x = quake.y = quake.z = quake.roll = 0; if (metalplayback) G_ReadMetalTic(metalplayback); diff --git a/src/r_main.c b/src/r_main.c index d3762de3c..cfe4be094 100644 --- a/src/r_main.c +++ b/src/r_main.c @@ -639,7 +639,7 @@ void R_CheckViewMorph(int s) float fisheyemap[MAXVIDWIDTH/2 + 1]; #endif - angle_t rollangle = players[displayplayers[s]].viewrollangle; + angle_t rollangle = players[displayplayers[s]].viewrollangle + quake.roll; #ifdef WOUGHMP_WOUGHMP fixed_t fisheye = cv_cam2_turnmultiplier.value; // temporary test value #endif