diff --git a/source/games/sw/src/draw.cpp b/source/games/sw/src/draw.cpp index 57c27bd1f..ac3b07aa0 100644 --- a/source/games/sw/src/draw.cpp +++ b/source/games/sw/src/draw.cpp @@ -1183,7 +1183,7 @@ void drawscreen(PLAYER* pp, double interpfrac, bool sceneonly) { if (cl_viewbob) { - tpos.Z += camerapp->pbob_amt + interpolatedvalue(pp->obob_z, pp->bob_z, interpfrac); + tpos.Z += interpolatedvalue(pp->obob_z + pp->opbob_amt, pp->bob_z + pp->pbob_amt, interpfrac); } // recoil only when not in camera diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 93bd0a143..76f8a7c94 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -588,7 +588,7 @@ struct PLAYER SECTOR_OBJECT* sop; // will either be sop_remote or sop_control double hiz, loz; - double pbob_amt; + double opbob_amt, pbob_amt; int jump_count, jump_speed; // jumping double z_speed; diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index 0bc3d8df6..a171fe200 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -1774,6 +1774,7 @@ void DoPlayerRecoil(PLAYER* pp) void DoPlayerSpriteBob(PLAYER* pp, double player_height, double bobamt, short bob_speed) { pp->bob_ndx = (pp->bob_ndx + (synctics << bob_speed)) & 2047; + pp->opbob_amt = pp->pbob_amt; pp->pbob_amt = bobamt * BobVal(pp->bob_ndx); pp->actor->spr.pos.Z = pp->pos.Z + player_height + pp->pbob_amt; }