From 9bb1f56fa6042d10805e3d0c447ed11bda72dd1a Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 12 Nov 2023 22:28:51 +0000 Subject: [PATCH] MT_FORWARDTRICK: Adjustments based on feedback - Animate 4x as fast without flickering - Fix interp issues - Spawn additive trail of the final frame --- src/info.c | 2 +- src/p_mobj.c | 41 ++++++++++++++++++++--------------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/info.c b/src/info.c index 51cfc2b63..83b6407c0 100644 --- a/src/info.c +++ b/src/info.c @@ -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 diff --git a/src/p_mobj.c b/src/p_mobj.c index a3ce910e4..c2b98d99e 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -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: