From 0836062edd32dcb6e11d1d5e997ef2e18b90870e Mon Sep 17 00:00:00 2001 From: lachwright Date: Tue, 15 Oct 2019 01:19:58 +0800 Subject: [PATCH] Limit climb camera rotation to a 180 degree cone --- src/p_user.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index b40a02fdf..13c10e2e2 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3498,13 +3498,26 @@ static void P_DoClimbing(player_t *player) P_Thrust(player->mo, player->mo->angle, FixedMul(-4*FRACUNIT, player->mo->scale)); } - /*if (!demoplayback || P_AnalogMove(player)) +#define CLIMBCONEMAX FixedAngle(90*FRACUNIT) + if (!demoplayback || P_AnalogMove(player)) { if (player == &players[consoleplayer]) - localangle = player->mo->angle; + { + angle_t angdiff = localangle - player->mo->angle; + if (angdiff < ANGLE_180 && angdiff > CLIMBCONEMAX) + localangle = player->mo->angle + CLIMBCONEMAX; + else if (angdiff > ANGLE_180 && angdiff < InvAngle(CLIMBCONEMAX)) + localangle = player->mo->angle - CLIMBCONEMAX; + } else if (player == &players[secondarydisplayplayer]) - localangle2 = player->mo->angle; - }*/ + { + angle_t angdiff = localangle2 - player->mo->angle; + if (angdiff < ANGLE_180 && angdiff > CLIMBCONEMAX) + localangle2 = player->mo->angle + CLIMBCONEMAX; + else if (angdiff > ANGLE_180 && angdiff < InvAngle(CLIMBCONEMAX)) + localangle2 = player->mo->angle - CLIMBCONEMAX; + } + } if (player->climbing == 0) P_SetPlayerMobjState(player->mo, S_PLAY_JUMP);