mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 20:41:46 +00:00
Sliptide boost VFX first pass
This commit is contained in:
parent
d79e53a0e3
commit
f4fbd1e654
8 changed files with 147 additions and 1 deletions
|
|
@ -2561,6 +2561,7 @@ void CL_ClearPlayer(INT32 playernum)
|
||||||
P_SetTarget(&players[playernum].followmobj, NULL);
|
P_SetTarget(&players[playernum].followmobj, NULL);
|
||||||
P_SetTarget(&players[playernum].hoverhyudoro, NULL);
|
P_SetTarget(&players[playernum].hoverhyudoro, NULL);
|
||||||
P_SetTarget(&players[playernum].stumbleIndicator, NULL);
|
P_SetTarget(&players[playernum].stumbleIndicator, NULL);
|
||||||
|
P_SetTarget(&players[playernum].sliptideZipIndicator, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle parties.
|
// Handle parties.
|
||||||
|
|
|
||||||
|
|
@ -680,6 +680,7 @@ struct player_t
|
||||||
UINT16 sliptideZipBoost; // The actual boost granted from sliptideZip.
|
UINT16 sliptideZipBoost; // The actual boost granted from sliptideZip.
|
||||||
|
|
||||||
mobj_t *stumbleIndicator;
|
mobj_t *stumbleIndicator;
|
||||||
|
mobj_t *sliptideZipIndicator;
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
fixed_t fovadd; // adjust FOV for hw rendering
|
fixed_t fovadd; // adjust FOV for hw rendering
|
||||||
|
|
|
||||||
|
|
@ -3304,6 +3304,8 @@ const char *const STATE_LIST[] = { // array length left dynamic for sanity testi
|
||||||
"S_MAGICIANBOXTOP",
|
"S_MAGICIANBOXTOP",
|
||||||
"S_MAGICIANBOXBOTTOM",
|
"S_MAGICIANBOXBOTTOM",
|
||||||
|
|
||||||
|
"S_SLIPTIDEZIP",
|
||||||
|
|
||||||
// Signpost sparkles
|
// Signpost sparkles
|
||||||
"S_SIGNSPARK1",
|
"S_SIGNSPARK1",
|
||||||
"S_SIGNSPARK2",
|
"S_SIGNSPARK2",
|
||||||
|
|
@ -5323,6 +5325,8 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t
|
||||||
"MT_MONITOR_PART",
|
"MT_MONITOR_PART",
|
||||||
"MT_MONITOR_SHARD",
|
"MT_MONITOR_SHARD",
|
||||||
"MT_MAGICIANBOX",
|
"MT_MAGICIANBOX",
|
||||||
|
|
||||||
|
"MT_SLIPTIDEZIP",
|
||||||
|
|
||||||
"MT_SIGNSPARKLE",
|
"MT_SIGNSPARKLE",
|
||||||
|
|
||||||
|
|
|
||||||
31
src/info.c
31
src/info.c
|
|
@ -552,6 +552,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"IMDB", // Item Monitor Small Shard (Debris)
|
"IMDB", // Item Monitor Small Shard (Debris)
|
||||||
"MTWK", // Item Monitor Glass Twinkle
|
"MTWK", // Item Monitor Glass Twinkle
|
||||||
|
|
||||||
|
"SLPT", // Sliptide zip indicator
|
||||||
|
|
||||||
"WIPD", // Wipeout dust trail
|
"WIPD", // Wipeout dust trail
|
||||||
"DRIF", // Drift Sparks
|
"DRIF", // Drift Sparks
|
||||||
"BDRF", // Brake drift sparks
|
"BDRF", // Brake drift sparks
|
||||||
|
|
@ -3930,6 +3932,8 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_MGBT, FF_FLOORSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_MAGICIANBOX_TOP
|
{SPR_MGBT, FF_FLOORSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_MAGICIANBOX_TOP
|
||||||
{SPR_MGBB, FF_FLOORSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_MAGICIANBOX_BOTTOM
|
{SPR_MGBB, FF_FLOORSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_MAGICIANBOX_BOTTOM
|
||||||
|
|
||||||
|
{SPR_SLPT, FF_PAPERSPRITE|0, -1, {NULL}, 0, 0, S_NULL}, // S_SLIPTIDEZIP
|
||||||
|
|
||||||
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_SIGNSPARK2}, // S_SIGNSPARK1
|
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_SIGNSPARK2}, // S_SIGNSPARK1
|
||||||
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_SIGNSPARK3}, // S_SIGNSPARK2
|
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_SIGNSPARK3}, // S_SIGNSPARK2
|
||||||
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_SIGNSPARK4}, // S_SIGNSPARK3
|
{SPR_SGNS, FF_ADD|FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_SIGNSPARK4}, // S_SIGNSPARK3
|
||||||
|
|
@ -22583,6 +22587,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT, // flags
|
MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPTHING|MF_NOCLIPHEIGHT, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_SLIPTIDEZIP
|
||||||
|
-1, // doomednum
|
||||||
|
S_SLIPTIDEZIP, // 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
|
||||||
|
0, // speed
|
||||||
|
20*FRACUNIT, // radius
|
||||||
|
20*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIPHEIGHT|MF_NOCLIPTHING, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_SIGNSPARKLE
|
{ // MT_SIGNSPARKLE
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
|
|
|
||||||
|
|
@ -1103,6 +1103,8 @@ typedef enum sprite
|
||||||
SPR_IMDB, // Item Monitor Small Shard (Debris)
|
SPR_IMDB, // Item Monitor Small Shard (Debris)
|
||||||
SPR_MTWK, // Item Monitor Glass Twinkle
|
SPR_MTWK, // Item Monitor Glass Twinkle
|
||||||
|
|
||||||
|
SPR_SLPT, // Sliptide zip indicator
|
||||||
|
|
||||||
SPR_WIPD, // Wipeout dust trail
|
SPR_WIPD, // Wipeout dust trail
|
||||||
SPR_DRIF, // Drift Sparks
|
SPR_DRIF, // Drift Sparks
|
||||||
SPR_BDRF, // Brake drift sparks
|
SPR_BDRF, // Brake drift sparks
|
||||||
|
|
@ -4339,6 +4341,8 @@ typedef enum state
|
||||||
S_MAGICIANBOX_TOP,
|
S_MAGICIANBOX_TOP,
|
||||||
S_MAGICIANBOX_BOTTOM,
|
S_MAGICIANBOX_BOTTOM,
|
||||||
|
|
||||||
|
S_SLIPTIDEZIP,
|
||||||
|
|
||||||
// Signpost sparkles
|
// Signpost sparkles
|
||||||
S_SIGNSPARK1,
|
S_SIGNSPARK1,
|
||||||
S_SIGNSPARK2,
|
S_SIGNSPARK2,
|
||||||
|
|
@ -6394,6 +6398,7 @@ typedef enum mobj_type
|
||||||
MT_MONITOR_PART,
|
MT_MONITOR_PART,
|
||||||
MT_MONITOR_SHARD,
|
MT_MONITOR_SHARD,
|
||||||
MT_MAGICIANBOX,
|
MT_MAGICIANBOX,
|
||||||
|
MT_SLIPTIDEZIP,
|
||||||
|
|
||||||
MT_SIGNSPARKLE,
|
MT_SIGNSPARKLE,
|
||||||
|
|
||||||
|
|
|
||||||
103
src/k_kart.c
103
src/k_kart.c
|
|
@ -3883,6 +3883,31 @@ void K_InitStumbleIndicator(player_t *player)
|
||||||
P_SetTarget(&new->target, player->mo);
|
P_SetTarget(&new->target, player->mo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void K_InitSliptideZipIndicator(player_t *player)
|
||||||
|
{
|
||||||
|
mobj_t *new = NULL;
|
||||||
|
|
||||||
|
if (player == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->mo == NULL || P_MobjWasRemoved(player->mo) == true)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->stumbleIndicator != NULL && P_MobjWasRemoved(player->sliptideZipIndicator) == false)
|
||||||
|
{
|
||||||
|
P_RemoveMobj(player->sliptideZipIndicator);
|
||||||
|
}
|
||||||
|
|
||||||
|
new = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_SLIPTIDEZIP);
|
||||||
|
|
||||||
|
P_SetTarget(&player->sliptideZipIndicator, new);
|
||||||
|
P_SetTarget(&new->target, player->mo);
|
||||||
|
}
|
||||||
|
|
||||||
void K_UpdateStumbleIndicator(player_t *player)
|
void K_UpdateStumbleIndicator(player_t *player)
|
||||||
{
|
{
|
||||||
const angle_t fudge = ANG15;
|
const angle_t fudge = ANG15;
|
||||||
|
|
@ -3985,6 +4010,71 @@ void K_UpdateStumbleIndicator(player_t *player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void K_UpdateSliptideZipIndicator(player_t *player)
|
||||||
|
{
|
||||||
|
mobj_t *mobj = NULL;
|
||||||
|
|
||||||
|
if (player == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->mo == NULL || P_MobjWasRemoved(player->mo) == true)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player->stumbleIndicator == NULL || P_MobjWasRemoved(player->stumbleIndicator) == true)
|
||||||
|
{
|
||||||
|
K_InitSliptideZipIndicator(player);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mobj = player->sliptideZipIndicator;
|
||||||
|
angle_t momentumAngle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
|
||||||
|
|
||||||
|
P_MoveOrigin(mobj, player->mo->x - FixedMul(40*mapobjectscale, FINECOSINE(momentumAngle >> ANGLETOFINESHIFT)),
|
||||||
|
player->mo->y - FixedMul(40*mapobjectscale, FINESINE(momentumAngle >> ANGLETOFINESHIFT)),
|
||||||
|
player->mo->z + (player->mo->height / 2));
|
||||||
|
mobj->angle = momentumAngle + ANGLE_90;
|
||||||
|
P_SetScale(mobj, 3 * player->mo->scale / 2);
|
||||||
|
|
||||||
|
mobj->renderflags &= ~RF_DONTDRAW;
|
||||||
|
|
||||||
|
// No stored boost
|
||||||
|
if (player->sliptideZip == 0)
|
||||||
|
{
|
||||||
|
mobj->renderflags |= RF_DONTDRAW;
|
||||||
|
mobj->frame = 7;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT32 chargeFrame = 7 - min(7, player->sliptideZip / 10);
|
||||||
|
UINT32 decayFrame = min(7, player->sliptideZipDelay / 5);
|
||||||
|
if (max(chargeFrame, decayFrame) > mobj->frame)
|
||||||
|
mobj->frame++;
|
||||||
|
else if (max(chargeFrame, decayFrame) < mobj->frame)
|
||||||
|
mobj->frame--;
|
||||||
|
|
||||||
|
CONS_Printf("%d/%d\n", chargeFrame, decayFrame);
|
||||||
|
|
||||||
|
mobj->renderflags &= ~RF_TRANSMASK;
|
||||||
|
mobj->renderflags |= RF_PAPERSPRITE;
|
||||||
|
|
||||||
|
if (!K_Sliptiding(player) && player->drift == 0)
|
||||||
|
{
|
||||||
|
// Decay timer's ticking
|
||||||
|
mobj->rollangle += 3*ANG30/4;
|
||||||
|
if (leveltime % 2 == 0)
|
||||||
|
mobj->renderflags |= RF_TRANS50;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Storing boost
|
||||||
|
mobj->rollangle += 3*ANG15/4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static boolean K_LastTumbleBounceCondition(player_t *player)
|
static boolean K_LastTumbleBounceCondition(player_t *player)
|
||||||
{
|
{
|
||||||
return (player->tumbleBounces > TUMBLEBOUNCES && player->tumbleHeight < 60);
|
return (player->tumbleBounces > TUMBLEBOUNCES && player->tumbleHeight < 60);
|
||||||
|
|
@ -8129,6 +8219,8 @@ void K_KartPlayerAfterThink(player_t *player)
|
||||||
|
|
||||||
K_UpdateStumbleIndicator(player);
|
K_UpdateStumbleIndicator(player);
|
||||||
|
|
||||||
|
K_UpdateSliptideZipIndicator(player);
|
||||||
|
|
||||||
// Move held objects (Bananas, Orbinaut, etc)
|
// Move held objects (Bananas, Orbinaut, etc)
|
||||||
K_MoveHeldObjects(player);
|
K_MoveHeldObjects(player);
|
||||||
|
|
||||||
|
|
@ -9239,13 +9331,14 @@ static void K_KartDrift(player_t *player, boolean onground)
|
||||||
|
|
||||||
if (!K_Sliptiding(player))
|
if (!K_Sliptiding(player))
|
||||||
{
|
{
|
||||||
if (player->sliptideZip > 0)
|
if (player->sliptideZip > 0 && player->drift == 0)
|
||||||
{
|
{
|
||||||
player->sliptideZipDelay++;
|
player->sliptideZipDelay++;
|
||||||
if (player->sliptideZipDelay > TICRATE && player->drift == 0)
|
if (player->sliptideZipDelay > TICRATE && player->drift == 0)
|
||||||
{
|
{
|
||||||
S_StartSound(player->mo, sfx_s3kb6);
|
S_StartSound(player->mo, sfx_s3kb6);
|
||||||
player->sliptideZipBoost += player->sliptideZip;
|
player->sliptideZipBoost += player->sliptideZip;
|
||||||
|
K_SpawnDriftBoostExplosion(player, 0);
|
||||||
player->sliptideZip = 0;
|
player->sliptideZip = 0;
|
||||||
player->sliptideZipDelay = 0;
|
player->sliptideZipDelay = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -9703,6 +9796,9 @@ static void K_KartSpindashWind(mobj_t *parent)
|
||||||
|
|
||||||
P_SetTarget(&wind->target, parent);
|
P_SetTarget(&wind->target, parent);
|
||||||
|
|
||||||
|
if (parent->player && parent->player->sliptideZipBoost)
|
||||||
|
P_SetScale(wind, wind->scale * 2);
|
||||||
|
|
||||||
if (parent->momx || parent->momy)
|
if (parent->momx || parent->momy)
|
||||||
wind->angle = R_PointToAngle2(0, 0, parent->momx, parent->momy);
|
wind->angle = R_PointToAngle2(0, 0, parent->momx, parent->momy);
|
||||||
else
|
else
|
||||||
|
|
@ -9778,6 +9874,11 @@ static void K_KartSpindash(player_t *player)
|
||||||
K_KartSpindashWind(player->mo);
|
K_KartSpindashWind(player->mo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((player->sliptideZipBoost > 0) && (spawnWind == true))
|
||||||
|
{
|
||||||
|
K_KartSpindashWind(player->mo);
|
||||||
|
}
|
||||||
|
|
||||||
if (player->spindashboost > (TICRATE/2))
|
if (player->spindashboost > (TICRATE/2))
|
||||||
{
|
{
|
||||||
K_KartSpindashDust(player->mo);
|
K_KartSpindashDust(player->mo);
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ angle_t K_StumbleSlope(angle_t angle, angle_t pitch, angle_t roll);
|
||||||
void K_StumblePlayer(player_t *player);
|
void K_StumblePlayer(player_t *player);
|
||||||
boolean K_CheckStumble(player_t *player, angle_t oldPitch, angle_t oldRoll, boolean fromAir);
|
boolean K_CheckStumble(player_t *player, angle_t oldPitch, angle_t oldRoll, boolean fromAir);
|
||||||
void K_InitStumbleIndicator(player_t *player);
|
void K_InitStumbleIndicator(player_t *player);
|
||||||
|
void K_InitSliptideZipIndicator(player_t *player);
|
||||||
void K_UpdateStumbleIndicator(player_t *player);
|
void K_UpdateStumbleIndicator(player_t *player);
|
||||||
INT32 K_ExplodePlayer(player_t *player, mobj_t *inflictor, mobj_t *source);
|
INT32 K_ExplodePlayer(player_t *player, mobj_t *inflictor, mobj_t *source);
|
||||||
void K_DebtStingPlayer(player_t *player, mobj_t *source);
|
void K_DebtStingPlayer(player_t *player, mobj_t *source);
|
||||||
|
|
|
||||||
|
|
@ -11794,6 +11794,8 @@ void P_SpawnPlayer(INT32 playernum)
|
||||||
|
|
||||||
K_InitStumbleIndicator(p);
|
K_InitStumbleIndicator(p);
|
||||||
|
|
||||||
|
K_InitSliptideZipIndicator(p);
|
||||||
|
|
||||||
if (gametyperules & GTR_ITEMARROWS)
|
if (gametyperules & GTR_ITEMARROWS)
|
||||||
{
|
{
|
||||||
mobj_t *overheadarrow = P_SpawnMobj(mobj->x, mobj->y, mobj->z + mobj->height + 16*FRACUNIT, MT_PLAYERARROW);
|
mobj_t *overheadarrow = P_SpawnMobj(mobj->x, mobj->y, mobj->z + mobj->height + 16*FRACUNIT, MT_PLAYERARROW);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue