From 5c71fe07103e7f3febbb94bc0d9a6a7bd9426fc0 Mon Sep 17 00:00:00 2001
From: SMS Alfredo <65426124+SMS-Alfredo@users.noreply.github.com>
Date: Wed, 25 Nov 2020 14:31:24 -0600
Subject: [PATCH] Allow player.lastlinehit and player.lastsidehit to be used
 outside of Knuckles' climbing ability

---
 src/p_map.c  | 14 +++++++++++---
 src/p_mobj.c |  4 ++++
 src/p_user.c |  6 ------
 3 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/p_map.c b/src/p_map.c
index 922c0d9ec0..4f344a9b03 100644
--- a/src/p_map.c
+++ b/src/p_map.c
@@ -3443,9 +3443,17 @@ static boolean PTR_SlideTraverse(intercept_t *in)
 			P_ProcessSpecialSector(slidemo->player, slidemo->subsector->sector, li->polyobj->lines[0]->backsector);
 	}
 
-	if (slidemo->player && slidemo->player->charability == CA_GLIDEANDCLIMB
-		&& (slidemo->player->pflags & PF_GLIDING || slidemo->player->climbing))
-		PTR_GlideClimbTraverse(li);
+	if (slidemo->player)
+	{
+		if (slidemo->player->charability == CA_GLIDEANDCLIMB
+			&& (slidemo->player->pflags & PF_GLIDING || slidemo->player->climbing))
+			PTR_GlideClimbTraverse(li);
+		else
+		{
+			slidemo->player->lastsidehit = li->sidenum[P_PointOnLineSide(slidemo->x, slidemo->y, li)];
+			slidemo->player->lastlinehit = (INT16)(li - lines);
+		}
+	}
 
 	if (in->frac < bestslidefrac && (!slidemo->player || !slidemo->player->climbing))
 	{
diff --git a/src/p_mobj.c b/src/p_mobj.c
index 4fc561b20e..8dab1b2cfe 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -11404,6 +11404,10 @@ void P_SpawnPlayer(INT32 playernum)
 		p->normalspeed = skins[p->skin].normalspeed;
 		p->jumpfactor = skins[p->skin].jumpfactor;
 	}
+	
+	// Clear lastlinehit and lastsidehit
+	p->lastsidehit = -1;
+	p->lastlinehit = -1;
 
 	//awayview stuff
 	p->awayviewmobj = NULL;
diff --git a/src/p_user.c b/src/p_user.c
index 10b7e970e2..73f6339a9c 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -8601,12 +8601,6 @@ void P_MovePlayer(player_t *player)
 		player->climbing--;
 	}
 
-	if (!player->climbing)
-	{
-		player->lastsidehit = -1;
-		player->lastlinehit = -1;
-	}
-
 	// Make sure you're not teetering when you shouldn't be.
 	if (player->panim == PA_EDGE
 	&& (player->mo->momx || player->mo->momy || player->mo->momz))
-- 
GitLab