Merge branch 'trigger-bruh' into udmf-executor-triggers

This commit is contained in:
MascaraSnake 2021-12-05 08:36:11 +01:00
commit f359151457
6 changed files with 69 additions and 19 deletions

View file

@ -260,6 +260,11 @@ static inline int lib_getenum(lua_State *L)
lua_pushinteger(L, ((lua_Integer)1<<i));
return 1;
}
if (fastcmp(p, "REVERSESUPER"))
{
lua_pushinteger(L, (lua_Integer)MFE_REVERSESUPER);
return 1;
}
if (mathlib) return luaL_error(L, "mobjeflag '%s' could not be found.\n", word);
return 0;
}

View file

@ -4354,6 +4354,8 @@ const char *const MOBJEFLAG_LIST[] = {
"SPRUNG", // Mobj was already sprung this tic
"APPLYPMOMZ", // Platform movement
"TRACERANGLE", // Compute and trigger on mobj angle relative to tracer
"FORCESUPER", // Forces an object to use super sprites with SPR_PLAY.
"FORCENOSUPER", // Forces an object to NOT use super sprites with SPR_PLAY.
NULL
};

View file

@ -3926,6 +3926,9 @@ static void G_DoCompleted(void)
if (metalrecording)
G_StopMetalRecording(false);
G_SetGamestate(GS_NULL);
wipegamestate = GS_NULL;
for (i = 0; i < MAXPLAYERS; i++)
if (playeringame[i])
G_PlayerFinishLevel(i); // take away cards and stuff

View file

@ -1460,8 +1460,8 @@ void T_EachTimeThinker(eachtime_t *eachtime)
{
for (i = 0; i < MAXPLAYERS; i++)
{
if (P_IsPlayerValid(i) && playersArea[i])
continue;
if (P_IsPlayerValid(i) && !playersArea[i])
return;
}
}

View file

@ -325,9 +325,7 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
mobj->tics = st->tics;
// Adjust the player's animation speed to match their velocity.
if (state == S_PLAY_STND && player->powers[pw_super] && skins[player->skin].sprites[SPR2_WAIT|FF_SPR2SUPER].numframes == 0) // if no super wait, don't wait at all
mobj->tics = -1;
else if (player->panim == PA_EDGE && (player->charflags & SF_FASTEDGE))
if (player->panim == PA_EDGE && (player->charflags & SF_FASTEDGE))
mobj->tics = 2;
else if (!(disableSpeedAdjust || player->charflags & SF_NOSPEEDADJUST))
{
@ -396,8 +394,28 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
if (skin)
{
spr2 = P_GetSkinSprite2(skin, (((player->powers[pw_super] && !(player->charflags & SF_NOSUPERSPRITES)) ? FF_SPR2SUPER : 0)|st->frame) & FF_FRAMEMASK, mobj->player);
UINT16 stateframe = st->frame;
// Add/Remove FF_SPR2SUPER based on certain conditions
if (player->charflags & SF_NOSUPERSPRITES)
stateframe = stateframe & ~FF_SPR2SUPER;
else if (player->powers[pw_super])
stateframe = stateframe | FF_SPR2SUPER;
if (stateframe & FF_SPR2SUPER)
{
if (mobj->eflags & MFE_FORCENOSUPER)
stateframe = stateframe & ~FF_SPR2SUPER;
}
else if (mobj->eflags & MFE_FORCESUPER)
stateframe = stateframe | FF_SPR2SUPER;
// Get the sprite2 and frame number
spr2 = P_GetSkinSprite2(skin, (stateframe & FF_FRAMEMASK), mobj->player);
numframes = skin->sprites[spr2].numframes;
if (state == S_PLAY_STND && (spr2 & FF_SPR2SUPER) && skin->sprites[SPR2_WAIT|FF_SPR2SUPER].numframes == 0)
mobj->tics = -1; // If no super wait, don't wait at all
}
else
{
@ -522,8 +540,23 @@ boolean P_SetMobjState(mobj_t *mobj, statenum_t state)
if (skin)
{
spr2 = P_GetSkinSprite2(skin, st->frame & FF_FRAMEMASK, mobj->player);
UINT16 stateframe = st->frame;
// Add/Remove FF_SPR2SUPER based on certain conditions
if (stateframe & FF_SPR2SUPER)
{
if (mobj->eflags & MFE_FORCENOSUPER)
stateframe = stateframe & ~FF_SPR2SUPER;
}
else if (mobj->eflags & MFE_FORCESUPER)
stateframe = stateframe | FF_SPR2SUPER;
// Get the sprite2 and frame number
spr2 = P_GetSkinSprite2(skin, (stateframe & FF_FRAMEMASK), NULL);
numframes = skin->sprites[spr2].numframes;
if (state == S_PLAY_STND && (spr2 & FF_SPR2SUPER) && skin->sprites[SPR2_WAIT|FF_SPR2SUPER].numframes == 0)
mobj->tics = -1; // If no super wait, don't wait at all
}
else
{

View file

@ -218,33 +218,40 @@ typedef enum
typedef enum
{
// The mobj stands on solid floor (not on another mobj or in air)
MFE_ONGROUND = 1,
MFE_ONGROUND = 1,
// The mobj just hit the floor while falling, this is cleared on next frame
// (instant damage in lava/slime sectors to prevent jump cheat..)
MFE_JUSTHITFLOOR = 1<<1,
MFE_JUSTHITFLOOR = 1<<1,
// The mobj stands in a sector with water, and touches the surface
// this bit is set once and for all at the start of mobjthinker
MFE_TOUCHWATER = 1<<2,
MFE_TOUCHWATER = 1<<2,
// The mobj stands in a sector with water, and his waist is BELOW the water surface
// (for player, allows swimming up/down)
MFE_UNDERWATER = 1<<3,
MFE_UNDERWATER = 1<<3,
// used for ramp sectors
MFE_JUSTSTEPPEDDOWN = 1<<4,
MFE_JUSTSTEPPEDDOWN = 1<<4,
// Vertically flip sprite/allow upside-down physics
MFE_VERTICALFLIP = 1<<5,
MFE_VERTICALFLIP = 1<<5,
// Goo water
MFE_GOOWATER = 1<<6,
MFE_GOOWATER = 1<<6,
// The mobj is touching a lava block
MFE_TOUCHLAVA = 1<<7,
MFE_TOUCHLAVA = 1<<7,
// Mobj was already pushed this tic
MFE_PUSHED = 1<<8,
MFE_PUSHED = 1<<8,
// Mobj was already sprung this tic
MFE_SPRUNG = 1<<9,
MFE_SPRUNG = 1<<9,
// Platform movement
MFE_APPLYPMOMZ = 1<<10,
MFE_APPLYPMOMZ = 1<<10,
// Compute and trigger on mobj angle relative to tracer
// See Linedef Exec 457 (Track mobj angle to point)
MFE_TRACERANGLE = 1<<11,
MFE_TRACERANGLE = 1<<11,
// Forces an object to use super sprites with SPR_PLAY.
MFE_FORCESUPER = 1<<12,
// Forces an object to NOT use super sprites with SPR_PLAY.
MFE_FORCENOSUPER = 1<<13,
// Makes an object use super sprites where they wouldn't have otherwise and vice-versa
MFE_REVERSESUPER = MFE_FORCESUPER|MFE_FORCENOSUPER
// free: to and including 1<<15
} mobjeflag_t;