mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-21 18:32:08 +00:00
Merge branch 'supersuck' into 'next'
Add MFE_FORCESUPER, MFE_FORCENOSUPER, and MFE_REVERSESUPER extra flags (Solves #520) See merge request STJr/SRB2!1452
This commit is contained in:
commit
ac2e8119db
4 changed files with 64 additions and 17 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
43
src/p_mobj.c
43
src/p_mobj.c
|
@ -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
|
||||
{
|
||||
|
|
31
src/p_mobj.h
31
src/p_mobj.h
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue