From d541bb7eadb791416450d13cf7e2d28e541f2677 Mon Sep 17 00:00:00 2001
From: toaster <rollerorbital@gmail.com>
Date: Tue, 30 Jul 2019 17:24:21 +0100
Subject: [PATCH] * Fix something I neglected earlier when fixing Ghosts and
 Replays for 2.2 - the fact that the player's skin will change if they don't
 have NiGHTS sprites like Sonic does not being accomodated.

---
 src/g_game.c | 8 +++++++-
 src/g_game.h | 4 +++-
 src/p_user.c | 3 ++-
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/g_game.c b/src/g_game.c
index 95cc2288d3..3cb5da1b5b 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -4366,7 +4366,7 @@ void G_WriteGhostTic(mobj_t *ghost)
 		ghostext.flags = 0;
 	}
 
-	if (ghost->player && ghost->player->followmobj)
+	if (ghost->player && ghost->player->followmobj) // bloats tails runs but what can ya do
 	{
 		INT16 temp;
 
@@ -4592,6 +4592,9 @@ void G_GhostTicker(void)
 				switch(g->color)
 				{
 				default:
+				case GHC_RETURNSKIN:
+					g->mo->skin = g->oldmo.skin;
+					// fallthru
 				case GHC_NORMAL: // Go back to skin color
 					g->mo->color = g->oldmo.color;
 					break;
@@ -4602,6 +4605,9 @@ void G_GhostTicker(void)
 				case GHC_FIREFLOWER: // Fireflower
 					g->mo->color = SKINCOLOR_WHITE;
 					break;
+				case GHC_NIGHTSSKIN: // not actually a colour
+					g->mo->skin = &skins[DEFAULTNIGHTSSKIN];
+					break;
 				}
 			}
 			if (xziptic & EZT_FLIP)
diff --git a/src/g_game.h b/src/g_game.h
index 3cbde9a3c6..96a192ee8a 100644
--- a/src/g_game.h
+++ b/src/g_game.h
@@ -140,7 +140,9 @@ typedef enum
 	GHC_NORMAL = 0,
 	GHC_SUPER,
 	GHC_FIREFLOWER,
-	GHC_INVINCIBLE
+	GHC_INVINCIBLE,
+	GHC_NIGHTSSKIN, // not actually a colour
+	GHC_RETURNSKIN // ditto
 } ghostcolor_t;
 
 // Record/playback tics
diff --git a/src/p_user.c b/src/p_user.c
index cdf8c246c7..7bd2af127d 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -621,7 +621,7 @@ static void P_DeNightserizePlayer(player_t *player)
 	player->mo->skin = &skins[player->skin];
 	player->followitem = skins[player->skin].followitem;
 	player->mo->color = player->skincolor;
-	G_GhostAddColor(GHC_NORMAL);
+	G_GhostAddColor(GHC_RETURNSKIN);
 
 	// Restore aiming angle
 	if (player == &players[consoleplayer])
@@ -739,6 +739,7 @@ void P_NightserizePlayer(player_t *player, INT32 nighttime)
 		if (!(cv_debug || devparm) && !(netgame || multiplayer || demoplayback))
 			player->mo->color = skins[DEFAULTNIGHTSSKIN].prefcolor;
 		player->followitem = skins[DEFAULTNIGHTSSKIN].followitem;
+		G_GhostAddColor(GHC_NIGHTSSKIN);
 	}
 
 	player->nightstime = player->startedtime = player->lapstartedtime = nighttime*TICRATE;
-- 
GitLab