Default bumpspark to removing only charge

Doesn't cancel drifts entirely, but completely resets a player's driftcharge.
This commit is contained in:
Anonimus 2025-09-21 20:42:53 -04:00
parent 5f9406cca0
commit 76c17ec7b9
4 changed files with 32 additions and 3 deletions

View file

@ -533,7 +533,8 @@ consvar_t cv_kartusepwrlv = CVAR_INIT ("kartusepwrlv", "Yes", CV_NETVAR, CV_YesN
consvar_t cv_kartpurpledrift = CVAR_INIT ("kartpurpledrift", "No", CV_NETVAR, CV_YesNo, KartPurpleDrift_OnChange);
consvar_t cv_kartbumpspark = CVAR_INIT ("kartbumpspark", "Yes", CV_NETVAR, CV_YesNo, NULL);
static CV_PossibleValue_t bumpspark_cons_t[] = {{0, "Off"}, {1, "Remove Charge Only"}, {2, "On"}, {0, NULL}};
consvar_t cv_kartbumpspark = CVAR_INIT ("kartbumpspark", "Remove Charge Only", CV_NETVAR, bumpspark_cons_t, NULL);
consvar_t cv_kartbumpspring = CVAR_INIT ("kartbumpspring", "Yes", CV_NETVAR, CV_YesNo, NULL);

View file

@ -6643,6 +6643,12 @@ void K_AwardScaledPlayerRings(player_t *player, SINT8 mode)
K_AwardPlayerRings(player, awardamount, (mode == ASR_SUPERRING) ? true : false);
}
// Returns the bumpspark value as an enum.
INT32 K_GetBumpSpark(void)
{
return max(BUMPSPARK_NONE, min(BUMPSPARK_ALL, (bumpsparktype_t)cv_kartbumpspark.value));
}
/** \brief Decreases various kart timers and powers per frame. Called in P_PlayerThink in p_user.c
\param player player object passed from P_PlayerThink

View file

@ -346,6 +346,15 @@ void K_AwardScaledPlayerRings(player_t *player, SINT8 mode);
void K_QuiteSaltyHop(player_t *player);
typedef enum
{
BUMPSPARK_NONE = 0,
BUMPSPARK_NOCHARGE,
BUMPSPARK_ALL
} bumpsparktype_t;
INT32 K_GetBumpSpark(void);
#ifdef __cplusplus
} // extern "C"
#endif

View file

@ -3479,9 +3479,22 @@ static void P_BouncePlayerMove(mobj_t *mo, TryMoveResult_t *result)
mmomx = mo->player->rmomx;
mmomy = mo->player->rmomy;
if ((!cv_kartbumpspark.value && modeattacking == ATTACKING_NONE) || (modeattacking != ATTACKING_NONE && G_CompatLevel(0x0009)))
UINT32 bumpspark =
max((modeattacking != ATTACKING_NONE) ? BUMPSPARK_NOCHARGE : BUMPSPARK_NONE,
K_GetBumpSpark());
if ((bumpspark < BUMPSPARK_ALL) ||
(modeattacking != ATTACKING_NONE && G_CompatLevel(0x0009)))
{
mo->player->drift = 0;
if (!bumpspark)
{
// Bumps removing spark would be less frustrating if you didn't get your drift
// removed too. Losing sparks is a fair punishment, drifting RIGHT for
// daring to scrape a wall for a wide LEFT turn is horrendous and leads to
// awful gluewalling.
// TL;DR: I hate wrongdrifts and hopefully this is an okay middle ground.
mo->player->drift = 0;
}
mo->player->driftcharge = 0;
}