diff --git a/source/games/duke/src/actors.cpp b/source/games/duke/src/actors.cpp index c6fcc44ce..36bafb494 100644 --- a/source/games/duke/src/actors.cpp +++ b/source/games/duke/src/actors.cpp @@ -414,6 +414,10 @@ void moveplayers(void) int pn = act->PlayerIndex(); auto p = &ps[pn]; auto spri = &act->s; + + // Back up player's sprite angle, used in DrawAutomapPlayer() when input is synchronised. + act->tempang = spri->ang; + if (act->GetOwner()) { if (p->newOwner != nullptr) //Looking thru the camera diff --git a/source/games/duke/src/game_misc.cpp b/source/games/duke/src/game_misc.cpp index cab409b33..cb926c241 100644 --- a/source/games/duke/src/game_misc.cpp +++ b/source/games/duke/src/game_misc.cpp @@ -561,7 +561,7 @@ bool GameInterface::DrawAutomapPlayer(int cposx, int cposy, int czoom, int cang, auto pspr = &act->s; x1 = act->bposx + MulScale(pspr->x - act->bposx, smoothratio, 16) - cposx; y1 = act->bposy + MulScale(pspr->y - act->bposy, smoothratio, 16) - cposy; - daang = (pspr->ang - cang) & 2047; + daang = ((!SyncInput() ? pspr->ang : act->tempang + MulScale(((pspr->ang + 1024 - act->tempang) & 2047) - 1024, smoothratio, 16)) - cang) & 2047; if (p == screenpeek || ud.coop == 1) {