New MFE_DONTSLOPELAUNCH flag

Makes mobj immune to slope launching
Also 32 bit eflags woo
This commit is contained in:
Ashnal 2025-07-31 18:37:38 -04:00
parent f6488697f4
commit cc79808aba
5 changed files with 17 additions and 4 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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;

View file

@ -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);

View file

@ -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;
}