Add the ability to play Invincibility's theme in full

On-a-whim idea, admittedly
This commit is contained in:
yamamama 2025-12-11 11:24:43 -05:00
parent 4208fdd197
commit 2419e25327
5 changed files with 25 additions and 6 deletions

View file

@ -609,6 +609,10 @@ consvar_t cv_kartspbrush = CVAR_INIT ("kartspbrush", "On", CV_NETVAR, CV_OnOff,
static CV_PossibleValue_t altshrinktime_cons_t[] = {{0, "MIN"}, {(INT16_MAX / TICRATE), "MAX"}, {0, NULL}};
consvar_t cv_kartaltshrinktime = CVAR_INIT ("kartaltshrinktime", "14", CV_NETVAR|CV_CHEAT|CV_GUARD, altshrinktime_cons_t, NULL);
// Toggle Full or Standard Invincibility music
static CV_PossibleValue_t kartinvintheme_cons_t[] = {{0, "Standard"}, {1, "Full"}, {0, NULL}};
consvar_t cv_kartinvintheme = CVAR_INIT ("kartinvintheme", "Standard", CV_SAVE, kartinvintheme_cons_t, NULL);
// How far the player must be from the cluster to begin frequently rolling Invincibility.
static CV_PossibleValue_t invindist_cons_t[] = {{1, "MIN"}, {32000, "MAX"}, {0, NULL}};
consvar_t cv_kartinvindist = CVAR_INIT ("kartinvindist", "8400", CV_NETVAR|CV_CHEAT|CV_GUARD, invindist_cons_t, NULL);

View file

@ -182,6 +182,7 @@ extern consvar_t cv_kartexplosion_limitlifetime;
extern consvar_t cv_kartexplosion_limitlifetime_cap;
extern consvar_t cv_kartslipdash;
extern consvar_t cv_kartslopeboost;
extern consvar_t cv_kartinvintheme;
extern consvar_t cv_kartinvindist;
extern consvar_t cv_kartinvindistmul;
extern consvar_t cv_kartinvin_maxtime;

View file

@ -394,6 +394,8 @@ void K_RegisterKartStuff(void)
CV_RegisterVar(&cv_kartaltshrinktime);
CV_RegisterVar(&cv_kartinvintheme);
CV_RegisterVar(&cv_kartinvindist);
CV_RegisterVar(&cv_kartinvindistmul);
@ -4906,6 +4908,14 @@ void K_ResetPogoSpring(player_t *player)
player->dashRainbowPogo = 0;
}
// This likely won't find use until Mission Mode, but alas
boolean forcefullinvintheme = false;
boolean K_PlayFullInvinTheme(void)
{
return ((cv_kartinvintheme.value == 1) || (forcefullinvintheme == true));
}
void K_DoInvincibility(player_t *player, tic_t time)
{
const boolean isalt = K_IsKartItemAlternate(KITEM_INVINCIBILITY);
@ -4952,7 +4962,7 @@ void K_DoInvincibility(player_t *player, tic_t time)
if (P_IsLocalPlayer(player) == true)
{
S_ChangeMusicSpecial("kinvnc");
S_ChangeMusicSpecial(K_PlayFullInvinTheme() ? "kinvnf" : "kinvnc");
}
else //used to be "if (P_IsDisplayPlayer(player) == false)"
{

View file

@ -259,15 +259,19 @@ typedef enum
void K_DoSneaker(player_t *player, INT32 type);
void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, UINT8 sound);
fixed_t K_InvincibilityGradient(UINT16 time);
UINT16 K_GetInvincibilityTime(player_t *player);
fixed_t K_GetInvincibilitySpeed(UINT16 time);
fixed_t K_GetInvincibilityAccel(UINT16 time);
fixed_t K_GetSpeedPercentage(const player_t *player);
boolean K_AltShrinkArrowBulletCondition(const player_t *player);
boolean K_InterceptArrowBullet(player_t *player);
void K_ResetPogoSpring(player_t *player);
extern boolean forcefullinvintheme;
boolean K_PlayFullInvinTheme(void);
void K_DoInvincibility(player_t *player, tic_t time);
fixed_t K_InvincibilityGradient(UINT16 time);
UINT16 K_GetInvincibilityTime(player_t *player);
fixed_t K_GetInvincibilitySpeed(UINT16 time);
fixed_t K_GetInvincibilityAccel(UINT16 time);
void K_KillBananaChain(mobj_t *banana, mobj_t *inflictor, mobj_t *source);
void K_UpdateHnextList(player_t *player, boolean clean);
void K_DropHnextList(player_t *player);

View file

@ -869,7 +869,7 @@ void P_RestoreMusic(player_t *player)
// Item - Invincibility
else if ((wantedmus == 2) && cv_supermusic.value == 1)
{
S_ChangeMusicInternal("kinvnc", true);
S_ChangeMusicInternal(K_PlayFullInvinTheme() ? "kinvnf" : "kinvnc", true);
S_SetRestoreMusicFadeInCvar(&cv_invincmusicfade);
}
// Item - Shrink (Alternative)