From c2aa8b103245e53d97ee056b5b87ed7fd355f5b4 Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 8 Jul 2025 18:47:50 -0700 Subject: [PATCH 1/2] Fix Stone Shoe in reverse gravity --- src/objects/stone-shoe.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/objects/stone-shoe.cpp b/src/objects/stone-shoe.cpp index 63ad55686..6e3aae96b 100644 --- a/src/objects/stone-shoe.cpp +++ b/src/objects/stone-shoe.cpp @@ -230,7 +230,7 @@ private: if (P_IsObjectOnGround(this)) { - momz = 32 * mapobjectscale; + momz = flip(32 * mapobjectscale); bouncing(true); voice(sfx_s3k5f); P_StartQuakeFromMobj(5, 40 * scale(), 512 * scale(), this); @@ -271,6 +271,11 @@ private: follow()->player->stonedrag = dist > minDist(); sprzoff(30 * scale()); + + if (is_flipped() != follow()->is_flipped()) + { + K_FlipFromObject(this, follow()); + } } void move_chain() @@ -292,6 +297,7 @@ private: while (Mobj::valid(node)) { node->move_origin({p, pz}); + K_FlipFromObject(node, this); node->sprzoff(sprzoff()); // Let chain flicker like shoe does From 5fec05d8ac876b4158051fd3358624f052ad6d5f Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 9 Jul 2025 11:47:38 -0700 Subject: [PATCH 2/2] Make sure sector reverse DOES NOT influence Stone Shoe directly Stone Shoe copies flip flag from player. Sector gravity was applied separately. --- src/p_mobj.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 21e0eb317..a251378f6 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1095,7 +1095,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) wasflip = (mo->eflags & MFE_VERTICALFLIP) != 0; - if (mo->type != MT_SPINFIRE) + if (mo->type != MT_SPINFIRE && mo->type != MT_STONESHOE) mo->eflags &= ~MFE_VERTICALFLIP; if (mo->subsector->sector->ffloors) // Check for 3D floor gravity too. @@ -1303,7 +1303,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) gravityadd *= 2; break; case MT_STONESHOE: - gravityadd *= 4; + gravityadd = -4 * abs(gravityadd) * P_MobjFlip(mo); break; default: break; @@ -15487,6 +15487,7 @@ boolean P_MobjCanChangeFlip(mobj_t *mobj) case MT_SHRINK_CHAIN: case MT_SHRINK_LASER: case MT_SHRINK_PARTICLE: + case MT_STONESHOE: return false; default: