diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 78a6ef8a3..d98522171 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -1372,7 +1372,7 @@ static int lib_pSpawnGhostMobj(lua_State *L) INLEVEL if (!mobj) return LUA_ErrInvalid(L, "mobj_t"); - LUA_PushUserdata(L, P_SpawnGhostMobj(mobj), META_MOBJ); + LUA_PushUserdata(L, P_SpawnGhostMobjEX(mobj, lua_compatmode), META_MOBJ); return 1; } diff --git a/src/p_local.h b/src/p_local.h index 885b66ea5..54be8014e 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -200,7 +200,8 @@ boolean P_PlayerHitFloor(player_t *player, boolean fromAir); void P_SetObjectMomZ(mobj_t *mo, fixed_t value, boolean relative); void P_RestoreMusic(player_t *player); boolean P_EndingMusic(player_t *player); -mobj_t *P_SpawnGhostMobj(mobj_t *mobj); +mobj_t *P_SpawnGhostMobjEX(mobj_t *mobj, boolean legacy); +#define P_SpawnGhostMobj(mobj) P_SpawnGhostMobjEX(mobj, false) INT32 P_GivePlayerRings(player_t *player, INT32 num_rings); void P_GivePlayerLives(player_t *player, INT32 numlives); UINT8 P_GetNextEmerald(void); diff --git a/src/p_mobj.c b/src/p_mobj.c index 73467b127..bf82db164 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -10557,7 +10557,7 @@ void P_MobjThinker(mobj_t *mobj) } } } - else + else if (mobj->extravalue3 <= 0) // Legacy mode bypasses this visibility system. { UINT32 dur = (mobj->flags2 & MF2_BOSSNOTRAP) ? (2*mobj->fuse)/3 diff --git a/src/p_user.c b/src/p_user.c index e977f9ba4..dbc18e1fa 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1182,11 +1182,11 @@ boolean P_IsDisplayPlayer(player_t *player) } // -// P_SpawnGhostMobj +// P_SpawnGhostMobjEX // -// Spawns a ghost object on the player +// Spawns a ghost object on the player. Has an option for "legacy mode". // -mobj_t *P_SpawnGhostMobj(mobj_t *mobj) +mobj_t *P_SpawnGhostMobjEX(mobj_t *mobj, boolean legacy) { mobj_t *ghost = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_GHOST); @@ -1264,6 +1264,12 @@ mobj_t *P_SpawnGhostMobj(mobj_t *mobj) ghost->old_spritexoffset = mobj->old_spritexoffset2; ghost->old_spriteyoffset = mobj->old_spriteyoffset2; + // Legacy mode + if (legacy) + { + ghost->extravalue3 = 1; + } + return ghost; }