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 diff --git a/src/p_mobj.c b/src/p_mobj.c index 105fac2da..9751a6957 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. @@ -1307,7 +1307,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; @@ -15514,6 +15514,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: