From 3805a4d5f0c4425f24c865105a2880cfbf994a7e Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 12 Nov 2023 23:51:44 +0000 Subject: [PATCH] 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 --- src/objects/audience.c | 6 ++++++ src/p_inter.c | 21 +++++++++++++-------- src/p_mobj.c | 4 ++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/objects/audience.c b/src/objects/audience.c index b6d211132..b5814ae16 100644 --- a/src/objects/audience.c +++ b/src/objects/audience.c @@ -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. diff --git a/src/p_inter.c b/src/p_inter.c index f90848f66..f510cf2fa 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -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; } } diff --git a/src/p_mobj.c b/src/p_mobj.c index 839e37cfc..da1b58d8e 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1278,6 +1278,10 @@ fixed_t P_GetMobjGravity(mobj_t *mo) } break; } + case MT_RANDOMAUDIENCE: + if (mo->fuse) + gravityadd /= 10; + break; default: break; }