Give the Spectator Eggrobos the ability to move left and right relative to their angle, with initial direction depending on MTF_OBJECTSPECIAL/MTF_AMBUSH flag presence. (May need more tweaking before putting in CEZ3)

This commit is contained in:
toaster 2019-09-01 11:43:30 +01:00
parent 6a9da63d7f
commit fe99c64511
1 changed files with 21 additions and 16 deletions

View File

@ -8425,6 +8425,17 @@ void P_MobjThinker(mobj_t *mobj)
} }
else else
{ {
fixed_t basex = mobj->cusval, basey = mobj->cvmem;
if (mobj->spawnpoint && mobj->spawnpoint->options & (MTF_AMBUSH|MTF_OBJECTSPECIAL))
{
angle_t sideang = mobj->movedir + ((mobj->spawnpoint->options & MTF_AMBUSH) ? ANGLE_90 : -ANGLE_90);
fixed_t oscillate = FixedMul(FINESINE(((leveltime*ANG1)>>(ANGLETOFINESHIFT+2)) & FINEMASK), 250*mobj->scale);
basex += P_ReturnThrustX(mobj, sideang, oscillate);
basey += P_ReturnThrustY(mobj, sideang, oscillate);
}
mobj->z = mobj->threshold + FixedMul(FINESINE(((leveltime + mobj->movecount)*ANG2>>(ANGLETOFINESHIFT-2)) & FINEMASK), 8*mobj->scale); mobj->z = mobj->threshold + FixedMul(FINESINE(((leveltime + mobj->movecount)*ANG2>>(ANGLETOFINESHIFT-2)) & FINEMASK), 8*mobj->scale);
if (mobj->state != &states[mobj->info->meleestate]) if (mobj->state != &states[mobj->info->meleestate])
{ {
@ -8453,8 +8464,8 @@ void P_MobjThinker(mobj_t *mobj)
if (players[i].mo->z + players[i].mo->height < mobj->z - 8*mobj->scale) if (players[i].mo->z + players[i].mo->height < mobj->z - 8*mobj->scale)
continue; continue;
compdist = P_AproxDistance( compdist = P_AproxDistance(
players[i].mo->x + players[i].mo->momx - mobj->cusval, players[i].mo->x + players[i].mo->momx - basex,
players[i].mo->y + players[i].mo->momy - mobj->cvmem); players[i].mo->y + players[i].mo->momy - basey);
if (compdist >= dist) if (compdist >= dist)
continue; continue;
dist = compdist; dist = compdist;
@ -8468,14 +8479,14 @@ void P_MobjThinker(mobj_t *mobj)
mobj->angle = R_PointToAngle2(mobj->x, mobj->y, mobj->target->x, mobj->target->y); mobj->angle = R_PointToAngle2(mobj->x, mobj->y, mobj->target->x, mobj->target->y);
if (P_AproxDistance( if (P_AproxDistance(
mobj->x - mobj->cusval, mobj->x - basex,
mobj->y - mobj->cvmem) mobj->y - basey)
< mobj->scale) < mobj->scale)
S_StartSound(mobj, mobj->info->seesound); S_StartSound(mobj, mobj->info->seesound);
P_TeleportMove(mobj, P_TeleportMove(mobj,
(15*(mobj->x>>4)) + (mobj->cusval>>4) + P_ReturnThrustX(mobj, mobj->angle, SPECTATORRADIUS>>4), (15*(mobj->x>>4)) + (basex>>4) + P_ReturnThrustX(mobj, mobj->angle, SPECTATORRADIUS>>4),
(15*(mobj->y>>4)) + (mobj->cvmem>>4) + P_ReturnThrustY(mobj, mobj->angle, SPECTATORRADIUS>>4), (15*(mobj->y>>4)) + (basey>>4) + P_ReturnThrustY(mobj, mobj->angle, SPECTATORRADIUS>>4),
mobj->z); mobj->z);
} }
else else
@ -8498,18 +8509,12 @@ void P_MobjThinker(mobj_t *mobj)
if (!didmove) if (!didmove)
{ {
if (P_AproxDistance( if (P_AproxDistance(mobj->x - basex, mobj->y - basey) < mobj->scale)
mobj->x - mobj->cusval, P_TeleportMove(mobj, basex, basey, mobj->z);
mobj->y - mobj->cvmem)
< mobj->scale)
P_TeleportMove(mobj,
mobj->cusval,
mobj->cvmem,
mobj->z);
else else
P_TeleportMove(mobj, P_TeleportMove(mobj,
(15*(mobj->x>>4)) + (mobj->cusval>>4), (15*(mobj->x>>4)) + (basex>>4),
(15*(mobj->y>>4)) + (mobj->cvmem>>4), (15*(mobj->y>>4)) + (basey>>4),
mobj->z); mobj->z);
} }
} }