"Bored" follower audience toggle (for Chaclon)

- If follower audience member has a certain flag, the bob/jump height is forced to zero
    - UDMF: args[2] & 2
    - Binary: The "Extra" flag
- If a follower audience member (or MT_EMBLEM with GE_FOLLOWER) has a bob/jump height of 0, use the idlestate instead of the movement state
This commit is contained in:
toaster 2023-06-20 12:41:42 +01:00
parent 8b2b3aaee8
commit 164f72a6cb
4 changed files with 38 additions and 16 deletions

View file

@ -101,25 +101,32 @@ Obj_AudienceInit
mobj->destscale = FixedMul(3*mobj->destscale, followers[followerpick].scale);
P_SetScale(mobj, mobj->destscale);
audience_mainstate(mobj) = followers[followerpick].followstate;
if (mobj->flags2 & MF2_BOSSNOTRAP)
{
audience_bobamp(mobj) = 0;
}
else
{
// The following is derived from the default bobamp
if (mobj->type != MT_EMBLEM && !(mobj->flags & MF_NOGRAVITY) && followers[followerpick].bobamp < 4*FRACUNIT)
{
audience_bobamp(mobj) = 4*mobj->scale;
}
else
{
audience_bobamp(mobj) = FixedMul(mobj->scale, followers[followerpick].bobamp);
}
}
audience_mainstate(mobj) =
audience_bobamp(mobj) != 0
? followers[followerpick].followstate
: followers[followerpick].idlestate;
P_SetMobjState(mobj, audience_mainstate(mobj));
if (P_MobjWasRemoved(mobj))
return;
// The following is derived from the default bobamp
if (mobj->type != MT_EMBLEM && !(mobj->flags & MF_NOGRAVITY) && followers[followerpick].bobamp < 4*FRACUNIT)
{
audience_bobamp(mobj) = 4*mobj->scale;
}
else
{
audience_bobamp(mobj) = FixedMul(mobj->scale, followers[followerpick].bobamp);
}
audience_bobspeed(mobj) = followers[followerpick].bobspeed;
audience_focusplayer(mobj) = MAXPLAYERS;
if (P_RandomChance(PR_RANDOMAUDIENCE, FRACUNIT/2))
{
audience_animoffset(mobj) = 5;

View file

@ -13192,11 +13192,16 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj)
}
case MT_RANDOMAUDIENCE:
{
if (mthing->args[2] != 0)
if (mthing->args[2] & TMAUDIM_FLOAT)
{
mobj->flags |= MF_NOGRAVITY;
}
if (mthing->args[2] & TMAUDIM_BORED)
{
mobj->flags2 |= MF2_BOSSNOTRAP;
}
if (mthing->args[3] != 0)
{
mobj->flags2 |= MF2_AMBUSH;

View file

@ -6959,7 +6959,11 @@ static void P_ConvertBinaryThingTypes(void)
mapthings[i].args[0] = !!(mapthings[i].options & MTF_AMBUSH);
break;
case 1488: // Follower Audience (unfortunately numbered)
mapthings[i].args[2] = !!(mapthings[i].options & MTF_OBJECTSPECIAL);
if (mapthings[i].options & MTF_OBJECTSPECIAL)
mapthings[i].args[2] |= TMAUDIM_FLOAT;
if (mapthings[i].options & MTF_EXTRA)
mapthings[i].args[2] |= TMAUDIM_BORED;
mapthings[i].args[3] = !!(mapthings[i].options & MTF_AMBUSH);
break;
case 1500: //Glaregoyle

View file

@ -135,6 +135,12 @@ typedef enum
TMWPF_FINISHLINE = 1<<3,
} textmapwaypointflags_t;
typedef enum
{
TMAUDIM_FLOAT = 1,
TMAUDIM_BORED = 1<<1,
} textmapaudiencemovementflags_t;
typedef enum
{
TMBCF_BACKANDFORTH = 1,