mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Drift Boost Clip, bounces on floor and sparks, then flickers until it dies
This commit is contained in:
parent
1dae3d196b
commit
f8b19a239f
6 changed files with 144 additions and 1 deletions
|
|
@ -6586,6 +6586,19 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_DRIFTEXPLODE3",
|
"S_DRIFTEXPLODE3",
|
||||||
"S_DRIFTEXPLODE4",
|
"S_DRIFTEXPLODE4",
|
||||||
|
|
||||||
|
// Drift boost clip
|
||||||
|
"S_DRIFTCLIP1",
|
||||||
|
"S_DRIFTCLIP2",
|
||||||
|
"S_DRIFTCLIP3",
|
||||||
|
"S_DRIFTCLIP4",
|
||||||
|
"S_DRIFTCLIP5",
|
||||||
|
"S_DRIFTCLIP6",
|
||||||
|
"S_DRIFTCLIP7",
|
||||||
|
"S_DRIFTCLIP8",
|
||||||
|
|
||||||
|
// Drift boost clip spark
|
||||||
|
"S_DRIFTCLIPSPARK",
|
||||||
|
|
||||||
// Sneaker boost effect
|
// Sneaker boost effect
|
||||||
"S_BOOSTFLAME",
|
"S_BOOSTFLAME",
|
||||||
"S_BOOSTSMOKESPAWNER",
|
"S_BOOSTSMOKESPAWNER",
|
||||||
|
|
@ -8093,6 +8106,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_FASTLINE",
|
"MT_FASTLINE",
|
||||||
"MT_FASTDUST",
|
"MT_FASTDUST",
|
||||||
"MT_DRIFTEXPLODE",
|
"MT_DRIFTEXPLODE",
|
||||||
|
"MT_DRIFTCLIP",
|
||||||
|
"MT_DRIFTCLIPSPARK",
|
||||||
"MT_BOOSTFLAME",
|
"MT_BOOSTFLAME",
|
||||||
"MT_BOOSTSMOKE",
|
"MT_BOOSTSMOKE",
|
||||||
"MT_SNEAKERTRAIL",
|
"MT_SNEAKERTRAIL",
|
||||||
|
|
|
||||||
67
src/info.c
67
src/info.c
|
|
@ -72,7 +72,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"BFRT","OFRT","RFRT","PFRT","ASPK","HBST","HBSO","HBSF","WBLZ","WBLN",
|
"BFRT","OFRT","RFRT","PFRT","ASPK","HBST","HBSO","HBSF","WBLZ","WBLN",
|
||||||
|
|
||||||
"FWRK","MXCL","RGSP","DRAF","GRES","OTFG","DBOS","EGOO","WTRL","XMS4",
|
"FWRK","MXCL","RGSP","DRAF","GRES","OTFG","DBOS","EGOO","WTRL","XMS4",
|
||||||
"XMS5","FBUB","GCHA","CHEZ","VIEW"
|
"XMS5","FBUB","GCHA","CHEZ","VIEW","DBCL","DBNC",
|
||||||
};
|
};
|
||||||
|
|
||||||
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
||||||
|
|
@ -2565,6 +2565,17 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_DBOS, FF_FULLBRIGHT|2, 2, {NULL}, 6, 1, S_DRIFTEXPLODE4}, // S_DRIFTEXPLODE3
|
{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_DBOS, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTEXPLODE1}, // S_DRIFTEXPLODE4
|
||||||
|
|
||||||
|
{SPR_DBCL, FF_FULLBRIGHT, 2, {NULL}, 6, 1, S_DRIFTCLIP2}, // S_DRIFTCLIP1
|
||||||
|
{SPR_DBCL, FF_FULLBRIGHT|1, 2, {NULL}, 6, 1, S_DRIFTCLIP3}, // S_DRIFTCLIP2
|
||||||
|
{SPR_DBCL, FF_FULLBRIGHT|2, 2, {NULL}, 6, 1, S_DRIFTCLIP4}, // S_DRIFTCLIP3
|
||||||
|
{SPR_DBCL, FF_FULLBRIGHT|3, 2, {NULL}, 6, 1, S_DRIFTCLIP5}, // S_DRIFTCLIP4
|
||||||
|
{SPR_DBCL, FF_FULLBRIGHT|4, 2, {NULL}, 6, 1, S_DRIFTCLIP6}, // S_DRIFTCLIP5
|
||||||
|
{SPR_DBCL, FF_FULLBRIGHT|5, 2, {NULL}, 6, 1, S_DRIFTCLIP7}, // S_DRIFTCLIP6
|
||||||
|
{SPR_DBCL, FF_FULLBRIGHT|6, 2, {NULL}, 6, 1, S_DRIFTCLIP8}, // S_DRIFTCLIP7
|
||||||
|
{SPR_DBCL, FF_FULLBRIGHT|7, 2, {NULL}, 6, 1, S_DRIFTCLIP1}, // S_DRIFTCLIP8
|
||||||
|
|
||||||
|
{SPR_DBNC, FF_FULLBRIGHT|FF_ANIMATE, 14, {NULL}, 6, 1, S_NULL}, // S_DRIFTCLIPSPARK
|
||||||
|
|
||||||
{SPR_BOST, FF_FULLBRIGHT|FF_ANIMATE, TICRATE, {NULL}, 6, 1, S_BOOSTSMOKESPAWNER}, // S_BOOSTFLAME
|
{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
|
{SPR_NULL, 0, TICRATE/2, {NULL}, 0, 0, S_NULL}, // S_BOOSTSMOKESPAWNER
|
||||||
|
|
||||||
|
|
@ -15346,6 +15357,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_DRIFTCLIP
|
||||||
|
-1, // doomednum
|
||||||
|
S_DRIFTCLIP1, // 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_DONTENCOREMAP|MF_GRENADEBOUNCE|MF_BOUNCE, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
|
{ // MT_DRIFTCLIPSPARK
|
||||||
|
-1, // doomednum
|
||||||
|
S_DRIFTCLIPSPARK, // 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_DONTENCOREMAP, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_BOOSTFLAME
|
{ // MT_BOOSTFLAME
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_BOOSTFLAME, // spawnstate
|
S_BOOSTFLAME, // spawnstate
|
||||||
|
|
|
||||||
18
src/info.h
18
src/info.h
|
|
@ -811,6 +811,9 @@ typedef enum sprite
|
||||||
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
|
// First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw later
|
||||||
SPR_VIEW,
|
SPR_VIEW,
|
||||||
|
|
||||||
|
SPR_DBCL, // Drift boost clip
|
||||||
|
SPR_DBNC, // Drift boost clip's sparks
|
||||||
|
|
||||||
SPR_FIRSTFREESLOT,
|
SPR_FIRSTFREESLOT,
|
||||||
SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1,
|
SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1,
|
||||||
NUMSPRITES
|
NUMSPRITES
|
||||||
|
|
@ -3247,6 +3250,19 @@ typedef enum state
|
||||||
S_DRIFTEXPLODE3,
|
S_DRIFTEXPLODE3,
|
||||||
S_DRIFTEXPLODE4,
|
S_DRIFTEXPLODE4,
|
||||||
|
|
||||||
|
// Drift boost clip
|
||||||
|
S_DRIFTCLIP1,
|
||||||
|
S_DRIFTCLIP2,
|
||||||
|
S_DRIFTCLIP3,
|
||||||
|
S_DRIFTCLIP4,
|
||||||
|
S_DRIFTCLIP5,
|
||||||
|
S_DRIFTCLIP6,
|
||||||
|
S_DRIFTCLIP7,
|
||||||
|
S_DRIFTCLIP8,
|
||||||
|
|
||||||
|
// Drift boost clip sparks
|
||||||
|
S_DRIFTCLIPSPARK,
|
||||||
|
|
||||||
// Sneaker boost effect
|
// Sneaker boost effect
|
||||||
S_BOOSTFLAME,
|
S_BOOSTFLAME,
|
||||||
S_BOOSTSMOKESPAWNER,
|
S_BOOSTSMOKESPAWNER,
|
||||||
|
|
@ -4791,6 +4807,8 @@ typedef enum mobj_type
|
||||||
MT_FASTLINE,
|
MT_FASTLINE,
|
||||||
MT_FASTDUST,
|
MT_FASTDUST,
|
||||||
MT_DRIFTEXPLODE,
|
MT_DRIFTEXPLODE,
|
||||||
|
MT_DRIFTCLIP,
|
||||||
|
MT_DRIFTCLIPSPARK,
|
||||||
MT_BOOSTFLAME,
|
MT_BOOSTFLAME,
|
||||||
MT_BOOSTSMOKE,
|
MT_BOOSTSMOKE,
|
||||||
MT_SNEAKERTRAIL,
|
MT_SNEAKERTRAIL,
|
||||||
|
|
|
||||||
29
src/k_kart.c
29
src/k_kart.c
|
|
@ -1648,6 +1648,35 @@ static void K_SpawnBrakeDriftSparks(player_t *player) // Be sure to update the m
|
||||||
sparks->flags2 |= MF2_DONTDRAW;
|
sparks->flags2 |= MF2_DONTDRAW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static fixed_t K_RandomFlip(fixed_t f)
|
||||||
|
{
|
||||||
|
return ( ( leveltime & 1 ) ? f : -f );
|
||||||
|
}
|
||||||
|
|
||||||
|
void K_SpawnDriftBoostClip(player_t *player)
|
||||||
|
{
|
||||||
|
mobj_t *clip;
|
||||||
|
fixed_t scale = 115*FRACUNIT/100;
|
||||||
|
|
||||||
|
clip = P_SpawnMobj(
|
||||||
|
player->mo->x,
|
||||||
|
player->mo->y,
|
||||||
|
player->mo->z + player->mo->height,
|
||||||
|
MT_DRIFTCLIP
|
||||||
|
);
|
||||||
|
|
||||||
|
P_SetTarget(&clip->target, player->mo);
|
||||||
|
P_SetScale(clip, ( clip->destscale = FixedMul(scale, player->mo->scale) ));
|
||||||
|
K_MatchGenericExtraFlags(clip, player->mo);
|
||||||
|
|
||||||
|
clip->fuse = 105;
|
||||||
|
clip->momz = 4 * clip->scale;
|
||||||
|
|
||||||
|
P_InstaThrust(clip, player->mo->angle +
|
||||||
|
K_RandomFlip(P_RandomRange(FRACUNIT/2, FRACUNIT)),
|
||||||
|
FixedMul(scale, player->speed));
|
||||||
|
}
|
||||||
|
|
||||||
/** \brief Handles the state changing for moving players, moved here to eliminate duplicate code
|
/** \brief Handles the state changing for moving players, moved here to eliminate duplicate code
|
||||||
|
|
||||||
\param player player data
|
\param player player data
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ void K_FlipFromObject(mobj_t *mo, mobj_t *master);
|
||||||
void K_MatchGenericExtraFlags(mobj_t *mo, mobj_t *master);
|
void K_MatchGenericExtraFlags(mobj_t *mo, mobj_t *master);
|
||||||
void K_GenericExtraFlagsNoZAdjust(mobj_t *mo, mobj_t *master);
|
void K_GenericExtraFlagsNoZAdjust(mobj_t *mo, mobj_t *master);
|
||||||
void K_SpawnDashDustRelease(player_t *player);
|
void K_SpawnDashDustRelease(player_t *player);
|
||||||
|
void K_SpawnDriftBoostClip(player_t *player);
|
||||||
void K_KartMoveAnimation(player_t *player);
|
void K_KartMoveAnimation(player_t *player);
|
||||||
void K_KartPlayerHUDUpdate(player_t *player);
|
void K_KartPlayerHUDUpdate(player_t *player);
|
||||||
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
|
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
|
||||||
|
|
|
||||||
15
src/p_mobj.c
15
src/p_mobj.c
|
|
@ -2457,6 +2457,18 @@ static boolean P_ZMovement(mobj_t *mo)
|
||||||
mom.z = P_MobjFlip(mo)*FixedMul(5*FRACUNIT, mo->scale);
|
mom.z = P_MobjFlip(mo)*FixedMul(5*FRACUNIT, mo->scale);
|
||||||
else if (mo->type == MT_SPINFIRE) // elemental shield fire is another exception here
|
else if (mo->type == MT_SPINFIRE) // elemental shield fire is another exception here
|
||||||
;
|
;
|
||||||
|
else if (mo->type == MT_DRIFTCLIP)
|
||||||
|
{
|
||||||
|
mom.z = -mom.z/2;
|
||||||
|
if (abs(mom.z) > 4 * mo->scale / 3)
|
||||||
|
{
|
||||||
|
mobj_t *spark = P_SpawnMobj(mo->x, mo->y, mo->z, MT_DRIFTCLIPSPARK);
|
||||||
|
spark->momx = mo->momx/2;
|
||||||
|
spark->momy = mo->momy/2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mo->flags2 ^= MF2_DONTDRAW;
|
||||||
|
}
|
||||||
else if (mo->flags & MF_MISSILE)
|
else if (mo->flags & MF_MISSILE)
|
||||||
{
|
{
|
||||||
if (!(mo->flags & MF_NOCLIP))
|
if (!(mo->flags & MF_NOCLIP))
|
||||||
|
|
@ -8338,6 +8350,9 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
else if (mobj->fuse > 32)
|
else if (mobj->fuse > 32)
|
||||||
mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1)));
|
mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1)));
|
||||||
|
|
||||||
|
if (mobj->fuse == 17 || mobj->fuse == 33)/* to red/blue */
|
||||||
|
K_SpawnDriftBoostClip(mobj->target->player);
|
||||||
|
|
||||||
{
|
{
|
||||||
player_t *p = NULL;
|
player_t *p = NULL;
|
||||||
if (mobj->target->target && mobj->target->target->player)
|
if (mobj->target->target && mobj->target->target->player)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue