Adjust Prison followers based on feedback...

- Exist for 1.5 seconds before disappearing
    - Flickers away in the last half second
- Twice as many spawned, at half the size
- Different arc
    - Severely reduced gravity
    - Don't jump if they hypothetically touch the floor
This commit is contained in:
toaster 2023-11-12 23:51:44 +00:00
parent 9e49f761b0
commit 3805a4d5f0
3 changed files with 23 additions and 8 deletions

View file

@ -207,6 +207,12 @@ Obj_AudienceThink
{
boolean landed = false;
if (mobj->fuse && mobj->fuse < (TICRATE/2))
{
mobj->renderflags ^= RF_DONTDRAW;
return; // no jumping when you hit the floor, your gravity is weird
}
if (audience_mainstate(mobj) == S_NULL)
{
// Uninitialised, don't do anything funny.

View file

@ -2108,11 +2108,11 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
{
dir = FixedAngle(P_RandomKey(PR_RANDOMAUDIENCE, 360)*FRACUNIT);
const fixed_t launchmomentum = 11 * mapobjectscale;
const fixed_t launchmomentum = 7 * mapobjectscale;
const fixed_t jaggedness = 4;
angle_t launchangle;
UINT8 i;
for (i = 0; i < 3; i++, dir += ANGLE_120)
for (i = 0; i < 6; i++, dir += ANG60)
{
cur = P_SpawnMobj(
target->x, target->y,
@ -2130,13 +2130,9 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
if (P_MobjWasRemoved(cur))
break;
// For Followers, this makes them
// MF2_AMBUSH - try to always look at the nearest player
// MF2_DONTRESPAWN - Check for death pits
cur->flags2 |= (MF2_AMBUSH|MF2_DONTRESPAWN);
cur->hitlag = target->hitlag;
cur->destscale /= 2;
P_SetScale(cur, cur->destscale/TICRATE);
cur->scalespeed = cur->destscale/TICRATE;
cur->z -= cur->height/2;
@ -2145,7 +2141,13 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
cur->flags2 |= (source->flags2 & MF2_OBJECTFLIP);
cur->eflags |= (source->eflags & MFE_VERTICALFLIP);
launchangle = FixedAngle(P_RandomRange(PR_RANDOMAUDIENCE, 60/jaggedness, 80/jaggedness) * jaggedness*FRACUNIT);
launchangle = FixedAngle(
(
(
P_RandomRange(PR_RANDOMAUDIENCE, 12/jaggedness, 24/jaggedness) * jaggedness
) + (i & 1)*16
) * FRACUNIT
);
cur->momz = P_MobjFlip(target) // THIS one uses target!
* P_ReturnThrustY(cur, launchangle, launchmomentum);
@ -2156,6 +2158,9 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
cur, cur->angle,
P_ReturnThrustX(cur, launchangle, launchmomentum)
);
cur->fuse = (3*TICRATE)/2;
cur->flags |= MF_NOCLIPHEIGHT;
}
}

View file

@ -1278,6 +1278,10 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
}
break;
}
case MT_RANDOMAUDIENCE:
if (mo->fuse)
gravityadd /= 10;
break;
default:
break;
}