From 42fc6c877bd96e15292796d743dc8b24d15c2caf Mon Sep 17 00:00:00 2001
From: spherallic <spherallic@gmail.com>
Date: Sun, 11 Sep 2022 20:04:20 +0200
Subject: [PATCH] Remove hack in P_GetMobjGravity for spinfire, fix the
 underlying issue

---
 src/p_mobj.c | 4 +---
 src/p_user.c | 6 +++---
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/p_mobj.c b/src/p_mobj.c
index b841bae54..957190bd4 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -1439,9 +1439,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
 	I_Assert(!P_MobjWasRemoved(mo));
 
 	wasflip = (mo->eflags & MFE_VERTICALFLIP) != 0;
-
-	if (mo->type != MT_SPINFIRE) // Prevent fire trails from disappearing in reverse gravity
-		mo->eflags &= ~MFE_VERTICALFLIP;
+	mo->eflags &= ~MFE_VERTICALFLIP;
 
 	if (mo->subsector->sector->ffloors) // Check for 3D floor gravity too.
 	{
diff --git a/src/p_user.c b/src/p_user.c
index 0263fa1ab..112367dc7 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -7673,11 +7673,9 @@ void P_ElementalFire(player_t *player, boolean cropcircle)
 	else
 		ground = player->mo->floorz;
 
-	if (cropcircle)
-		ground += P_MobjFlip(player->mo);
-
 	if (cropcircle)
 	{
+		ground += P_MobjFlip(player->mo);
 #define numangles 8
 #define limitangle (180/numangles)
 		travelangle = player->mo->angle + P_RandomRange(-limitangle, limitangle)*ANG1;
@@ -7726,6 +7724,8 @@ void P_ElementalFire(player_t *player, boolean cropcircle)
 			flame->fuse = TICRATE*6;
 			flame->destscale = player->mo->scale;
 			P_SetScale(flame, player->mo->scale);
+			if (!(player->mo->flags2 & MF2_OBJECTFLIP) != !(player->powers[pw_gravityboots])) // take gravity boots into account
+				flame->flags2 |= MF2_OBJECTFLIP;
 			flame->eflags = (flame->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP);
 			if (!(gametyperules & GTR_FRIENDLY))
 			{