diff --git a/source/core/coreactor.h b/source/core/coreactor.h index 3ecea9f24..b967e2a94 100644 --- a/source/core/coreactor.h +++ b/source/core/coreactor.h @@ -146,6 +146,17 @@ public: viewzoffset = oviewzoffset; } + void restoreang() + { + spr.Angles = PrevAngles; + } + + void restoreloc() + { + restorepos(); + restoreang(); + } + double getOffsetZ() { return spr.pos.Z + viewzoffset; diff --git a/source/core/gameinput.h b/source/core/gameinput.h index 78057b5b9..4ac77982c 100644 --- a/source/core/gameinput.h +++ b/source/core/gameinput.h @@ -94,33 +94,11 @@ struct PlayerAngles // Legacy, to be removed. DAngle ZzHORIZOFF, ZzOHORIZOFF; - void backupPitch() - { - ZzOLDHORIZON() = ZzHORIZON(); - ZzOHORIZOFF = ZzHORIZOFF; - } - void restorePitch() - { - ZzHORIZON() = ZzOLDHORIZON(); - ZzHORIZOFF = ZzOHORIZOFF; - } DAngle horizOLDSUM() { return ZzOLDHORIZON() + ZzOHORIZOFF; } DAngle horizSUM() { return ZzHORIZON() + ZzHORIZOFF; } DAngle horizLERPSUM(double const interpfrac) { return interpolatedvalue(horizOLDSUM(), horizSUM(), interpfrac); } DAngle ZzLOOKANG, ZzOLDLOOKANG, ZzROTSCRNANG, ZzOLDROTSCRNANG, YawSpin; - void backupYaw() - { - ZzOLDANGLE() = ZzANGLE(); - ZzOLDLOOKANG = ZzLOOKANG; - ZzOLDROTSCRNANG = ZzROTSCRNANG; - } - void restoreYaw() - { - ZzANGLE() = ZzOLDANGLE(); - ZzLOOKANG = ZzOLDLOOKANG; - ZzROTSCRNANG = ZzOLDROTSCRNANG; - } DAngle angOLDSUM() { return ZzOLDANGLE() + ZzOLDLOOKANG; } DAngle angSUM() { return ZzANGLE() + ZzLOOKANG; } DAngle angLERPSUM(double const interpfrac) { return interpolatedvalue(angOLDSUM(), angSUM(), interpfrac); } diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index 914f775f8..1899f5d59 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -203,8 +203,7 @@ void checkavailweapon(player_struct* player) void clearcamera(player_struct* ps) { ps->newOwner = nullptr; - ps->GetActor()->restorepos(); - ps->Angles.restoreYaw(); + ps->GetActor()->restoreloc(); updatesector(ps->GetActor()->getPosWithOffsetZ(), &ps->cursector); DukeStatIterator it(STAT_ACTOR); diff --git a/source/games/duke/src/actors_d.cpp b/source/games/duke/src/actors_d.cpp index cc1449c61..762f2b3d8 100644 --- a/source/games/duke/src/actors_d.cpp +++ b/source/games/duke/src/actors_d.cpp @@ -1730,8 +1730,7 @@ static void greenslime(DDukeActor *actor) if (ps[p].newOwner != nullptr) { ps[p].newOwner = nullptr; - ps[p].GetActor()->restorepos(); - ps[p].Angles.restoreYaw(); + ps[p].GetActor()->restoreloc(); updatesector(ps[p].GetActor()->getPosWithOffsetZ(), &ps[p].cursector); diff --git a/source/games/duke/src/gameexec.cpp b/source/games/duke/src/gameexec.cpp index 79c099288..470af7466 100644 --- a/source/games/duke/src/gameexec.cpp +++ b/source/games/duke/src/gameexec.cpp @@ -2045,8 +2045,7 @@ int ParseState::parse(void) if(!isRR() && ps[g_p].newOwner != nullptr) { ps[g_p].newOwner = nullptr; - ps[g_p].GetActor()->restorepos(); - ps[g_p].Angles.restoreYaw(); + ps[g_p].GetActor()->restoreloc(); updatesector(ps[g_p].GetActor()->getPosWithOffsetZ(), &ps[g_p].cursector); DukeStatIterator it(STAT_ACTOR); diff --git a/source/games/duke/src/player.cpp b/source/games/duke/src/player.cpp index ac05225a4..364698418 100644 --- a/source/games/duke/src/player.cpp +++ b/source/games/duke/src/player.cpp @@ -543,13 +543,6 @@ void footprints(int snum) // //--------------------------------------------------------------------------- -inline void backupplayer(player_struct* p) -{ - p->backuppos(); - p->Angles.backupYaw(); - p->Angles.backupPitch(); -} - void playerisdead(int snum, int psectlotag, double floorz, double ceilingz) { auto p = &ps[snum]; @@ -620,7 +613,7 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz) clipmove(p->GetActor()->spr.pos.XY(), p->GetActor()->getOffsetZ(), &p->cursector, DVector2( 0, 0), 10.25, 4., 4., CLIPMASK0, coll); } - backupplayer(p); + actor->backuploc(); p->Angles.ZzHORIZOFF = p->Angles.ZzHORIZON() = nullAngle; @@ -865,7 +858,6 @@ void checklook(int snum, ESyncBits actions) actions &= ~SB_LOOK_RIGHT; } } - p->Angles.backupYaw(); } //--------------------------------------------------------------------------- diff --git a/source/games/duke/src/player_d.cpp b/source/games/duke/src/player_d.cpp index 5af0537e6..713fdd7f4 100644 --- a/source/games/duke/src/player_d.cpp +++ b/source/games/duke/src/player_d.cpp @@ -2762,7 +2762,6 @@ void processinput_d(int snum) if (SyncInput()) { - p->Angles.backupPitch(); doslopetilting(p); } diff --git a/source/games/duke/src/player_r.cpp b/source/games/duke/src/player_r.cpp index fd0d1c6eb..bc4751b5f 100644 --- a/source/games/duke/src/player_r.cpp +++ b/source/games/duke/src/player_r.cpp @@ -3348,7 +3348,6 @@ void processinput_r(int snum) if (SyncInput()) { - p->Angles.backupPitch(); doslopetilting(p); } diff --git a/source/games/duke/src/sectors_d.cpp b/source/games/duke/src/sectors_d.cpp index 1983d7ce8..fe662fb25 100644 --- a/source/games/duke/src/sectors_d.cpp +++ b/source/games/duke/src/sectors_d.cpp @@ -1061,8 +1061,7 @@ void checkhitdefault_d(DDukeActor* targ, DDukeActor* proj) if (ps[p].newOwner != nullptr) { ps[p].newOwner = nullptr; - ps[p].GetActor()->restorepos(); - ps[p].Angles.restoreYaw(); + ps[p].GetActor()->restoreloc(); updatesector(ps[p].GetActor()->getPosWithOffsetZ(), &ps[p].cursector); diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index ea3046910..475bd8b90 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -904,8 +904,6 @@ void AIPlayer::Tick(RunListEvent* ev) int nAction = PlayerList[nPlayer].nAction; int nActionB = PlayerList[nPlayer].nAction; - PlayerList[nPlayer].Angles.backupYaw(); - PlayerList[nPlayer].Angles.backupPitch(); PlayerList[nPlayer].Angles.resetAdjustments(); pPlayerActor->vel.XY() = sPlayerInput[nPlayer].vel; diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index 5e814d5c0..df44583c6 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -2176,7 +2176,7 @@ void DoPlayerMove(PLAYER* pp) if (interpolate_ride) { pp->actor->backupz(); - pp->Angles.backupYaw(); + pp->actor->backupang(); } // check for warp - probably can remove from CeilingHit @@ -6677,10 +6677,8 @@ void MoveSkipSavePos(void) { pp = Player + pnum; - pp->actor->backuppos(); + pp->actor->backuploc(); pp->obob_z = pp->bob_z; - pp->Angles.backupYaw(); - pp->Angles.backupPitch(); pp->opbob_amt = pp->pbob_amt; }