diff --git a/src/k_kart.c b/src/k_kart.c index 789567583..b607def10 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4931,9 +4931,10 @@ static void K_SpawnDriftElectricity(player_t *player) } } -void K_SpawnDriftElectricSparks(player_t *player) +void K_SpawnDriftElectricSparks(player_t *player, int color, boolean shockwave) { SINT8 hdir, vdir, i; + int shockscale = shockwave ? 2 : 1; mobj_t *mo = player->mo; angle_t momangle = K_MomentumAngle(mo) + ANGLE_180; @@ -4943,12 +4944,7 @@ void K_SpawnDriftElectricSparks(player_t *player) fixed_t z = FixedDiv(mo->height, 2 * mo->scale); // P_SpawnMobjFromMobj will rescale fixed_t sparkspeed = mobjinfo[MT_DRIFTELECTRICSPARK].speed; - fixed_t sparkradius = 2 * mobjinfo[MT_DRIFTELECTRICSPARK].radius; - UINT16 color = K_DriftSparkColor(player, player->driftcharge); - - // if the sparks are spawned from first blood rather than drift boost, color will be SKINCOLOR_NONE. ew! - if (color == SKINCOLOR_NONE) - color = SKINCOLOR_SILVER; + fixed_t sparkradius = 2 * shockscale * mobjinfo[MT_DRIFTELECTRICSPARK].radius; for (hdir = -1; hdir <= 1; hdir += 2) { @@ -4971,6 +4967,12 @@ void K_SpawnDriftElectricSparks(player_t *player) spark->momx += mo->momx; // copy player speed spark->momy += mo->momy; spark->momz += P_GetMobjZMovement(mo); + spark->destscale = shockscale * spark->scale; + P_SetScale(spark, shockscale * spark->scale); + spark->radius = shockscale * spark->radius; + + if (shockwave) + spark->frame |= FF_ADD; sparkangle += ANGLE_90; } @@ -9097,7 +9099,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->strongdriftboost = 85; K_SpawnDriftBoostExplosion(player, 3); - K_SpawnDriftElectricSparks(player); + K_SpawnDriftElectricSparks(player, K_DriftSparkColor(player, player->driftcharge), false); } else if (player->driftcharge >= dsfour) { @@ -9111,7 +9113,7 @@ static void K_KartDrift(player_t *player, boolean onground) player->strongdriftboost = 125; K_SpawnDriftBoostExplosion(player, 4); - K_SpawnDriftElectricSparks(player); + K_SpawnDriftElectricSparks(player, K_DriftSparkColor(player, player->driftcharge), false); } } diff --git a/src/k_kart.h b/src/k_kart.h index 3db28a9f2..a3f7dae0c 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -125,7 +125,7 @@ INT32 K_GetKartDriftSparkValue(player_t *player); INT32 K_StairJankFlip(INT32 value); INT32 K_GetKartDriftSparkValueForStage(player_t *player, UINT8 stage); void K_SpawnDriftBoostExplosion(player_t *player, int stage); -void K_SpawnDriftElectricSparks(player_t *player); +void K_SpawnDriftElectricSparks(player_t *player, int color, boolean shockwave); void K_KartUpdatePosition(player_t *player); mobj_t *K_CreatePaperItem(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 flip, UINT8 type, UINT8 amount); void K_DropItems(player_t *player); diff --git a/src/objects/manta-ring.c b/src/objects/manta-ring.c index f136bf597..69f98fc06 100644 --- a/src/objects/manta-ring.c +++ b/src/objects/manta-ring.c @@ -138,6 +138,9 @@ static void Obj_MantaCollide(mobj_t *manta, mobj_t *other) other->player->gateSound = 0; } + K_SpawnDriftBoostExplosion(other->player, 3); + K_SpawnDriftElectricSparks(other->player, SKINCOLOR_CRIMSON, true); + for (i = 0; i < 5; i++) { S_StopSoundByID(other, sfx_gate01 + i); diff --git a/src/objects/spb.c b/src/objects/spb.c index 43e059a5e..e939b1b31 100644 --- a/src/objects/spb.c +++ b/src/objects/spb.c @@ -24,7 +24,7 @@ #include "../k_waypoint.h" #include "../k_respawn.h" -#define SPB_SEEKTEST +// #define SPB_SEEKTEST #define SPB_SLIPTIDEDELTA (ANG1 * 3) #define SPB_STEERDELTA (ANGLE_90 - ANG10) diff --git a/src/p_spec.c b/src/p_spec.c index 681e5e8e9..3e8edb2b4 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -1925,7 +1925,7 @@ static void K_HandleLapIncrement(player_t *player) player->startboost = 125; K_SpawnDriftBoostExplosion(player, 4); - K_SpawnDriftElectricSparks(player); + K_SpawnDriftElectricSparks(player, SKINCOLOR_SILVER, false); rainbowstartavailable = false; }