Add some effects for null-drifting
This commit is contained in:
parent
66defc522b
commit
d35c8c37d6
8 changed files with 79 additions and 5 deletions
|
|
@ -596,6 +596,10 @@ struct player_t
|
|||
|
||||
INT32 drift_wannaturn; // Turn values the game uses to determine the direction you want to drift.
|
||||
|
||||
INT32 nulldrift; // When you drift without accelerating, this value ticks up/down depending on your drift's angle.
|
||||
INT32 nulldrifttilt; // Sliptide-like kart tilting! (Can be toggled off)
|
||||
tic_t nulldrifttime;
|
||||
|
||||
// (Delay-drift) - Delay in tics before the final drift angle is determined.
|
||||
// Potentially influenced by player lag.
|
||||
tic_t driftdelay;
|
||||
|
|
|
|||
30
src/k_kart.c
30
src/k_kart.c
|
|
@ -9605,6 +9605,30 @@ static void K_KartDrift(player_t *player, boolean onground)
|
|||
}
|
||||
}
|
||||
|
||||
if (player->nulldrift)
|
||||
{
|
||||
if (abs(player->nulldrifttilt) < ANGLE_11hh)
|
||||
{
|
||||
player->nulldrifttilt = (abs(player->nulldrifttilt) + (ANGLE_11hh / 8)) * player->nulldrift;
|
||||
}
|
||||
|
||||
// Increment nulldrift timer.
|
||||
player->nulldrifttime++;
|
||||
|
||||
// Let's have some faith that the driftspark thinker will set this value again
|
||||
player->nulldrift = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
player->nulldrifttime = 0;
|
||||
player->nulldrifttilt -= player->nulldrifttilt / 4;
|
||||
|
||||
if (abs(player->nulldrifttilt) < (ANGLE_11hh / 4))
|
||||
{
|
||||
player->nulldrifttilt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!K_Sliptiding(player))
|
||||
{
|
||||
player->aizdrifttilt -= player->aizdrifttilt / 4;
|
||||
|
|
@ -11894,4 +11918,10 @@ boolean K_CheckWaterskipLockout(player_t *player)
|
|||
}
|
||||
}
|
||||
|
||||
// Check to render the tilt VFX for null-drifts.
|
||||
boolean K_NullDriftTiltEnalbed()
|
||||
{
|
||||
return ((cv_nulldriftefx.value) && (cv_nulldrifttilt.value));
|
||||
}
|
||||
|
||||
//}
|
||||
|
|
|
|||
|
|
@ -419,6 +419,8 @@ typedef enum
|
|||
BUMPSPARK_ALL
|
||||
} bumpsparktype_t;
|
||||
|
||||
boolean K_NullDriftTiltEnalbed();
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
29
src/p_mobj.c
29
src/p_mobj.c
|
|
@ -9052,10 +9052,14 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->z);
|
||||
break;
|
||||
case MT_BRAKEDRIFT:
|
||||
|
||||
// Letting go of accel functions about the same as brake-drifting
|
||||
boolean nullDrift = (!(K_GetKartButtons(mobj->target->player) & BT_ACCELERATE));
|
||||
|
||||
if ((!mobj->target || !mobj->target->health || !mobj->target->player || !P_IsObjectOnGround(mobj->target))
|
||||
|| !mobj->target->player->drift || !(mobj->target->player->pflags & PF_BRAKEDRIFT)
|
||||
|| !((mobj->target->player->cmd.buttons & BT_BRAKE)
|
||||
|| !(K_GetKartButtons(mobj->target->player) & BT_ACCELERATE))) // Letting go of accel functions about the same as brake-drifting
|
||||
|| nullDrift))
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
return false;
|
||||
|
|
@ -9080,8 +9084,27 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
else
|
||||
mobj->color = SKINCOLOR_SILVER;
|
||||
|
||||
if (!S_SoundPlaying(mobj, sfx_cdfm17))
|
||||
S_StartSound(mobj, sfx_cdfm17);
|
||||
if (nullDrift)
|
||||
{
|
||||
if (cv_nulldriftefx.value)
|
||||
{
|
||||
// Play a harsher sound when you null-drift.
|
||||
if (mobj->target->player->nulldrifttime % 4 == 0)
|
||||
S_StartSound(mobj, sfx_s3k67);
|
||||
}
|
||||
else if (!S_SoundPlaying(mobj, sfx_cdfm17))
|
||||
{
|
||||
S_StartSound(mobj, sfx_cdfm17);
|
||||
}
|
||||
|
||||
// Set the player's nulldrift variables for any relevant VFX.
|
||||
mobj->target->player->nulldrift = intsign(mobj->target->player->drift);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!S_SoundPlaying(mobj, sfx_cdfm17))
|
||||
S_StartSound(mobj, sfx_cdfm17);
|
||||
}
|
||||
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
if (leveltime & 1)
|
||||
|
|
|
|||
|
|
@ -637,6 +637,9 @@ static void P_NetSyncPlayers(savebuffer_t *save)
|
|||
SYNC(players[i].driftcharge);
|
||||
SYNC(players[i].driftboost);
|
||||
SYNC(players[i].airdriftspeed);
|
||||
SYNC(players[i].nulldrift);
|
||||
SYNC(players[i].nulldrifttilt);
|
||||
SYNC(players[i].nulldrifttime);
|
||||
|
||||
SYNC(players[i].recoverydashcharge);
|
||||
SYNC(players[i].recoverydash);
|
||||
|
|
|
|||
|
|
@ -194,6 +194,8 @@ consvar_t cv_renderstats = CVAR_INIT ("renderstats", "Off", 0, CV_OnOff, NULL);
|
|||
consvar_t cv_sloperoll = CVAR_INIT ("spritesloperoll", "On", CV_SAVE, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_sliptidetilt = CVAR_INIT ("sliptidetilt", "On", CV_SAVE, CV_OnOff, NULL);
|
||||
consvar_t cv_nulldriftefx = CVAR_INIT ("nulldriftefx", "On", CV_SAVE, CV_OnOff, NULL);
|
||||
consvar_t cv_nulldrifttilt = CVAR_INIT ("nulldrifttilt", "On", CV_SAVE, CV_OnOff, NULL);
|
||||
|
||||
void SplitScreen_OnChange(void)
|
||||
{
|
||||
|
|
@ -1804,6 +1806,8 @@ void R_RegisterEngineStuff(void)
|
|||
CV_RegisterVar(&cv_actionmovie);
|
||||
CV_RegisterVar(&cv_sloperoll);
|
||||
CV_RegisterVar(&cv_sliptidetilt);
|
||||
CV_RegisterVar(&cv_nulldriftefx);
|
||||
CV_RegisterVar(&cv_nulldrifttilt);
|
||||
|
||||
CV_RegisterVar(&cv_showhud);
|
||||
CV_RegisterVar(&cv_translucenthud);
|
||||
|
|
|
|||
|
|
@ -159,6 +159,7 @@ extern consvar_t cv_secbright;
|
|||
|
||||
extern consvar_t cv_sloperoll;
|
||||
extern consvar_t cv_sliptidetilt;
|
||||
extern consvar_t cv_nulldriftefx, cv_nulldrifttilt;
|
||||
|
||||
// debugging
|
||||
|
||||
|
|
|
|||
|
|
@ -61,11 +61,18 @@ static angle_t R_PlayerSpriteRotation(player_t *player, player_t *viewPlayer)
|
|||
angle_t viewingAngle = R_PointToAnglePlayer(viewPlayer, player->mo->x, player->mo->y);
|
||||
angle_t angleDelta = (viewingAngle - player->mo->angle);
|
||||
|
||||
angle_t sliptideLift = player->aizdrifttilt;
|
||||
INT32 nulltilt = (K_NullDriftTiltEnalbed()) ? player->nulldrifttilt : 0;
|
||||
INT32 aiztilt = (cv_sliptidetilt.value) ? player->aizdrifttilt : 0;
|
||||
|
||||
boolean nullBeforeSlip = (abs(aiztilt) < abs(nulltilt));
|
||||
INT32 liftsign = ((nullBeforeSlip) ? intsign(nulltilt) : intsign(aiztilt));
|
||||
|
||||
// Sliptide tilt: Nulldrifts take priority if and ONLY if they're the larger value compared to sliptides.
|
||||
angle_t sliptideLift = max(abs(aiztilt), abs(nulltilt)) * liftsign;
|
||||
|
||||
angle_t rollAngle = 0;
|
||||
|
||||
if (sliptideLift && cv_sliptidetilt.value)
|
||||
if (sliptideLift)
|
||||
{
|
||||
/* (from side) tilt downward if turning
|
||||
toward camera, upward if away. */
|
||||
|
|
|
|||
Loading…
Reference in a new issue