From cc79808aba39bb56a5c05cf850d48deecfbd2055 Mon Sep 17 00:00:00 2001 From: Ashnal Date: Thu, 31 Jul 2025 18:37:38 -0400 Subject: [PATCH] New MFE_DONTSLOPELAUNCH flag Makes mobj immune to slope launching Also 32 bit eflags woo --- src/lua_mobjlib.c | 2 +- src/p_mobj.c | 3 +++ src/p_mobj.h | 4 +++- src/p_saveg.cpp | 4 ++-- src/p_slopes.c | 8 ++++++++ 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/lua_mobjlib.c b/src/lua_mobjlib.c index 158909815..fc0d1b3d9 100644 --- a/src/lua_mobjlib.c +++ b/src/lua_mobjlib.c @@ -709,7 +709,7 @@ static int mobj_set(lua_State *L) mo->flags2 = (UINT32)luaL_checkinteger(L, 3); break; case mobj_eflags: - mo->eflags = (UINT16)luaL_checkinteger(L, 3); + mo->eflags = (UINT32)luaL_checkinteger(L, 3); break; case mobj_renderflags: mo->renderflags = (UINT32)luaL_checkinteger(L, 3); diff --git a/src/p_mobj.c b/src/p_mobj.c index 179a5e550..12a439230 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -4138,6 +4138,8 @@ static void P_PlayerMobjThinker(mobj_t *mobj) mobj->eflags &= ~MFE_JUSTHITFLOOR; } + mobj->eflags &= ~MFE_DONTSLOPELAUNCH; + P_SquishThink(mobj); K_UpdateTerrainOverlay(mobj); @@ -10909,6 +10911,7 @@ void P_MobjThinker(mobj_t *mobj) P_ButteredSlope(mobj); } + mobj->eflags &= ~MFE_DONTSLOPELAUNCH; P_SquishThink(mobj); K_UpdateTerrainOverlay(mobj); diff --git a/src/p_mobj.h b/src/p_mobj.h index 34a52d3fd..a79c3ef7d 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -262,6 +262,8 @@ typedef enum MFE_SLOPELAUNCHED = 1<<14, // Thinker is paused due to hitlag MFE_PAUSED = 1<<15, + // Don't launch off of slopes + MFE_DONTSLOPELAUNCH = 1<<16, } mobjeflag_t; // @@ -339,7 +341,7 @@ struct mobj_t state_t *state; UINT32 flags; // flags from mobjinfo tables UINT32 flags2; // MF2_ flags - UINT16 eflags; // extra flags + UINT32 eflags; // extra flags mtag_t tid; mobj_t *tid_next; diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index 688556420..25f6d3bae 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -3469,7 +3469,7 @@ static void SaveMobjThinker(savebuffer_t *save, const thinker_t *th, const UINT8 WRITEUINT16(save->p, mobj->anim_duration); } if (diff & MD_EFLAGS) - WRITEUINT16(save->p, mobj->eflags); + WRITEUINT32(save->p, mobj->eflags); if (diff & MD_PLAYER) WRITEUINT8(save->p, mobj->player-players); if (diff & MD_MOVEDIR) @@ -4744,7 +4744,7 @@ static thinker_t* LoadMobjThinker(savebuffer_t *save, actionf_p1 thinker) mobj->anim_duration = (UINT16)mobj->state->var2; } if (diff & MD_EFLAGS) - mobj->eflags = READUINT16(save->p); + mobj->eflags = READUINT32(save->p); if (diff & MD_PLAYER) { i = READUINT8(save->p); diff --git a/src/p_slopes.c b/src/p_slopes.c index a64ebfaa0..c1a767a63 100644 --- a/src/p_slopes.c +++ b/src/p_slopes.c @@ -989,6 +989,14 @@ boolean P_CanApplySlopeLaunch(mobj_t *mo, pslope_t *slope) return false; } + if (mo->eflags & MFE_DONTSLOPELAUNCH) + { + CONS_Printf("MFE_DONTSLOPELAUNCH\n"); + mo->eflags &= ~MFE_DONTSLOPELAUNCH; // You get one cancelled launch + // Don't launch off of slopes. + return false; + } + // We can do slope launching. return true; }