mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-01 11:16:30 +00:00
Lightning sparks when releasing purple/rainbow drifts
This commit is contained in:
parent
9552dd4f80
commit
6e9c3cd864
5 changed files with 82 additions and 1 deletions
|
|
@ -3529,6 +3529,7 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
|||
|
||||
// Drift electricity
|
||||
"S_DRIFTELECTRICITY",
|
||||
"S_DRIFTELECTRICSPARK",
|
||||
|
||||
// Fast lines
|
||||
"S_FASTLINE1",
|
||||
|
|
@ -5455,6 +5456,7 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
|||
"MT_BRAKEDRIFT",
|
||||
"MT_DRIFTDUST",
|
||||
"MT_DRIFTELECTRICITY",
|
||||
"MT_DRIFTELECTRICSPARK",
|
||||
|
||||
"MT_ROCKETSNEAKER", // Rocket sneakers
|
||||
|
||||
|
|
|
|||
29
src/info.c
29
src/info.c
|
|
@ -542,6 +542,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"BDRF", // Brake drift sparks
|
||||
"DRWS", // Drift dust sparks
|
||||
"DREL", // Drift electricity
|
||||
"DRES", // Drift electric sparks
|
||||
|
||||
// Kart Items
|
||||
"RSHE", // Rocket sneaker
|
||||
|
|
@ -4098,6 +4099,7 @@ state_t states[NUMSTATES] =
|
|||
{SPR_DRWS, FF_FULLBRIGHT|FF_TRANS20|3, 3, {NULL}, 0, 0, S_NULL}, // S_DRIFTWARNSPARK4
|
||||
|
||||
{SPR_DREL, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE|FF_GLOBALANIM, 2, {NULL}, 5, 2, S_NULL}, // S_DRIFTELECTRICITY
|
||||
{SPR_DRES, FF_FULLBRIGHT|FF_PAPERSPRITE|FF_ANIMATE, 20, {NULL}, 1, 10, S_NULL}, // S_DRIFTELECTRICSPARK
|
||||
|
||||
{SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_FASTLINE2}, // S_FASTLINE1
|
||||
{SPR_FAST, FF_PAPERSPRITE|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_FASTLINE3}, // S_FASTLINE2
|
||||
|
|
@ -23503,6 +23505,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_DRIFTELECTRICSPARK
|
||||
-1, // doomednum
|
||||
S_DRIFTELECTRICSPARK, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // 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
|
||||
4*FRACUNIT, // speed
|
||||
9*FRACUNIT, // radius
|
||||
37*FRACUNIT, // height
|
||||
0, // display offset
|
||||
0, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOCLIPHEIGHT|MF_NOCLIP|MF_NOCLIPTHING|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_ROCKETSNEAKER
|
||||
-1, // doomednum
|
||||
S_ROCKETSNEAKER_L, // spawnstate
|
||||
|
|
|
|||
|
|
@ -1094,6 +1094,7 @@ typedef enum sprite
|
|||
SPR_BDRF, // Brake drift sparks
|
||||
SPR_DRWS, // Drift dust sparks
|
||||
SPR_DREL, // Drift electricity
|
||||
SPR_DRES, // Drift electric sparks
|
||||
|
||||
// Kart Items
|
||||
SPR_RSHE, // Rocket sneaker
|
||||
|
|
@ -4503,6 +4504,7 @@ typedef enum state
|
|||
|
||||
// Drift electricity
|
||||
S_DRIFTELECTRICITY,
|
||||
S_DRIFTELECTRICSPARK,
|
||||
|
||||
// Fast lines
|
||||
S_FASTLINE1,
|
||||
|
|
@ -6467,6 +6469,7 @@ typedef enum mobj_type
|
|||
MT_BRAKEDRIFT,
|
||||
MT_DRIFTDUST,
|
||||
MT_DRIFTELECTRICITY,
|
||||
MT_DRIFTELECTRICSPARK,
|
||||
|
||||
MT_ROCKETSNEAKER,
|
||||
|
||||
|
|
|
|||
48
src/k_kart.c
48
src/k_kart.c
|
|
@ -3620,6 +3620,7 @@ UINT16 K_DriftSparkColor(player_t *player, INT32 charge)
|
|||
static void K_SpawnDriftElectricity(player_t *player)
|
||||
{
|
||||
UINT8 i;
|
||||
UINT16 color = K_DriftSparkColor(player, player->kartstuff[k_driftcharge]);
|
||||
mobj_t *mo = player->mo;
|
||||
fixed_t verticalradius = FixedDiv(mo->radius/3, mo->scale); // P_SpawnMobjFromMobj will rescale
|
||||
fixed_t horizontalradius = FixedDiv(5*mo->radius/3, mo->scale);
|
||||
|
|
@ -3650,7 +3651,7 @@ static void K_SpawnDriftElectricity(player_t *player)
|
|||
+ P_ReturnThrustY(mo, horizonatalangle, horizontalradius);
|
||||
spark = P_SpawnMobjFromMobj(mo, x, y, 0, MT_DRIFTELECTRICITY);
|
||||
spark->angle = sparkangle;
|
||||
spark->color = K_DriftSparkColor(player, player->kartstuff[k_driftcharge]);
|
||||
spark->color = color;
|
||||
K_GenericExtraFlagsNoZAdjust(spark, mo);
|
||||
|
||||
spark->spritexscale += scalefactor/3;
|
||||
|
|
@ -3658,6 +3659,49 @@ static void K_SpawnDriftElectricity(player_t *player)
|
|||
}
|
||||
}
|
||||
|
||||
static void K_SpawnDriftElectricSparks(player_t *player)
|
||||
{
|
||||
SINT8 hdir, vdir, i;
|
||||
|
||||
mobj_t *mo = player->mo;
|
||||
angle_t momangle = K_MomentumAngle(mo) + ANGLE_180;
|
||||
fixed_t radius = 2 * FixedDiv(mo->radius, mo->scale); // P_SpawnMobjFromMobj will rescale
|
||||
fixed_t x = P_ReturnThrustX(mo, momangle, radius);
|
||||
fixed_t y = P_ReturnThrustY(mo, momangle, radius);
|
||||
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->kartstuff[k_driftcharge]);
|
||||
|
||||
for (hdir = -1; hdir <= 1; hdir += 2)
|
||||
{
|
||||
for (vdir = -1; vdir <= 1; vdir += 2)
|
||||
{
|
||||
fixed_t hspeed = FixedMul(hdir * sparkspeed, mo->scale); // P_InstaThrust treats speed as absolute
|
||||
fixed_t vspeed = vdir * sparkspeed; // P_SetObjectMomZ scales speed with object scale
|
||||
angle_t sparkangle = mo->angle + ANGLE_45;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
fixed_t xoff = P_ReturnThrustX(mo, sparkangle, sparkradius);
|
||||
fixed_t yoff = P_ReturnThrustY(mo, sparkangle, sparkradius);
|
||||
mobj_t *spark = P_SpawnMobjFromMobj(mo, x + xoff, y + yoff, z, MT_DRIFTELECTRICSPARK);
|
||||
|
||||
spark->angle = sparkangle;
|
||||
spark->color = color;
|
||||
P_InstaThrust(spark, mo->angle + ANGLE_90, hspeed);
|
||||
P_SetObjectMomZ(spark, vspeed, false);
|
||||
spark->momx += mo->momx; // copy player speed
|
||||
spark->momy += mo->momy;
|
||||
|
||||
sparkangle += ANGLE_90;
|
||||
}
|
||||
}
|
||||
}
|
||||
S_StartSound(mo, sfx_s3k45);
|
||||
}
|
||||
|
||||
static void K_SpawnDriftSparks(player_t *player)
|
||||
{
|
||||
const INT32 dsone = K_GetKartDriftSparkValueForStage(player, 1);
|
||||
|
|
@ -7436,6 +7480,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
player->kartstuff[k_driftboost] = 90;
|
||||
|
||||
K_SpawnDriftBoostExplosion(player, 3);
|
||||
K_SpawnDriftElectricSparks(player);
|
||||
}
|
||||
else if (player->kartstuff[k_driftcharge] >= dsfour)
|
||||
{
|
||||
|
|
@ -7447,6 +7492,7 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
player->kartstuff[k_driftboost] = 160;
|
||||
|
||||
K_SpawnDriftBoostExplosion(player, 4);
|
||||
K_SpawnDriftElectricSparks(player);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5876,6 +5876,7 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
mobj->renderflags ^= RF_DONTDRAW;
|
||||
break;
|
||||
case MT_SPINDASHWIND:
|
||||
case MT_DRIFTELECTRICSPARK:
|
||||
mobj->renderflags ^= RF_DONTDRAW;
|
||||
break;
|
||||
case MT_VWREF:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue