From e250796886a63e42dd1902b86d2dd5e130a6ef5d Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 8 Jul 2020 21:30:34 -0700 Subject: [PATCH] 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)