From 3a97e7b8074d6ccc6b028bd6d6961c60b7a6629c Mon Sep 17 00:00:00 2001 From: lachwright Date: Mon, 28 Oct 2019 21:30:36 +0800 Subject: [PATCH 1/4] Slow glide down underwater --- src/p_user.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index dde1dc1dc..9538c5faa 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -5303,14 +5303,23 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd) // Now Knuckles-type abilities are checked. if (!(player->pflags & PF_THOKKED) || player->charflags & SF_MULTIABILITY) { - INT32 glidespeed = player->actionspd; + fixed_t glidespeed = FixedMul(player->actionspd, player->mo->scale); + fixed_t playerspeed = player->speed; + + if (player->mo->eflags & MFE_UNDERWATER) + { + glidespeed >>= 1; + playerspeed >>= 1; + player->mo->momx = ((player->mo->momx - player->cmomx) >> 1) + player->cmomx; + player->mo->momy = ((player->mo->momy - player->cmomy) >> 1) + player->cmomy; + } player->pflags |= PF_GLIDING|PF_THOKKED; player->glidetime = 0; P_SetPlayerMobjState(player->mo, S_PLAY_GLIDE); - if (player->speed < glidespeed) - P_Thrust(player->mo, player->mo->angle, glidespeed - player->speed); + if (playerspeed < glidespeed) + P_Thrust(player->mo, player->mo->angle, glidespeed - playerspeed); player->pflags &= ~(PF_SPINNING|PF_STARTDASH); } break; From 77776e5fe8f406dcc517ffb832c769b2d41b9743 Mon Sep 17 00:00:00 2001 From: lachwright Date: Mon, 28 Oct 2019 22:13:34 +0800 Subject: [PATCH 2/4] Don't let Knuckles play the landing animation unless in fall state --- src/p_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 9538c5faa..a3af3cb78 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2263,7 +2263,7 @@ boolean P_PlayerHitFloor(player_t *player, boolean dorollstuff) else if (!player->skidtime) player->pflags &= ~PF_GLIDING; } - else if (player->charability == CA_GLIDEANDCLIMB && player->pflags & PF_THOKKED && (~player->pflags) & PF_SHIELDABILITY) + else if (player->charability == CA_GLIDEANDCLIMB && player->pflags & PF_THOKKED && !(player->pflags & PF_SHIELDABILITY) && player->mo->state-states == S_PLAY_FALL) { if (player->mo->state-states != S_PLAY_GLIDE_LANDING) { From e92cdfe26e2e30dd93bdf6f001b15646688a341d Mon Sep 17 00:00:00 2001 From: lachwright Date: Mon, 28 Oct 2019 22:21:20 +0800 Subject: [PATCH 3/4] Slow climbing down underwater --- src/p_user.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index a3af3cb78..a637ff4b2 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -5979,7 +5979,12 @@ static void P_3dMovement(player_t *player) if (player->climbing) { if (cmd->forwardmove) - P_SetObjectMomZ(player->mo, FixedDiv(cmd->forwardmove*FRACUNIT, 15*FRACUNIT>>1), false); + { + if (player->mo->eflags & MFE_UNDERWATER) + P_SetObjectMomZ(player->mo, FixedDiv(cmd->forwardmove*FRACUNIT, 10*FRACUNIT), false); + else + P_SetObjectMomZ(player->mo, FixedDiv(cmd->forwardmove*FRACUNIT, 15*FRACUNIT>>1), false); + } } else if (!analogmove && cmd->forwardmove != 0 && !(player->pflags & PF_GLIDING || player->exiting @@ -6013,7 +6018,12 @@ static void P_3dMovement(player_t *player) } // Sideways movement if (player->climbing) - P_InstaThrust(player->mo, player->mo->angle-ANGLE_90, FixedDiv(cmd->sidemove*player->mo->scale, 15*FRACUNIT>>1)); + { + if (player->mo->eflags & MFE_UNDERWATER) + P_InstaThrust(player->mo, player->mo->angle-ANGLE_90, FixedDiv(cmd->sidemove*player->mo->scale, 10*FRACUNIT)); + else + P_InstaThrust(player->mo, player->mo->angle-ANGLE_90, FixedDiv(cmd->sidemove*player->mo->scale, 15*FRACUNIT>>1)); + } // Analog movement control else if (analogmove) { From d87fd3842d200fcf8393be9c2e124f0d3b28b555 Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 7 Nov 2019 14:15:57 -0800 Subject: [PATCH 4/4] Whitespace --- src/p_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index 37debee94..da6152929 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -5305,7 +5305,7 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd) { fixed_t glidespeed = FixedMul(player->actionspd, player->mo->scale); fixed_t playerspeed = player->speed; - + if (player->mo->eflags & MFE_UNDERWATER) { glidespeed >>= 1;