From 81fa5d7f513c0b52cc5f792563ab834cdf79922e Mon Sep 17 00:00:00 2001 From: Sally Cochenour Date: Wed, 25 Mar 2020 23:49:39 -0400 Subject: [PATCH] Start on new flame shield dash visuals --- src/dehacked.c | 13 ++++++++++++- src/info.c | 14 ++++++++++++-- src/info.h | 15 ++++++++++++++- src/p_enemy.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/p_mobj.c | 10 ++++------ 5 files changed, 86 insertions(+), 10 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index e6508721e..da740a7a9 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1887,6 +1887,7 @@ static actionpointer_t actionpointers[] = {{A_ReaperThinker}, "A_REAPERTHINKER"}, //SRB2kart {{A_MementosTPParticles}, "A_MEMENTOSTPPARTICLES"}, //SRB2kart {{A_FlameParticle}, "A_FLAMEPARTICLE"}, // SRB2kart + {{A_FlameShieldPaper}, "A_FLAMESHIELDPAPER"}, // SRB2kart {{A_OrbitNights}, "A_ORBITNIGHTS"}, {{A_GhostMe}, "A_GHOSTME"}, {{A_SetObjectState}, "A_SETOBJECTSTATE"}, @@ -6700,7 +6701,17 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_FLAMESHIELD16", "S_FLAMESHIELD17", "S_FLAMESHIELD18", - "S_FLAMESHIELDDASH", + + "S_FLAMESHIELDDASH1", + "S_FLAMESHIELDDASH2", + "S_FLAMESHIELDDASH3", + "S_FLAMESHIELDDASH4", + "S_FLAMESHIELDDASH5", + "S_FLAMESHIELDDASH6", + "S_FLAMESHIELDDASH7", + "S_FLAMESHIELDDASH8", + + "S_FLAMESHIELDPAPER", // The legend "S_SINK", diff --git a/src/info.c b/src/info.c index 11f669535..2c3399608 100644 --- a/src/info.c +++ b/src/info.c @@ -58,7 +58,7 @@ char sprnames[NUMSPRITES + 1][5] = //SRB2kart Sprites "RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE","KINV","KINF", "WIPD","DRIF","BDRF","DUST","DRWS","RSHE","FITM","BANA","ORBN","JAWZ","SSMN", - "KRBM","BHOG","BHBM","SPBM","THNS","BUBS","BWVE","FLMS","SINK","SITR", + "KRBM","BHOG","BHBM","SPBM","THNS","BUBS","BWVE","FLMS","FLMD","FLMP","SINK","SITR", "KBLN","DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB", "CHOM","SACO","CRAB","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA", "ISTB","ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","HIT1","HIT2", @@ -2918,7 +2918,17 @@ state_t states[NUMSTATES] = {SPR_FLMS, FF_FULLBRIGHT|16, 2, {NULL}, 0, 0, S_FLAMESHIELD17}, // S_FLAMESHIELD16 {SPR_FLMS, FF_FULLBRIGHT|8, 2, {NULL}, 0, 0, S_FLAMESHIELD18}, // S_FLAMESHIELD17 {SPR_FLMS, FF_FULLBRIGHT|17, 2, {NULL}, 0, 0, S_FLAMESHIELD1}, // S_FLAMESHIELD18 - {SPR_FLMS, FF_FULLBRIGHT|18, -1, {NULL}, 0, 0, S_FLAMESHIELDDASH}, // S_FLAMESHIELDDASH + + {SPR_FLMD, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH2}, // S_FLAMESHIELDDASH1 + {SPR_FLMD, FF_FULLBRIGHT, 1, {A_FlameShieldPaper}, 0, 2, S_FLAMESHIELDDASH3}, // S_FLAMESHIELDDASH2 + {SPR_FLMD, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH4}, // S_FLAMESHIELDDASH3 + {SPR_FLMD, FF_FULLBRIGHT, 1, {A_FlameShieldPaper}, 1, 3, S_FLAMESHIELDDASH5}, // S_FLAMESHIELDDASH4 + {SPR_FLMD, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH6}, // S_FLAMESHIELDDASH5 + {SPR_FLMD, FF_FULLBRIGHT, 1, {A_FlameShieldPaper}, 2, 0, S_FLAMESHIELDDASH7}, // S_FLAMESHIELDDASH6 + {SPR_FLMD, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_FLAMESHIELDDASH8}, // S_FLAMESHIELDDASH7 + {SPR_FLMD, FF_FULLBRIGHT, 1, {A_FlameShieldPaper}, 3, 1, S_FLAMESHIELDDASH1}, // S_FLAMESHIELDDASH8 + + {SPR_FLMP, FF_FULLBRIGHT|FF_PAPERSPRITE, 2, {NULL}, 0, 0, S_NULL}, // S_FLAMESHIELDPAPER {SPR_SINK, 0, 1, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK {SPR_SINK, 0|FF_TRANS80|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_SINK_SHIELD}, // S_SINK_SHIELD diff --git a/src/info.h b/src/info.h index a51984ad2..5c9a3de51 100644 --- a/src/info.h +++ b/src/info.h @@ -177,6 +177,7 @@ void A_MayonakaArrow(); //SRB2kart: midnight channel arrow sign void A_ReaperThinker(); //SRB2kart: mementos reaper void A_MementosTPParticles(); //SRB2kart: mementos teleporter particles. Man that's a lot of actions for my shite. void A_FlameParticle(); // SRB2kart +void A_FlameShieldPaper(); void A_OrbitNights(); void A_GhostMe(); void A_SetObjectState(); @@ -625,6 +626,8 @@ typedef enum sprite SPR_BUBS, // Bubble Shield (not Bubs) SPR_BWVE, // Bubble Shield waves SPR_FLMS, // Flame Shield + SPR_FLMD, // Flame Shield dash + SPR_FLMP, // Flame Shield paper sprites SPR_SINK, // Kitchen Sink SPR_SITR, // Kitchen Sink Trail SPR_KBLN, // Battle Mode Bumper @@ -3595,7 +3598,17 @@ typedef enum state S_FLAMESHIELD16, S_FLAMESHIELD17, S_FLAMESHIELD18, - S_FLAMESHIELDDASH, + + S_FLAMESHIELDDASH1, + S_FLAMESHIELDDASH2, + S_FLAMESHIELDDASH3, + S_FLAMESHIELDDASH4, + S_FLAMESHIELDDASH5, + S_FLAMESHIELDDASH6, + S_FLAMESHIELDDASH7, + S_FLAMESHIELDDASH8, + + S_FLAMESHIELDPAPER, // The legend S_SINK, diff --git a/src/p_enemy.c b/src/p_enemy.c index 444840e79..d2931d17e 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -203,6 +203,7 @@ void A_MayonakaArrow(mobj_t *actor); //SRB2kart void A_ReaperThinker(mobj_t *actor); //SRB2kart void A_MementosTPParticles(mobj_t *actor); //SRB2kart void A_FlameParticle(mobj_t *actor); // SRB2kart +void A_FlameShieldPaper(mobj_t *actor); // SRB2kart void A_OrbitNights(mobj_t *actor); void A_GhostMe(mobj_t *actor); void A_SetObjectState(mobj_t *actor); @@ -9328,6 +9329,49 @@ void A_FlameParticle(mobj_t *actor) par->momz = actor->scale<<1; } +void A_FlameShieldPaper(mobj_t *actor) +{ + INT32 framea = 0; + INT32 frameb = 0; + INT32 locvar1 = var1; + INT32 locvar2 = var2; + UINT8 i; + +#ifdef HAVE_BLUA + if (LUA_CallAction("A_FlameShieldPaper", actor)) + return; +#endif + + framea = (locvar1 & FF_FRAMEMASK); + frameb = (locvar2 & FF_FRAMEMASK); + + for (i = 0; i < 2; i++) + { + INT32 perpendicular = ((i & 1) ? -ANGLE_90 : ANGLE_90); + fixed_t newx = actor->x + P_ReturnThrustX(NULL, actor->angle + perpendicular, 8*actor->scale); + fixed_t newy = actor->y + P_ReturnThrustY(NULL, actor->angle + perpendicular, 8*actor->scale); + mobj_t *paper = P_SpawnMobj(newx + actor->momx, newy + actor->momy, actor->z + actor->momz, MT_THOK); + + P_SetScale(paper, actor->scale); + paper->destscale = actor->destscale; + + P_SetMobjState(paper, S_FLAMESHIELDPAPER); + paper->frame &= ~FF_FRAMEMASK; + + paper->angle = actor->angle + ANGLE_45; + + if (i & 1) + { + paper->angle -= ANGLE_90; + paper->frame |= frameb; + } + else + { + paper->frame |= framea; + } + } +} + //} // Function: A_OrbitNights diff --git a/src/p_mobj.c b/src/p_mobj.c index 25acd0c89..773ed3709 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8603,15 +8603,13 @@ void P_MobjThinker(mobj_t *mobj) if (mobj->target->player->kartstuff[k_flamedash]) { - if (curstate != S_FLAMESHIELDDASH) - P_SetMobjState(mobj, S_FLAMESHIELDDASH); - mobj->flags2 ^= MF2_DONTDRAW; + if (!(curstate >= S_FLAMESHIELDDASH1 && curstate <= S_FLAMESHIELDDASH8)) + P_SetMobjState(mobj, S_FLAMESHIELDDASH1); } else { - if (curstate == S_FLAMESHIELDDASH) + if (curstate >= S_FLAMESHIELDDASH1 && curstate <= S_FLAMESHIELDDASH8) P_SetMobjState(mobj, S_FLAMESHIELD1); - mobj->flags2 &= ~MF2_DONTDRAW; } if (!splitscreen /*&& rendermode != render_soft*/) @@ -8625,7 +8623,7 @@ void P_MobjThinker(mobj_t *mobj) else viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, camera[0].x, camera[0].y); - if (curstate >= S_FLAMESHIELD1 && curstate < S_FLAMESHIELDDASH && ((curstate-S_FLAMESHIELD1) & 1)) + if (curstate >= S_FLAMESHIELD1 && curstate < S_FLAMESHIELDDASH1 && ((curstate-S_FLAMESHIELD1) & 1)) viewingangle += ANGLE_180; destx = mobj->target->x + P_ReturnThrustX(mobj->target, viewingangle, mobj->scale>>4);