From 8c4502ff5b8c1da9f9f7e543c1ef8d4cc0e7e782 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 11 Jun 2023 22:06:14 -0700 Subject: [PATCH 1/3] Add FF_REVERSEANIM frame flag - Animate from state frame backwards by var1 --- src/p_mobj.c | 10 ++++++++-- src/p_pspr.h | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 6f96b6dbc..62546514b 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -154,11 +154,17 @@ FUNCINLINE static ATTRINLINE void P_CycleStateAnimation(mobj_t *mobj) if (mobj->sprite != SPR_PLAY) { + const UINT8 start = mobj->state->frame & FF_FRAMEMASK; + + UINT8 frame = mobj->frame & FF_FRAMEMASK; + // compare the current sprite frame to the one we started from // if more than var1 away from it, swap back to the original // else just advance by one - if (((++mobj->frame) & FF_FRAMEMASK) - (mobj->state->frame & FF_FRAMEMASK) > (UINT32)mobj->state->var1) - mobj->frame = (mobj->state->frame & FF_FRAMEMASK) | (mobj->frame & ~FF_FRAMEMASK); + if ((mobj->frame & FF_REVERSEANIM ? (start - (--frame)) : ((++frame) - start)) > mobj->state->var1) + frame = start; + + mobj->frame = frame | (mobj->frame & ~FF_FRAMEMASK); return; } diff --git a/src/p_pspr.h b/src/p_pspr.h index 82fe1af74..9bb8366bb 100644 --- a/src/p_pspr.h +++ b/src/p_pspr.h @@ -100,6 +100,8 @@ extern "C" { #define FF_GLOBALANIM 0x20000000 /// \brief Frame flags - Animate: Start at a random place in the animation (mutually exclusive with above) #define FF_RANDOMANIM 0x40000000 +/// \brief Frame flags - Animate: Animate in reverse +#define FF_REVERSEANIM 0x80000000 /** \brief translucency tables From ffcdce339eae228b0d5372ca6ceceb70f276bab5 Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 13 Jun 2023 14:13:41 -0700 Subject: [PATCH 2/3] Add FF_INVERT frame flag, use hitlag colormap --- src/p_pspr.h | 2 ++ src/r_things.c | 1 + 2 files changed, 3 insertions(+) diff --git a/src/p_pspr.h b/src/p_pspr.h index 9bb8366bb..9d3b78ea4 100644 --- a/src/p_pspr.h +++ b/src/p_pspr.h @@ -59,6 +59,8 @@ extern "C" { #define FF_REVERSESUBTRACT ((AST_REVERSESUBTRACT-1)<frame & FF_INVERT) || hitlag_is_flashing(thing) || baddie_is_flashing(thing); } From c50e63ccd7750cb89a62bd1e0576c945619ef491 Mon Sep 17 00:00:00 2001 From: James R Date: Tue, 13 Jun 2023 14:40:11 -0700 Subject: [PATCH 3/3] p_mobj.c: add P_InstaScale function Previously was in objects/broly.c --- src/objects/broly.c | 7 ------- src/p_mobj.c | 11 +++++++++++ src/p_mobj.h | 1 + 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/objects/broly.c b/src/objects/broly.c index 4c283a175..d8e2c8ffd 100644 --- a/src/objects/broly.c +++ b/src/objects/broly.c @@ -6,13 +6,6 @@ #include "../p_local.h" #include "../s_sound.h" -// TODO: generic function -static void P_InstaScale(mobj_t *thing, fixed_t scale) -{ - P_SetScale(thing, scale); - thing->destscale = scale; -} - /* An object may not be visible on the same tic: 1) that it spawned 2) that it cycles to the next state */ diff --git a/src/p_mobj.c b/src/p_mobj.c index 62546514b..6f9006b84 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -4954,6 +4954,17 @@ void P_SetScale(mobj_t *mobj, fixed_t newscale) } } +// +// P_InstaScale +// +// Set the object's current scale and destscale together +// +void P_InstaScale(mobj_t *thing, fixed_t scale) +{ + P_SetScale(thing, scale); + thing->destscale = scale; +} + void P_Attract(mobj_t *source, mobj_t *dest, boolean nightsgrab) // Home in on your target { fixed_t dist, ndist, speedmul; diff --git a/src/p_mobj.h b/src/p_mobj.h index 0387fdc16..94c1b3915 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -548,6 +548,7 @@ boolean P_PrecipThinker(precipmobj_t *mobj); void P_NullPrecipThinker(precipmobj_t *mobj); void P_FreePrecipMobj(precipmobj_t *mobj); void P_SetScale(mobj_t *mobj, fixed_t newscale); +void P_InstaScale(mobj_t *mobj, fixed_t newscale); void P_XYMovement(mobj_t *mo); void P_RingXYMovement(mobj_t *mo); void P_SceneryXYMovement(mobj_t *mo);