From 280791a8327218cc99d3b9a35f7950d87378eb15 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 19 Jul 2020 19:11:19 -0700 Subject: [PATCH] Drift Boost Plumes, play every other frame of Drift Boost Explosion (normally flicker frames) --- src/dehacked.c | 4 ++++ src/info.c | 14 +++++++++----- src/info.h | 5 +++++ src/p_mobj.c | 25 ++++++++++++++++++++++--- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 336a407a1..f9cd3e962 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6585,6 +6585,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTEXPLODE2", "S_DRIFTEXPLODE3", "S_DRIFTEXPLODE4", + "S_DRIFTEXPLODE5", + "S_DRIFTEXPLODE6", + "S_DRIFTEXPLODE7", + "S_DRIFTEXPLODE8", // Drift boost clip "S_DRIFTCLIP1", diff --git a/src/info.c b/src/info.c index 0a0f827dc..a4c67cb8a 100644 --- a/src/info.c +++ b/src/info.c @@ -72,7 +72,7 @@ char sprnames[NUMSPRITES + 1][5] = "BFRT","OFRT","RFRT","PFRT","ASPK","HBST","HBSO","HBSF","WBLZ","WBLN", "FWRK","MXCL","RGSP","DRAF","GRES","OTFG","DBOS","EGOO","WTRL","XMS4", - "XMS5","FBUB","GCHA","CHEZ","VIEW","DBCL","DBNC", + "XMS5","FBUB","GCHA","CHEZ","VIEW","DBCL","DBNC","DBST", }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -2560,10 +2560,14 @@ state_t states[NUMSTATES] = {SPR_DSHR, FF_PAPERSPRITE|5, 1, {NULL}, 0, 0, S_FASTDUST7}, // S_FASTDUST6 {SPR_DSHR, FF_PAPERSPRITE|6, 1, {NULL}, 0, 0, S_NULL}, // S_FASTDUST7 - {SPR_DBOS, FF_FULLBRIGHT, 2, {NULL}, 6, 1, S_DRIFTEXPLODE2}, // S_DRIFTEXPLODE1 - {SPR_DBOS, FF_FULLBRIGHT|1, 2, {NULL}, 6, 1, S_DRIFTEXPLODE3}, // S_DRIFTEXPLODE2 - {SPR_DBOS, FF_FULLBRIGHT|2, 2, {NULL}, 6, 1, S_DRIFTEXPLODE4}, // S_DRIFTEXPLODE3 - {SPR_DBOS, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTEXPLODE1}, // S_DRIFTEXPLODE4 + {SPR_DBOS, FF_FULLBRIGHT, 1, {NULL}, 6, 1, S_DRIFTEXPLODE2}, // S_DRIFTEXPLODE1 + {SPR_DBST, FF_PAPERSPRITE|FF_FULLBRIGHT, 1, {NULL}, 6, 1, S_DRIFTEXPLODE3}, // S_DRIFTEXPLODE2 + {SPR_DBOS, FF_FULLBRIGHT|1, 1, {NULL}, 6, 1, S_DRIFTEXPLODE4}, // S_DRIFTEXPLODE3 + {SPR_DBST, FF_PAPERSPRITE|FF_FULLBRIGHT|1, 1, {NULL}, 6, 1, S_DRIFTEXPLODE5}, // S_DRIFTEXPLODE4 + {SPR_DBOS, FF_FULLBRIGHT|2, 1, {NULL}, 6, 1, S_DRIFTEXPLODE6}, // S_DRIFTEXPLODE5 + {SPR_DBST, FF_PAPERSPRITE|FF_FULLBRIGHT|2, 1, {NULL}, 6, 1, S_DRIFTEXPLODE7}, // S_DRIFTEXPLODE6 + {SPR_DBOS, FF_FULLBRIGHT|3, 1, {NULL}, 6, 1, S_DRIFTEXPLODE8}, // S_DRIFTEXPLODE7 + {SPR_DBST, FF_PAPERSPRITE|FF_FULLBRIGHT|3, 1, {NULL}, 6, 1, S_DRIFTEXPLODE1}, // S_DRIFTEXPLODE8 {SPR_DBCL, FF_FULLBRIGHT, 2, {NULL}, 6, 1, S_DRIFTCLIP2}, // S_DRIFTCLIP1 {SPR_DBCL, FF_FULLBRIGHT|1, 2, {NULL}, 6, 1, S_DRIFTCLIP3}, // S_DRIFTCLIP2 diff --git a/src/info.h b/src/info.h index a0bc61088..00c8b863a 100644 --- a/src/info.h +++ b/src/info.h @@ -813,6 +813,7 @@ typedef enum sprite SPR_DBCL, // Drift boost clip SPR_DBNC, // Drift boost clip's sparks + SPR_DBST, // Drift boost plume SPR_FIRSTFREESLOT, SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1, @@ -3249,6 +3250,10 @@ typedef enum state S_DRIFTEXPLODE2, S_DRIFTEXPLODE3, S_DRIFTEXPLODE4, + S_DRIFTEXPLODE5, + S_DRIFTEXPLODE6, + S_DRIFTEXPLODE7, + S_DRIFTEXPLODE8, // Drift boost clip S_DRIFTCLIP1, diff --git a/src/p_mobj.c b/src/p_mobj.c index ec25abff5..e65d4aef1 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8329,18 +8329,37 @@ void P_MobjThinker(mobj_t *mobj) //mobj->angle = mobj->target->angle; { angle_t angle = R_PointToAngle2(0, 0, mobj->target->momx, mobj->target->momy); + fixed_t nudge; + mobj->angle = angle; - P_TeleportMove(mobj, mobj->target->x + P_ReturnThrustX(mobj, angle+ANGLE_180, 4*mobj->target->radius), - mobj->target->y + P_ReturnThrustY(mobj, angle+ANGLE_180, 4*mobj->target->radius), mobj->target->z); + + if (( mobj->fuse & 1 )) + { + nudge = 4*mobj->target->radius; + } + else + { + nudge = 2*mobj->target->radius; + /* rotate the papersprite frames to see the flat angle */ + mobj->angle += ANGLE_90; + } + + P_TeleportMove(mobj, + mobj->target->x + P_ReturnThrustX(mobj, angle + ANGLE_180, nudge), + mobj->target->y + P_ReturnThrustY(mobj, angle + ANGLE_180, nudge), + mobj->target->z); } P_SetScale(mobj, mobj->target->scale); - mobj->flags2 ^= MF2_DONTDRAW; #ifdef HWRENDER mobj->modeltilt = mobj->target->modeltilt; #endif if (mobj->fuse <= 16) + { mobj->color = SKINCOLOR_KETCHUP; + /* don't draw papersprite frames after blue boost */ + mobj->flags2 ^= MF2_DONTDRAW; + } else if (mobj->fuse <= 32) mobj->color = SKINCOLOR_SAPPHIRE; else if (mobj->fuse > 32)