diff --git a/src/g_game.c b/src/g_game.c index 175e757ec9c58a865052be6a3a7f838a0b04c121..fd8178ca8b1caa6ee5a456aca151125c664f87e5 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1425,7 +1425,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) { @@ -1440,11 +1440,11 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) { if ( P_MobjWasRemoved(ticcmd_ztargetfocus[forplayer]) || - (leveltime < 5) || + (cv_directionchar[forplayer].value != 2) || + (!P_CheckSight(player->mo, ticcmd_ztargetfocus[forplayer])) || (player->playerstate != PST_LIVE) || player->exiting || - !ticcmd_ztargetfocus[forplayer]->health || - (ticcmd_ztargetfocus[forplayer]->type == MT_EGGMOBILE3 && !ticcmd_ztargetfocus[forplayer]->movecount) // Sea Egg is moving around underground and shouldn't be tracked + !ticcmd_ztargetfocus[forplayer]->health ) P_SetTarget(&ticcmd_ztargetfocus[forplayer], NULL); else @@ -1477,7 +1477,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer) if (player->mo && R_PointToDist2(0, 0, player->mo->x - ticcmd_ztargetfocus[forplayer]->x, player->mo->y - ticcmd_ztargetfocus[forplayer]->y - ) > 50*player->mo->scale) + ) > FixedMul(50<<FRACBITS, player->mo->scale)) { INT32 anglediff = R_PointToAngle2(player->mo->x, player->mo->y, ticcmd_ztargetfocus[forplayer]->x, ticcmd_ztargetfocus[forplayer]->y) - *myangle; const INT32 maxturn = ANG10/2; @@ -1493,8 +1493,21 @@ 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 (!ticcmd_ztargetfocus[forplayer] || !chasecam) + { + P_SetTarget(&ticcmd_ztargetfocus[forplayer], NULL); + CV_SetValue(&cv_directionchar[forplayer], 1); + } + + } + if (PLAYERINPUTDOWN(ssplayer, GC_CAMRESET)) {