diff --git a/src/g_game.c b/src/g_game.c index 4fd9c6aa7f5c23acf7b215cfb11d0f7243a82825..aada65f4845fd900a7d3e251f9a647605fa18c1e 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1402,7 +1402,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) { @@ -1417,7 +1417,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<<FRACBITS) || // Locks on to the wrong mobj if too far away, so just cancel it (player->playerstate != PST_LIVE) || player->exiting || !ticcmd_ztargetfocus[forplayer]->health || @@ -1470,8 +1471,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)) {