Add shockwave support to K_SpawnDriftElectricSparks

This commit is contained in:
AJ Martinez 2022-09-23 22:14:10 -07:00
parent 3501ca7976
commit 9ecd5b9c4b
5 changed files with 17 additions and 12 deletions

View file

@ -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);
}
}

View file

@ -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);

View file

@ -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);

View file

@ -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)

View file

@ -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;
}