Air sparks, start on drift boosts

This commit is contained in:
Sally Cochenour 2020-03-16 00:53:33 -04:00
parent 4026344ad3
commit 48e69f7c91
5 changed files with 149 additions and 53 deletions

View file

@ -6381,7 +6381,11 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_FASTDUST6",
"S_FASTDUST7",
// Thunder Shield Burst
// Drift boost effect
"S_DRIFTEXPLODE1",
"S_DRIFTEXPLODE2",
"S_DRIFTEXPLODE3",
"S_DRIFTEXPLODE4",
// Sneaker boost effect
"S_BOOSTFLAME",
@ -7742,6 +7746,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_FASTLINE",
"MT_FASTDUST",
"MT_DRIFTEXPLODE",
"MT_BOOSTFLAME",
"MT_BOOSTSMOKE",
"MT_SNEAKERTRAIL",

View file

@ -70,7 +70,7 @@ char sprnames[NUMSPRITES + 1][5] =
"DUCK","GTRE","CHES","CHIM","DRGN","LZMN","PGSS","ZTCH","MKMA","MKMP",
"RTCH","BOWL","BOWH","BRRL","BRRR","HRSE","TOAH","BFRT","OFRT","RFRT",
"PFRT","ASPK","HBST","HBSO","HBSF","WBLZ","WBLN","FWRK","MXCL","RGSP",
"DRAF","GRES","OTFG","XMS4","XMS5","VIEW"
"DRAF","GRES","OTFG","DBOS","XMS4","XMS5","VIEW"
};
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
@ -2616,6 +2616,11 @@ 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_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
@ -15218,6 +15223,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate
},
{ // MT_DRIFTEXPLODE
-1, // doomednum
S_DRIFTEXPLODE1, // 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_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
{ // MT_BOOSTFLAME
-1, // doomednum
S_BOOSTFLAME, // spawnstate

View file

@ -786,6 +786,8 @@ typedef enum sprite
SPR_OTFG,
SPR_DBOS, // Drift boost flame
// Xmas-specific sprites that don't fit aboxe
SPR_XMS4,
SPR_XMS5,
@ -3271,7 +3273,11 @@ typedef enum state
S_FASTDUST6,
S_FASTDUST7,
// Magnet Burst
// Drift boost effect
S_DRIFTEXPLODE1,
S_DRIFTEXPLODE2,
S_DRIFTEXPLODE3,
S_DRIFTEXPLODE4,
// Sneaker boost effect
S_BOOSTFLAME,
@ -4664,6 +4670,7 @@ typedef enum mobj_type
MT_FASTLINE,
MT_FASTDUST,
MT_DRIFTEXPLODE,
MT_BOOSTFLAME,
MT_BOOSTSMOKE,
MT_SNEAKERTRAIL,

View file

@ -3202,9 +3202,6 @@ static void K_SpawnDriftSparks(player_t *player)
if (leveltime % 2 == 1)
return;
if (!P_IsObjectOnGround(player->mo))
return;
if (!player->kartstuff[k_drift]
|| (player->kartstuff[k_driftcharge] < ds && !(player->kartstuff[k_driftcharge] < 0)))
return;
@ -5861,6 +5858,11 @@ static void K_KartDrift(player_t *player, boolean onground)
{
if (player->kartstuff[k_driftcharge] < 0 || player->kartstuff[k_driftcharge] >= dsone)
{
//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);
@ -5869,24 +5871,36 @@ static void K_KartDrift(player_t *player, boolean onground)
// Stage 0: Yellow sparks
if (player->kartstuff[k_driftboost] < 15)
player->kartstuff[k_driftboost] = 15;
//overlay->color = SKINCOLOR_GOLD;
//overlay->fuse = 8;
}
else if (player->kartstuff[k_driftcharge] >= dsone && player->kartstuff[k_driftcharge] < dstwo)
{
// Stage 1: Red sparks
if (player->kartstuff[k_driftboost] < 20)
player->kartstuff[k_driftboost] = 20;
//overlay->color = SKINCOLOR_KETCHUP;
//overlay->fuse = 16;
}
else if (player->kartstuff[k_driftcharge] < dsthree)
{
// Stage 2: Blue sparks
if (player->kartstuff[k_driftboost] < 50)
player->kartstuff[k_driftboost] = 50;
//overlay->color = SKINCOLOR_SAPPHIRE;
//overlay->fuse = 32;
}
else if (player->kartstuff[k_driftcharge] >= dsthree)
{
// Stage 3: Rainbow sparks
if (player->kartstuff[k_driftboost] < 125)
player->kartstuff[k_driftboost] = 125;
//overlay->color = SKINCOLOR_SILVER;
//overlay->fuse = 120;
}
}
@ -5933,64 +5947,71 @@ static void K_KartDrift(player_t *player, boolean onground)
player->kartstuff[k_aizdriftstrat] = player->kartstuff[k_brakedrift] = 0;
player->kartstuff[k_getsparks] = 0;
}
else if (player->kartstuff[k_jmp] == 1 && onground && player->kartstuff[k_drift] != 0)
else if (player->kartstuff[k_jmp] == 1 && player->kartstuff[k_drift] != 0)
{
// Incease/decrease the drift value to continue drifting in that direction
fixed_t driftadditive = 24;
boolean playsound = false;
if (player->kartstuff[k_drift] >= 1) // Drifting to the left
if (onground)
{
player->kartstuff[k_drift]++;
if (player->kartstuff[k_drift] > 5)
player->kartstuff[k_drift] = 5;
if (player->cmd.driftturn > 0) // Inward
driftadditive += abs(player->cmd.driftturn)/100;
if (player->cmd.driftturn < 0) // Outward
driftadditive -= abs(player->cmd.driftturn)/75;
}
else if (player->kartstuff[k_drift] <= -1) // Drifting to the right
{
player->kartstuff[k_drift]--;
if (player->kartstuff[k_drift] < -5)
player->kartstuff[k_drift] = -5;
if (player->cmd.driftturn < 0) // Inward
driftadditive += abs(player->cmd.driftturn)/100;
if (player->cmd.driftturn > 0) // Outward
driftadditive -= abs(player->cmd.driftturn)/75;
}
// Disable drift-sparks until you're going fast enough
if (player->kartstuff[k_getsparks] == 0
|| (player->kartstuff[k_offroad]
&& !player->kartstuff[k_invincibilitytimer]
&& !player->kartstuff[k_hyudorotimer]
&& !EITHERSNEAKER(player)))
driftadditive = 0;
// Inbetween minspeed and minspeed*2, it'll keep your previous drift-spark state.
if (player->speed > minspeed*2)
{
player->kartstuff[k_getsparks] = 1;
if (player->kartstuff[k_driftcharge] <= -1)
if (player->kartstuff[k_drift] >= 1) // Drifting to the left
{
player->kartstuff[k_driftcharge] = dsone; // Back to red
playsound = true;
player->kartstuff[k_drift]++;
if (player->kartstuff[k_drift] > 5)
player->kartstuff[k_drift] = 5;
if (player->cmd.driftturn > 0) // Inward
driftadditive += abs(player->cmd.driftturn)/100;
if (player->cmd.driftturn < 0) // Outward
driftadditive -= abs(player->cmd.driftturn)/75;
}
else if (player->kartstuff[k_drift] <= -1) // Drifting to the right
{
player->kartstuff[k_drift]--;
if (player->kartstuff[k_drift] < -5)
player->kartstuff[k_drift] = -5;
if (player->cmd.driftturn < 0) // Inward
driftadditive += abs(player->cmd.driftturn)/100;
if (player->cmd.driftturn > 0) // Outward
driftadditive -= abs(player->cmd.driftturn)/75;
}
// Disable drift-sparks until you're going fast enough
if (player->kartstuff[k_getsparks] == 0
|| (player->kartstuff[k_offroad]
&& !player->kartstuff[k_invincibilitytimer]
&& !player->kartstuff[k_hyudorotimer]
&& !EITHERSNEAKER(player)))
driftadditive = 0;
// Inbetween minspeed and minspeed*2, it'll keep your previous drift-spark state.
if (player->speed > minspeed*2)
{
player->kartstuff[k_getsparks] = 1;
if (player->kartstuff[k_driftcharge] <= -1)
{
player->kartstuff[k_driftcharge] = dsone; // Back to red
playsound = true;
}
}
else if (player->speed <= minspeed)
{
player->kartstuff[k_getsparks] = 0;
driftadditive = 0;
if (player->kartstuff[k_driftcharge] >= dsone)
{
player->kartstuff[k_driftcharge] = -1; // Set yellow sparks
playsound = true;
}
}
}
else if (player->speed <= minspeed)
else
{
player->kartstuff[k_getsparks] = 0;
driftadditive = 0;
if (player->kartstuff[k_driftcharge] >= dsone)
{
player->kartstuff[k_driftcharge] = -1; // Set yellow sparks
playsound = true;
}
}
// This spawns the drift sparks

View file

@ -8289,6 +8289,37 @@ void P_MobjThinker(mobj_t *mobj)
S_StartSound(mobj, sfx_s3k4e);
mobj->health--;
break;
case MT_DRIFTEXPLODE:
if (!mobj->target || !mobj->target->health)
{
P_RemoveMobj(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->flags2 ^= MF2_DONTDRAW;
#ifdef HWRENDER
mobj->modeltilt = mobj->target->modeltilt;
#endif
{
player_t *p = NULL;
if (mobj->target->target && mobj->target->target->player)
p = mobj->target->target->player;
else if (mobj->target->player)
p = mobj->target->player;
if (p)
{
if (p->kartstuff[k_driftboost] > mobj->movecount)
; // reset animation
mobj->movecount = p->kartstuff[k_driftboost];
}
}
break;
case MT_BOOSTFLAME:
if (!mobj->target || !mobj->target->health)
{