From a8e32cfe12914864677b3bef202df5de24c58db6 Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Wed, 5 Jan 2022 00:26:10 +0100
Subject: [PATCH] Fix incorrect turnaround behavior for bounceFloor and
 bounceCeiling

---
 src/p_ceilng.c | 7 +++++--
 src/p_floor.c  | 6 ++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/p_ceilng.c b/src/p_ceilng.c
index ed385be33a..aa31e43014 100644
--- a/src/p_ceilng.c
+++ b/src/p_ceilng.c
@@ -86,14 +86,17 @@ void T_MoveCeiling(ceiling_t *ceiling)
 				if (dest == lines[ceiling->sourceline].frontsector->ceilingheight)
 				{
 					dest = lines[ceiling->sourceline].backsector->ceilingheight;
-					ceiling->speed = ceiling->origspeed = lines[ceiling->sourceline].args[3] << (FRACBITS - 2); // return trip, use args[3]
+					ceiling->origspeed = lines[ceiling->sourceline].args[3] << (FRACBITS - 2); // return trip, use args[3]
 				}
 				else
 				{
 					dest = lines[ceiling->sourceline].frontsector->ceilingheight;
-					ceiling->speed = ceiling->origspeed = lines[ceiling->sourceline].args[2] << (FRACBITS - 2); // going frontways, use args[2]
+					ceiling->origspeed = lines[ceiling->sourceline].args[2] << (FRACBITS - 2); // going frontways, use args[2]
 				}
 
+				if (ceiling->type == bounceCeilingCrush)
+					ceiling->speed = ceiling->origspeed;
+
 				if (dest < ceiling->sector->ceilingheight) // must move down
 				{
 					ceiling->direction = -1;
diff --git a/src/p_floor.c b/src/p_floor.c
index 7f1a7c2e00..1d7cc3f5b4 100644
--- a/src/p_floor.c
+++ b/src/p_floor.c
@@ -206,13 +206,15 @@ void T_MoveFloor(floormove_t *movefloor)
 				if (movefloor->floordestheight == lines[movefloor->sourceline].frontsector->floorheight)
 				{
 					movefloor->floordestheight = lines[movefloor->sourceline].backsector->floorheight;
-					movefloor->speed = movefloor->origspeed = lines[movefloor->sourceline].args[3] << (FRACBITS - 2); // return trip, use args[3]
+					movefloor->origspeed = lines[movefloor->sourceline].args[3] << (FRACBITS - 2); // return trip, use args[3]
 				}
 				else
 				{
 					movefloor->floordestheight = lines[movefloor->sourceline].frontsector->floorheight;
-					movefloor->speed = movefloor->origspeed = lines[movefloor->sourceline].args[2] << (FRACBITS - 2); // forward again, use args[2]
+					movefloor->origspeed = lines[movefloor->sourceline].args[2] << (FRACBITS - 2); // forward again, use args[2]
 				}
+				if (movefloor->type == bounceFloorCrush)
+					movefloor->speed = movefloor->origspeed;
 				movefloor->direction = (movefloor->floordestheight < movefloor->sector->floorheight) ? -1 : 1;
 				movefloor->delaytimer = movefloor->delay;
 				remove = false;
-- 
GitLab