From add018cb8333e7f7846a93ce41aefac7380e0b2e Mon Sep 17 00:00:00 2001
From: Eidolon <furyhunter600@gmail.com>
Date: Wed, 25 Jan 2023 20:37:04 -0600
Subject: [PATCH] Interpolate minecart marks

Fixes STJr/SRB2#906

Uses the old displacement of the minecart to position the mark relative
to its destination. It's not completely correct, but it works.
---
 src/p_user.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/p_user.c b/src/p_user.c
index 4ca4e6c8ad..ba43a422f4 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -11038,6 +11038,21 @@ static void P_MinecartThink(player_t *player)
 					S_StartSound(minecart, minecart->info->activesound);
 				}
 			}
+
+			// Mark interpolation; the old positions need to be relative to the displacement from the minecart _after_ it's moved.
+			// This isn't quite correct (it captures the landing wobble) but it works well enough
+			if (detleft)
+			{
+				detleft->old_x = detleft->x - (minecart->old_x - minecart->old_x2);
+				detleft->old_y = detleft->y - (minecart->old_y - minecart->old_y2);
+				detleft->old_z = detleft->z - (minecart->old_z - minecart->old_z2);
+			}
+			if (detright)
+			{
+				detright->old_x = detright->x - (minecart->old_x - minecart->old_x2);
+				detright->old_y = detright->y - (minecart->old_y - minecart->old_y2);
+				detright->old_z = detright->z - (minecart->old_z - minecart->old_z2);
+			}
 		}
 		else
 		{
-- 
GitLab