From 941bf8eb03174cd1c7fca04ad9bd5ab5f3effe22 Mon Sep 17 00:00:00 2001
From: toasterbabe <rollerorbital@gmail.com>
Date: Thu, 8 Sep 2016 14:38:57 +0100
Subject: [PATCH] Corrected multiple oversights with swimming players dropping
 their friends when they shouldn't.

---
 src/p_map.c  | 5 ++++-
 src/p_user.c | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/p_map.c b/src/p_map.c
index 0b4987c49b..48946a4ba6 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -307,7 +307,10 @@ static void P_DoTailsCarry(player_t *sonic, player_t *tails)
 	if ((sonic->pflags & PF_CARRIED) && sonic->mo->tracer == tails->mo)
 		return;
 
-	if (!tails->powers[pw_tailsfly] && !(tails->charability == CA_FLY && tails->mo->state-states == S_PLAY_FLY_TIRED))
+	if (tails->charability != CA_FLY && tails->charability != CA_SWIM)
+		return;
+
+	if (!tails->powers[pw_tailsfly] && tails->mo->state-states != S_PLAY_FLY_TIRED)
 		return;
 
 	if (tails->bot == 1)
diff --git a/src/p_user.c b/src/p_user.c
index 5149f8d736..2934bc2ae4 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -9405,7 +9405,7 @@ void P_PlayerAfterThink(player_t *player)
 		player->mo->height = FixedDiv(P_GetPlayerHeight(player), FixedDiv(14*FRACUNIT,10*FRACUNIT));
 
 		if (player->mo->tracer->player
-			&& player->mo->tracer->state-states != S_PLAY_FLY
+			&& !player->mo->tracer->player->powers[pw_tailsfly]
 			&& player->mo->tracer->state-states != S_PLAY_FLY_TIRED)
 				player->pflags &= ~PF_CARRIED;
 
-- 
GitLab