Legacy mode for ghost objects

This commit is contained in:
Anonimus 2025-10-09 18:15:17 -04:00
parent 324bd3b117
commit dc9ee0bc95
4 changed files with 13 additions and 6 deletions

View file

@ -1372,7 +1372,7 @@ static int lib_pSpawnGhostMobj(lua_State *L)
INLEVEL INLEVEL
if (!mobj) if (!mobj)
return LUA_ErrInvalid(L, "mobj_t"); 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; return 1;
} }

View file

@ -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_SetObjectMomZ(mobj_t *mo, fixed_t value, boolean relative);
void P_RestoreMusic(player_t *player); void P_RestoreMusic(player_t *player);
boolean P_EndingMusic(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); INT32 P_GivePlayerRings(player_t *player, INT32 num_rings);
void P_GivePlayerLives(player_t *player, INT32 numlives); void P_GivePlayerLives(player_t *player, INT32 numlives);
UINT8 P_GetNextEmerald(void); UINT8 P_GetNextEmerald(void);

View file

@ -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) UINT32 dur = (mobj->flags2 & MF2_BOSSNOTRAP)
? (2*mobj->fuse)/3 ? (2*mobj->fuse)/3

View file

@ -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); 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_spritexoffset = mobj->old_spritexoffset2;
ghost->old_spriteyoffset = mobj->old_spriteyoffset2; ghost->old_spriteyoffset = mobj->old_spriteyoffset2;
// Legacy mode
if (legacy)
{
ghost->extravalue3 = 1;
}
return ghost; return ghost;
} }