Merge pull request 'Fix up some visual issues with MK64 characters (closes #150)' (#163) from bingbingwahoo into blankart-dev

Reviewed-on: https://codeberg.org/NepDisk/blankart/pulls/163
This commit is contained in:
NepDisk 2025-10-13 00:44:13 +02:00
commit 8405ff27e4
6 changed files with 48 additions and 12 deletions

View file

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

View file

@ -615,6 +615,23 @@ static int mobj_get(lua_State *L)
return 1;
}
static inline UINT32 eflags_vischeck(UINT32 eflags)
{
UINT8 playerhide;
playerhide = 0;
if (eflags & RF_DONTDRAW)
{
// Visibility checks are necessary
playerhide = (UINT8)((eflags & RF_DONTDRAW) >> RF_HIDESHIFT);
// Hiding is the opposite of visibility.
playerhide = (~playerhide) & 0x0F;
}
return ((UINT32)(playerhide) << RF_HIDESHIFT);
}
#define NOSET luaL_error(L, LUA_QL("mobj_t") " field " LUA_QS " should not be set directly.", mobj_opt[field])
#define NOSETPOS luaL_error(L, LUA_QL("mobj_t") " field " LUA_QS " should not be set directly. Use " LUA_QL("P_Move") ", " LUA_QL("P_TryMove") ", or " LUA_QL("P_SetOrigin") ", or " LUA_QL("P_MoveOrigin") " instead.", mobj_opt[field])
static int mobj_set(lua_State *L)
@ -838,8 +855,19 @@ static int mobj_set(lua_State *L)
case mobj_eflags:
{
UINT32 eflags = luaL_checkinteger(L, 3);
UINT32 visflags = 0;
if (lua_compatmode)
mo->renderflags = (mo->renderflags & ~RF_DONTDRAW) | (~eflags & RF_DONTDRAW); // eeeyup.
{
// eeeyup.
// Mhm. Yeah.
visflags = eflags_vischeck(eflags);
if ((visflags) && ((mo->renderflags & RF_DONTDRAW) != RF_DONTDRAW))
{
mo->renderflags &= ~RF_DONTDRAW;
mo->renderflags |= visflags;
}
}
mo->eflags = (UINT16)eflags;
break;
}

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

View file

@ -10561,7 +10561,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

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

View file

@ -1021,11 +1021,12 @@ typedef enum
RF_ABSOLUTELIGHTLEVEL = 0x00010000, // mobj_t.lightlevel is absolute instead of relative
RF_HIDEINSKYBOX = 0x00020000, // do not render in skybox
RF_DONTDRAW = 0x00F00000, // --Don't generate a vissprite
RF_DONTDRAWP1 = 0x00100000, // No P1
RF_DONTDRAWP2 = 0x00200000, // No P2
RF_DONTDRAWP3 = 0x00400000, // No P3
RF_DONTDRAWP4 = 0x00800000, // No P4
RF_HIDESHIFT = (20),
RF_DONTDRAW = 0x0F << RF_HIDESHIFT, // --Don't generate a vissprite
RF_DONTDRAWP1 = 0x01 << RF_HIDESHIFT, // No P1
RF_DONTDRAWP2 = 0x02 << RF_HIDESHIFT, // No P2
RF_DONTDRAWP3 = 0x04 << RF_HIDESHIFT, // No P3
RF_DONTDRAWP4 = 0x08 << RF_HIDESHIFT, // No P4
RF_BLENDMASK = 0x07000000, // --Blending override - see patchalphastyle_t
RF_BLENDSHIFT = (6*4),