diff --git a/src/g_game.c b/src/g_game.c index 1c186ae03..c9bf75fa2 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1411,7 +1411,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) ticcmd_centerviewdown[forplayer] = true; } - else if (ticcmd_centerviewdown[forplayer] || (leveltime < 5)) + else if (ticcmd_centerviewdown[forplayer]) { if (controlstyle == CS_SIMPLE) { @@ -1426,7 +1426,8 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) { if ( P_MobjWasRemoved(ticcmd_ztargetfocus[forplayer]) || - (leveltime < 5) || + (cv_directionchar[forplayer].value != 2) || + (R_PointToDist2(player->mo->x, player->mo->y, ticcmd_ztargetfocus[forplayer]->x, ticcmd_ztargetfocus[forplayer]->y) > 3000<playerstate != PST_LIVE) || player->exiting || !ticcmd_ztargetfocus[forplayer]->health || @@ -1479,8 +1480,20 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) } } - if (ticcmd_centerviewdown[forplayer] && controlstyle == CS_SIMPLE) - controlstyle = CS_LEGACY; + if (ticcmd_centerviewdown[forplayer] && chasecam) + { + if (controlstyle == CS_SIMPLE) + controlstyle = CS_LEGACY; + } + else if (cv_directionchar[forplayer].value == 2) + { + if (P_MobjWasRemoved(ticcmd_ztargetfocus[forplayer]) || !chasecam) + { + P_SetTarget(&ticcmd_ztargetfocus[forplayer], NULL); + CV_SetValue(&cv_directionchar[forplayer], 1); + } + + } if (PLAYERINPUTDOWN(ssplayer, GC_CAMRESET)) {