Back-compat: Even more visibility eflags fixes
This commit is contained in:
parent
85088392eb
commit
324bd3b117
2 changed files with 35 additions and 6 deletions
|
|
@ -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;
|
||||
mo->renderflags |= visflags;
|
||||
}
|
||||
}
|
||||
mo->eflags = (UINT16)eflags;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
11
src/r_defs.h
11
src/r_defs.h
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Reference in a new issue