From 73f67f4c94cbde829d714b276c63c716f863aef3 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 7 Nov 2023 14:53:03 +0000 Subject: [PATCH] MT_MAGICIANBOX, MT_SIDETRICK: Fix some more interp issues Also guarantees that MT_SIDETRICK will be visible for the first frame of the trick, since it was invisible for the entire duration of catholocism. --- src/p_mobj.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 5c9f1f301..546d447aa 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8408,10 +8408,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj) return true; } - mobj->extravalue1 += 1; - mobj->angle += ANG1*mobj->extravalue1; - P_SetScale(mobj, mobj->target->scale); + mobj->extravalue1 += 1; + P_InstaScale(mobj, mobj->target->scale); destx = mobj->target->x; desty = mobj->target->y; @@ -8438,6 +8437,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) if (mobj->flags2 & MF2_AMBUSH) { P_SetOrigin(mobj, destx, desty, mobj->target->z + zoff); + mobj->old_angle = mobj->angle; mobj->flags2 &= ~MF2_AMBUSH; } else @@ -8462,7 +8462,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj) return false; } - if (leveltime & 1) + // Flicker every other frame from first visibility + if (mobj->flags2 & MF2_BOSSDEAD) { mobj->renderflags |= RF_DONTDRAW; } @@ -8472,8 +8473,13 @@ static boolean P_MobjRegularThink(mobj_t *mobj) 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; + + fixed_t scale = mobj->target->scale; + mobj->angle += mobj->movedir; - P_SetScale(mobj, mobj->target->scale); + P_InstaScale(mobj, scale); destx = mobj->target->x; desty = mobj->target->y; @@ -8481,9 +8487,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj) destx += P_ReturnThrustX(mobj, mobj->angle - ANGLE_90, mobj->radius*2); desty += P_ReturnThrustY(mobj, mobj->angle - ANGLE_90, mobj->radius*2); - mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP); - mobj->flags2 = (mobj->flags2 & ~MF2_OBJECTFLIP)|(mobj->target->flags2 & MF2_OBJECTFLIP); - if (mobj->eflags & MFE_VERTICALFLIP) zoff += mobj->target->height - mobj->height; @@ -8493,6 +8496,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) if (mobj->flags2 & MF2_AMBUSH) { P_SetOrigin(mobj, destx, desty, mobj->target->z + zoff); + mobj->old_angle = mobj->angle; mobj->flags2 &= ~MF2_AMBUSH; } else