Merge branch 'next' into heavyairdrop

This commit is contained in:
NepDisk 2026-02-06 18:51:31 -05:00
commit 524a61266c
8 changed files with 79 additions and 5 deletions

View file

@ -608,6 +608,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;

View file

@ -9688,6 +9688,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;
@ -11976,4 +12000,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));
}
//}

View file

@ -427,6 +427,8 @@ typedef enum
AIRDROP_FUSION,
} airdroptype_t;
boolean K_NullDriftTiltEnalbed();
#ifdef __cplusplus
} // extern "C"
#endif

View file

@ -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)

View file

@ -638,6 +638,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);

View file

@ -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);

View file

@ -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

View file

@ -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. */