MT_FORWARDTRICK: Adjustments based on feedback

- Animate 4x as fast without flickering
- Fix interp issues
- Spawn additive trail of the final frame
This commit is contained in:
toaster 2023-11-12 22:28:51 +00:00
parent 2082a372df
commit 9bb1f56fa6
2 changed files with 21 additions and 22 deletions

View file

@ -4684,7 +4684,7 @@ state_t states[NUMSTATES] =
{SPR_TRK5, FF_FULLBRIGHT|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_SIDETRICK,
{SPR_TRK6, FF_FULLBRIGHT|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_BACKTRICK,
{SPR_TRK7, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 6, 4, S_NULL}, // S_FORWARDTRICK,
{SPR_TRK7, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 6, 1, S_NULL}, // S_FORWARDTRICK,
{SPR_TIRG, FF_ANIMATE, -1, {NULL}, 1, 1, S_NULL}, // S_TIREGRABBER
{SPR_RSHT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_RINGSHOOTER_SIDE

View file

@ -8551,32 +8551,17 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
return false;
}
// Flicker every other frame from first visibility
if (mobj->flags2 & MF2_BOSSDEAD)
{
mobj->renderflags |= RF_DONTDRAW;
}
else
{
mobj->renderflags &= ~RF_DONTDRAW;
mobj->renderflags |= (mobj->target->renderflags & RF_DONTDRAW);
}
mobj->renderflags &= ~RF_DONTDRAW;
mobj->renderflags |= (mobj->target->renderflags & RF_DONTDRAW);
mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP);
mobj->flags2 = ((mobj->flags2 & ~MF2_OBJECTFLIP)|(mobj->target->flags2 & MF2_OBJECTFLIP)) ^ MF2_BOSSDEAD;
// sweeping effect
P_InstaScale(mobj, (6*mobj->target->scale)/5);
const fixed_t sweep = FixedMul(FRACUNIT - (mobj->threshold * 2), mobj->radius);
mobj->threshold += FRACUNIT/(7*4);
if (mobj->threshold > FRACUNIT)
{
mobj->threshold -= FRACUNIT;
mobj->flags2 |= MF2_AMBUSH;
}
P_InstaScale(mobj, mobj->target->scale);
destx = mobj->target->x;
desty = mobj->target->y;
@ -8588,9 +8573,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
desty += P_ReturnThrustY(mobj, mobj->movedir + ANGLE_90, sideways);
if (mobj->eflags & MFE_VERTICALFLIP)
zoff += mobj->target->height - (mobj->height + 18*mobj->scale);
zoff += mobj->target->height - (mobj->height + 18*mobj->target->scale);
else
zoff += 18*mobj->scale;
zoff += 18*mobj->target->scale;
// Necessary to "ride" on Garden Top
zoff += mobj->target->sprzoff;
@ -8604,6 +8589,20 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
{
P_MoveOrigin(mobj, destx, desty, mobj->target->z + zoff);
}
mobj->threshold += FRACUNIT/6;
if (mobj->threshold > FRACUNIT)
{
mobj_t *puff = P_SpawnGhostMobj(mobj);
if (puff)
{
puff->renderflags = (puff->renderflags & ~RF_TRANSMASK)|RF_ADD;
}
mobj->threshold -= FRACUNIT;
mobj->flags2 |= MF2_AMBUSH;
}
break;
}
case MT_LIGHTNINGSHIELD: