From e250796886a63e42dd1902b86d2dd5e130a6ef5d Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 8 Jul 2020 21:30:34 -0700 Subject: [PATCH 01/11] WIP "Drift explosion" --- src/k_kart.c | 24 ++++++++++++------------ src/p_mobj.c | 17 +++++++++++++---- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 32e238fa8..092bc3acf 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6323,10 +6323,10 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftcharge] < 0 || player->kartstuff[k_driftcharge] >= dsone) { angle_t pushdir = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy); - //mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTEXPLODE); - //P_SetTarget(&overlay->target, player->mo); - //P_SetScale(overlay, (overlay->destscale = player->mo->scale)); - //K_FlipFromObject(overlay, player->mo); + mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTEXPLODE); + P_SetTarget(&overlay->target, player->mo); + P_SetScale(overlay, (overlay->destscale = FixedMul(3*FRACUNIT/2, player->mo->scale))); + K_FlipFromObject(overlay, player->mo); S_StartSound(player->mo, sfx_s23c); //K_SpawnDashDustRelease(player); @@ -6340,8 +6340,8 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftboost] < 15) player->kartstuff[k_driftboost] = 15; - //overlay->color = SKINCOLOR_GOLD; - //overlay->fuse = 8; + overlay->color = SKINCOLOR_GOLD; + overlay->fuse = 8; } else if (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo) { @@ -6352,8 +6352,8 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftboost] < 20) player->kartstuff[k_driftboost] = 20; - //overlay->color = SKINCOLOR_KETCHUP; - //overlay->fuse = 16; + overlay->color = SKINCOLOR_KETCHUP; + overlay->fuse = 8; } else if (player->kartstuff[k_driftcharge] < dsthree) { @@ -6364,8 +6364,8 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftboost] < 50) player->kartstuff[k_driftboost] = 50; - //overlay->color = SKINCOLOR_SAPPHIRE; - //overlay->fuse = 32; + overlay->color = SKINCOLOR_SAPPHIRE; + overlay->fuse = 16; } else if (player->kartstuff[k_driftcharge] >= dsthree) { @@ -6376,8 +6376,8 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftboost] < 125) player->kartstuff[k_driftboost] = 125; - //overlay->color = SKINCOLOR_SILVER; - //overlay->fuse = 120; + overlay->color = SKINCOLOR_SILVER; + overlay->fuse = 24; } } diff --git a/src/p_mobj.c b/src/p_mobj.c index 842d1e2b1..3c1aba3be 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8297,15 +8297,24 @@ void P_MobjThinker(mobj_t *mobj) return; } - mobj->angle = mobj->target->angle; - P_TeleportMove(mobj, mobj->target->x + P_ReturnThrustX(mobj, mobj->angle+ANGLE_180, mobj->target->radius), - mobj->target->y + P_ReturnThrustY(mobj, mobj->angle+ANGLE_180, mobj->target->radius), mobj->target->z); - P_SetScale(mobj, mobj->target->scale); + //mobj->angle = mobj->target->angle; + { + angle_t angle = R_PointToAngle2(0, 0, mobj->target->momx, mobj->target->momy); + 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); + } + P_SetScale(mobj, FixedMul(3*FRACUNIT/2, mobj->target->scale)); mobj->flags2 ^= MF2_DONTDRAW; #ifdef HWRENDER mobj->modeltilt = mobj->target->modeltilt; #endif + if (mobj->fuse <= 8) + mobj->color = SKINCOLOR_KETCHUP; + else if (mobj->fuse <= 16) + mobj->color = SKINCOLOR_SAPPHIRE; + { player_t *p = NULL; if (mobj->target->target && mobj->target->target->player) From 856eda9f958d9ea85017d6f15295d2ba199bf95f Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 9 Jul 2020 16:48:21 -0700 Subject: [PATCH 02/11] Don't scale drift explosion --- src/k_kart.c | 2 +- src/p_mobj.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 092bc3acf..29f484cb6 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6325,7 +6325,7 @@ static void K_KartDrift(player_t *player, boolean onground) angle_t pushdir = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy); mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTEXPLODE); P_SetTarget(&overlay->target, player->mo); - P_SetScale(overlay, (overlay->destscale = FixedMul(3*FRACUNIT/2, player->mo->scale))); + P_SetScale(overlay, (overlay->destscale = player->mo->scale)); K_FlipFromObject(overlay, player->mo); S_StartSound(player->mo, sfx_s23c); diff --git a/src/p_mobj.c b/src/p_mobj.c index 3c1aba3be..d34b0d938 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8304,7 +8304,7 @@ void P_MobjThinker(mobj_t *mobj) 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); } - P_SetScale(mobj, FixedMul(3*FRACUNIT/2, mobj->target->scale)); + P_SetScale(mobj, mobj->target->scale); mobj->flags2 ^= MF2_DONTDRAW; #ifdef HWRENDER mobj->modeltilt = mobj->target->modeltilt; From 65550cc9b7463abc2787c68de3c8c83da4bdd9ce Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 9 Jul 2020 18:03:27 -0700 Subject: [PATCH 03/11] Make drift explode animation LONGER --- src/k_kart.c | 6 +++--- src/p_mobj.c | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index 566123ea3..295cdc540 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6376,7 +6376,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftboost] = 20; overlay->color = SKINCOLOR_KETCHUP; - overlay->fuse = 8; + overlay->fuse = 16; } else if (player->kartstuff[k_driftcharge] < dsthree) { @@ -6388,7 +6388,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftboost] = 50; overlay->color = SKINCOLOR_SAPPHIRE; - overlay->fuse = 16; + overlay->fuse = 32; } else if (player->kartstuff[k_driftcharge] >= dsthree) { @@ -6400,7 +6400,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftboost] = 125; overlay->color = SKINCOLOR_SILVER; - overlay->fuse = 24; + overlay->fuse = 48; } } diff --git a/src/p_mobj.c b/src/p_mobj.c index 10e968c68..735000db1 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8331,9 +8331,9 @@ void P_MobjThinker(mobj_t *mobj) mobj->modeltilt = mobj->target->modeltilt; #endif - if (mobj->fuse <= 8) + if (mobj->fuse <= 16) mobj->color = SKINCOLOR_KETCHUP; - else if (mobj->fuse <= 16) + else if (mobj->fuse <= 32) mobj->color = SKINCOLOR_SAPPHIRE; { From 59c0f99865650841c953b5e5821ed3f30639e184 Mon Sep 17 00:00:00 2001 From: James R Date: Fri, 17 Jul 2020 23:44:00 -0700 Subject: [PATCH 04/11] 5th frame + rainbow colors cycle on the drift explody --- src/dehacked.c | 1 + src/info.c | 3 ++- src/info.h | 1 + src/k_kart.c | 8 ++++---- src/p_mobj.c | 6 ++++-- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index d8a3f6d01..0bdf43324 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6585,6 +6585,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTEXPLODE2", "S_DRIFTEXPLODE3", "S_DRIFTEXPLODE4", + "S_DRIFTEXPLODE5", // Sneaker boost effect "S_BOOSTFLAME", diff --git a/src/info.c b/src/info.c index ca367fa75..6a5c93ce1 100644 --- a/src/info.c +++ b/src/info.c @@ -2563,7 +2563,8 @@ state_t states[NUMSTATES] = {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|3, 2, {NULL}, 6, 1, S_DRIFTEXPLODE5}, // S_DRIFTEXPLODE4 + {SPR_DBOS, FF_FULLBRIGHT|4, 2, {NULL}, 6, 1, S_DRIFTEXPLODE1}, // S_DRIFTEXPLODE5 {SPR_BOST, FF_FULLBRIGHT|FF_ANIMATE, TICRATE, {NULL}, 6, 1, S_BOOSTSMOKESPAWNER}, // S_BOOSTFLAME {SPR_NULL, 0, TICRATE/2, {NULL}, 0, 0, S_NULL}, // S_BOOSTSMOKESPAWNER diff --git a/src/info.h b/src/info.h index c79f2ae5e..27ec301a7 100644 --- a/src/info.h +++ b/src/info.h @@ -3246,6 +3246,7 @@ typedef enum state S_DRIFTEXPLODE2, S_DRIFTEXPLODE3, S_DRIFTEXPLODE4, + S_DRIFTEXPLODE5, // Sneaker boost effect S_BOOSTFLAME, diff --git a/src/k_kart.c b/src/k_kart.c index 295cdc540..8aba6cf34 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6364,7 +6364,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftboost] = 15; overlay->color = SKINCOLOR_GOLD; - overlay->fuse = 8; + overlay->fuse = 10; } else if (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo) { @@ -6376,7 +6376,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftboost] = 20; overlay->color = SKINCOLOR_KETCHUP; - overlay->fuse = 16; + overlay->fuse = 20; } else if (player->kartstuff[k_driftcharge] < dsthree) { @@ -6388,7 +6388,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftboost] = 50; overlay->color = SKINCOLOR_SAPPHIRE; - overlay->fuse = 32; + overlay->fuse = 40; } else if (player->kartstuff[k_driftcharge] >= dsthree) { @@ -6400,7 +6400,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftboost] = 125; overlay->color = SKINCOLOR_SILVER; - overlay->fuse = 48; + overlay->fuse = 120; } } diff --git a/src/p_mobj.c b/src/p_mobj.c index 735000db1..971990dc0 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8331,10 +8331,12 @@ void P_MobjThinker(mobj_t *mobj) mobj->modeltilt = mobj->target->modeltilt; #endif - if (mobj->fuse <= 16) + if (mobj->fuse <= 20) mobj->color = SKINCOLOR_KETCHUP; - else if (mobj->fuse <= 32) + else if (mobj->fuse <= 40) mobj->color = SKINCOLOR_SAPPHIRE; + else if (mobj->fuse > 40) + mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); { player_t *p = NULL; From 1dae3d196bd328b18aefa7ec532e9c962dfc5a74 Mon Sep 17 00:00:00 2001 From: James R Date: Sat, 18 Jul 2020 14:52:30 -0700 Subject: [PATCH 05/11] Who said anything about a 5th frame? --- src/dehacked.c | 1 - src/info.c | 3 +-- src/info.h | 1 - src/k_kart.c | 4 ++-- src/p_mobj.c | 6 +++--- 5 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 0bdf43324..d8a3f6d01 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6585,7 +6585,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTEXPLODE2", "S_DRIFTEXPLODE3", "S_DRIFTEXPLODE4", - "S_DRIFTEXPLODE5", // Sneaker boost effect "S_BOOSTFLAME", diff --git a/src/info.c b/src/info.c index 6a5c93ce1..ca367fa75 100644 --- a/src/info.c +++ b/src/info.c @@ -2563,8 +2563,7 @@ state_t states[NUMSTATES] = {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_DRIFTEXPLODE5}, // S_DRIFTEXPLODE4 - {SPR_DBOS, FF_FULLBRIGHT|4, 2, {NULL}, 6, 1, S_DRIFTEXPLODE1}, // S_DRIFTEXPLODE5 + {SPR_DBOS, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTEXPLODE1}, // S_DRIFTEXPLODE4 {SPR_BOST, FF_FULLBRIGHT|FF_ANIMATE, TICRATE, {NULL}, 6, 1, S_BOOSTSMOKESPAWNER}, // S_BOOSTFLAME {SPR_NULL, 0, TICRATE/2, {NULL}, 0, 0, S_NULL}, // S_BOOSTSMOKESPAWNER diff --git a/src/info.h b/src/info.h index 27ec301a7..c79f2ae5e 100644 --- a/src/info.h +++ b/src/info.h @@ -3246,7 +3246,6 @@ typedef enum state S_DRIFTEXPLODE2, S_DRIFTEXPLODE3, S_DRIFTEXPLODE4, - S_DRIFTEXPLODE5, // Sneaker boost effect S_BOOSTFLAME, diff --git a/src/k_kart.c b/src/k_kart.c index 8aba6cf34..d87d7f092 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6376,7 +6376,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftboost] = 20; overlay->color = SKINCOLOR_KETCHUP; - overlay->fuse = 20; + overlay->fuse = 16; } else if (player->kartstuff[k_driftcharge] < dsthree) { @@ -6388,7 +6388,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->kartstuff[k_driftboost] = 50; overlay->color = SKINCOLOR_SAPPHIRE; - overlay->fuse = 40; + overlay->fuse = 32; } else if (player->kartstuff[k_driftcharge] >= dsthree) { diff --git a/src/p_mobj.c b/src/p_mobj.c index 971990dc0..ac5b35121 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -8331,11 +8331,11 @@ void P_MobjThinker(mobj_t *mobj) mobj->modeltilt = mobj->target->modeltilt; #endif - if (mobj->fuse <= 20) + if (mobj->fuse <= 16) mobj->color = SKINCOLOR_KETCHUP; - else if (mobj->fuse <= 40) + else if (mobj->fuse <= 32) mobj->color = SKINCOLOR_SAPPHIRE; - else if (mobj->fuse > 40) + else if (mobj->fuse > 32) mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); { From f8b19a239f29185edeb0f938c3a34c7cd428f883 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 19 Jul 2020 18:04:11 -0700 Subject: [PATCH 06/11] Drift Boost Clip, bounces on floor and sparks, then flickers until it dies --- src/dehacked.c | 15 +++++++++++ src/info.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++- src/info.h | 18 ++++++++++++++ src/k_kart.c | 29 ++++++++++++++++++++++ src/k_kart.h | 1 + src/p_mobj.c | 15 +++++++++++ 6 files changed, 144 insertions(+), 1 deletion(-) diff --git a/src/dehacked.c b/src/dehacked.c index d8a3f6d01..336a407a1 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6586,6 +6586,19 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTEXPLODE3", "S_DRIFTEXPLODE4", + // Drift boost clip + "S_DRIFTCLIP1", + "S_DRIFTCLIP2", + "S_DRIFTCLIP3", + "S_DRIFTCLIP4", + "S_DRIFTCLIP5", + "S_DRIFTCLIP6", + "S_DRIFTCLIP7", + "S_DRIFTCLIP8", + + // Drift boost clip spark + "S_DRIFTCLIPSPARK", + // Sneaker boost effect "S_BOOSTFLAME", "S_BOOSTSMOKESPAWNER", @@ -8093,6 +8106,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_FASTLINE", "MT_FASTDUST", "MT_DRIFTEXPLODE", + "MT_DRIFTCLIP", + "MT_DRIFTCLIPSPARK", "MT_BOOSTFLAME", "MT_BOOSTSMOKE", "MT_SNEAKERTRAIL", diff --git a/src/info.c b/src/info.c index ca367fa75..0a0f827dc 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" + "XMS5","FBUB","GCHA","CHEZ","VIEW","DBCL","DBNC", }; // Doesn't work with g++, needs actionf_p1 (don't modify this comment) @@ -2565,6 +2565,17 @@ state_t states[NUMSTATES] = {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_DBCL, FF_FULLBRIGHT, 2, {NULL}, 6, 1, S_DRIFTCLIP2}, // S_DRIFTCLIP1 + {SPR_DBCL, FF_FULLBRIGHT|1, 2, {NULL}, 6, 1, S_DRIFTCLIP3}, // S_DRIFTCLIP2 + {SPR_DBCL, FF_FULLBRIGHT|2, 2, {NULL}, 6, 1, S_DRIFTCLIP4}, // S_DRIFTCLIP3 + {SPR_DBCL, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTCLIP5}, // S_DRIFTCLIP4 + {SPR_DBCL, FF_FULLBRIGHT|4, 2, {NULL}, 6, 1, S_DRIFTCLIP6}, // S_DRIFTCLIP5 + {SPR_DBCL, FF_FULLBRIGHT|5, 2, {NULL}, 6, 1, S_DRIFTCLIP7}, // S_DRIFTCLIP6 + {SPR_DBCL, FF_FULLBRIGHT|6, 2, {NULL}, 6, 1, S_DRIFTCLIP8}, // S_DRIFTCLIP7 + {SPR_DBCL, FF_FULLBRIGHT|7, 2, {NULL}, 6, 1, S_DRIFTCLIP1}, // S_DRIFTCLIP8 + + {SPR_DBNC, FF_FULLBRIGHT|FF_ANIMATE, 14, {NULL}, 6, 1, S_NULL}, // S_DRIFTCLIPSPARK + {SPR_BOST, FF_FULLBRIGHT|FF_ANIMATE, TICRATE, {NULL}, 6, 1, S_BOOSTSMOKESPAWNER}, // S_BOOSTFLAME {SPR_NULL, 0, TICRATE/2, {NULL}, 0, 0, S_NULL}, // S_BOOSTSMOKESPAWNER @@ -15346,6 +15357,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, + { // MT_DRIFTCLIP + -1, // doomednum + S_DRIFTCLIP1, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 8, // speed + 32*FRACUNIT, // radius + 64*FRACUNIT, // height + 1, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_DONTENCOREMAP|MF_GRENADEBOUNCE|MF_BOUNCE, // flags + S_NULL // raisestate + }, + + { // MT_DRIFTCLIPSPARK + -1, // doomednum + S_DRIFTCLIPSPARK, // spawnstate + 1000, // spawnhealth + S_NULL, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 8, // speed + 32*FRACUNIT, // radius + 64*FRACUNIT, // height + 1, // display offset + 100, // mass + 0, // damage + sfx_None, // activesound + MF_NOBLOCKMAP|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, + { // MT_BOOSTFLAME -1, // doomednum S_BOOSTFLAME, // spawnstate diff --git a/src/info.h b/src/info.h index c79f2ae5e..a0bc61088 100644 --- a/src/info.h +++ b/src/info.h @@ -811,6 +811,9 @@ typedef enum sprite // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later SPR_VIEW, + SPR_DBCL, // Drift boost clip + SPR_DBNC, // Drift boost clip's sparks + SPR_FIRSTFREESLOT, SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1, NUMSPRITES @@ -3247,6 +3250,19 @@ typedef enum state S_DRIFTEXPLODE3, S_DRIFTEXPLODE4, + // Drift boost clip + S_DRIFTCLIP1, + S_DRIFTCLIP2, + S_DRIFTCLIP3, + S_DRIFTCLIP4, + S_DRIFTCLIP5, + S_DRIFTCLIP6, + S_DRIFTCLIP7, + S_DRIFTCLIP8, + + // Drift boost clip sparks + S_DRIFTCLIPSPARK, + // Sneaker boost effect S_BOOSTFLAME, S_BOOSTSMOKESPAWNER, @@ -4791,6 +4807,8 @@ typedef enum mobj_type MT_FASTLINE, MT_FASTDUST, MT_DRIFTEXPLODE, + MT_DRIFTCLIP, + MT_DRIFTCLIPSPARK, MT_BOOSTFLAME, MT_BOOSTSMOKE, MT_SNEAKERTRAIL, diff --git a/src/k_kart.c b/src/k_kart.c index d87d7f092..aed96ad27 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1648,6 +1648,35 @@ static void K_SpawnBrakeDriftSparks(player_t *player) // Be sure to update the m sparks->flags2 |= MF2_DONTDRAW; } +static fixed_t K_RandomFlip(fixed_t f) +{ + return ( ( leveltime & 1 ) ? f : -f ); +} + +void K_SpawnDriftBoostClip(player_t *player) +{ + mobj_t *clip; + fixed_t scale = 115*FRACUNIT/100; + + clip = P_SpawnMobj( + player->mo->x, + player->mo->y, + player->mo->z + player->mo->height, + MT_DRIFTCLIP + ); + + P_SetTarget(&clip->target, player->mo); + P_SetScale(clip, ( clip->destscale = FixedMul(scale, player->mo->scale) )); + K_MatchGenericExtraFlags(clip, player->mo); + + clip->fuse = 105; + clip->momz = 4 * clip->scale; + + P_InstaThrust(clip, player->mo->angle + + K_RandomFlip(P_RandomRange(FRACUNIT/2, FRACUNIT)), + FixedMul(scale, player->speed)); +} + /** \brief Handles the state changing for moving players, moved here to eliminate duplicate code \param player player data diff --git a/src/k_kart.h b/src/k_kart.h index 2508b6f63..f4bf84cc8 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -30,6 +30,7 @@ void K_FlipFromObject(mobj_t *mo, mobj_t *master); void K_MatchGenericExtraFlags(mobj_t *mo, mobj_t *master); void K_GenericExtraFlagsNoZAdjust(mobj_t *mo, mobj_t *master); void K_SpawnDashDustRelease(player_t *player); +void K_SpawnDriftBoostClip(player_t *player); void K_KartMoveAnimation(player_t *player); void K_KartPlayerHUDUpdate(player_t *player); void K_KartPlayerThink(player_t *player, ticcmd_t *cmd); diff --git a/src/p_mobj.c b/src/p_mobj.c index ac5b35121..8e15b3507 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2457,6 +2457,18 @@ static boolean P_ZMovement(mobj_t *mo) mom.z = P_MobjFlip(mo)*FixedMul(5*FRACUNIT, mo->scale); else if (mo->type == MT_SPINFIRE) // elemental shield fire is another exception here ; + else if (mo->type == MT_DRIFTCLIP) + { + mom.z = -mom.z/2; + if (abs(mom.z) > 4 * mo->scale / 3) + { + mobj_t *spark = P_SpawnMobj(mo->x, mo->y, mo->z, MT_DRIFTCLIPSPARK); + spark->momx = mo->momx/2; + spark->momy = mo->momy/2; + } + else + mo->flags2 ^= MF2_DONTDRAW; + } else if (mo->flags & MF_MISSILE) { if (!(mo->flags & MF_NOCLIP)) @@ -8338,6 +8350,9 @@ void P_MobjThinker(mobj_t *mobj) else if (mobj->fuse > 32) mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); + if (mobj->fuse == 17 || mobj->fuse == 33)/* to red/blue */ + K_SpawnDriftBoostClip(mobj->target->player); + { player_t *p = NULL; if (mobj->target->target && mobj->target->target->player) From 3ff00e851e0e352b3d86281387128b2dd3b50432 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 19 Jul 2020 18:09:52 -0700 Subject: [PATCH 07/11] Better spawning for the clip spark --- src/k_kart.c | 14 ++++++++++++++ src/k_kart.h | 1 + src/p_mobj.c | 6 +----- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index aed96ad27..495e2ca2d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1677,6 +1677,20 @@ void K_SpawnDriftBoostClip(player_t *player) FixedMul(scale, player->speed)); } +void K_SpawnDriftBoostClipSpark(mobj_t *clip) +{ + mobj_t *spark; + + spark = P_SpawnMobj(clip->x, clip->y, clip->z, MT_DRIFTCLIPSPARK); + + P_SetTarget(&spark->target, clip); + P_SetScale(spark, ( spark->destscale = clip->scale )); + K_MatchGenericExtraFlags(spark, clip); + + spark->momx = clip->momx/2; + spark->momy = clip->momx/2; +} + /** \brief Handles the state changing for moving players, moved here to eliminate duplicate code \param player player data diff --git a/src/k_kart.h b/src/k_kart.h index f4bf84cc8..be0ce6bf0 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -31,6 +31,7 @@ void K_MatchGenericExtraFlags(mobj_t *mo, mobj_t *master); void K_GenericExtraFlagsNoZAdjust(mobj_t *mo, mobj_t *master); void K_SpawnDashDustRelease(player_t *player); void K_SpawnDriftBoostClip(player_t *player); +void K_SpawnDriftBoostClipSpark(mobj_t *clip); void K_KartMoveAnimation(player_t *player); void K_KartPlayerHUDUpdate(player_t *player); void K_KartPlayerThink(player_t *player, ticcmd_t *cmd); diff --git a/src/p_mobj.c b/src/p_mobj.c index 8e15b3507..ec25abff5 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2461,11 +2461,7 @@ static boolean P_ZMovement(mobj_t *mo) { mom.z = -mom.z/2; if (abs(mom.z) > 4 * mo->scale / 3) - { - mobj_t *spark = P_SpawnMobj(mo->x, mo->y, mo->z, MT_DRIFTCLIPSPARK); - spark->momx = mo->momx/2; - spark->momy = mo->momy/2; - } + K_SpawnDriftBoostClipSpark(mo); else mo->flags2 ^= MF2_DONTDRAW; } From 280791a8327218cc99d3b9a35f7950d87378eb15 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 19 Jul 2020 19:11:19 -0700 Subject: [PATCH 08/11] 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) From b23581ac38810ebe56d89f23fc24f0a965e065d5 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 19 Jul 2020 21:05:29 -0700 Subject: [PATCH 09/11] The drift boost clip is fatter --- src/dehacked.c | 32 ++++++++++++++++++++++++-------- src/info.c | 37 +++++++++++++++++++++++++++---------- src/info.h | 32 ++++++++++++++++++++++++-------- src/k_kart.c | 2 +- src/p_mobj.c | 3 +++ 5 files changed, 79 insertions(+), 27 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index f9cd3e962..2915fef2f 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6591,14 +6591,30 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_DRIFTEXPLODE8", // Drift boost clip - "S_DRIFTCLIP1", - "S_DRIFTCLIP2", - "S_DRIFTCLIP3", - "S_DRIFTCLIP4", - "S_DRIFTCLIP5", - "S_DRIFTCLIP6", - "S_DRIFTCLIP7", - "S_DRIFTCLIP8", + "S_DRIFTCLIPA1", + "S_DRIFTCLIPA2", + "S_DRIFTCLIPA3", + "S_DRIFTCLIPA4", + "S_DRIFTCLIPA5", + "S_DRIFTCLIPA6", + "S_DRIFTCLIPA7", + "S_DRIFTCLIPA8", + "S_DRIFTCLIPA9", + "S_DRIFTCLIPA10", + "S_DRIFTCLIPA11", + "S_DRIFTCLIPA12", + "S_DRIFTCLIPA13", + "S_DRIFTCLIPA14", + "S_DRIFTCLIPA15", + "S_DRIFTCLIPA16", + "S_DRIFTCLIPB1", + "S_DRIFTCLIPB2", + "S_DRIFTCLIPB3", + "S_DRIFTCLIPB4", + "S_DRIFTCLIPB5", + "S_DRIFTCLIPB6", + "S_DRIFTCLIPB7", + "S_DRIFTCLIPB8", // Drift boost clip spark "S_DRIFTCLIPSPARK", diff --git a/src/info.c b/src/info.c index a4c67cb8a..e67a7be69 100644 --- a/src/info.c +++ b/src/info.c @@ -2569,14 +2569,31 @@ state_t states[NUMSTATES] = {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 - {SPR_DBCL, FF_FULLBRIGHT|2, 2, {NULL}, 6, 1, S_DRIFTCLIP4}, // S_DRIFTCLIP3 - {SPR_DBCL, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTCLIP5}, // S_DRIFTCLIP4 - {SPR_DBCL, FF_FULLBRIGHT|4, 2, {NULL}, 6, 1, S_DRIFTCLIP6}, // S_DRIFTCLIP5 - {SPR_DBCL, FF_FULLBRIGHT|5, 2, {NULL}, 6, 1, S_DRIFTCLIP7}, // S_DRIFTCLIP6 - {SPR_DBCL, FF_FULLBRIGHT|6, 2, {NULL}, 6, 1, S_DRIFTCLIP8}, // S_DRIFTCLIP7 - {SPR_DBCL, FF_FULLBRIGHT|7, 2, {NULL}, 6, 1, S_DRIFTCLIP1}, // S_DRIFTCLIP8 + {SPR_DBCL, FF_FULLBRIGHT|0x0, 1, {NULL}, 6, 1, S_DRIFTCLIPA2}, // S_DRIFTCLIPA1 + {SPR_DBCL, FF_FULLBRIGHT|0x8, 1, {NULL}, 6, 1, S_DRIFTCLIPA3}, // S_DRIFTCLIPA2 + {SPR_DBCL, FF_FULLBRIGHT|0x1, 1, {NULL}, 6, 1, S_DRIFTCLIPA4}, // S_DRIFTCLIPA3 + {SPR_DBCL, FF_FULLBRIGHT|0x9, 1, {NULL}, 6, 1, S_DRIFTCLIPA5}, // S_DRIFTCLIPA4 + {SPR_DBCL, FF_FULLBRIGHT|0x2, 1, {NULL}, 6, 1, S_DRIFTCLIPA6}, // S_DRIFTCLIPA5 + {SPR_DBCL, FF_FULLBRIGHT|0xA, 1, {NULL}, 6, 1, S_DRIFTCLIPA7}, // S_DRIFTCLIPA6 + {SPR_DBCL, FF_FULLBRIGHT|0x3, 1, {NULL}, 6, 1, S_DRIFTCLIPA8}, // S_DRIFTCLIPA7 + {SPR_DBCL, FF_FULLBRIGHT|0xB, 1, {NULL}, 6, 1, S_DRIFTCLIPA9}, // S_DRIFTCLIPA8 + {SPR_DBCL, FF_FULLBRIGHT|0x4, 1, {NULL}, 6, 1, S_DRIFTCLIPA10}, // S_DRIFTCLIPA9 + {SPR_DBCL, FF_FULLBRIGHT|0xC, 1, {NULL}, 6, 1, S_DRIFTCLIPA11}, // S_DRIFTCLIPA10 + {SPR_DBCL, FF_FULLBRIGHT|0x5, 1, {NULL}, 6, 1, S_DRIFTCLIPA12}, // S_DRIFTCLIPA11 + {SPR_DBCL, FF_FULLBRIGHT|0xD, 1, {NULL}, 6, 1, S_DRIFTCLIPA13}, // S_DRIFTCLIPA12 + {SPR_DBCL, FF_FULLBRIGHT|0x6, 1, {NULL}, 6, 1, S_DRIFTCLIPA14}, // S_DRIFTCLIPA13 + {SPR_DBCL, FF_FULLBRIGHT|0xE, 1, {NULL}, 6, 1, S_DRIFTCLIPA15}, // S_DRIFTCLIPA14 + {SPR_DBCL, FF_FULLBRIGHT|0x7, 1, {NULL}, 6, 1, S_DRIFTCLIPA16}, // S_DRIFTCLIPA15 + {SPR_DBCL, FF_FULLBRIGHT|0xF, 1, {NULL}, 6, 1, S_DRIFTCLIPB1}, // S_DRIFTCLIPA16 + + {SPR_DBCL, FF_FULLBRIGHT, 2, {NULL}, 6, 1, S_DRIFTCLIPB2}, // S_DRIFTCLIPB1 + {SPR_DBCL, FF_FULLBRIGHT|1, 2, {NULL}, 6, 1, S_DRIFTCLIPB3}, // S_DRIFTCLIPB2 + {SPR_DBCL, FF_FULLBRIGHT|2, 2, {NULL}, 6, 1, S_DRIFTCLIPB4}, // S_DRIFTCLIPB3 + {SPR_DBCL, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTCLIPB5}, // S_DRIFTCLIPB4 + {SPR_DBCL, FF_FULLBRIGHT|4, 2, {NULL}, 6, 1, S_DRIFTCLIPB6}, // S_DRIFTCLIPB5 + {SPR_DBCL, FF_FULLBRIGHT|5, 2, {NULL}, 6, 1, S_DRIFTCLIPB7}, // S_DRIFTCLIPB6 + {SPR_DBCL, FF_FULLBRIGHT|6, 2, {NULL}, 6, 1, S_DRIFTCLIPB8}, // S_DRIFTCLIPB7 + {SPR_DBCL, FF_FULLBRIGHT|7, 2, {NULL}, 6, 1, S_DRIFTCLIPB1}, // S_DRIFTCLIPB8 {SPR_DBNC, FF_FULLBRIGHT|FF_ANIMATE, 14, {NULL}, 6, 1, S_NULL}, // S_DRIFTCLIPSPARK @@ -15363,7 +15380,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_DRIFTCLIP -1, // doomednum - S_DRIFTCLIP1, // spawnstate + S_DRIFTCLIPA1, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -15377,7 +15394,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound - 8, // speed + 105, // speed 32*FRACUNIT, // radius 64*FRACUNIT, // height 1, // display offset diff --git a/src/info.h b/src/info.h index 00c8b863a..e34e7bd53 100644 --- a/src/info.h +++ b/src/info.h @@ -3256,14 +3256,30 @@ typedef enum state S_DRIFTEXPLODE8, // Drift boost clip - S_DRIFTCLIP1, - S_DRIFTCLIP2, - S_DRIFTCLIP3, - S_DRIFTCLIP4, - S_DRIFTCLIP5, - S_DRIFTCLIP6, - S_DRIFTCLIP7, - S_DRIFTCLIP8, + S_DRIFTCLIPA1, + S_DRIFTCLIPA2, + S_DRIFTCLIPA3, + S_DRIFTCLIPA4, + S_DRIFTCLIPA5, + S_DRIFTCLIPA6, + S_DRIFTCLIPA7, + S_DRIFTCLIPA8, + S_DRIFTCLIPA9, + S_DRIFTCLIPA10, + S_DRIFTCLIPA11, + S_DRIFTCLIPA12, + S_DRIFTCLIPA13, + S_DRIFTCLIPA14, + S_DRIFTCLIPA15, + S_DRIFTCLIPA16, + S_DRIFTCLIPB1, + S_DRIFTCLIPB2, + S_DRIFTCLIPB3, + S_DRIFTCLIPB4, + S_DRIFTCLIPB5, + S_DRIFTCLIPB6, + S_DRIFTCLIPB7, + S_DRIFTCLIPB8, // Drift boost clip sparks S_DRIFTCLIPSPARK, diff --git a/src/k_kart.c b/src/k_kart.c index 495e2ca2d..804d9034c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1670,7 +1670,7 @@ void K_SpawnDriftBoostClip(player_t *player) K_MatchGenericExtraFlags(clip, player->mo); clip->fuse = 105; - clip->momz = 4 * clip->scale; + clip->momz = 7 * clip->scale; P_InstaThrust(clip, player->mo->angle + K_RandomFlip(P_RandomRange(FRACUNIT/2, FRACUNIT)), diff --git a/src/p_mobj.c b/src/p_mobj.c index e65d4aef1..40756214a 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -10795,6 +10795,9 @@ static void P_DefaultMobjShadowScale(mobj_t *thing) case MT_FLOATINGITEM: thing->shadowscale = FRACUNIT/2; break; + case MT_DRIFTCLIP: + thing->shadowscale = FRACUNIT/3; + break; default: if (thing->flags & (MF_ENEMY|MF_BOSS)) thing->shadowscale = FRACUNIT; From 37aedad2881bc0e7d2230bc321406381bdeb5f9a Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 19 Jul 2020 21:49:23 -0700 Subject: [PATCH 10/11] Sounds for big blue boost and bullet clip bouncing --- src/k_kart.c | 2 ++ src/p_mobj.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/k_kart.c b/src/k_kart.c index 804d9034c..f90ecca37 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -6432,6 +6432,8 @@ static void K_KartDrift(player_t *player, boolean onground) overlay->color = SKINCOLOR_SAPPHIRE; overlay->fuse = 32; + + S_StartSound(player->mo, sfx_kc5b); } else if (player->kartstuff[k_driftcharge] >= dsthree) { diff --git a/src/p_mobj.c b/src/p_mobj.c index 40756214a..3bda4e05c 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2461,7 +2461,10 @@ static boolean P_ZMovement(mobj_t *mo) { mom.z = -mom.z/2; if (abs(mom.z) > 4 * mo->scale / 3) + { K_SpawnDriftBoostClipSpark(mo); + S_StartSound(mo, sfx_tink); + } else mo->flags2 ^= MF2_DONTDRAW; } From 5efc34e43b81637d0ae086cea90241bacb576ac6 Mon Sep 17 00:00:00 2001 From: James R Date: Sun, 19 Jul 2020 22:18:56 -0700 Subject: [PATCH 11/11] Cleanup code and reverse gravity --- src/k_kart.c | 70 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index f90ecca37..98b81fcad 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1657,20 +1657,21 @@ void K_SpawnDriftBoostClip(player_t *player) { mobj_t *clip; fixed_t scale = 115*FRACUNIT/100; + fixed_t z; - clip = P_SpawnMobj( - player->mo->x, - player->mo->y, - player->mo->z + player->mo->height, - MT_DRIFTCLIP - ); + if (( player->mo->eflags & MFE_VERTICALFLIP )) + z = player->mo->z; + else + z = player->mo->z + player->mo->height; + + clip = P_SpawnMobj(player->mo->x, player->mo->y, z, MT_DRIFTCLIP); P_SetTarget(&clip->target, player->mo); P_SetScale(clip, ( clip->destscale = FixedMul(scale, player->mo->scale) )); K_MatchGenericExtraFlags(clip, player->mo); clip->fuse = 105; - clip->momz = 7 * clip->scale; + clip->momz = 7 * P_MobjFlip(clip) * clip->scale; P_InstaThrust(clip, player->mo->angle + K_RandomFlip(P_RandomRange(FRACUNIT/2, FRACUNIT)), @@ -6373,6 +6374,43 @@ INT32 K_GetKartDriftSparkValue(player_t *player) return (26*4 + kartspeed*2 + (9 - player->kartweight))*8; } +/* +Stage 1: red sparks +Stage 2: blue sparks +Stage 3: big large rainbow sparks +*/ +static void K_SpawnDriftBoostExplosion(player_t *player, int stage) +{ + mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTEXPLODE); + + P_SetTarget(&overlay->target, player->mo); + P_SetScale(overlay, (overlay->destscale = player->mo->scale)); + K_FlipFromObject(overlay, player->mo); + + switch (stage) + { + case 1: + overlay->color = SKINCOLOR_KETCHUP; + overlay->fuse = 16; + break; + + case 2: + overlay->color = SKINCOLOR_SAPPHIRE; + overlay->fuse = 32; + + S_StartSound(player->mo, sfx_kc5b); + break; + + case 3: + overlay->color = SKINCOLOR_SILVER; + overlay->fuse = 120; + + S_StartSound(player->mo, sfx_kc5b); + S_StartSound(player->mo, sfx_s3kc4l); + break; + } +} + static void K_KartDrift(player_t *player, boolean onground) { fixed_t minspeed = (10 * player->mo->scale); @@ -6389,10 +6427,6 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftcharge] < 0 || player->kartstuff[k_driftcharge] >= dsone) { angle_t pushdir = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy); - mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTEXPLODE); - P_SetTarget(&overlay->target, player->mo); - P_SetScale(overlay, (overlay->destscale = player->mo->scale)); - K_FlipFromObject(overlay, player->mo); S_StartSound(player->mo, sfx_s23c); //K_SpawnDashDustRelease(player); @@ -6405,9 +6439,6 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftboost] < 15) player->kartstuff[k_driftboost] = 15; - - overlay->color = SKINCOLOR_GOLD; - overlay->fuse = 10; } else if (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo) { @@ -6418,8 +6449,7 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftboost] < 20) player->kartstuff[k_driftboost] = 20; - overlay->color = SKINCOLOR_KETCHUP; - overlay->fuse = 16; + K_SpawnDriftBoostExplosion(player, 1); } else if (player->kartstuff[k_driftcharge] < dsthree) { @@ -6430,10 +6460,7 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftboost] < 50) player->kartstuff[k_driftboost] = 50; - overlay->color = SKINCOLOR_SAPPHIRE; - overlay->fuse = 32; - - S_StartSound(player->mo, sfx_kc5b); + K_SpawnDriftBoostExplosion(player, 2); } else if (player->kartstuff[k_driftcharge] >= dsthree) { @@ -6444,8 +6471,7 @@ static void K_KartDrift(player_t *player, boolean onground) if (player->kartstuff[k_driftboost] < 125) player->kartstuff[k_driftboost] = 125; - overlay->color = SKINCOLOR_SILVER; - overlay->fuse = 120; + K_SpawnDriftBoostExplosion(player, 3); } }